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

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

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

 
 Ответить  Открыть новую тему 
> Задача на двумерный массив, Пожалуйста помогите найти ошибки в программе!
сообщение
Сообщение #1





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

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


Здравствуйте!
Ни как не получается написать следующую программку:
Вставить нулевую строку и нулевой столбец перед строкой и столбцом, где находится первый минимальный элемент.
Получается, что вставляются лишние пропуски и т.д. blink.gif Помогите пожалуйста!
Заранее огромное спасибо за ответы! smile.gif
program mas2;
uses crt;
var
i,j,n,m,k,l,nach: integer;
mas:array[1..50,1..50] of integer;
begin
clrscr;
writeln('Введите размерность массива (число строк n и число столбцов m): ');
read(n,m);
randomize;
write('Данный массив:');
for i:=1 to n do
for j:=1 to m do
mas[i,j]:=-10+random(40);
for i:=1 to n do begin writeln;
for j:=1 to m do
write(mas[i,j]:5); end;

nach:=mas[1,1];
k:=1;l:=1;
for j:=1 to 1 do
for i:=1 to n do begin
if mas[i,j]<nach then begin
k:=j; l:=i;
nach:=mas[i,j]
end;
end;
writeln(k,' ',l);
for i:=l to n+1 do
for j:=k to m+1 do begin
mas[i,j+1]:=mas[i,j];
end;
write('Получился массив вида');
for i:=l to n do
for j:=k to m do begin
mas[l,j]:=0; mas[i,k]:=0;
end;

{for i:=1 to n do
for j:=1 to m do
begin writeln;
for j:=1 to m do
write(mas[i,j]:5);end; }

writeln;
writeln;
For i:=1 To n+1 Do
Begin
For j:=1 To m+1 Do Write (mas[i,j] : 5) ;
Writeln;
End;
readkey;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

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


Вот:
program mas2;
var
i,j,n,m,k,l: integer;
mas: array[1..50,1..50] of integer;

begin
writeln('Введите размерность массива (число строк n и число столбцов m): ');
readLn(n,m);
{randomize;} { раскомментировать только после отладки!}
writeLn('Данный массив:');
for i:=1 to n do for j:=1 to m do mas[i,j]:=-10+random(40);
for i:=1 to n do begin
for j:=1 to m do write(mas[i,j]:5);
WriteLn
end;
{ поиск минимального элемента }
k:=1;
l:=1;
for i:=1 to n do for j:=1 to m do if mas[i,j]<mas[k,l] then begin
k:=i;
l:=j;
end;
writeln('Позиция минимального элемента: ',k,' ',l);
{ Раздвигаем .. }
for i:=n downto 1 do begin
for j:=m downto 1 do if j>=l then mas[i,j+1]:=mas[i,j]; { .. столбцы }
if i>=k then for j:=1 to m+1 do mas[i+1,j]:=mas[i,j] { .. строки }
end;
{ Записываем нули }
Inc(n);
Inc(m);
for i:=1 to n do mas[i,l]:=0;
for j:=1 to m do mas[k,j]:=0;

writeln('Результат: ');
For i:=1 To n Do Begin
For j:=1 To m Do Write(mas[i,j] : 5) ;
Writeln;
End;
readLn;
end.

Что непонятно - спрашивай.


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





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

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


Цитата(Lapp @ 4.01.2009 10:55) *

Вот:
program mas2;
var
i,j,n,m,k,l: integer;
mas: array[1..50,1..50] of integer;

begin
writeln('Введите размерность массива (число строк n и число столбцов m): ');
readLn(n,m);
{randomize;} { раскомментировать только после отладки!}
writeLn('Данный массив:');
for i:=1 to n do for j:=1 to m do mas[i,j]:=-10+random(40);
for i:=1 to n do begin
for j:=1 to m do write(mas[i,j]:5);
WriteLn
end;
{ поиск минимального элемента }
k:=1;
l:=1;
for i:=1 to n do for j:=1 to m do if mas[i,j]<mas[k,l] then begin
k:=i;
l:=j;
end;
writeln('Позиция минимального элемента: ',k,' ',l);
{ Раздвигаем .. }
for i:=n downto 1 do begin
for j:=m downto 1 do if j>=l then mas[i,j+1]:=mas[i,j]; { .. столбцы }
if i>=k then for j:=1 to m+1 do mas[i+1,j]:=mas[i,j] { .. строки }
end;
{ Записываем нули }
Inc(n);
Inc(m);
for i:=1 to n do mas[i,l]:=0;
for j:=1 to m do mas[k,j]:=0;

writeln('Результат: ');
For i:=1 To n Do Begin
For j:=1 To m Do Write(mas[i,j] : 5) ;
Writeln;
End;
readLn;
end.

Что непонятно - спрашивай.

Lapp, спасибо огромное. yes2.gif yahoo!.gif Всё работает как часы. good.gif Ещё раз спасибо!
Удачи и всего самого лучшего!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


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

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

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


Подумавши немного, я пришел к выводу, что основной цикл можно существенно сократить, а также вставить туда запись нулей. Вот:
var
i,j,n,m,k,l: integer;
mas: array[1..50,1..50] of integer;

begin
writeln('Введите размерность массива (число строк n и число столбцов m): ');
readLn(n,m);
{randomize;} { раскомментировать только после отладки!}
writeLn('Данный массив:');
for i:=1 to n do for j:=1 to m do mas[i,j]:=-10+random(40);
for i:=1 to n do begin
for j:=1 to m do write(mas[i,j]:5);
WriteLn
end;
{ поиск минимального элемента }
k:=1;
l:=1;
for i:=1 to n do for j:=1 to m do if mas[i,j]<mas[k,l] then begin
k:=i;
l:=j;
end;
writeln('Позиция минимального элемента: ',k,' ',l);

Inc(n);
Inc(m);
for i:=n downto 1 do for j:=m downto 1 do
mas[i,j]:=byte(i<>k)*byte(j<>l)*mas[i-byte(i>k),j-byte(j>l)];

writeln('Результат: ');
For i:=1 To n Do Begin
For j:=1 To m Do Write(mas[i,j] : 5) ;
Writeln;
End;
readLn;
end.

Разберешься? smile.gif


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





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

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


Цитата(Lapp @ 4.01.2009 13:35) *

Подумавши немного, я пришел к выводу, что основной цикл можно существенно сократить, а также вставить туда запись нулей. Вот:
var
i,j,n,m,k,l: integer;
mas: array[1..50,1..50] of integer;

begin
writeln('Введите размерность массива (число строк n и число столбцов m): ');
readLn(n,m);
{randomize;} { раскомментировать только после отладки!}
writeLn('Данный массив:');
for i:=1 to n do for j:=1 to m do mas[i,j]:=-10+random(40);
for i:=1 to n do begin
for j:=1 to m do write(mas[i,j]:5);
WriteLn
end;
{ поиск минимального элемента }
k:=1;
l:=1;
for i:=1 to n do for j:=1 to m do if mas[i,j]<mas[k,l] then begin
k:=i;
l:=j;
end;
writeln('Позиция минимального элемента: ',k,' ',l);

Inc(n);
Inc(m);
for i:=n downto 1 do for j:=m downto 1 do
mas[i,j]:=byte(i<>k)*byte(j<>l)*mas[i-byte(i>k),j-byte(j>l)];

writeln('Результат: ');
For i:=1 To n Do Begin
For j:=1 To m Do Write(mas[i,j] : 5) ;
Writeln;
End;
readLn;
end.

Разберешься? smile.gif

Да, разберусь. Спасибо Вам огромное! smile.gif
Удачи Вам!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






mas[i,j]:=-10+random(40);{что за конструкция, можно подробнее почему именно -10}
for i:=1 to n do begin
for j:=1 to m do write(mas[i,j]:5);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
{что за конструкция, можно подробнее почему именно -10}
Чтобы в результате получались числа в интервале -10 .. 29,, а не от 0, как при обычном использовании Random(). Если тебе нужен другой интервал - поставь другие значения...

В общем случае, чтобы сгенерировать случайное число X в интервале [A .. B] нужно написать:
X := A + Random(B - A + 1);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






mas[i,j]:5);{а это?}
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






{что за конструкция, можно подробнее почему именно -10}
Чтобы в результате получались числа в интервале -10 .. 29,, а не от 0, как при обычном использовании Random(). Если тебе нужен другой интервал - поставь другие значения...

у меня выводит блин одним из элементов массива 89 почему?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
{а это?}
А это - форматирование при выводе на печать, чтоб аккуратно печатать в столбик числа. Под каждое число выделится 5 позиций...

Цитата
у меня выводит блин одним из элементов массива 89 почему?
Приведи полностью свою программу, название компилятора и скриншот, показывающий вывод программы.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Спасибо.
Вот программа
Требуеться определить:
1)Способ заполнения массива
2)Что именно делает прога
3)Результат выполнения проги, если массив после заполнения имеет вид:{19,21,17,25,87,1,13,4}


const n=8
Type is=array[1..n] of integer;
var
a:is;
b,i,k:integer;
s:string;
Begin
Randomize;
for i:=1 to n do begin
a[i]:=-10+random(40);
write(a[i]:5);
end;
s:='задача не решена';
k:=0;
b:=a[1];
i:=1;
while i<=n do begin
if b<=a[i] then
begin
b:=a[i];
k:=i;
end;
i:=i+2;
end;
if (i>n) or (b<=a[i]) then
s= 'задача решена';
writeln(k,' ',s);
end.


Используем подсветку синтаксиса
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
у меня выводит блин одним из элементов массива 89 почему?
Это не один из элементов массива равен 89, а два числа сливаются. Сделай так:

{ ... }
if (i>n) or (b<=a[i]) then
s := 'задача решена';
writeln(k:5,' ',s); { <--- Здесь тоже зададим формат для вывода }
end.
, и ты увидишь...

Касательно самого задания, "что делает прога" и т.д - это уже разбирайся самостоятельно. Достаточно внимательно посмотреть на программу (в крайнем случае - пройти пошагово), чтобы понять, что она делает.

Тем более, что я просил не набирать программу здесь, а показать (скопировать или приаттачить) ГОТОВУЮ, работающую программу. Твой код из сообщения №11 даже не компилируется. Ты думаешь, мне больше делать нечего, кроме как исправлять ошибки у тебя в коде? Да кто еще знает, может там еще какие символы перепутаны, и программа вообще не будет делать того, что подразумевалось тобой. Нет рабочей программы - извини, я ничем помочь больше не могу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Спасибо большое и на этом.
К сожалению посмотрел задание - 87 это один из 8 элементов массива {19,21,17,25,87,1,13,4}
Это кстати задание из ЕГЭ по информатике, вот не могу детям объяснить.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


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

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

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


Цитата(Гость @ 27.01.2010 14:30) *
К сожалению посмотрел задание - 87 это один из 8 элементов массива {19,21,17,25,87,1,13,4}
Это кстати задание из ЕГЭ по информатике, вот не могу детям объяснить.
Этого не может быть. Точка.

Гость, так не хорошо. По-видимому, ты не вьюнош, чтоб тобой понукать - но зачем нарушать правила? Зарегистрируйся, как нормальный человек, и создавай свои темы, как положено, а не флуди в чужих. Кстати, чтение Правил обязательно и для гостей..

Еще раз по теме: появление значения 87 (89) в элементах массива a в приведенном выше коде невозможно. Я, конечно, говорю про нормальный компилятор (Borland, FPC..) - за всякие ABC я не отвечаю..
Как показывает опыт, в большинстве случаев "невозможных" ошибок оказывается, что реально запускаемый код на самом деле отличается от приведенного ранее в теме. Пожалуйста, приведи текущий вариант кода - тот, в котором получается вот такая петрушка - а также свой компилятор. Тогда будем выяснять.


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

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

 





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