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

> ВНИМАНИЕ!

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

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

 
 Ответить  Открыть новую тему 
> Вычёркивание строчки с нулевым элементом
сообщение
Сообщение #1


Новичок
*

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

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


"Из матрицы А(mxn) надо исключить строки, содержащие хотябы один нулевой элемент"

Const
n = ...;
m = ...;
Type ma3x = array[1 .. n, 1 .. m] of integer;
var
mx: ma3x;
i, j: integer; no_null: boolean;
begin
{ тут заполняем матрицу }
for i := 1 to n do
begin
no_null := true;
for j := 1 to m do
no_null := no_null and (arr[i, j] <> 0);
if no_null then
begin
for j := 1 to m do write(arr[i, j]:4);
writeln
end;
end;
end.


Надо переделать для Delphi. Попробовал, получилось следующее:

var
i,j,n:integer;
no_null:boolean;
mas:array[0..100,0..100] of integer;
begin
if (edit1.Text='') then
showmessage('Çàïîëíèòå ïîëÿ')
else
begin
randomize;
n:=strtoint(edit1.text);
stringgrid1.ColCount:=n;
stringgrid1.RowCount:=n;
for i:=0 to n do
for j:=0 to n do
begin
mas[i,j]:= random(20)-10;
stringgrid1.Cells[i,j] := inttostr (mas[i,j]);
end;
For i:=0 to n do
for j:=0 to n do
begin
no_null:=true;
no_null:=no_null and (mas[i,j]<>0);
If no_null then
begin
for j:=0 to n do { <-- Вот в этой строке}
stringgrid2.Cells[i,j] := inttostr (mas[i,j]);
end;

В строке, выделеной жирным отмеченной комментарием [Лопарь], вылезает ошибка, что цикл надо начинать с i.
Как это исправить? Спасибо.

М
Lesnik, для отметки места в программе используй комментарии. Лопарь



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


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


1. Сделать нормальное форматирование.
2. Прочитать, что за ошибка.
For i:=0 to n do
for j:=0 to n do
begin
no_null:=true;
no_null:=no_null and (mas[i,j]<>0);
If no_null then
begin
for j:=0 to n do { <-- Вот в этой строке}
stringgrid2.Cells[i,j] := inttostr (mas[i,j]);
end;


Вложенный цикл по той же переменной.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Программа в delphi работает неправильно.
С этой переменой h она удаляет не строчки а столбцы. И учитываю, что у меня результат выводится в Grid, пустые столбцы остаются sad.gif
Как можно решить эту проблему?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Как можно решить эту проблему?
Так:
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, curr: integer;
no_null: boolean;
begin
curr := 0;
For i:=0 to pred(StringGrid1.RowCount) do begin
no_null:=true;
for j:=0 to pred(StringGrid1.ColCount) do
no_null:=no_null and (strtoint(StringGrid1.Cells[j,i]) <> 0);

If no_null then begin
for j:=0 to pred(StringGrid1.ColCount) do
stringgrid2.Cells[j, curr] := StringGrid1.Cells[j,i];
inc(curr);
end;
end;
StringGrid2.RowCount := curr;
end;

(ты должен позаботиться о том, что у StringGrid-ов нет FixedCols/FixedRows)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Цитата(volvo @ 5.06.2007 23:21) *

Так:
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, curr: integer;
no_null: boolean;
begin
curr := 0;
For i:=0 to pred(StringGrid1.RowCount) do begin
no_null:=true;
for j:=0 to pred(StringGrid1.ColCount) do
no_null:=no_null and (strtoint(StringGrid1.Cells[j,i]) <> 0);

If no_null then begin
for j:=0 to pred(StringGrid1.ColCount) do
stringgrid2.Cells[j, curr] := StringGrid1.Cells[j,i];
inc(curr);
end;
end;
StringGrid2.RowCount := curr;
end;

(ты должен позаботиться о том, что у StringGrid-ов нет FixedCols/FixedRows)


Не работает.
Ещё в этой верси не понимаю как можно сделать, чтобы пользователь воодил ко-во строк и столбцов.
P.S. Прикрепляю файл
P.S.S. Спасибо smile.gif


Прикрепленные файлы
Прикрепленный файл  Project1.zip ( 3.71 килобайт ) Кол-во скачиваний: 183
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
Не работает.
Не работало - не выложил бы... За безапелляционный тон - разбирайся сам...


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Цитата(volvo @ 6.06.2007 0:34) *

Не работало - не выложил бы... За безапелляционный тон - разбирайся сам...

Извини, но действительно нужна помощь.
Удалил прошлый код, вставил тот, который был выложен. fixedrows и colls равны 0 у обоих гридов. В чём проблема разобраться не могу sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






В твоем проекте вот этот код:
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, curr: integer;
no_null: boolean;
n: integer;
begin
n:=strtoint(edit1.text); // Было добавлено для отсечения всех незаполненных ячеек
stringgrid1.ColCount:=n;
stringgrid1.RowCount:=n;

curr := 0;
For i:=0 to pred(StringGrid1.RowCount) do begin
no_null:=true;
for j:=0 to pred(StringGrid1.ColCount) do
no_null:=no_null and (strtoint(StringGrid1.Cells[j,i]) <> 0);

If no_null then begin
for j:=0 to pred(StringGrid1.ColCount) do
stringgrid2.Cells[j, curr] := StringGrid1.Cells[j,i];
inc(curr);
end;
end;
StringGrid2.RowCount := curr;
end;

отработал прекрасно...

(я установил в опциях StringGrid1 goEditing = True, и вносил данные прямо в грид)
 К началу страницы 
+ Ответить 

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

 





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