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

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

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

> Задача на массивы, Помочь разобраться
dog
сообщение 7.03.2010 21:58
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Lapp
сообщение 2.04.2010 9:26
Сообщение #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 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



- Текстовая версия 20.07.2025 22:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"