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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2013, 13:16   #1
Анжела33
Пользователь
 
Регистрация: 28.11.2013
Сообщений: 11
По умолчанию Создание типизированного файла с данными студентов. надо посчитать средний бал за 4 экзамена. ( Паскаль )

Помогите ИСПРАВИТЬ программу. надо посчитать средний бал за 4 экзамена. (с файлом)

Код:
Program P10;
Uses
Crt;
Const n=2;
Type
student=Record
FIO:String [64];
Exam1,Exam2,Exam3,Exam4:2..5;
End;
Var
Spisok:array[1..n] of student;
A:student;
f:file of student;
i:integer;
sr:real;
Begin
Assign(f,'Spisok.txt');
Rewrite(f);
for i:=1 to n do
begin
clrscr;
writeln('Введите данные по ''-му студенту');
writeln('Введите ФИО:'); 
readln(A.FIO);
write('Оценка за первый экзамен: ');readln(A.Exam1);
write('Оценка за второй экзамен: ');readln(A.Exam2);
write('Оценка за третий экзамен: ');readln(A.Exam3);
write('Оценка за четвертый экзамен: ');readln(A.Exam4);
writeln(f,A);
end;
close(f);
clrscr;
For i:=1 to n do
reset (f);
begin
read(f, A);
sr:=(A.Exam1+A.Exam2+A.Exam3+A.Exam4)/4;
End;
writeln('---------------------------------------------------------------------------');
writeln(' Ф.И.О | ','1 экзамен | ','2 экзамен | ','3 экзамен | ','4 экзамен|',' Средний балл');
writeln('---------------------------------------------------------------------------');
For i:=1 to n do
writeln(A.FIO:25,'|':1,A.Exam1:6,'|':6,A.Exam2:6,'|':6,A.Exa m3:6,'|':6,A.Exam4:6,'|':6,sr:9:2);

close (f);
End.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 26.12.2013 в 13:31.
Анжела33 вне форума Ответить с цитированием
Старый 26.12.2013, 13:42   #2
Анжела33
Пользователь
 
Регистрация: 28.11.2013
Сообщений: 11
По умолчанию

все я сделала. работает)
Анжела33 вне форума Ответить с цитированием
Старый 26.12.2013, 13:43   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так подойдёт?

Код:
program P10;
uses
  Crt;
const n = 2;
type
  student = record
    FIO: string[64];
    Exam1, Exam2, Exam3, Exam4: 2..5;
  end;
var
  A: student;
  f: file of student;
  i, nReal: integer;
  sr: real;
begin
  clrscr;
  Assign(f, 'SpisokST.dat');
  Rewrite(f);
  for i := 1 to n do
  begin
    writeln('Введите данные по ''-му студенту');
    writeln('Введите ФИО:');
    readln(A.FIO);
    write('Оценка за первый экзамен: '); readln(A.Exam1);
    write('Оценка за второй экзамен: '); readln(A.Exam2);
    write('Оценка за третий экзамен: '); readln(A.Exam3);
    write('Оценка за четвертый экзамен: '); readln(A.Exam4);

    write(f, A);
  end;
  close(f);

  clrscr;   {очистили экран}
  reset(f); {открыли файл на чтение}
  nReal := FileSize(f);  {для типизированных файлов FileSize(f) возвращает количество записей в файле}

  writeln('------------------------------------------------------------------------------');
  writeln(' Ф.И.О ':18,' | ', '1 экзамен | ', '2 экзамен | ', '3 экзамен | ', '4 экзамен |', ' Сред.балл');
  writeln('------------------------------------------------------------------------------');
  for i := 1 to nReal do
  begin
    read(f, A);
    sr := (A.Exam1 + A.Exam2 + A.Exam3 + A.Exam4) / 4;
    writeln(A.FIO:18, ' |', A.Exam1:6, '|':6, A.Exam2:6, '|':6, A.Exam3: 6, '|': 6, A.Exam4:6, '|':6, sr:9:2);
  end;
  close(f);
  Readln
end.

p.s. чтобы каждый раз не вбивать данные, достаточно rewrite и write(f..) делать только в случае необходимости (ну, например, спросить об этом пользователя в начале, или банально проверить - если файл есть - то читаем из него, если нет - то вызываем блок создания и заполнения файла.

Последний раз редактировалось Serge_Bliznykov; 26.12.2013 в 13:58.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.12.2013, 18:18   #4
Анжела33
Пользователь
 
Регистрация: 28.11.2013
Сообщений: 11
По умолчанию

спасибо большое) а Вы не могли бы написать, как сделать, чтобы не вбивать данные каждый раз, а только по необходимости...?)
Анжела33 вне форума Ответить с цитированием
Старый 26.12.2013, 23:26   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Анжела33 Посмотреть сообщение
спасибо большое) а Вы не могли бы написать, как сделать, чтобы не вбивать данные каждый раз, а только по необходимости...?)
да легко.
Код:
program P10;
uses
  Crt;
type
  student = record
    FIO: string[64];
    Exam1, Exam2, Exam3, Exam4: 2..5;
  end;
var
  A: student;
  f: file of student;
  i, n, nReal: integer;
  sr: real;
begin
  clrscr;
  Assign(f, 'SpisokST.dat');
  {$I-}
  Reset(f);
  {$I+}
  if IOResult<>0 then begin {файла нет - создаём} 

     Rewrite(f);

    
     Write('Сколько записей будете добавлять? :'); 
     ReadLn(n);


     for i := 1 to n do
      begin
        writeln('Введите данные по ''-му студенту');
        writeln('Введите ФИО:');
        readln(A.FIO);
        write('Оценка за первый экзамен: '); readln(A.Exam1);
        write('Оценка за второй экзамен: '); readln(A.Exam2);
        write('Оценка за третий экзамен: '); readln(A.Exam3);
        write('Оценка за четвертый экзамен: '); readln(A.Exam4);

        write(f, A);
      end;
      close(f);
  end;

  clrscr;   {очистили экран}
  reset(f); {открыли файл на чтение}
  nReal := FileSize(f);  {для типизированных файлов FileSize(f) возвращает количество записей в файле}

  writeln('------------------------------------------------------------------------------');
  writeln(' Ф.И.О ':18,' | ', '1 экзамен | ', '2 экзамен | ', '3 экзамен | ', '4 экзамен |', ' Сред.балл');
  writeln('------------------------------------------------------------------------------');
  for i := 1 to nReal do
  begin
    read(f, A);
    sr := (A.Exam1 + A.Exam2 + A.Exam3 + A.Exam4) / 4;
    writeln(A.FIO:18, ' |', A.Exam1:6, '|':6, A.Exam2:6, '|':6, A.Exam3: 6, '|': 6, A.Exam4:6, '|':6, sr:9:2);
  end;
  close(f);
  Readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.12.2013, 23:25   #6
Анжела33
Пользователь
 
Регистрация: 28.11.2013
Сообщений: 11
По умолчанию

Спасибо, выручили
Анжела33 вне форума Ответить с цитированием
Старый 27.12.2013, 23:52   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Анжела33 Посмотреть сообщение
Спасибо, выручили
Не за что! Всегда пожалуйста! Обращайтесь!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Средний бал по 4 предметам shilovec5377 Visual C++ 3 20.05.2013 13:26
Вычислить средний бал учеников в классе, если известны оценки каждого ученика (Паскаль) Tolya92 Помощь студентам 1 14.12.2012 11:31
создать типизированный файл, в который записать Фамилию, имя, возраст, средний бал, телефон учащегося. Alerq Паскаль, Turbo Pascal, PascalABC.NET 4 22.02.2012 09:34
Вычислить средний бал учеников класса Aimet Паскаль, Turbo Pascal, PascalABC.NET 0 16.06.2011 20:56
Типизированные файлы.Создание, удаление, редактирование, сортировка записей типизированного файла.Паскаль Студент Шиза Помощь студентам 6 08.12.2007 13:41