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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2011, 23:11   #1
Broken Angel
Пользователь
 
Регистрация: 31.12.2010
Сообщений: 14
Восклицание Delphi. Одномерный массив.

Прошу помочь!
Написала программу по подсчету в одномерном массиве целочисленных элементов количества элементов, не кратных задающемуся пользователем числу Т. Вот только при запуске появляется ошибка одна (project1.exe raised exception class EConvertError with message "), а когда убираю showmessage - уже другая (" is not a valid integer value).
Подскажите, пожалуйста, где ошибка, или по возможности исправьте ее.
Код:
unit Unit9;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
type
  TForm9 = class(TForm)
    Label2: TLabel;
    Button1: TButton;
    StringGrid1: TStringGrid;
    Button2: TButton;
    Button3: TButton;
    Edit2: TEdit;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form9: TForm9;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm9.Button1Click(Sender: TObject);
begin
Form9.Close;
Form2.Show;
end;
procedure TForm9.Button2Click(Sender: TObject);
var
    a:array of array of integer;
    r,l,i,j,p:integer;
begin
Edit1.Clear;
for i:=1 to StringGrid1.ColCount do
    for j:=0 to StringGrid1.RowCount do
r:=2+random(10);
StringGrid1.ColCount:=r;
StringGrid1.RowCount:=2;
l:=StringGrid1.RowCount;
for i:=1 to l do
for j:=0 to r do
StringGrid1.Cells[j,i]:=IntToStr(random(10));
for j:=0 to StringGrid1.ColCount-1 do
begin
StringGrid1.Cells[j,0]:=IntToStr(j+1);
end;
i:=1;
for j:=0 to StringGrid1.ColCount-1 do
Edit1.Text:=Edit1.Text+StringGrid1.Cells[j,i]+' ';
end;
procedure TForm9.Button3Click(Sender: TObject);
var
   i,n,x,kol,T:integer;
   str:string;
begin
str:=Edit1.Text;
   for i:=1 to Length(str)+1 do
   begin
   T:=StrToInt(Edit2.Text);
   n:=2*i-1;
   x:=StrToInt(str[n]);
   if x mod T >0 then
   kol:=kol+1;
   end;
   ShowMessage('Количество не кратных Т элементов: '+IntToStr(kol));
end;
end.
Вопрос еще не решен!

Последний раз редактировалось Broken Angel; 09.04.2011 в 00:05.
Broken Angel вне форума Ответить с цитированием
Старый 08.04.2011, 23:34   #2
Наки
Пользователь
 
Аватар для Наки
 
Регистрация: 03.11.2010
Сообщений: 24
По умолчанию

Ошибка может возникать из-за того, что был объявлен динамический массив a: array of array of integer; , а его длина не установлена. Когда работаешь с динамическими массивами, рекомендуется сначала установить его длину через процедуру SetLength.

SetLength(a, n) - для одномерного;
SetLength(a, n, m) - для двумерного.
Я не волшебница, я только учусь
Наки вне форума Ответить с цитированием
Старый 09.04.2011, 00:04   #3
Broken Angel
Пользователь
 
Регистрация: 31.12.2010
Сообщений: 14
Вопрос Зачем??

Если честно, там этот массив вообще ни к чему. Я его просто забыла удалить.
А SetLength обычно используется для выделения динамической памяти для массива, разве не так? Отсюда вывод: зачем мне динамическая память, если вычисления идут через Edit, а не StringGrid???
Короче, вопрос еще не решен. Требуется помощь.
Broken Angel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
одномерный массив в delphi d3[Z.oRg] Помощь студентам 7 18.06.2011 15:04
одномерный массив delphi sofiya Помощь студентам 4 20.02.2011 13:47
одномерный массив в delphi viper92 Помощь студентам 5 14.12.2010 21:36
Одномерный массив (Delphi) Estel Помощь студентам 4 29.05.2010 11:55
Delphi: Одномерный массив Sorinka Помощь студентам 3 28.04.2009 22:19