Форум «Всё о Паскале» _ Задачи _ Задача на массивы
Автор: dog 8.03.2010 1:58
Задание
Дана матрица Wmxn, элементами которой являются натуральные числа, не превосходящие 30.
Необходимо для каждого столбца построить квадрат из символов "+", причем количество символов, составляющих сторону квадрата, равно значению наименьшего элемента
Есть такое решение
program PRP9; uses crt; const n=3; m=3; var a:array[1..m,1..n] of 1..30; i,j,k,l:byte; min,max:1..30; begin writeln('Ввести элементы массива'); for i:=1 to m do for j:=1 to n do readln(a[i,j]);
For j:=1 to n do begin max:=a[1,j]; min:=a[1,j]; For i:=1 to m do begin If a[i,j]>max then max:=a[i,j]; if a[i,j]<min then min:=a[i,j]; end; For k:=1 to min do write('+'); writeln; For i:=1 to min-2 do begin write('+'); for j:=1 to min-2 do write(' '); write('+'); writeln; end; For l:=1 to min do write('+'); writeln;
end; end.
Код работает некорректно, хотелось бы, чтобы взглянули свежим взглядом и высказали замечания и предложения по корректировке программы.
Автор: Lapp 2.04.2010 13:26
Цитата(dog @ 7.03.2010 22:58)
Код работает некорректно, хотелось бы, чтобы взглянули свежим взглядом и высказали замечания и предложения по корректировке программы.
Не знаю, нужно ли тебе это еще.. Почему-то я эту тему не заметил раньше. Но замечания и предложения высказать могу .
1. Никогда ни при каких обстоятельствах не используй переменную цикла вторично для внутреннего цикла. И вообще - никогда ничего не меняй значение параметра цикла внутри цикла. В данном случае, ты так поступила с переменной j.
2. Старайся правильно форматировать код - это помогает избежать очень многих ошибок. Например, описанную выше ошибку так гораздо легче было бы отловить. Правила простые: все, что внутри блока, сдвигается вправо. Если хочешь, можно поговорить подробнее. Поверь: без этого - никуда.
3. Непонятно, зачем ты находила макс и мин, когда тебе был нужен только мин. Лишнее - это лишнее.
4. Для рисования квадратов я применил в корне другой алгоритм. Разберись; если неясно - спрашивай.
5. Если у тебя в коде фигурирует число (как тут 30) - используй его через константу. Это нужно делать практически всегда.
6. Очень рекомендую использовать не Турбо, а более продвинутый компилятор. Например - FPC ( http://freepascal.org/ ). Он отловил бы ту твою ошибку на этапе компиляции. У него практически идентичная среда, переход не будет трудным.
Вот исправленный и отформатированный код. Успехов тебе .
const n=3; m=3; max=30; var a: array [1..m,1..n] of integer; i,j,c,min: byte;
begin for i:=1 to m do for j:=1 to n do a[i,j]:=Random(max)+1; for i:=1 to m do begin for j:=1 to n do write(a[i,j]:3); WriteLn end; For c:=1 to n do begin min:=a[1,c]; for i:=1 to m do if a[i,c]<min then min:=a[i,c]; for i:=1 to min do begin for j:=1 to min do if (i=1)or(j=1)or(i=min)or(j=min) then write('+') else write(' '); writeln; end; writeln; end; end.