Работа с файлами в паскале

Тема в разделе "Pascal and Delphi", создана пользователем Intersap, 29 ноя 2010.

  1. Intersap

    Intersap Гость

    Вот такой вопрос:
    Написать две программы.

    Первая программа должна формировать начальные ведомости про студентов и записывать их в типизированный файл.
    Вроде бы так:
    Код (Delphi):
    program lab14;
    uses crt;
    type Stud = record
    Name,Group: String;
    Data: Integer;
    Gender: String;
    end;
    Ispit1 = record
    Teormeh,Mathematica,Phisics,Geometry:Integer;
    end;
    Ispit2 = record
    Teormeh,Mathematica,Sopromat:Integer;
    end;
    var i,mat0,mat,phys0,phys,meh0,meh,geom0,geom,porivn1,porivn2,predmet: Integer;
    Student:Stud;
    Exam1:Ispit1;
    Exam2:Ispit2;
    ft: text;
    begin
    clrscr;
    writeln;
    for i:=1 to 17 do begin
    textcolor(14);
    write(i);
    textcolor(white);
    write(' ФИО студента:    ');
    readln(Student.Name);
    write(' Группа:            ');
    readln(Student.Group);
    write(' Дата рождения: ');
    readln(Student.Data);
    write(' Пол студента:    ');
    readln(Student.Gender);
    writeln(' Оценки за первую сессию:');
    write('  Физика:                           ');
    readln(Exam1.Phisics);
    write('  Математика:                    ');
    readln(Exam1.Mathematica);
    write('  Теоретическая механика:  ');
    readln(Exam1.Teormeh);
    write('  Начертательная геометрия: ');
    readln(Exam1.Geometry);
    writeln(' Оценки за вторую сессию:');
    write('  Математика:                      ');
    readln(Exam2.Mathematica);
    write('  Теоретическая механика:   ');
    readln(Exam2.Teormeh);
    write('  Сопротивление материалов: ');
    readln(Exam2.Sopromat);
    writeln;
    end;
    assign(ft,'stud.txt');
    rewrite(ft);
    for i:=1 to 17 do
    begin
    writeln(ft,i,' ФИО:               ',Student.Name);
    writeln(ft,'  Группа:          ',Student.Group);
    writeln(ft,'  Дата рождения: ',Student.Data);
    writeln(ft,'  Пол:                ',Student.Gender);
    writeln(ft,'  Оценки за первую сессию:');
    writeln(ft,'         Физика:                           ',Exam1.Phisics);
    writeln(ft,'         Математика:                    ',Exam1.Mathematica);
    writeln(ft,'         Теоретическая механика:  ',Exam1.Teormeh);
    writeln(ft,'         Начертательная геометрия: ',Exam1.Geometry);
    writeln(ft,'  Оценки за вторую сессию:');
    writeln(ft,'         Математика:                      ',Exam2.Mathematica);
    writeln(ft,'         Теоретическая механика:   ',Exam2.Teormeh);
    writeln(ft,'         Сопротивление материалов: ',Exam2.Sopromat);
    writeln;
    end;
    close(ft);
    end.
    Вторая программа должна считывать информацию с типизированного файла (созданого первой программой), находить предмет, который суденты сдали лучше всего, а результаты записывать в текстовый файл.
    Программа сделана не до конца:
    Код (Delphi):
    program lab14;
    uses crt;
    type Ispit1 = record
    Teormeh,Mathematica,Phisics,Geometry:Integer;
    end;
    var Exam1:Ispit1;
    ft: text;
    i,mat0,mat,phys0,phys,meh0,meh,geom0,geom,porivn1,porivn2,predmet:Integer;
    begin
    clrscr;
    writeln;
    assign(ft,'stud.txt');
    reset(ft);

    считать данные - ?  

    mat0:=0;
    phys0:=0;
    meh0:=0;
    geom:=0;
    for i:=1 to 17 do begin
    phys:=Exam1.Phisics;
    phys0:=phys0+phys;
    mat:=Exam1.Mathematica;
    mat0:=mat0+mat;
    meh:=Exam1.Teormeh;
    meh0:=meh0+meh;
    geom:=Exam1.Geometry;
    geom0:=geom0+geom;
    end;
    if (mat0>phys0) then porivn1:=mat0
    else porivn1:=phys0;
    if (meh0>geom0) then porivn2:=meh0
    else porivn2:=geom0;
    if (porivn1>porivn2) then predmet:=porivn1
    else predmet:=porivn2;
    if (predmet=phys0) then N:='Лучше стали физику'
    if (predmet=mat0) then N:='Лучше стали математику';
    if (predmet=meh0) then N:='Лучше стали механику';
    if (predmet=geom0) then N:='Лучше стали графику';
    writeln(ft,N);
    readkey;
    close(ft);
    end.
    Помогите чем могите
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    В первой задаче у вас используется текстовый ft: text;
    а должно быть ft: file of НужныйТип
     
  3. Intersap

    Intersap Гость

    сейчас у меня получается 3 типа, а в файле указывается ток 1. соответсвенно мне надо сделать один типа:
    Код (Delphi):
    type Stud = record
    Name,Group: String;
    Data: Integer;
    Gender: String;
    Teormeh1,Mathematica1,Phisics,Geometry,Teormeh2,Mathematica2,Sopromat:Integer;
    end;
    var Student:Stud;
    ft: file of Stud или ft: file of Student; -?
    C одним разобралить, а как во второй порграмме выцепить дынные с файла?
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Stud - это тип, Student - переменная.
    Поэтому надо
    ft: file of Stud;
    И разобраться, как с ним работать - чтение и запись в типизированный файл.
    Пример вот в конце темы: http://www.learn-programming.za.net/progra...al_learn11.html
    там не сложно. =) Только учтите, что типизированный файл - это не текстовый файл и перепишите в 1й программе
    т.е. будет в цикле write(ft, Student) для 1й или read(ft, Student) для 2й.
     
  5. Intersap

    Intersap Гость

    сделал так:
    Код (Delphi):
    program lab14;
    uses crt;
    type Stud = record
    Name,Group: String;
    Data: Integer;
    Gender: String;
    Teormeh1,Mathematica1,Phisics,Geometry:Integer;
    Teormeh2,Mathematica2,Sopromat:Integer;
    end;
    var i: Integer;
    Student:Stud;
    ft: file of Stud;
    begin
    clrscr;
    writeln;
    for i:=1 to 17 do
    with Student do
    begin
    textcolor(14);
    write(i);
    textcolor(white);
    write(' ФИО студента:    ');
    readln(Student.Name);
    write(' Группа:            ');
    readln(Student.Group);
    write(' Дата рождения: ');
    readln(Student.Data);
    write(' Пол студента:    ');
    readln(Student.Gender);
    writeln(' Оценки за первую сессию:');
    write('  Физика:                           ');
    readln(Student.Phisics);
    write('  Математика:                    ');
    readln(Student.Mathematica1);
    write('  Теоретическая механика:  ');
    readln(Student.Teormeh1);
    write('  Начертательная геометрия: ');
    readln(Student.Geometry);
    writeln(' Оценки за вторую сессию:');
    write('  Математика:                      ');
    readln(Student.Mathematica2);
    write('  Теоретическая механика:   ');
    readln(Student.Teormeh2);
    write('  Сопротивление материалов: ');
    readln(Student.Sopromat);
    writeln;
    end;
    assign(ft,'stud.txt');
    rewrite(ft);
    for i:=1 to 17 do
    with Student do
    begin
    writeln(i,' ФИО:              ',Student.Name);
    writeln('  Группа:             ',Student.Group);
    writeln('  Дата рождения: ',Student.Data);
    writeln('  Пол:               ',Student.Gender);
    writeln('  Оценки за первую сессию:');
    writeln('        Физика:                           ',Student.Phisics);
    writeln('        Математика:                    ',Student.Mathematica1);
    writeln('        Теоретическая механика:  ',Student.Teormeh1);
    writeln('        Начертательная геометрия: ',Student.Geometry);
    writeln('  Оценки за вторую сессию:');
    writeln('        Математика:                      ',Student.Mathematica2);
    writeln('        Теоретическая механика:   ',Student.Teormeh2);
    writeln('        Сопротивление материалов: ',Student.Sopromat);
    writeln;
    end;
    close(ft);
    end.
    А теперь файл создает пустой. В чем ошибка?
     
  6. BashOrgRu

    BashOrgRu Well-Known Member

    Регистрация:
    15 мар 2009
    Сообщения:
    78
    Симпатии:
    0
    Такого вида записи "writeln(' Группа: ',Student.Group);" замени на "writeln(ft,' Группа: ',Student.Group);"
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    ошибка в том, что в вашем примере вообще отсутствовала запись в файл. Вот пример:
     
  8. Intersap

    Intersap Гость

    нашли кому фразы кидать - Я НЕ ПРОГРАММИСТ - я не пойму куда его писать!!!
     
  9. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    write(ft, Student) вместо этого
    кстати, я тоже не повар, но это не значит, что я и моя семья ходим голодные =) и что я не смогу приготовить еду по простому рецепту, который я прочитаю...
    надо решить задачу? тогда либо учимся читать, что пишут и включаем немного мозг - тогда форумчане подскажут дальше, либо обращаемся в темы типа таких Пишу программы на заказ Delphi, Pascal, Perl, Sql ...

    Дальше. во второй задаче описание файловой переменной и типов точно такое же, как и в 1й.
    считывание примерно так
    Вычисления на правильность сейчас не смотрела - спать хочу =)))
    И еще есть результирующий текстовый файл t:text, куда запишете результаты как
    Высшая математика? :)
     
  10. Intersap

    Intersap Гость

    я вышку знаю лучше чем это
     
  11. acorn

    acorn PHP Developer
    Web Team

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    решил сменить тему на "у кого длиннее"? :flood:
     
  12. Intersap

    Intersap Гость

    смотря кто попадется.

    А у наших баранов: я так и не понял как записать информацию в файл. Это write(ft, Student) не проходит. Создает файл, в котором и половины значений нет
     
  13. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А Вы считывать пробовали? что получается?
    И чем смотрели? Что увидели?

    Добавлено: кста, Gender: String - это, конечно, слишком жирно, достаточно символа или перечислимого типа
     
  14. Intersap

    Intersap Гость

    Как я понял, программа гдето так:
     

    Вложения:

    • LAB14_1.PAS
      Размер файла:
      2,6 КБ
      Просмотров:
      14
    • STUD.TXT
      Размер файла:
      1,3 КБ
      Просмотров:
      12
  15. Intersap

    Intersap Гость

    1.
    Код (Delphi):
    type Stud = record
    Name,Group: String[100];
    Data: byte;
    Gender: char;
    Teormeh1,Mathematica1,Phisics,Geometry:byte;
    Teormeh2,Mathematica2,Sopromat:byte;
    end;
    var i: byte;
    Student:Stud;
    ft: file of Stud;
    2. а почему это два раза!? a как тогда надо это описать?

    3. а черт его знает
     
  16. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    кинуть в один цикл "фор" запрос данных у пользователя и сразу же запись в файл.
    3. пошлите их к нему, не надо они, явно указаны уже в коде Student.Name, etc.
     
  17. Intersap

    Intersap Гость

    так прикол в том что в файле как таковых данных нет а набор символов (которые даже не вводились) и ОЧЕНЬ много пробелов

    Добавлено: или я такой тупой или лыжи не едут
    "моя попытка №5":

    Код (Delphi):
    begin
    clrscr;
    writeln;
    assign(ft,'stud.txt');
    rewrite(ft);
    for i:=1 to 17 do
    with Student do
    begin
    textcolor(14);
    write(i);
    textcolor(white);
    write(' ФИО студента:    ');
    readln(Student.Name);
    write(' Группа:            ');
    readln(Student.Group);
    write(' Дата рождения: ');
    readln(Student.Data);
    write(' Пол студента:    ');
    readln(Student.Gender);
    writeln(' Оценки за первую сессию:');
    write('  Физика:                           ');
    readln(Student.Phisics);
    write('  Математика:                    ');
    readln(Student.Mathematica1);
    write('  Теоретическая механика:  ');
    readln(Student.Teormeh1);
    write('  Начертательная геометрия: ');
    readln(Student.Geometry);
    writeln(' Оценки за вторую сессию:');
    write('  Математика:                      ');
    readln(Student.Mathematica2);
    write('  Теоретическая механика:   ');
    readln(Student.Teormeh2);
    write('  Сопротивление материалов: ');
    readln(Student.Sopromat);
    writeln;
    write (ft,Student) -? (я так понял)
    end;       
    close(ft);
    end.
     
  18. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    так, примерно похоже на правду :flood:
    эту же строку просили послать подальше убрать?
    А вы вводили 100 символов имени и группы? наверно, нет - мб, оттуда пробелы пошли...
     
  19. Intersap

    Intersap Гость

    а чем читать?
     
  20. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    вот эе среди прочего указывалось выше:
     
Загрузка...
Похожие Темы - Работа файлами паскале
  1. gx6060
    Ответов:
    2
    Просмотров:
    442
  2. seoman2
    Ответов:
    21
    Просмотров:
    769
  3. NickProstoNick
    Ответов:
    22
    Просмотров:
    1.526
  4. vladis222
    Ответов:
    3
    Просмотров:
    1.128
  5. Lyuska
    Ответов:
    1
    Просмотров:
    1.172

Поделиться этой страницей