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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.11.2013, 14:35   #1
orandzheviyman
Пользователь
 
Регистрация: 11.11.2013
Сообщений: 74
По умолчанию Помогите найти ошибки

Код:
CONST MAXbook=100; {Максимально возможное число книг}
TYPE Tbook=record {данные книги}
     surname:string [20]; {фамилия автора}
     bookname: string [50]; {название книги}
     year:longint; {год выпуска}
     genre:string [30]; {жанр}
       end;
     Tallbook=array [1..MAXbook] of Tbook;
VAR MASbook:Tallbook; {массив с данными о книгах}
    knigi:Tallbook;
    f:Text;
    fname:string [30];
    N:integer; {фактическое число книг}
    M:integer; {для работы с меню}
    i:integer; {счётчик}
    count:char; {y - продолжить ввод}
    tmp:Tbook; {ввод об одной книге}
    Q:longint;
    
PROCEDURE Poisk (f:Text; var Q:longint);
 Begin
  assign (f, fname);
  reset (f);
   while not eof (f) do
     begin
      with knigi [i] do begin
      readln (f, surname, bookname, year, genre);
      i:=i+1;
        if year=Q then
         writeln (surname:10,bookname:10);
         end;
      end;
 end;

BEGIN
 writeln (' "программа учёта книг" ');
 writeln ('1 - создать файл');
 writeln ('2 - открыть файл');
 writeln ('3 - выход');
  m:=1;
 while m<>3 do {пока не выход}
 begin
   write ('введите номер пункта меню '); readln (m);
  case m of
  1:{пункт меню 1}
  begin
   write ('имя файла введите: '); readln (fname);
   assign (f, fname);
   rewrite (f);
   i:=1; count:='y';
   while count='y' do
    with tmp do
     begin
      writeln ('введите данные ', i, '-ой книги');
      writeln;
      write ('фамилия: '); readln (surname);
      write ('название: '); readln (bookname);
      write ('год:    '); readln (year);
      write ('жанр:           '); readln (genre);
      writeln (f, surname:20,bookname:50,year:4,genre:30);
       i:=i+1;
       write (продолжить ввод? (y - да, любая другая - нет)'); readln (count);
     end;
   close (f);
  end;
  2: {пункт меню 2}
  begin
   write ('введите имя файла: ');
   readln (fname);
   assign (f, fname);
   reset (f);
   i:=1;
    while not eof (f) do
     begin
      with knigi[i] do
      readln (f, surname, bookname, year, genre);
      i:=i+1;
     end;
    close (f);
   n:=i-1; {фактическое число книг}
  for i:=1 to n do
   with knigi[i] do
    writeln (surname:10,bookname:10,year:4,genre:10);
   end;
  end;
 end;
  write ('введите имя файла: '); readln (fname);
 assign (f, fname);
 reset (f);
 write ('VVEDI');
 readln (Q);
Poisk (f, Q);
END.
1 - когда записана одна книга, то выводит только фамилию, при открытии файла(2 пункт меню)
2 - когда две и более книг, то выдаёт ошибку "Ошибка ввода/вывода 106: неверный числовой формат при вводе"
3 - когда вызываю процедуру, та же ошибка, что и во втором пункте
orandzheviyman вне форума
Старый 22.11.2013, 14:41   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Код:
      readln (f, surname, bookname, year, genre);
В коде не разбирался. Но бросилось в глаза сразу. Нельзя из типизированного файла так читать. Только read, а не readln.
ZX Spectrum-128 вне форума
Старый 22.11.2013, 14:48   #3
orandzheviyman
Пользователь
 
Регистрация: 11.11.2013
Сообщений: 74
По умолчанию

Цитата:
Сообщение от ZX Spectrum-128 Посмотреть сообщение
Код:
      readln (f, surname, bookname, year, genre);
В коде не разбирался. Но бросилось в глаза сразу. Нельзя из типизированного файла так читать. Только read, а не readln.
Исправил, всё то же самое.
orandzheviyman вне форума
Старый 22.11.2013, 14:50   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Скажите мне только одно - зачем вы используете текстовый файл при работе с записями?
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума
Старый 22.11.2013, 14:50   #5
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

И в процедуре тоже?

Цитата:
Скажите мне только одно - зачем вы используете текстовый файл при работе с записями?
А вот такое мне даже и в голову не пришло.

Последний раз редактировалось Stilet; 23.11.2013 в 13:22.
ZX Spectrum-128 вне форума
Старый 22.11.2013, 15:21   #6
Unique_Maks
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 89
По умолчанию

думаю что автор прост надыбал где-то код, а разбираться в нем сюда пришел
Unique_Maks вне форума
Старый 22.11.2013, 15:26   #7
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Похоже, что так.
Более-менее похожее нашел и надо подогнать под свою задачу.
Автор темы, вы не могли бы указать точно задание, которое вы от преподавателя получили?
ZX Spectrum-128 вне форума
Старый 23.11.2013, 00:33   #8
orandzheviyman
Пользователь
 
Регистрация: 11.11.2013
Сообщений: 74
По умолчанию

Цитата:
Сообщение от ZX Spectrum-128 Посмотреть сообщение
Похоже, что так.
Более-менее похожее нашел и надо подогнать под свою задачу.
Автор темы, вы не могли бы указать точно задание, которое вы от преподавателя получили?
Нет, код сам писал. В методичке в примере решения подобной задачи использовался типизированный файл. Вот задание: 1) Работа выполняется в среде Turbo Pascal 7.0. Описание лабораторного стенда приведено в методических указаниях к лабораторной работе № 1.
2) Изучите пример программы, приведенный в разделе 1.3.
3) Получите у преподавателя номер варианта индивидуального задания на лабораторную работу. Варианты заданий приведены в таблице 1.1.
4) Создайте программу, осуществляющую формирование и обработку файла (текстового или типизированного file of record…), предназначенного для хранения информации, структура которой задана в таблице 1.1 в соответствии с номером варианта. Программа должна удовлетворять таким требованиям:
– программа должна иметь простое меню
а) формирование файла;
б) просмотр файла;
в) выход из программы;
– при выборе пункта меню «формирование файла» программа должна запрашивать ввод имени файла с клавиатуры. Также должен быть преду-смотрен ввод исходных данных с клавиатуры. Программа должна запраши-вать у пользователя подтверждение для продолжения или окончания ввода данных;
– при выборе пункта меню «просмотр файла» программа должна за-прашивать ввод имени файла с клавиатуры. В программе должен быть реа-лизован вывод содержимого файла на экран в виде таблицы. Также, должна вызываться дополнительная подпрограмма обработки файла. Подпрограм-ма должна решать задачу, указанную в последнем столбце таблицы 1.1;
– при выборе пункта меню «выход из программы» программа должна завершать работу.
Представляемый при защите отчета файл должен содержать 10 записей.
Назначение программы: список книг
Поля: фамилия автора, название книги, год выпуска, жанр
Назначение подпрограммы: вывод на экран на-званий и авторов всех книг данного года из-дания

а, нет. В примере текстовый. Я так понимаю надо типизированный?

Последний раз редактировалось Stilet; 23.11.2013 в 13:23.
orandzheviyman вне форума
Старый 23.11.2013, 09:49   #9
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Написано: текстового или типизированного. Работайте с типизированным, намного проще.
ZX Spectrum-128 вне форума
Старый 23.11.2013, 09:54   #10
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

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


Как-то так, ...
Как-то так, ...
ViktorR вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибки temnot Паскаль, Turbo Pascal, PascalABC.NET 4 04.10.2013 21:31
Помогите найти ошибки Adex Общие вопросы C/C++ 8 21.10.2009 19:32
Помогите найти ошибки Qwoort Общие вопросы C/C++ 1 26.04.2009 12:50
помогите найти причину ошибки! НиКС БД в Delphi 3 10.05.2007 15:55