IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача на массивы, Помочь разобраться
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +


Задание

Дана матрица 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.



Код работает некорректно, хотелось бы, чтобы взглянули свежим взглядом и высказали замечания и предложения по корректировке программы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +


Спасибо.



Сообщение отредактировано: dog -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 18:13
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name