Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Турбо Паскаль. Программирование на Pascal
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ]
Модераторы: paradise, KMA
  

panth80



Новичок

помогите!!!!!!!!!!!!!!!!!
очень  срочно надо решить задачу!!!!!
Дано действительную квадратную матрицу порядка n (n<10). Получить матрицу, развернутую на 90 градусов против часовой стрелки. Оформить введение и выведение матрицы.

Всего сообщений: 2 | Присоединился: май 2007 | Отправлено: 11 мая 2007 20:27 | IP
Ridge



Новичок

Мог бы и посидеть 5 минут, panth80. Но ладно, посидел я.
.......
readln(n);
    for i:=1 to n do
    for j:=1 to n do
    readln(a[i,j]);
    for i:=1 to n do
    for j:=1 to n do
        begin
        write (' ',a[i,j]);
        if (j=n) then
        writeln;
        end;
        writeln;
        readln;
        for i:=n  downto 1 do
        for j:=1 to n do
        begin
        write (' ',a[j,i]);
        if (j=n) then
        writeln
        end;
        readln;
.........
надеюсь КМА не обидится


(Сообщение отредактировал Ridge 12 мая 2007 0:00)

Всего сообщений: 19 | Присоединился: май 2007 | Отправлено: 11 мая 2007 23:38 | IP
KMA



Долгожитель

Ridge, у тебя код то не работает! Как ты это сделал? Приведи нормальный, работающий код, а я тебе тогда напишу как используя два одномерных. А с одним одномерным, придумаем что нибудь.

Еще, у тебя дурная привычка, делать так
Code Sample:
 
if j=n then writeLn;



Вот ты выводишь матрицу, и у тебя считай каждый раз идет эта проверка. Скажем пусть матрица 5*5, тогда проверка будет сделана 25 раз. Как минимум одна из них это два такта, считай 50 тактов ты потерял, плюс читать такую программу хуже. Если тебе надо выделить участок когда j=n, т. е. достигает конца, то и напиши это в теле того цикла. В общем, чем говорить лучше приведу код:

Code Sample:
 
for i:=1 to n do
begin
 for j:=1 to m do
   write (a[i, j], ' ');
 writeLn;  
end;

 

И ничего лишнего, не надо выдумывать, решение как правило всегда просто.

И еще, я ни на что не обижаюсь, но транспонирование матрицы уже решалось на форуме, и есть код =) Если ты решил повторить, то молодец. Решать задачи или не решать дело личное каждого участника форума.

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 12 мая 2007 1:10 | IP
Ridge



Новичок

Воть, тока что заново вспоминал. А тот пример реально не идет. некоторые ошибки + заполнение памяти мусором. Но и счас у меня в проге недочет есть. Попробуй сам

uses crt;
var i,j:integer;
a: array [1..10,1..10] of integer;
begin
clrscr;
a[1,1]:=1;
for i:=1 to 10 do
a[i,1]:=1;
writeln (a[1,1]);
for i:=2 to 10 do
begin
write (a[i,1]);
for j:=2 to i do
   begin
   a[i,j]:=a[i-1,j]+a[i-1,j-1];
   write ( ' ', a[i,j]);
   if (i=j) then
   writeln;
   end;
   end;
   readln;
end.

Вот все нормально. Сутра сел и на свежую голову доделал.

КМА, скажи, почему в некоторых версиях TPascal заполнение памяти мусором либо не идет, любо проходит на 3-4 компиляцию? это странно. Вот я делал эту прогу до этого в 2 раза короче, не задавая почти значения а и не выводя отдельно строку а(i,1)

(Сообщение отредактировал Ridge 12 мая 2007 10:59)

Всего сообщений: 19 | Присоединился: май 2007 | Отправлено: 12 мая 2007 3:34 | IP
Guest



Новичок

Передо мной стоит задача проверить пасовский файл на правильность или неправильность расстовления операторых скобок begin и end

Вот мой код

Program Primer_1;
Uses crt;
Var
f:text;
s,sbuf:string;
summabegin,summaend:integer;
posbegin,posend:byte;
Begin
clrscr;
summabegin:=0;
summaend:=0;
Assign(f,'c:\sa.txt');
Reset(f);
While not eof(f)
do begin

readln(f,s);
posbegin:=pos('begin',s);
posend:=pos('end',s);
While posbegin<>0
do begin
delete(s,posbegin,5);
posbegin:=pos('begin',s);
summabegin:=summabegin+1;
end;
While posend<>0
do begin
delete(s,posend,3);
posend:=pos('end',s);
summaend:=summaend+1;
end;
if summaend>summabegin
  then begin
   writeln('Неправильно расставлены операторные скобки begin и end');
   halt;
   end;
end;

close(f);
if summabegin<>summaend
then writeln('Неправильно расставлены операторные скобки begin и end')
else writeln('Операторые скобки begin и end правильно расставлены');
readln;
end.

Почему то прога не проверяет последнюю строку я чего то непонимаю
когда я вставляю строку в виде пробела между последней и предпоследней то все работает
Помогите плиз

Всего сообщений: Нет | Присоединился: Never | Отправлено: 12 мая 2007 13:22 | IP
Ridge



Новичок

Да, и еще, КМА, как мне задать длину струки, тоесть так, чтобы я вводил 80 символов в строку, а не больше? подскажи плиз и для char u string.

Всего сообщений: 19 | Присоединился: май 2007 | Отправлено: 12 мая 2007 14:45 | IP
KMA



Долгожитель


КМА, скажи, почему в некоторых версиях TPascal заполнение памяти мусором либо не идет, любо проходит на 3-4 компиляцию? это странно. Вот я делал эту прогу до этого в 2 раза короче, не задавая почти значения а и не выводя отдельно строку а(i,1)


Не знаю, имеешь ли ты представление о том как работает сама программа, с точки зрения машинных кодов, но думаю, сейчас об этом расскажу.

Видишь ли перед тем как исполнить программу ее помещают по какому либо адресу, скажем к примеру 0AAAA:0000. И сегмент данных как раз содержит твою информацию. Иногда бывает, что какая-нибудь другая программа до того сидела вот по этому же адресу, и оставила за собой данные. В случае когда ты объявляешь пременную, то в зависимости от того сколько места она будет занимать, столько памяти под нее отведется. Скажем для типа word или integer отводиться 2 байта. Значит и в этом сегменте данных она будет находиться со смещение в 2 байта. Если там до этого была какая-то информация, то твоя переменная будет вначале выдавать ее. Прошлая программа оставила за собой значение по адресу, где находиться твоя переменная было оставлено значение 21, значит и твоя переменная покажет значение 21. Поэтому хорошим тоном считается "обнуление" этой переменной, если ее начальное значение так важно.


а, и еще, КМА, как мне задать длину струки, тоесть так, чтобы я вводил 80 символов в строку, а не больше? подскажи плиз и для char u string.


К сожалению должен огорчить, но char это всего лишь один символ, и длина для него не задается. Чтобы ограничить длину строки надо заключить в квадртаные скобки максимальное значение (оно не должно превосходить 255). Например так

Code Sample:
VAR s: sting [80];


Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 13 мая 2007 0:43 | IP
KMA



Долгожитель


ередо мной стоит задача проверить пасовский файл на правильность или неправильность расстовления операторых скобок begin и end


Вполне понятно почему он не будет читать, ты же вначале запоминмаешь позицию end еще в "нетронутой" строке. Теперь ты удалил, скажем тот же begin, строка укоротилась, а значит и позиция у enda сместилась. С такими вещами надо быть осторожным. Замени:
Code Sample:
 
posbegin:=pos('begin',s);
posend:=pos('end',s);
While posbegin<>0 do
begin
 delete(s,posbegin,5);
 posbegin:=pos('begin',s);
 summabegin:=summabegin+1;
end;
While posend<>0 do
begin
 delete(s,posend,3);
 posend:=pos('end',s);
 summaend:=summaend+1;
end;



На следующее:
Code Sample:
 
posbegin:=pos('begin',s);
While posbegin<>0 do
begin
 delete(s,posbegin,5);
 posbegin:=pos('begin',s);
 summabegin:=summabegin+1;
end;

posend:=pos('end',s);
While posend<>0 do
begin
 delete(s,posend,3);
 posend:=pos('end',s);
 summaend:=summaend+1;
end;





(Сообщение отредактировал KMA 13 мая 2007 1:15)

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 13 мая 2007 0:58 | IP
KMA



Долгожитель

Rigde, я обещаю, что посмотрю твою программу, но завтра... сегодня я уже устал.

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 13 мая 2007 1:18 | IP
Ridge



Новичок

КМА! я на 2мерный сделал...
по одномерным у тебя мысли есть?

С длиной строки я имел ввиду массив типа Char, я не мог понять, почему я задаю его длину 80 а ввожу 150. Но сейчас уже разобрался.

За обьяснение спасибо.

Всего сообщений: 19 | Присоединился: май 2007 | Отправлено: 13 мая 2007 1:44 | IP

Эта тема закрыта, новые ответы не принимаются

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ]

Форум работает на скрипте © Ikonboard.com