Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 10.05.2012, 16:23   #1 (permalink)
gabriela
Member
 
Регистрация: 10.05.2012
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Задача на файлы

Структура записи:

ФИО:..........40 знаков
№ курса.....1 знак
№ группы....1 знак
успеваемость-5 экзаменов в каждой из 10 сессий
форма обучения (целевая\договорная)..1 знак
Экзамен
наимен.предмета....10 знаков
оценка..................1 знак
создать файл студент.Занесите в отдельный файл записи из файла Студент о студентах 5-го курса ,упорядочив их по убыванию сумм баллов за все время обучения(фио,балл)
Код:
type
  session = array[1..10,1..5] of record            //Сведения об экзаменах
                                  name: string[10];
                                  mark: 1..5;
                                  end;
  student = record                // Сведения о студенте
            fio: string[40];
            curs: 1..5;
            group: 1..9;
            result:session;
            end;
  TFile= file of student ;
 //--------------------------------------------------------
procedure vvodstudent(var st:student);       // Ввод записи с клавиатуры
var i,j:integer;
begin
with st do
 begin
  write('Введите ФИО: '); readln(fio);
  write('Введите курс: '); readln(curs);
  write('Введите группу: '); readln(group);
  writeln('Введите результаты сессий:');
  i:=1;
  repeat
  writeln('Сейссия №',i,': ');
   for j:=1 to 5 do
    begin
     write('Название ',j,'-го экзамена: '); readln(result[i,j].name);
     write('Оценка за ',j,'-й экзамен: '); readln(result[i,j].mark);
    end;
  inc(i);
  until (i=curs*2+1);
 end;
writeln('Ввод закончен!');
end;
//-------------------------------------------------------------------
procedure writestudent(var st:student);             // Печать записи
var i,j:integer;
begin
with st do
 begin
  writeln(FIO,', ',curs,' курс, ',group,' группа.');
  for i:=1 to curs*2 do
   begin
    write('  Сессия ',i,': ');
    for j:=1 to 5 do
     write(result[i,j].name,': ',result[i,j].Mark,', ');
     readln
   end
 end;
end;
var f1:file;
    rec:student;
begin
 Assign(f1,'af.int');
 rewrite(f1);
 Write(f1,writestudent(rec));
 Close(f1);
 Reset(f1);
 while not Eof(f1) do
 begin
 
 end;
end.
помогите ,пожалуйста, доделать задачу
gabriela вне форума   Ответить с цитированием

Старый 10.05.2012, 16:23
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Пока участники форума думают над вашей проблемой, обратите внимание на это

Задача C++
Задача на C#

Старый 10.05.2012, 16:48   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gabriela Посмотреть сообщение
помогите ,пожалуйста, доделать задачу
Да... накручено всего много, а вот, похоже, того, что надо, как раз нету. Я бы, решая эту задачу, создал массив студентов (записей student), а в самой записи сделал бы еще одно поле суммы баллов, вычисление каковой запихал бы в конец процедуры ввода. Далее провел бы отбор по курсу (5) и упорядочение по суммам баллов методом пузырька.
Vladimir_S вне форума   Ответить с цитированием
Старый 10.05.2012, 17:07   #3 (permalink)
gabriela
Member
 
Регистрация: 10.05.2012
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Да... накручено всего много, а вот, похоже, того, что надо, как раз нету. Я бы, решая эту задачу, создал массив студентов (записей student), а в самой записи сделал бы еще одно поле суммы баллов, вычисление каковой запихал бы в конец процедуры ввода. Далее провел бы отбор по курсу (5) и упорядочение по суммам баллов методом пузырька.
а как это все в файлы засунуть?
gabriela вне форума   Ответить с цитированием
Старый 10.05.2012, 17:14   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gabriela Посмотреть сообщение
а как это все в файлы засунуть?
Дык... Открыть файл на запись да циклом по студентам и отправить.
Кстати, заметил, что еще одного поля не хватает - символа формы обучения. И вопрос: а зачем в цикле по сессиям при вводе данных Вы применили Repeat - Until, а не просто for - to - do?
Vladimir_S вне форума   Ответить с цитированием
Старый 10.05.2012, 17:42   #5 (permalink)
gabriela
Member
 
Регистрация: 10.05.2012
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Код:
const
    n=10;
type
    session = array[1..10,1..5] of record
                                  subject: string[10];
                                  mark: 1..5;
                                  end;
    student=record
    fio:string[40];
    curs:1..5;
    group:1..9;
    formaobuch:string[1];
    end;
  TFile= file of student ;
  tmas=array [1..n] of student;
//------------------------------------------------------
procedure vvoddannuh(var a:tmas); //ввод
var i,s:Integer;
begin
  for i:=1 to n do
  begin
    Writeln('введите фио');
    Readln(a[i].fio);
    Writeln('введите курс');
    Readln(a[i].curs);
    Writeln('введите группу');
    Readln(a[i].group);
    Writeln('введите форму обучения');
    Readln(a[i].formaobuch);
    writeln;
  end
end;
//--------------------------------------------------------
Procedure vuvoddannuh(a:tmas);
var i:Integer;
begin
   writeln ('--------------------------------------------------------------------------');
   writeln ('    фио   / курс  / группа/  форма обучения /     ');
   writeln ('--------------------------------------------------------------------------');
   for i:=1 to n do
   writeln(a[i].fio,' ',a[i].curs,' ',a[i].group,' ',a[i].formaobuch);
end;
//-------------------------------------------------------------------
исправила.вот только никак понять не могу как вводить предметы и оценки
gabriela вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 10.05.2012, 23:08   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gabriela Посмотреть сообщение
исправила.вот только никак понять не могу как вводить предметы и оценки
Так, ну вот Вам Ваша программа, правда как Вы собираетесь вводить данные но 10 студентов по 10 сессиям, каждая из коих включает 5 предметов, я не очень представляю, но дело Ваше. По-моему, этим можно заниматься "долгими зимними вечерами".
Код:
const
 n=10;
type
  session = array[1..10,1..5] of record
                                  name: string;
                                  mark: 2..5;
                                 end;
  student = record
             fio: string;
             curs: 1..5;
             group: 1..9;
             result:session;
             formaobuch:char;
             sum:Word;
            end;
  TFile= file of student ;
  tmas=array [1..n] of student;
 //--------------------------------------------------------

procedure vvodstudent(var st:student);
 var
  i,j:integer;
begin
 with st do
  begin
   sum:=0;
   write('Name: ');
   readln(fio);
   write('Course: ');
   readln(curs);
   write('Group: ');
   readln(group);
   writeln('Session results:');
   for i:=1 to curs*2 do
    begin
     writeln('Session N',i,':');
     for j:=1 to 5 do
      begin
       write('Subject of examination: ');
       readln(result[i,j].name);
       write('Mark: ');
       readln(result[i,j].mark);
       Inc(sum,result[i,j].mark);
      end;
    end;
   write('Form of study: ');
   readln(formaobuch);
 end;
end;
//-------------------------------------------------------------------
procedure writestudent(var st:student);
var
 i,j:integer;
begin
 with st do
  begin
   writeln('Name: ',FIO,',    Course: ',curs,'   Group: ',group,'  Form: ',formaobuch);
   for i:=1 to curs*2 do
   begin
    writeln('Session ',i,': ');
    for j:=1 to 4 do
     write(result[i,j].name,': ',result[i,j].Mark,', ');
    writeln(result[i,5].name,': ',result[i,5].Mark);
   end;
  end;
 Writeln('Press "Enter" to continue...');
end;

var f1:Tfile;
    rec,rec5:tmas;
    q,p,N5:Byte;
    Dummy:student;

begin
 Assign(f1,'af.int');
 rewrite(f1);
 for q:=1 to n do
  begin
   vvodstudent(rec[q]);
   Write(f1,rec[q]);
   writeln;
  end;
 Close(f1);
 writeln;
 for q:=1 to n do
  begin
   writestudent(rec[q]);
   readln;
  end;
 writeln;
 N5:=0;
 for q:=1 to n do
  If rec[q].curs=5 then
   begin
    Inc(N5);
    rec5[N5]:=rec[q];
   end;

 For p:=1 to N5-1 do
  For q:=1 to N5-p do
   if rec5[q].sum<rec5[q+1].sum then
    begin
     Dummy:=rec5[q];
     rec5[q]:=rec5[q+1];
     rec5[q+1]:=Dummy;
    end;

 Assign(f1,'af5.int');
 rewrite(f1);
 for q:=1 to N5 do
  begin
   writeln(rec5[q].fio:40,rec5[q].sum:4);
   write(f1,rec5[q]);
  end;
 Close(f1);
 readln;
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 11.05.2012, 20:35   #7 (permalink)
gabriela
Member
 
Регистрация: 10.05.2012
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо огромное))
gabriela вне форума   Ответить с цитированием
Старый 11.05.2012, 20:44   #8 (permalink)
gabriela
Member
 
Регистрация: 10.05.2012
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Код:
const
 n=10;
type
  session = array[1..10,1..5] of record
                                  name: string;
                                  mark: 2..5;
                                 end;
  student = record
             fio: string;
             curs: 1..5;
             group: 1..9;
             result:session;
             formaobuch:char;
             sum:Word;
            end;
  TFile= file of student ;
  tmas=array [1..n] of student;
 //--------------------------------------------------------

procedure vvodstudent(var st:student);
 var
  i,j:integer;
begin
 with st do
  begin
   sum:=0;
   write('Name: ');
   readln(fio);
   write('Course: ');
   readln(curs);
   write('Group: ');
   readln(group);
   writeln('Session results:');
   for i:=1 to curs*2 do
    begin
     writeln('Session N',i,':');
     for j:=1 to 5 do
      begin
       write('Subject of examination: ');
       readln(result[i,j].name);
       write('Mark: ');
       readln(result[i,j].mark);
       Inc(sum,result[i,j].mark);
      end;
    end;
   write('Form of study: ');
   readln(formaobuch);
 end;
end;
//-------------------------------------------------------------------
procedure writestudent(var st:student);
var
 i,j:integer;
begin
 with st do
  begin
   writeln('Name: ',FIO,',    Course: ',curs,'   Group: ',group,'  Form: ',formaobuch);
   for i:=1 to curs*2 do
   begin
    writeln('Session ',i,': ');
    for j:=1 to 4 do
     write(result[i,j].name,': ',result[i,j].Mark,', ');
    writeln(result[i,5].name,': ',result[i,5].Mark);
   end;
  end;
 Writeln('Press "Enter" to continue...');
end;

var f1:Tfile;
    rec,rec5:tmas;
    q,p,N5:Byte;
    Dummy:student;

begin
 Assign(f1,'af.int');
 rewrite(f1);
 for q:=1 to n do
  begin
   vvodstudent(rec[q]);
   Write(f1,rec[q]);
   writeln;
  end;
 Close(f1);
 writeln;
 for q:=1 to n do
  begin
   writestudent(rec[q]);
   readln;
  end;
 writeln;
 N5:=0;
 for q:=1 to n do
  If rec[q].curs=5 then
   begin
    Inc(N5);
    rec5[N5]:=rec[q];
   end;

 For p:=1 to N5-1 do
  For q:=1 to N5-p do
   if rec5[q].sum<rec5[q+1].sum then
    begin
     Dummy:=rec5[q];
     rec5[q]:=rec5[q+1];
     rec5[q+1]:=Dummy;
    end;

 Assign(f1,'af5.int');
 rewrite(f1);
 for q:=1 to N5 do
  begin
   writeln(rec5[q].fio:40,rec5[q].sum:4);
   write(f1,rec5[q]);
  end;
 Close(f1);
 readln;
end.
выделяет строчку выделенную красным и пишет type 'student' needs finalization-not allowed in file type
gabriela вне форума   Ответить с цитированием
Старый 11.05.2012, 23:20   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gabriela Посмотреть сообщение
выделяет строчку выделенную красным и пишет type 'student' needs finalization-not allowed in file type
Понятно. Это задвиги некоторых Паскаль-трансляторов (мой-то это дело жрет и не давится). Лечение: восстановите (как у Вас и было изначально) фиксированные длины строк в полях обеих записей:
name: string[10];
и
fio:string[40];
Должно помочь.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:34.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.