Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 07.06.2012, 22:23   #1 (permalink)
allzorro
Новичок
 
Регистрация: 07.06.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Паскаль. Подскажите в чем ошибка ?

программа не запускается .. подскажите в чем ошибка

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

Старый 07.06.2012, 22:23
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Аналогичные топики, которые своим содержанием должны быть вам полезны

Паскаль с массивами, ошибка
Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл
Подскажите, где ошибка
Паскаль АВС

Старый 08.06.2012, 07:09   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Три вопроса навскидку, без анализа программы:
1) Кто вас так учил писать процедуры и где основная часть программы?
2) На компьютере присутствует диск D?
2) Зачем вы два раз связываете файловую переменную с одним и тем же именем файла, причем, не закрыв его предварительно?
AlexZir на форуме   Ответить с цитированием
Старый 08.06.2012, 11:08   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну а я проанализировал это дело и даже отладил.
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 29.06.2012, 02:31   #4 (permalink)
allzorro
Новичок
 
Регистрация: 07.06.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо народ за ответ .. за жуткий стиль извиняюсь .. копировал из методички ..
allzorro вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:50.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.