Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2010, 15:41   #1
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию Похоже что-то с циклом

Добрый день!
У меня по лабораторной имеется следующее задание:
Цитата:
Для матрицы А (N строк, M столбцов) вывести те строки, в которых есть нулевые элементы, или вывести
сообщение "нет строк с нулями". Для проверки наличия нулевых элементов в произвольной строке матрицы
использовать процедуру.
Написала программу для выполнения задания.
Код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    procedure Button1Click(Sender: TObject);
    procedure LabeledEdit1Change(Sender: TObject);
    procedure LabeledEdit2Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
TYPE TA=ARRAY of array of integer;
var
  Form1: TForm1;
  a:TA; b:Ta; i, j, t, d:integer; f:boolean;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

procedure findzero (x:TA; y:integer; var found: boolean);
var j:integer;
begin
For j:=0 to d-1 do
if (x[j,y]=0) then

found:=false

                                                          //<3 =)
else
begin
found:=true;
  break;
   end;
end;

begin
t:=StrToInt(LabeledEdit1.Text);
d:=StrToInt(LabeledEdit2.Text);
SetLength (a,t,d);
a [0,0] := 10;
SetLength (b,t,d);
b [0,0] := 10;
for i:=0 to t-1 do
begin
for j:=0 to d-1 do
begin
a[i,j]:=random(10);
stringgrid1.cells[j,i]:=inttostr(a[i,j]);
end;
end;


for i:=0 to t-1 do
begin
findzero(a,j, f);
if f then
begin
for j:=0 to d-1 do
begin
Label1.Caption:= 'Есть строки с нулями';
stringgrid2.cells[j,i]:=inttostr(a[i,j])
end;

end


else
begin
for j:=0 to d-1 do
begin
stringgrid2.cells[j,i]:=' ';
Label1.Caption:= 'нет строк с нулями';


end;
end;
end;
end;
procedure TForm1.LabeledEdit1Change(Sender: TObject);
begin
t:=StrToInt(labelededit1.Text);
WITH StringGrid1 DO
ColCount:=(t);
Stringgrid2.colcount:=t;

SetLength(a,t);
SetLength(b,t);
end;

procedure TForm1.LabeledEdit2Change(Sender: TObject);
begin
d:=StrToInt(labelededit2.Text);
WITH StringGrid1 Do
RowCount:=(d);
Stringgrid2.rowcount:=d ;

SetLength(a,d);
SetLength(b,d);
end;
end.
Но программа работает не правильно. Похоже, она выполняет только половину цикла. Но я никак не могу найти ошибки. Что мне надо исправить?
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Старый 25.04.2010, 15:50   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Глаза выпали из орбит, читая неотформатированный код...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 25.04.2010, 15:58   #3
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию форматировать

действительно !буржуазные предрассудки предполагают такой поряд записи ( любят некоторые пробелы)))
Код:
or i:=0 to t-1 do
begin
  findzero(a,j, f);
  if f then
  begin
    for j:=0 to d-1 do
    begin
       Label1.Caption:= 'Есть строки с нулями';
       stringgrid2.cells[j,i]:=inttostr(a[i,j])
    end;
  end
(пробелы после бегинов добавляй ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 25.04.2010, 18:34   #4
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

Извините за столь некрасиво написанную программу. С нас в институте это не особо спрашивают(((

vedro-compota, в выделенном вами коде находится моя ошибка? Или что? а то я не поняла(( Просто он ничем не отличается от написанного у меня. Или я чего-то не понимаю?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    procedure Button1Click(Sender: TObject);
    procedure LabeledEdit1Change(Sender: TObject);
    procedure LabeledEdit2Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TYPE TA=ARRAY of array of integer;

  var
  Form1: TForm1;
  a:TA; b:Ta; i, j, t, d:integer; f:boolean;

  implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

procedure findzero (x:TA; y:integer; var found: boolean);
var j:integer;

 begin
For j:=0 to d-1 do
if (x[j,y]=0) then
found:=false
else
  begin
found:=true;
  break;
  end;
 end;


 begin
t:=StrToInt(LabeledEdit1.Text);
d:=StrToInt(LabeledEdit2.Text);
SetLength (a,t,d);
a [0,0] := 10;
SetLength (b,t,d);
b [0,0] := 10;
for i:=0 to t-1 do

  begin
for j:=0 to d-1 do

   begin
a[i,j]:=random(10);
stringgrid1.cells[j,i]:=inttostr(a[i,j]);
   end;
  end;


for i:=0 to t-1 do
  begin
findzero(a,j, f);
if f then
   begin
for j:=0 to d-1 do
    begin
Label1.Caption:= 'Есть строки с нулями';
stringgrid2.cells[j,i]:=inttostr(a[i,j])
    end;
   end
else
  begin
for j:=0 to d-1 do
   begin
stringgrid2.cells[j,i]:=' ';
Label1.Caption:= 'нет строк с нулями';
   end;
  end;
 end;
end;

procedure TForm1.LabeledEdit1Change(Sender: TObject);
 begin
t:=StrToInt(labelededit1.Text);
WITH StringGrid1 DO
ColCount:=(t);
Stringgrid2.colcount:=t;
SetLength(a,t);
SetLength(b,t);
 end;

procedure TForm1.LabeledEdit2Change(Sender: TObject);
 begin
d:=StrToInt(labelededit2.Text);
WITH StringGrid1 Do
RowCount:=(d);
Stringgrid2.rowcount:=d ;
SetLength(a,d);
SetLength(b,d);
 end;
end.
Хотя я не думаю, что у меня получилось сделать текст программы симпатичнее(((
Я самый порочный ангел и самый безгрешный демон...

Последний раз редактировалось Stilet; 26.04.2010 в 09:24.
Lisёноk вне форума Ответить с цитированием
Старый 25.04.2010, 18:50   #5
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

нет)) я просто показал тебе, как надо форматировать ))
смысл такой когда код у тебя находится в операторных скобках (бегин-энд))) необходимо этот самый код сдвинуть на два пробела относительно бегин-энд .
Сами операторные скобки находяться на одной линии , чем глубже у тебя вложение- тем правее оно оказывается на странице.....вот так. отформатируй. это и впрямь удобно ( особенно когда будешь большие программы мучать) нас вот в универе заставляют ))) выравнивание сделай- и тогда посмотрим ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 25.04.2010, 20:32   #6
was3110
Форумчанин
 
Аватар для was3110
 
Регистрация: 25.04.2010
Сообщений: 254
По умолчанию

Сделал, протестировал...
Но видно уже не нужно
помогать студентам - моя вторая профессия

Последний раз редактировалось was3110; 26.04.2010 в 13:49.
was3110 вне форума Ответить с цитированием
Старый 26.04.2010, 16:13   #7
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

Очень нужно! Я сделала, как посоветовали, но ошибку все равно найти не могу(((( Помогите, пожалуйста!!!

Постаралась сделать с пробелами:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    procedure Button1Click(Sender: TObject);
    procedure LabeledEdit1Change(Sender: TObject);
    procedure LabeledEdit2Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
TYPE TA=ARRAY of array of integer;
var
  Form1: TForm1;
  a:TA; b:Ta; i, j, t, d:integer; f:boolean;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

procedure findzero (x:TA; y:integer; var found: boolean);
var j:integer;
begin
  For j:=0 to d-1 do
  if (x[j,y]=0) then
  found:=false
  else
 begin
   found:=true;
   break;
 end;
end;

begin
  t:=StrToInt(LabeledEdit1.Text);
  d:=StrToInt(LabeledEdit2.Text);
  SetLength (a,t,d);
  a [0,0] := 10;
  SetLength (b,t,d);
  b [0,0] := 10;
  for i:=0 to t-1 do
 begin
   for j:=0 to d-1 do
  begin
    a[i,j]:=random(10);
    stringgrid1.cells[j,i]:=inttostr(a[i,j]);
   end;
  end;


  for i:=0 to t-1 do
 begin
   findzero(a,j, f);
   if f then
  begin
    for j:=0 to d-1 do
   begin
      Label1.Caption:= 'Есть строки с нулями';
       stringgrid2.cells[j,i]:=inttostr(a[i,j])
   end;
  end
   else
  begin
    for j:=0 to d-1 do
   begin
     stringgrid2.cells[j,i]:=' ';
     Label1.Caption:= 'нет строк с нулями';

   end;
  end;
 end;
end;

procedure TForm1.LabeledEdit1Change(Sender: TObject);
begin
  t:=StrToInt(labelededit1.Text);
  WITH StringGrid1 DO
  ColCount:=(t);
  Stringgrid2.colcount:=t;

  SetLength(a,t);
  SetLength(b,t);
end;

procedure TForm1.LabeledEdit2Change(Sender: TObject);
begin
  d:=StrToInt(labelededit2.Text);
  WITH StringGrid1 Do
  RowCount:=(d);
  Stringgrid2.rowcount:=d ;

  SetLength(a,d);
  SetLength(b,d);
end;
end.
Помогите, пожалуйста!! Я уже не знаю, что делать с этой программой((
Я самый порочный ангел и самый безгрешный демон...

Последний раз редактировалось Stilet; 26.04.2010 в 16:59.
Lisёноk вне форума Ответить с цитированием
Старый 26.04.2010, 21:27   #8
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Мой вариант вашего задания. Delphi 7.
Вложения
Тип файла: rar test3.rar (196.1 Кб, 5 просмотров)
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 26.04.2010, 22:06   #9
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

для новичков и не только - в новых версиях делфи (про делфи 7 не знаю, мож тож есть) есть такая фича, как автоматическое форматирование кода

выделяешь весь код или нужный участок и нажимаешь Ctrl + D, и ву-а-ля, код отформатирован по всем правилам
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 26.04.2010, 22:09   #10
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

Большое спасибо!
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
похоже excel этого не может deni1982 Microsoft Office Excel 16 17.03.2010 08:14
Похоже Microsoft признает несостоятельность Vista DeKot Свободное общение 6 04.10.2009 08:16
Поясните что с циклом for? Mikhail Bakurov Общие вопросы Delphi 9 19.06.2009 01:58
Похоже, некоторые проблемы... mihali4 Свободное общение 3 08.03.2008 23:41
Взаимодействие списков. Похоже на сводную, но не она. Matthias Microsoft Office Excel 4 22.02.2008 15:17