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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2008, 20:38   #1
Kirill90
Новичок
Джуниор
 
Регистрация: 06.07.2008
Сообщений: 2
По умолчанию Помогите определить, в чем ошибка!

Код:
Program FAIL;
uses Dos, crt;
type
univer=record
 surname,otdel,dolg:string;
 god, stag,oklad: integer;
end;
var
 year,month,date,dow:word;
 a:array[1..50] of univer;
 i:integer;
 n:integer;
 f1:text;
 filename:string;
Procedure Fail1;
begin
 clrscr;
 writeln('Number of records?');
 readln(n);
 writeln('Name of created fail?');
 readln(filename);
 for i:=1 to n do
  begin
   with a[i] do
    begin
     writeln('Surname of employee?');
     readln(surname);
     writeln('Name of departament?');
     readln(otdel);
     writeln('year of birth?');
     readln(god);
     writeln('experience?');
     readln(stag);
     writeln('post?');
     readln(dolg);
     writeln('salary?');
     readln(oklad);
    end;
  end;
 assign(f1,filename+'.txt');
 rewrite(f1);
 writeln(f1,'|  Employee   |  Departament  |  Year of birth  |  Stag   |   Dolgnost  |   oklad   |');
 writeln(f1,'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
 for i:=1 to n do
  begin
   with a[i] do
    begin
 writeln(f1,' ',surname:8,' ',otdel:15,' ',god:15,' ',stag:12,' ',dolg:13,' ',Oklad:12);
    end;
  end;
 close(f1);
end;


Procedure Fail2;
var g1:text;
i2, imax:integer;
a2:array[1..40] of univer;
begin
 clrscr;
 GetDate(year,month,date,dow);
 Writeln('Current year: ', year:0);
 writeln('Name of Fail? ');
 readln(filename);
 assign(f1,filename+'.txt');
 assign(g1,'OutPut.txt');
 rewrite(g1);
 reset(f1);
 while not eof(f1) do
  begin
   i:=i+1;
   read(f1,a[i]);
   if (year-a[i].god)>40 then begin
      i2:=i2+1;
      a2[i2]:=a[i];
   end;
  imax:=i2;
  writeln(f1,'|  Employee   |  Departament  |  Year of birth  |  Stag   |   Dolgnost  |   oklad   |');
  writeln(f1,'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
  for i2:=1 to imax do
   begin
    with a2[i2] do
     begin
      writeln(g1,' ',surname:8,' ',otdel:15,' ',god:15,' ',stag:12,' ',dolg:13,' ',Oklad:12);
     end;
   end;
end;

begin
 fail1;
 fail2;
 readln;
end.
Вот код программы. Скажите пожалуйста, в чем косяк в строчке во второй процедуре:
i:=i+1;
read(f1,a[i]); {Вот здесь Паскаль ругается} ??
Kirill90 вне форума Ответить с цитированием
Старый 06.07.2008, 20:50   #2
Makarov
Форумчанин
 
Аватар для Makarov
 
Регистрация: 03.01.2008
Сообщений: 102
По умолчанию

Если я не ошибаюсь то считать из текстового файла переменную такого типа нельзя. Можно считывать только строку.
Теория без практики мертва и бесплодна, практика без теории невозможна и пагубна.
Makarov вне форума Ответить с цитированием
Старый 06.07.2008, 22:22   #3
Акашаев Нурлан
Пользователь
 
Регистрация: 02.05.2007
Сообщений: 53
По умолчанию

А что за ошибка хоть? Если ошибка в названии файла, то измени filename:=filename+'.txt';
А может он затрудняется считать твой univer?(ТОЧНО НЕ ЗНАЮ, С ЗАПИСЯМИ НИКОГДА НЕ РАБОТАЛ-ГАРАНТИИ НЕТУ)
Акашаев Нурлан вне форума Ответить с цитированием
Старый 06.07.2008, 22:24   #4
Акашаев Нурлан
Пользователь
 
Регистрация: 02.05.2007
Сообщений: 53
По умолчанию

Чувак, я проверил - Я ОКАЗАЛСЯ ПРАВ! ОН НЕ ЧИТАЕТ RECORD. ПРОВЕРЯЛ ВО FP
Акашаев Нурлан вне форума Ответить с цитированием
Старый 06.07.2008, 22:24   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Да нет, это просто пагубные последствия использования глобальных переменных ;-(
чему равно i в момент вызова процедуры fail2 ??
думаю, что n ...
сделайте присвоение 0 в i перед циклом чтения:
Код:
 reset(f1);
 i:=0; 
 while not eof(f1) do

перед циклом
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.07.2008, 22:28   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Акашаев Нурлан
Чувак, я проверил - Я ОКАЗАЛСЯ ПРАВ! ОН НЕ ЧИТАЕТ RECORD.
оп-с... и это то же. Pascal с удовольствием пишет и читает записи типа record, но, разумеется, из типизированного файла, а не из текстового,как это объявлено!!!
т.е. надо вместо
f1:text надо написать f1:file of univer
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.07.2008, 22:33   #7
Акашаев Нурлан
Пользователь
 
Регистрация: 02.05.2007
Сообщений: 53
По умолчанию

Про твою первую ошибку он сказал бы когда он уже компилил программу, Serge_Bliznykov, и вылетел бы нафиг. А вот про file of univer первый раз слышу. Наверное я - отсталый человек.
Акашаев Нурлан вне форума Ответить с цитированием
Старый 06.07.2008, 22:43   #8
Kirill90
Новичок
Джуниор
 
Регистрация: 06.07.2008
Сообщений: 2
По умолчанию

Ребята, прикол в том, что если объявить файловую переменную как f1:file of univer, то прога тож не работает!

А про глобальные переменные, да, мой косяк- че то не подумал!

И если файл типизированный, то не получается создать шапку как бы таблицы в файле!

Последний раз редактировалось Alex21; 07.07.2008 в 17:06. Причина: подряд больше 2х не постить!
Kirill90 вне форума Ответить с цитированием
Старый 06.07.2008, 22:49   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Похоже программа склеена из двух кусков разных программ, поэтому с файлами сплошная неразбериха. При чем здесь модуль DOS?.
Короче выкладывай полное условие задачи, завтра будем разбираться.
puporev вне форума Ответить с цитированием
Старый 06.07.2008, 23:38   #10
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
А вот про file of univer первый раз слышу. Наверное я - отсталый человек.
похоже, типизированные файла - это "классика"

Цитата:
И если файл типизированный, то не получается создать шапку как бы таблицы в файле!
Если вам обязательно данные хранить в виде таблицы, то читать данные будет не удбоно, и конечно же не так просто. Придётся читать всю строку, парсить её (вырезать часть, присваивать отдельной переменной).
Решайте: типизированные или текстовые файлы.
Конечно же типизированные файлы вы в блокноте не прочитаете, увидите абракадабру.
zetrix вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите определить ip адрес при http соединении Валерий Работа с сетью в Delphi 4 26.10.2010 13:01
Помогите определить метод двухстороннего шифрования Esuol Общие вопросы Delphi 7 21.06.2010 10:53
Помогите определить скрипт Антон171 JavaScript, Ajax 1 03.10.2008 18:15
Среди 20 введёных чисел определить чётные, распечатать их, определить min Spade Помощь студентам 4 15.06.2008 18:39
Помогите определить макс кол цветов картинки 32x32 пикс объёмом 512 байт www_2008 Паскаль, Turbo Pascal, PascalABC.NET 4 13.05.2008 20:25