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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> матрица MXN, вставить столбец
сообщение
Сообщение #1


Новичок
*

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

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


В заданной матрице сформированной случайно вставить второй столбец перед всеми стольбцами,в которых нет отричательных элементов. Не могу найти ошибку...логическая...

program Project4;

{$APPTYPE CONSOLE}

uses
SysUtils;
var n,m,i,j:integer; a,b:array of array of integer; flag:boolean;
begin
randomize;
writeln('vvedite razmernost matricy(lines):'); readln(n); //вводим размерность
writeln('vvedite razmernost matricy(columns):'); readln(m);
setlength(a,n,m); setlength(b,n,m);
writeln('Ischodnay matrica razmerom ',n,'X',m,':');
writeln;
for i:=0 to n-1 do begin
for j:=0 to m-1 do begin a[i,j]:=random(11)-5; write(a[i,j]:3,' ') end; writeln end; //заполняем



for j:=0 to m-1 do begin
flag:=true;i:=0;
while (i<=n-1)and(flag=true) do begin
if a[i,j]>0 then flag:=true else flag:=false;
i:=i+1
end;

if flag=true then begin m:=m+1; setlength(b,n,m);
for i:=0 to n-1 do begin
b[i,j]:=a[i,1];
b[i,j+1]:=a[i,j]
end;
end
else for i:=0 to n-1 do
b[i,j]:=a[i,j];end;
writeln('Konechnay matrica razmerom ',n,'X',m,':');
writeln;
for i:=0 to n-1 do begin // вывод
for j:=0 to m-1 do write(b[i,j]:3,' '); writeln end;
readln
{ TODO -oUser -cConsole Main : Insert code here }
end.


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


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

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

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


Цитата(Svetlana @ 6.06.2009 1:04) *
Не могу найти ошибку...логическая...
А в чем она выражается? Симптомы какие?


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


Новичок
*

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

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


Вставляет второй столбец не туда,куда надо.При этом пропадают некоторые столбцы из первоначальной матрицы. И откуда так получается,что последние столбцы становятся нулевыми...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

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

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


Цитата
a,b:array of array of integer;

я думаю это не логическая ошибка,но ошибка....
Девушка,что за setlength??? вы работаете с матрицей,а не строкой.....

a: array[1..50,1..50] of integer;
b:array [1..50] of integer;


Я думаю вам больше матрица и не нужна,просо скажите,что если больше,то прога кукиш покажет.А еще нам надо запомнить вашу строку,а то вдруг там есть искомые елементы,тогда наша вторая строка тут же станет трьетьей и тд.


for i:=1 to n do begin

for j:=1 to m do begin
a[i,j]:=random(11)-5;
write(a[i,j]:3,' ')
end;

writeln;//точку с запятой забыли
end; //заполняем

for i:=1 to m do begin
b[i]:=a[i,2];
end;

for j:=1 to m do begin
flag:=false;
i:=1;
while (i<=n) or (flag=false) do begin//надо чтобы мы выходили при выполнении любого из условий,а то если у
//тебя флаг тру но не конец строки,ты не выйдеш из цикла,и если конец,но не флаг фалс,то опять таки из
//цикла ты не выходиш и у тебя зацикливание.
if a[i,j]>0 then flag:=true else flag:=false;
i:=i+1
end;

if flag=true then begin

for i:=1 to m do begin
a[i,j]:=b[i];
end;
end;
end;

writeln('Konechnay matrica razmerom ',n,'X',m,':');
writeln;
for i:=1 to n do begin // вывод
for j:=1 to m do
write(a[i,j]:3,' ');
writeln;//не забывай про точку с запятой
end;
readln;


Паскаля нету,сижу не с компа,а с ноута,если что то пропустил или ошибся,поправьте пожалуста.

А к тебе вопрос,ты ВСТАВЛЯЕШ строку,или заменяеш строку,по твоему коду я прихожу к выводу,что второе,потому,что если бы ты вставляла,то вторая матрица была бы жирнее первой.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
Девушка,что за setlength??? вы работаете с матрицей,а не строкой.....
SetLength - работа с дин. массивами... Тема уходит в Дельфи, поскольку используются специфические средства, отсутствующие в стандартном Паскале...

Добавлено через 4 мин.
Цитата
Не могу найти ошибку...логическая...
Угу... Ты внутри цикла, перебирающего столбцы, меняешь их количество. Этого делать нельзя (по крайней мере - не циклом For)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

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

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


Значит я не совсем коректно понимаю фразу
Цитата

SetLength устанавливает длинну строки S в Len. S может быть типа AnsiString, ShortString или WideString. Для ShortString Len может быть максимум 255. Для AnsiString может быть любое значение. Для AnsiString только SetLength должно использоваться для установки длинны

Взято из FP.
Хотя для OP уже пишется про динамические массивы...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Цитата(volvo @ 6.06.2009 0:52) *

SetLength - работа с дин. массивами... Тема уходит в Дельфи, поскольку используются специфические средства, отсутствующие в стандартном Паскале...

Добавлено через 4 мин.
Угу... Ты внутри цикла, перебирающего столбцы, меняешь их количество. Этого делать нельзя (по крайней мере - не циклом For)...


Вот этого я и не знала...А почему нельзя?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

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

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


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


Гость






Цитата
Взято из FP.
Не вырывай фразы из контекста...

Цитата(rtl.pdf Параграф 36.9.278)
Description: SetLength sets the length of the string S to Len. S can be an ansistring, a short string or a widestring. For ShortStrings, Len can maximally be 255. For AnsiStrings it can have any value. For AnsiString strings, SetLength {nem must} be used to set the length of the string.
In the case of a dynamical array A, setlength sets the number of elements. The elements are numbered from index 0, so the count runs from 0 to Len-1. If Zero is specified, the array is cleared.
Учись читать доки полностью, и на языке оригинала...

Цитата
от этого я и не знала...А почему нельзя?
На самом деле у тебя все гораздо больше намудрено... Проблема - в том, что когда ты вставляешь столбец в массив B, он должен вставляться не как J-ый, а как последний (или 2 последних), иначе нумерация собьется. Смотри, насколько все проще:
program Project4;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
n, m, i, j: integer;
a, b:array of array of integer;
flag:boolean;
len: integer;
begin
randomize;
writeln('vvedite razmernost matricy(lines):'); readln(n);
writeln('vvedite razmernost matricy(columns):'); readln(m);
setlength(a,n,m);
setlength(b,n,0); // <---

writeln('Ischodnay matrica razmerom ',n,'X',m,':');
writeln;
for i:=0 to n-1 do begin
for j:=0 to m-1 do begin
a[i,j]:=random(51)-5; write(a[i,j]:3,' ')
end;
writeln
end;

len := 0;
for j := 0 to m - 1 do begin
flag := true;
for i := 0 to n - 1 do flag := flag and (a[i, j] > 0);

if flag then begin
writeln('#', j);
Len := Len + 1;
setlength(b, n, Len);
for i := 0 to n - 1 do b[i, len-1] := a[i, 1];
end;
Len := Len + 1;
setlength(b, n, Len);
for i := 0 to n - 1 do b[i, len-1] := a[i, j];
end;

writeln('Konechnay matrica razmerom ',n,'X',len,':');
writeln;
for i:=0 to n-1 do begin
for j:=0 to len-1 do write(b[i,j]:3,' ');
writeln
end;
setlength(a, 0, 0); setlength(b, 0, 0); // <---
readln
end.
Тестировалось в FPC, могут быть несоответствия в обработке Дельфями, говори, если что...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Всё работает good.gif Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Профи
****

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

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


Цитата

Учись читать доки полностью, и на языке оригинала...

Извини,но я не доки читал,а взял с сайта free pascal,вот тебе даже ссылка,что там написано.
http://www.freepascal.ru/wiki/index.php?title=SetLength
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


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

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

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


Цитата(Krjuger @ 7.06.2009 16:45) *
Извини,но я не доки читал,а взял с сайта free pascal,вот тебе даже ссылка,что там написано.
http://www.freepascal.ru/wiki/index.php?title=SetLength
Обрати внимание на вторую половину фразы volvo, которую ты процитировал. Конечно, ребята молодцы, что перевели, но зря они обрезали norespect.gif. Уж лучше бы укоротили "длинну" smile.gif.

Так что рекомендации остаются прежними smile.gif.


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

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

 





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