Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на массивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
dog
Задание

Дана матрица 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
Цитата(dog @ 7.03.2010 22:58) *
Код работает некорректно, хотелось бы, чтобы взглянули свежим взглядом и высказали замечания и предложения по корректировке программы.
Не знаю, нужно ли тебе это еще.. Почему-то я эту тему не заметил раньше. Но замечания и предложения высказать могу smile.gif.

1. Никогда ни при каких обстоятельствах не используй переменную цикла вторично для внутреннего цикла. И вообще - никогда ничего не меняй значение параметра цикла внутри цикла. В данном случае, ты так поступила с переменной j.

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

3. Непонятно, зачем ты находила макс и мин, когда тебе был нужен только мин. Лишнее - это лишнее.

4. Для рисования квадратов я применил в корне другой алгоритм. Разберись; если неясно - спрашивай.

5. Если у тебя в коде фигурирует число (как тут 30) - используй его через константу. Это нужно делать практически всегда.

6. Очень рекомендую использовать не Турбо, а более продвинутый компилятор. Например - FPC ( http://freepascal.org/ ). Он отловил бы ту твою ошибку на этапе компиляции. У него практически идентичная среда, переход не будет трудным.

Вот исправленный и отформатированный код. Успехов тебе smile.gif.
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.
dog
Спасибо.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.