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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2009, 19:37   #1
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию Delphi динамика

Здраствуйте дорогие форумчанины.... Возник вопрос...
Есть два вида списка. Они сделаны как массив. Как сделать эти массивы динамическими? Я вот набрасала код, но он не работает. Выдает ошибку Incompatible types в строке
Код:
SetLength(ATC,temp+1);
не могли бы вы мне помочь....
Вот кусок кода:
Код:
 Type
  TATC=record
    data: string[40];			// дата
    numbers: array[1..2] of int64;		//массив номеров
    tariff : extended; 			// тариф
    time:integer;               //время разговора
    cityname:string[40];    //название города
    citycode:word;
  end;

 Type
  TATC2=record
    tariff : extended; 			// тариф
    time:integer;               //время разговора
    cityname:string[40];    //название города
  end;

Var
  Fz  : file of  TATC;		// Файл типа запись
  Ft  : TextFile;			// Текстовой файл
  ATC : array of TATC;	// Массив записей
  nzap : integer;			// Номер записи
  FileNameZ, FileNameT : string; 	// Имя файла
  summa:extended;
  ATC2 : array of TATC2;
var
  Form3: TForm3;

implementation

{$R *.dfm}



procedure TForm3.stuftClick(Sender: TObject);
begin
    nzap:=nzap+1;
  with ATC[nzap] do begin
           data:=DataSpeak.Text;
           numbers[1]:=StrToInt(NumberTel1.Text);
           numbers[2]:=StrToInt(NumberTel2.Text);
           citycode:=StrToInt(CodeTown.Text);
           cityname:=NameTown.Text;
           time:=StrToInt(TimeSpeak.Text);
           tariff:=StrToFloat(Tarif.Text);
  OutputData.Lines.Add(data+'  '+IntToStr(numbers[1])+'  '+ IntToStr(numbers[2])+'   '+IntToStr(citycode)+'   '+cityname+'     '+IntToStr(time)+'    '+FloatToStr(tariff));
   //summa
  end;
     Write(fz,ATC[nzap]);					// Запись в файл
   DataSpeak.Text:='';
   CodeTown.Text:='';
   NameTown.Text:='';
   TimeSpeak.Text:='';
   Tarif.Text:='';
   NumberTel1.Text:='';
   NumberTel2.Text:='';

end;
procedure AlocDinamycs( var ATC:TATC; var TAC2:TATC2 );
var
  temp:integer;
begin
  temp:=0;
  while not eof(fz) do
     inc(temp);
  SetLength(ATC,temp+1);
  SetLength(ATC2,temp+1);
end;
tanek вне форума Ответить с цитированием
Старый 18.10.2009, 19:41   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
  while not eof(fz) do
     inc(temp);
А что здесь получается? Не бесконечный цикл? Вы ж файл дальше не листаете, на одной и той же строке сидите.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 18.10.2009, 19:50   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Код:
( var ATC:TATC; var TAC2:TATC2 );
- вы задаете atc как запись, но устанавливаете размер как для массива
Код:
SetLength(ATC,temp+1);
как понимаю -procedure AlocDinamycs вызывается один раз для задания размера, уберите вообще - ( var ATC:TATC; var TAC2:TATC2 )
...тем более что у вас объявлен глобальный-> ATC : array of TATC;// Массив записей
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 18.10.2009 в 19:53.
raxp вне форума Ответить с цитированием
Старый 18.10.2009, 19:52   #4
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Alex Cones здесь в данном случае переменная fz является глобальной и когда вызываетя процедура выделения динамики, то переменная fz уже связана с файлом. поэтому цикл будет не бесконечен

огромное спасибо... она заработала)))))

Alex Cones вы были правы она идет в бесконечный цикл.....
а как исправить?

Последний раз редактировалось Stilet; 19.10.2009 в 09:10.
tanek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамика. Выручайте Sined121 Паскаль, Turbo Pascal, PascalABC.NET 3 06.05.2009 10:30
Динамика Pascal bpystep Помощь студентам 1 31.03.2009 19:39
Динамика Pascal bpystep Помощь студентам 5 25.03.2009 22:24
Задача (динамика) Witaliy Помощь студентам 3 06.03.2009 19:03