Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 18.05.2020, 16:54   #1
Margaret98
Новичок
Джуниор
 
Регистрация: 18.05.2020
Сообщений: 3
Печаль Lazarus Работа с модулями

Программа выдаёт ошибку в количестве строк. Могут быть где-то еще ошибки, но очень нужно разобраться.

Текст кода:
Код:
unit unit13;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids,
  Buttons, ActnList, ExtCtrls,modul;

type

  { TForm1 }

  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    RadioGroup1: TRadioGroup;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private

  public

  end;
type
Matr=Array[1..100,1..100] of integer;
var
  Form1: TForm1;
 A,b: matr;
n,m,i,j,p,q:integer;
implementation

{$R *.lfm}

{ TForm1 }


procedure TForm1.Button1Click(Sender: TObject);
procedure vvod(var A:matr;n,m:integer);
begin
for i:=0 to n do
for j:=0 to m do
A[i,j]:=StrToInt(StringGrid1.Cells[j,i]);
p:=m;
end;

procedure vyvod(B:matr;p,n:integer);
begin
for i:=0 to n do
for j:=0 to p do
StringGrid2.Cells[j,i]:=IntToStr(B[i,j]);
end;

begin
n:=StrToInt(Edit1.Text);
m:=StrToInt(Edit2.Text);
vvod(A,n,m);

case RadioGroup1.ItemIndex of
0: Zam(A,B,n,m);
1: Vst(A,B,n,m);
2: Del(A,B,n,m);
3: Pom(A,B,n,m);
end;

StringGrid2.RowCount:=n;
StringGrid2.ColCount:=p;

vyvod(B,n,p);
end;


procedure TForm1.Button2Click(Sender: TObject); //Очистка
begin
  for i:=0 to n do
  for j:=0 to m do
  StringGrid1.Cells[i,j]:=' ';

  for i:=0 to n do
  for j:=0 to p do
  StringGrid2.Cells[i,j]:=' ';

  Edit1.Clear;
  Edit2.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);   // формирую матрицу
begin
  n:=StrToInt(Edit1.Text);
  m:=StrToInt(Edit2.Text);
  StringGrid1.RowCount:=n;
  StringGrid1.ColCount:=m;


end;

end.
Текст модуля:
Код:
unit modul;

{$mode objfpc}{$H+}

interface


uses
  Classes, SysUtils;
  type

Matr=Array[1..100,1..100] of integer;
  Procedure Zam(var A: Matr; B: Matr; n,m:integer);
  Procedure Pom(var A: Matr; B: Matr; n,m:integer);
  Procedure Vst(var A: Matr; B: Matr; n,m:integer);
  Procedure Del(var A: Matr; B: Matr; n,m:integer);


implementation

 Procedure Zam(var A: Matr; B: Matr; n,m:integer);
 var i,j,p:integer;
 begin
 p:=m;
 for i:=1 to n do begin
for j:=1 to p do begin

    if A[i,j] mod 3=0 then
  A[i,j]:=0;
  end;
 end;
    for i:=1 to n do
    for j:=1 to p do
    B[i,j]:=A[i,j];

  end;

   Procedure Pom(var A: Matr; B: Matr; n,m:integer);
 var i,j,k,p:integer;
   begin
   p:=m;
   for i:=1 to n do begin
k:=a[i,3];
A[i,3]:=A[i,m];
A[i,m]:=k;
end;
       for i:=1 to n do
    for j:=1 to p do
    B[i,j]:=A[i,j];
   end;

   procedure Vst(var A:matr; B: Matr; n,m:integer);
   var  i,j,k,p:integer;
     begin
     p:=m;
k:=1;

while j<=(p-1)*2+1 do begin
for i:=n downto 1 do
  for j:=p+1 downto k*2+1 do begin
    a[i,j+1]:=a[i,j];
  a[i,j]:=a[i,1];
  end;
p:=p+1;
k:=k+1;
end;
for i:=1 to n do
for j:=1 to p do
B[i,j]:=A[i,j];
     end;


   Procedure Del(var A: Matr; B: Matr; n,m:integer);
   var  i,j,k,p,st: integer;
     c:array[1..100] of integer;
     t:array[1..100] of integer;
     begin

     p:=m+1;
st:=1;

for i:=1 to n do
for j:=1 to m do
if (a[i,j] mod 5)=0 then begin
t[st]:=j;
p:=p-1;
st:=st+1;
end;

for st:=1 to m do
for k:=1 to n do
for i:=1 to n do
for j:=1 to m do
if j=t[st] then a[i,j]:=0;


for k:=1 to n do
for i:=1 to n do
for j:=1 to m-1 do
if a[i,j]=0 then begin
c[k]:=A[i,j] ;
A[i,j]:=A[i,j+1];
A[i,j+1]:=c[k];
end;
for i:=1 to n do
for j:=1 to p do
B[i,j]:=A[i,j];
      end;
end.
Изображения
Тип файла: jpg Безымянный.jpg (10.5 Кб, 42 просмотров)
Margaret98 вне форума Ответить с цитированием
Старый 19.05.2020, 19:34   #2
Viktor61
Пользователь
 
Регистрация: 05.05.2018
Сообщений: 24
По умолчанию

Margaret98, ошибка на изображении означает, что в каком-то из StringGrid'ов Вы "выскочили" за диапазон (рискну предположить, что Вы не учли, что нумерация в Cell как Col (колонок), так и Row (строка) начинается с 0). Т.е. обычно for i:=0 to RowCount-1 do …
Посмотрите внимательнее код...
Вероятно,


Цитата:
Сообщение от Margaret98 Посмотреть сообщение
procedure vyvod(B:matr;p,n:integer);
begin
for i:=0 to n do
for j:=0 to p do
StringGrid2.Cells[j,i]:=IntToStr(B[i,j]);
end;
некорректно из-за

Цитата:
Сообщение от Margaret98 Посмотреть сообщение
StringGrid2.RowCount:=n;
StringGrid2.ColCount:=p;
Viktor61 вне форума Ответить с цитированием
Старый 20.05.2020, 00:50   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 14,762
По умолчанию

Скорее всего должно быть так:
Код:
for i:=0 to n-1 do
for j:=0 to p-1 do
StringGrid2.Cells[j,i]:=IntToStr(B[i,j]);
А еще есть подозрение, что тут перепутаны индексы:
Код:
  for i:=0 to n do
  for j:=0 to p do
  StringGrid2.Cells[i,j]:=' ';
Arigato вне форума Ответить с цитированием
Старый 20.05.2020, 13:52   #4
Margaret98
Новичок
Джуниор
 
Регистрация: 18.05.2020
Сообщений: 3
По умолчанию

Viktor61, Спасибо! Не учла этого.
Margaret98 вне форума Ответить с цитированием
Старый 20.05.2020, 13:52   #5
Margaret98
Новичок
Джуниор
 
Регистрация: 18.05.2020
Сообщений: 3
По умолчанию

Arigato, Спасибо!
Margaret98 вне форума Ответить с цитированием
Старый 25.05.2020, 12:31   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 2,510
По умолчанию

Чтоб не плодить лишних тем, а вопрос аналогичный - рискну сюда (ТС не против ?)
Я - дельфист со стажем, а вот с Лазарусом что-то туго. Вот простую прогу накидал - ругается
begin expected but end of file found. Мож что простое - а не вижу.
Попутно: есть ли в Лаз. что-то аналогичное дельфийскому Format для красивого вывода? Шарил по описаниям - но там кроме 100500 раз про фриварность Лаз. и прочей воды - существа мало. Нашёл. Есть формат.
Про хелп я вообще умалчиваю, бо об ём слова только нецензурные. Это - плата за халяву? "Дарёному коню ..."
Код:
unit Unit1;

{$mode objfpc}{$H+}
//{$MODE DELPHIS}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormClick(Sender: TObject);
  private

  public

  end;
var
  Form1: TForm1;
  A: array [1..120] of integer ;
  azat: array [1..5] of integer = (62,68,72,78,85) ;
  apro: array [1..5] of integer = (500,600,700,450,1000) ;
  anal: array [1..5] of integer = (12000,6000,3000,1500,500) ;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormClick(Sender: TObject);
var i,j: integer ;

function t1_5(arg:integer):Boolean ;
var i1,i2,i3,i4,i5,tmp: integer ; b: boolean ;
begin
  i1 := arg div 10000 ; tmp := arg - i1*10000 ;
  i2 := tmp div 1000 ; tmp := tmp - i2*1000 ;
  i3 := tmp div 100 ; tmp := tmp - i3*100 ;
  i4 := tmp div 10 ; i5 := tmp - i4*10 ;
  b := (i1 in [1..5]) and (i2 in [1..5]) and (i3 in [1..5]) and (i4 in [1..5])
    and (i5 in [1..5]) ;
  b := b and (i1<>i2) and (i1<>i3) and (i1<>i4) and (i1<>i5) ;
  b := b and (i2<>i3) and (i2<>i4) and (i2<>i5) ;
  Result := b and (i4<>i3) and (i5<>i4) and (i3<>i5)
end;

begin
  j := 0 ;
  for i := 12345 to 54321 do
     if t1_5(i) then
       begin
         Inc (j) ; A[j] := i ;
         Memo1.Lines.Add(IntToStr(i))
       end ;
  Memo1.Lines.Add('==' + IntToStr(j));
end;

end.

Последний раз редактировалось digitalis; 25.05.2020 в 19:51.
digitalis вне форума Ответить с цитированием
Старый 28.05.2020, 15:50   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 2,510
По умолчанию

Видно, мало кто с Лазарем работает. Вопрос как-то рассосался сам собой, всё журчит. Тему можно закрывать.
digitalis вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с модулями с модулями DesignIntf и DesignEditors. Где найти их dcu? DrAndriy Общие вопросы Delphi 13 22.12.2017 20:55
Работа с модулями в Дельфи Killan Помощь студентам 1 20.05.2014 12:07
Работа с записями и модулями (pascal) L@ris@ Помощь студентам 0 23.05.2012 17:19
работа с модулями(паскаль) прошу ответить jamkca Помощь студентам 9 14.05.2012 09:58
работа с модулями denis_stell Паскаль, Turbo Pascal, PascalABC.NET 0 17.05.2010 17:57


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS