Ну а я проанализировал это дело и даже отладил.
1. Насчет отсутствия основной части программы - согласен.
2. Насчет диска D - ну есть, вероятно.
3. Да нет, с файлом более-менее, если не считать... но об этом ниже. Закрытие там есть, а переобъявление связи - это не ошибка, просто низкая культура программирования. Равно как и писание капсами (брр...р) и всаживание кучи пробелов. Последнее, кстати, в одном месте приводит к ошибке.
Из замеченных и исправленных мною ошибок:
1. Введена отсутствующая основная часть программы.
2. Поскольку запись, файловая переменная и др. используются несколькими процедурами, то эти типы и переменные должны быть описаны в общей части. Описание их в теле только одной из процедур НЕДОПУСТИМО.
3. В операторе ASSIGN ( F, ' D:\TELEFON.txt' ); пробел перед именем диска (D) НЕДОПУСТИМ: приводит к ошибке.
4. В строке WHILE NOT EOF ( G ) DO { ПОКА ФАЙЛ НЕ ЗАКОНЧИЛСЯ } неверно указано имя файловой переменной: нужно F, а не G.
5. Завершение процедуры оператором END. НЕДОПУСТИМО: для этого используется ТОЛЬКО оператор END; (точка с запятой, а не точка). Оператор END. завершает программу, а не процедуру.
Еще некоторые поправки "для блезиру":
1. При вводе данных и записи в файл использование массива избыточно: достаточно одной простой переменной объявленного типа. Исправлено.
2. Добавлен ввод числа абонентов (N).
3. Добавлена процедура WRITING, позволяющая проконтролировать правильность считывания данных из файла путем вывода на экран.
Жуткий, ужасный, кошмарный, безумный, отвратительный стиль автора по возможности соблюден.
Вот:
Код:
TYPE SPRAF = RECORD
FAM : STRING [ 15 ];
ADRESS : STRING [ 40 ];
TEL : 100000 .. 999999;
END;
VAR
F : file of SPRAF;
NAROD : array [ 1..100] of SPRAF;
N : BYTE;
PROCEDURE VVOD;
VAR
NRD : SPRAF;
I :INTEGER;
BEGIN
{ ВВОД ДАННЫХ }
FOR I := 1 TO N DO
WITH NRD DO
BEGIN
WRITELN ( I );
WRITELN ( ' vvedite familiu: ' );
READLN ( FAM );
WRITELN ( 'vvedite adres: ' );
READLN ( ADRESS );
WRITELN ( 'vvedite telefon: ' );
READLN ( TEL );
WRITE ( F, NRD);
END;
END;
PROCEDURE READING;
VAR
G :INTEGER;
BEGIN
G:= 0; { НОМЕР СТРОКИ }
WHILE NOT EOF ( F ) DO { ПОКА ФАЙЛ НЕ ЗАКОНЧИЛСЯ }
BEGIN
INC ( G); { УВЕЛИЧИТЬ НОМЕР СТРОКИ НА 1 }
READ ( F, NAROD [ G ] ); { ЧИТАТЬ ИЗ ФАЙЛА СТРОКУ ЗАПИСИ № G}
END;
END;
PROCEDURE WRITING;
VAR
J :INTEGER;
BEGIN
FOR J:=1 TO N DO
WITH NAROD [ J ] DO
WRITELN (J:2,' ',FAM,' ',ADRESS,' ',TEL);
END;
BEGIN
WRITE ('N = ');
READLN ( N );
ASSIGN ( F, 'D:\TELEFON.txt' );
REWRITE ( F );
VVOD;
CLOSE ( F );
WRITELN;
RESET(F);
READING;
WRITING;
READLN
END.