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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2012, 21:15   #1
Naposaram
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 52
По умолчанию Типизированные файлы запись\ чтение\ меню

Всем привет. Ну народ помогите. Решил пока на каждый пункт меню сделать отдельную программу а потом соеденить все вместе... так вот с низу код когда ввожу данные по первому студенту программа заканчивает работать и ниче не записывает в чем ошибка?

п.с. пользуюсь free pascal т.к. винда 7 х 64.

Код:
program zapis;
type rez = record
        fio: string [20];
        him: integer;
        mat: integer;
        inf: integer;
end;
var rezult: rez;
    k,x: longint;
    n: longint;
    fp: file of rez;
begin
 {$I-} {$R-}
    assign (fp, 'D:\rez.dat');
    writeln ('введите количество студентов');
    readln (x);
     n:=0;
     for k:= 1 to x do begin
      writeln ('введите данные студента*');
      writeln ('фамилия:'); readln (rezult.fio);
      writeln (введите оценки по предметам по пяти бальной шкале');
      writeln ('химия:'); readln (rezult.him);
      writeln ('математика:'); readln (rezult.mat);
      writeln ('информатика:'); readln (rezult.inf);
     seek (fp,n);
     write (fp,rezult);
     n:=n+1;
     end;
    close (fp);
readln;
end.
Условие:
Цитата:
Выполнить программу, включающую меню следующего содержания:
• Формирование файла записей.
• Чтение записей из файла.
• Добавление записей в файл.
• Выборка записей из файла.
Сама задача:
Цитата:
Составить программу для обработки списка студенческой группы, в котором записаны фамилия студента, результаты экзаменов по химии, математике и информатике. Определить списки студентов, кто не будет получать стипендию (у кого есть тройки), кто будет получать обычную стипендию (менее 50% отличных оценок) и повышенную стипендию (более 50% отличных оценок).
Naposaram вне форума Ответить с цитированием
Старый 19.03.2012, 21:26   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Во первых надо использовать Rewrite
Во-вторых перемещать курсор по фалу при записи не надо! Он сам передвигается!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 19.03.2012, 23:32   #3
O m n i s
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 64
По умолчанию

Ого! Николай проснулся
O m n i s вне форума Ответить с цитированием
Старый 19.03.2012, 23:47   #4
Naposaram
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
Во первых надо использовать Rewrite
это заместо write (fp,rezult); ?

но все равно после первого введеного программа закрыватеся
Naposaram вне форума Ответить с цитированием
Старый 19.03.2012, 23:49   #5
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Нет! Это в дополнение!
Это значит что файл для записи откроем!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 20.03.2012, 00:00   #6
Naposaram
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
Нет! Это в дополнение!
Это значит что файл для записи откроем!
все понял надо после этого прописать

Код:
 assign (fp, 'D:\rez.dat');
rewrite (fp);
ну пока работает че то пишет =)
Naposaram вне форума Ответить с цитированием
Старый 20.03.2012, 00:06   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, соглашусь с Hacker19_90 - скорее всего файл 'D:\rez.dat' не существует.
Поэтому его надо создать (перезаписать).

а во-вторых, лучше не отключать обработку ошибок (убрать из программы директивы {$I-} и {$R-} ) особенно. если не понимаешь, что эти директивы делают!


примерно так ваша программа может выглядеть
Код:
program zapis;
type rez = record
        fio: string [20];
        him: integer;
        mat: integer;
        inf: integer;
end;
var rezult: rez;
    i,x: longint;
    fp: file of rez;
begin
    assign (fp, 'D:\rez.dat');
    rewrite(fp);
    writeln ('введите количество студентов');
    readln (x);
    for i:= 1 to x do begin
      writeln ('введите данные ',i,'-го студента *');
      writeln ('фамилия:'); readln (rezult.fio);
      writeln (введите оценки по предметам по пяти бальной шкале');
      writeln ('химия:'); readln (rezult.him);
      writeln ('математика:'); readln (rezult.mat);
      writeln ('информатика:'); readln (rezult.inf);
      write (fp,rezult);
     end;
    close (fp);
  WriteLn('Файл успешно создан.');
  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.03.2012, 00:06   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

БИНГО! Молодец! +1 к навыку научного тыка! хехе
Seek убрали?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 20.03.2012, 00:10   #9
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
а во-вторых, лучше не отключать обработку ошибок (убрать из программы директивы {$I-} и {$R-} )
рискну показать как это можно использовать
Код:
Assign(f, namefile);
{$I-}
Reset(f)
if IOResult <> 0 then
begin
    Writeln ('Файла нельзя открыть для чтения или его просто нет');
    Rewrite (f);
end
else 
begin
    Writeln ('Такой файл есть значит будем дополнять');
    Append(f);
end;
{$I+}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 20.03.2012, 18:21   #10
Naposaram
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

примерно так ваша программа может выглядеть
Код:
program zapis;
type rez = record
        fio: string [20];
        him: integer;
        mat: integer;
        inf: integer;
end;
var rezult: rez;
    i,x: longint;
    fp: file of rez;
begin
    assign (fp, 'D:\rez.dat');
    rewrite(fp);
    writeln ('введите количество студентов');
    readln (x);
    for i:= 1 to x do begin
      writeln ('введите данные ',i,'-го студента *');
      writeln ('фамилия:'); readln (rezult.fio);
      writeln (введите оценки по предметам по пяти бальной шкале');
      writeln ('химия:'); readln (rezult.him);
      writeln ('математика:'); readln (rezult.mat);
      writeln ('информатика:'); readln (rezult.inf);
      write (fp,rezult);
     end;
    close (fp);
  WriteLn('Файл успешно создан.');
  readln;
end.
пробовал так, начинает ругаться на
Код:
 write (fp,rezult);
пишет "Incompatible type for arg no. 2: Got "rez", expected" что то ему не нравится в типе
Naposaram вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Типизированные файлы. Чтение sz строки. Человек_Борща Общие вопросы Delphi 2 09.03.2012 21:26
Очень нужно сделать задачу в Delphi(Типизированные файлы. файлы записи) Vitalik1 Помощь студентам 1 16.12.2011 10:38
Чтение/запись объектов классов из/в бинарные файлы Гром Общие вопросы C/C++ 9 18.05.2010 22:20
Файлы: запись/чтение Proger_1 БД в Delphi 0 30.04.2010 00:36
VC++ файлы(чтение\запись) ("")(Э_Є)("") Общие вопросы C/C++ 3 16.06.2009 14:05