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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2017, 15:55   #1
Yakup
Пользователь
 
Регистрация: 13.11.2017
Сообщений: 13
По умолчанию Нужно дописать программу - работа с записями на языке Pascal

Код:
Type
Student = record
  FIO:string[30];
  Data:string[10];
  ocenki:array[1..5] of integer;
 End;
 const
 n=3;
 
 Var
 s,k:Student;
 f:file of Student;
 i,j:integer;
 G:array[1..n]of student;
 Begin
 Assign(f,'SCHOOL');
 Rewrite(f);
 for i:=1 to n do
  Begin
   Writeln('FIO');
   Readln(s.FIO);
   Writeln('Data');
   Readln(s.Data);
   Writeln('Vvedite ocenki');
    for j:=1 to 5 do
     Readln(s.ocenki[j]);
   Write(f,s);
  End;
 Close(f);
 Reset(f);
 i:=0;
 while not(EOF(f)) do
 begin
 i:=i+1;
 read(f,G[i]);
 end;
 close(f);
 writeln(G);
 End.
Есть только ввод данных в файл. помогите доделать
вот сама задача:
Дан файл SCHOOL, в котором содержится информация о школьниках:
1) Ф.И.О.
2) год рождения, месяц, число
3) оценки экзаменов
а) отсортировать записи по возрастанию среднего
экзаменационного балла;
б) по запросу по Ф.И.О. - выдать средний балл;
в) распечатать ведомость школьников со средним баллом
меньше 3.
Yakup вне форума Ответить с цитированием
Старый 16.11.2017, 15:59   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

А проблема то в чем? У вас массив записей с данными. Вы не знаете как средний бал считается?
p51x вне форума Ответить с цитированием
Старый 16.11.2017, 16:11   #3
Yakup
Пользователь
 
Регистрация: 13.11.2017
Сообщений: 13
По умолчанию

помогите посчитать средний балл пожалуйста. если бы у меня все получилось, не писал бы сюда
Yakup вне форума Ответить с цитированием
Старый 16.11.2017, 17:13   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Yakup Посмотреть сообщение
Есть только ввод данных в файл.
подобные задачи лучше разделять на две отдельные программы.
одна - формирование файла.
вторая - решение собственно задачи.
(см. например, тему - Работа с файлами

допустим, что у Вас есть программа формирования типизированного файла:
Код:
Type
 Student = record
  FIO:string[30];
  bf_year, bf_month, bf_day : integer;
  balls:array[1..5] of integer;
 End;

 const
  n=3;
 
 Var
  s : Student;
  f : file of Student;
  i,j : integer;
 Begin
   Assign(f,'SCHOOL');
   Rewrite(f);
   for i:=1 to n do
    Begin
     Writeln('FIO');
     Readln(s.FIO);
     Writeln('Data rozdenia: год месяц день:');
     Readln(s.bf_year, s.bf_month, s.bf_day);
     Writeln('Vvedite 5 ocenok:');
      for j:=1 to 5 do
       Readln(s.balls[j]);
     Write(f,s);
    End;
   Close(f);
   WriteLn('Файл SCHOOL записан.');
   ReadLn
 End.
тогда можно уже решать саму задачу.

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

это выглядит примерно так:

Код:
Type
 Student = record
  FIO:string[30];
  bf_year, bf_month, bf_day : integer;
  balls:array[1..5] of integer;
 End;

 const
  MaxSize=100; {максимальное число студентов, которое можно обработать}
 
 Var
  s : Student;
  f : file of Student;
  i,j,n : integer;
  StudArr : array[1..MaxSize] of Student;
 Begin
   Assign(f,'SCHOOL');
   Reset(f);
   if FileSize(f)>MaxSize 
   then begin
     WriteLn('Слишком много записей в файле. Выделено память не более ',MaxSize,' записей.');
     Close(f);
   end
   else begin
     n := FileSize(f);
     for i:=1 to n do Read(f, StudArr[i]);
     Close(f);

     // сортировка по среднему баллу
     ...

     // запросить фамилию и выдать сведения 
     ...

     // распечатать ведомость школьников со средним баллом меньше 3.
     ...
   end;

   ReadLn
 End.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2017, 17:16   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Yakup Посмотреть сообщение
помогите посчитать средний балл пожалуйста.
Код:
var avg_ball : real;

for i:=1 to n do begin
  avg_ball := 0;
  for j:=1 to 5 do avg_ball := avg_ball + StudArr[i].balls[j];
  avg_ball := avg_ball / 5;
  WriteLn(i:5, StudArr[i].FIO, ' средний балл = ', avg_ball:0:2);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2017, 18:01   #6
Yakup
Пользователь
 
Регистрация: 13.11.2017
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Type
Student = record
FIO:string[30];
bf_year, bf_month, bf_day : integer;
balls:array[1..5] of integer;
End;

const
n=3;

Var
s : Student;
f : file of Student;
i,j : integer;
Begin
Assign(f,'SCHOOL');
Rewrite(f);
for i:=1 to n do
Begin
Writeln('FIO');
Readln(s.FIO);
Writeln('Data rozdenia: год месяц день:');
Readln(s.bf_year, s.bf_month, s.bf_day);
Writeln('Vvedite 5 ocenok:');
for j:=1 to 5 do
Readln(s.balls[j]);
Write(f,s);
End;
Close(f);
WriteLn('Файл SCHOOL записан.');
ReadLn
End.
вот это получается программа, которая записывает данные в файл?А вторая, которую вы написали,уже выполняет задачу?
Yakup вне форума Ответить с цитированием
Старый 16.11.2017, 18:13   #7
Yakup
Пользователь
 
Регистрация: 13.11.2017
Сообщений: 13
По умолчанию

Код:
Type
 Student = record
  FIO:string[30];
  bf_year, bf_month, bf_day : integer;
  balls:array[1..5] of integer;
 End;

 const
  MaxSize=100; {максимальное число студентов, которое можно обработать}
 
 Var
  s : Student;
  f : file of Student;
  i,j,n : integer;
  StudArr : array[1..MaxSize] of Student;
  sred_ball : real;
 Begin
   Assign(f,'SCHOOL');
   Reset(f);
   if FileSize(f)>MaxSize 
   then begin
     WriteLn('Слишком много записей в файле. Выделено память не более ',MaxSize,' записей.');
     Close(f);
   end
   else begin
     n := FileSize(f);
     for i:=1 to n do Read(f, StudArr[i]);
     Close(f);
  for i:=1 to n do
   begin
    sred_ball := 0;
    for j:=1 to 5 do sred_ball := sred_ball + StudArr[i].balls[j];
     sred_ball := sred_ball / 5;
     WriteLn(i:5, StudArr[i].FIO, ' средний балл = ', sred_ball:0:2);
   end;

     // сортировка по среднему баллу
     

     for i := 1 to m-1 do
        for j := 1 to m-i do
            if arr[j] > arr[j+1] then begin
                k := arr[j];
                arr[j] := arr[j+1];
                arr[j+1] := k
            end;
 
    write ('Отсортированный массив: ');
    for i := 1 to m do
        write (arr[i]:4);
     ...

     // запросить фамилию и выдать сведения 
     ...

     // распечатать ведомость школьников со средним баллом меньше 3.
     ...
   end;

   ReadLn
 End.
проблема теперь в сортировке. Думаю, если поможете с сортированием, то дальше я сам смогу. Опять же, пытался разобраться, но ничего не вышло к сожалению(( Очень стыдно что не могу элементарные вещи сделать
Yakup вне форума Ответить с цитированием
Старый 16.11.2017, 18:18   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Берете любом понравившийся вам алгоритм сортировки, копируете его себе и заменяете a[i], a[j] на a[i].srednii_ball и a[j].srednii_ball, соответственно.
p51x вне форума Ответить с цитированием
Старый 16.11.2017, 18:20   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вынесите вычисление среднего балла в отдельную функцию.
function умеете писать?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2017, 18:29   #10
Yakup
Пользователь
 
Регистрация: 13.11.2017
Сообщений: 13
По умолчанию

процедуры умею
через процедуры можно?
Yakup вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
дописать программу на языке Си Anton19901505 Фриланс 2 09.05.2017 13:30
помогите дописать программу на языке Си Антон1990 Помощь студентам 70 22.03.2017 02:07
Работа с файлами форматов bin, Hex, на языке Pascal Дельфи-7, реализовать программу. Семён-2014 Помощь студентам 96 19.11.2015 22:32
нужно создать программу, которая осуществляет обработку символов и строк на языке Pascal КСЕНИЯ2 Помощь студентам 5 14.03.2015 12:54
Нужно дописать программу alex0097 Фриланс 3 16.10.2011 14:05