Помогите отчисляют!(Pascal)

Ответить
And1
Сообщения: 9
Зарегистрирован: 28 дек 2006, 22:57

помогите пожалуйста! мне нужно описать прогу на Паскале т.е. написать комменты к строчкам из проги(если можно то к каждой строчке).

Вот сама прога:

const
nmax = 101;

var
a: array[1..nmax, 1..nmax] of longint;
n, i, j, maxi, maxj, v : longint;

begin
repeat
write('Введите нечётное n < ', nmax, ': ');
readln(n);
if not odd(n) then
writeln('n должно быть нечётно');
if n > nmax then
writeln('n должно быть меньше ', nmax);
until (odd(n) and (n < nmax));
writeln('Ввод матрици');
for i:=1 to n do
for j:=1 to n do begin
write('a[', i, ',', j, '] = ');
readln(a[i, j]);
end;

maxi := 1;
maxj := 1;
for i:=1 to n do
for j:=1 to n do begin
if (a[maxi,maxj] < a[i, j]) then begin
maxi := i;
maxj := j;
end;
if (a[maxi, maxj] < a[i, n - j + 1]) then begin
maxi := i;
maxj := n - j + 1;
end;
end;

v := a[maxi, maxj];
a[maxi, maxj] := a[(n + 1) div 2, (n + 1) div 2];
a[(n + 1) div 2, (n + 1) div 2] := v;

writeln('После обработки матрица принела следующий вид:');
for i:=1 to n do begin
for j:=1 to n do
write(a[i, j], ' ');
writeln;
end;
end.
And1
Сообщения: 9
Зарегистрирован: 28 дек 2006, 22:57

Если нужно то вот задание к этой проге:

Дана действительная квадратная матрица порядка N(n- нечетное). Все элементы матрицы различны. Найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении этих диагоналей.

Помогите плизз! очень нужно!
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Код: Выделить всё

for i:=1 to n do 
for j:=1 to n do begin
if (a[maxi,maxj] < a[i, j]) then begin
maxi := i;
maxj := j;
end;
if (a[maxi, maxj] < a[i, n - j + 1]) then begin
maxi := i;
maxj := n - j + 1;
end;
end; 
Это двойной обход всего массива с нахождением максимума. Зачем так? Это же неправильно!

Код: Выделить всё

for i:=1 to n do
begin
  if a[i,i]>a[maxi,maxj] then
  begin maxi:=i; maxj:=i; end;
  if a[i,n-i+1]>a[maxi,maxj] then
  begin maxi:=i; maxj:=n-i+1; end;
end;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
And1
Сообщения: 9
Зарегистрирован: 28 дек 2006, 22:57

Спасибо! А можешь написать комментарии к этой программе?(ну там что какая сторчка выполнят) :confused:
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Напиши свой вариант, а мы откорректируем. Ужасно неохота делать за других то, с чем они вполне могут справиться и сами, поискав две минуты в Яндексе.
const {объявление констант} ...
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
And1
Сообщения: 9
Зарегистрирован: 28 дек 2006, 22:57

В том то и дело что у меня нет своих вариантов! :confused: Я вообще в паскале полный ноль! У меня преподаватель спросил как она работает, но я ему ни чего не ответил по ней!
And1
Сообщения: 9
Зарегистрирован: 28 дек 2006, 22:57

Вот мои комменты! посмотрите и подскажите что где неправильно!

const
nmax = 101; \\ Макс. размер

var
a: array[1..nmax, 1..nmax] of longint; \\ Матрица
n, i, j, maxi, maxj, v : longint; \\ Необходимые переменные

begin
repeat \\ Повторять следующее:
write('Введите нечётное n < ', nmax, ': ');
readln(n); \\ Ввод n
if not odd(n) then \\ Если n четное, то
writeln('n должно быть нечётно'); \\ Вывод сообщения
if n > nmax then \\ Если n больше макс. значения, то
writeln('n должно быть меньше ', nmax); \\ Вывод сообщения
until (odd(n) and (n < nmax)); Пока не n - нечетное и меньше макс значения
writeln('Ввод матрицы');
for i:=1 to n do \\ Цикл строк
for j:=1 to n do begin \\ Цикл столбцов
write('a[', i, ',', j, '] = ');
readln(a[i, j]); \\ Ввод соответствующего элемента
end;

maxi := 1;
maxj := 1;
for i:=1 to n do \\ Цикл диагонали
begin
if a[i,i]>a[maxi,maxj] then \\ Если элемент главной диагонали меньше минимального
begin
maxi:=i; \\ Он считается минимальным
maxj:=i; \\ Он считается минимальным
end;
if a[i,n-i+1]>a[maxi,maxj] then \\ Если элемент побочной диагонали меньше минимального
begin
maxi:=i; \\ Он считается минимальным
maxj:=n-i+1; \\ Он считается минимальным
end;
end;

v := a[maxi, maxj]; \\ Сохраняем минимальное значение
a[maxi, maxj] := a[(n + 1) div 2, (n + 1) div 2]; \\ Вместо него пишем значение центра
a[(n + 1) div 2, (n + 1) div 2] := v; \\ В центр пишем мин. значение

writeln('После обработки матрица приняла следующий вид:');
for i:=1 to n do begin \\ Цикл строк
for j:=1 to n do \\ Цикл столбцов
write(a[i, j], ' '); \\ Вывод соответствующего элемента
writeln;
end;
end.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Ну, все правильно. Только не "меньше минимального", а "больше максимального" ;) Мы же все-таки максимальные элементы ищем.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
And1
Сообщения: 9
Зарегистрирован: 28 дек 2006, 22:57

Лады! Спасибо! ;)
Ответить