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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2012, 05:53   #1
Loreen
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 13
Печаль Записи(Pascal)

Код:
const n = 20;
type
  TForm = (Spec, Bak, Mag);
  TOsn = (Budjet, Dogovor);
  TSubj = record
    name: string[20];
    Mark: 2..5;
  end;
  TSession = array [1..5] of TSubj;
  TStudent = record
    Surname: string[20];
    Course: 1..6;
    Form: TForm;
    Osn: TOsn;
    Session: TSession;
  end;
  TMas = array [1..n] of TStudent;
var a: TMas;
    f, f1: textfile;
    filename: string;
    f3: file of TStudent;
    count: integer;
    p:string;
    p1:string[19];

procedure ReadStudent (var f: textfile; var S: TStudent); //считывание информации об одном студенте
var buf: string;
    i: integer;
begin
    readln (f, S.Surname);
    readln (f, buf);
    if pos ('Курс ',buf) = 1 then
      delete (buf, 1, 5);
    S.Course := StrToInt(Trim(buf));
    readln (f);
    readln (f, buf);
    if buf = 'Специалист' then S.Form := Spec else
    if buf = 'Бакалавр' then S.Form := Bak else
    if buf = 'Магистр' then S.Form := Mag;
    readln (f);
    readln (f, buf);
    if buf = 'Госбюджет' then S.Osn := Budjet else
    if buf = 'Договор' then S.Osn := Dogovor;
    readln (f);
    for i := 1 to 5 do
    begin
      readln (f, buf);
      S.Session[i].name := copy (buf, 1, length(buf) - 2);
      S.Session[i].Mark := StrToInt (buf[length(buf)]);
    end;
    readln (f);
end;

procedure ReadAll (var f: textfile; var a: TMas); //считывание информации обо всех студентах
var i: integer;
begin
for i := 1 to n do
  ReadStudent (f, a[i]);
end;

procedure Swap (var a,b: TStudent); //"пузырьковый" обмен
var t: TStudent;
begin
  t := a;
  a := b;
  b := t;
end;

function CountAverage (a: TStudent): real;
var i: integer;
begin
  result := 0;
  for i := 1 to 5 do
    result := result + a.Session[i].Mark;
  result := result / 5;
end;

procedure BubbleSort(var A: TMas; n: integer);//удорядочение массива по среднему баллу
var i,j: integer;
begin
  for i := 1 to n - 1 do
    for j := 1 to n - i  do
      if CountAverage(A[j]) > CountAverage(A[j+1]) then swap(A[j], A[j + 1]);
end;

procedure PrintStudent (a: TStudent; var f:textfile);
var i: integer;
begin
with a do
  begin
    writeln (f,Surname);
    writeln (f,'Курс ',Course);
    writeln (f,'Форма обучения:');
    case Form of
      Spec: writeln (f,'Специалист');
      Bak: writeln (f,'Бакалавр');
      Mag: writeln (f,'Магистр');
    end;
    writeln (f,'Основа обучения:');
    case Osn of
      Budjet: writeln (f,'Госбюджет');
      Dogovor: writeln (f,'Договор');
    end;
    writeln (f,'Сессия: ');
    for i := 1 to 5 do
      writeln (f,Session[i].name,' ',Session[i].Mark);
    writeln(f);
  end;
end;

function NoDebts (a: TStudent): boolean;//если студент не двоешник
var i: integer;
begin
  result := true;
  for i := 1 to 5 do
    if a.Session[i].Mark=2 then result:= false
    else result:=true;
    NoDebts:=result;
end;

procedure Transfer (var a: TMas; var Count: integer); //перевод студентов, не имеющих задолжностей на следующий курс
var i: integer;
begin
i := 1;
while i <= Count do
  begin
    if NoDebts (a[i]) then
        with a[i] do
          if ((Course = 5) and (Form = Spec)) or
             ((Course = 6) and (Form = Mag)) then
             begin
             a[i] := a[Count];
             dec (Count);
             dec (i);
             end
          else inc (Course);
    inc (i);
  end;
end;

procedure PrintAll (a: TMas; Count: integer; var f:textfile); //печать информации о переведенных студентах
var i: integer;
begin
  for i := 1 to Count do
    PrintStudent (a[i],f);
end;

procedure vvoddannuhtype;//ввод данных в типизированный файл
var
 p:string;
 p1:string[19];
 z:TStudent;
 i:integer;
begin
 Assign(f1,'output.txt');
 Reset(f1);
 Assign(f3,'output_2');
 Rewrite(f3);
 for i:=1 to 3 do readln(f1);
 for i:=1 to n do
  begin
   read(f1,z.Surname);
   read(f1,p1);
   p:=p1;
   readln(f1);
  end;
 Close(f1);
 close(f3);
end;

Begin
  SetConsoleCP (1251);
  SetConsoleOutputCP (1251);
  writeln ('Введите имя файла:');
  readln (filename);
  if fileexists (filename) then
  begin
    assignfile (f,filename);
    reset (f);
    ReadAll (f, a);
    closefile (f);
    Count := n;
    BubbleSort (a, Count);
    Transfer (a, Count);
    assignfile(f,'output.txt');
    rewrite(f);
    PrintAll (a, Count, f);
    closefile(f);
    writeln('Перевод завершен!');
    reset(f);
     while not eof(f1) do
    begin
     readln(f1,p);
     writeln(p)
    end;
   close(f1);
    vvoddannuhtype;
  end
      else
        writeln ('Файла с таким именем не существует!');
  readln
End.
Loreen вне форума Ответить с цитированием
Старый 26.09.2012, 05:53   #2
Loreen
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 13
По умолчанию

Создать массив из 20 элементов,хранящих информацию о студентах факультета.
Каждый элемент содержит фамилию,курс,форму обучения,(специалист,бакалавр,магис тр)
и оценки по 5 предметам за последнюю сессию.
Упорядочить массив по среднему баллу.Осуществить перевод студентов на следующий курс.
Переводятся студенты,не имеющие задолжностей за последнюю сессию,
студенты 5-ого курса(специалисты) и 6-ого курса(магистры)должны быть удалены,
как окончившие курс обучения. Кроме того, нужно создать процедуру, в которой будет записываться информация из созданного текстового файла в типизированный файл. Программа почти готова, просто нужно сделать некоторые исправления..
Loreen вне форума Ответить с цитированием
Старый 26.09.2012, 08:58   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

это всё курсовая работа?

Цитата:
Осуществить перевод студентов на следующий курс.
Переводятся студенты,не имеющие задолжностей за последнюю сессию
кстати, в реальной задаче намного лучше ТАК НЕ ДЕЛАТЬ!
у группы есть год начала учёбы. (часто даже прямо в наименование группы входит), по этому году и рассчитывается курс, на котором обучаются студенты данной группы. Если кого-то нужно НЕ ПЕРЕВОДИТЬ на следующий курс, то это можно сделать ТОЛЬКО путём отчисления студента из данной группы/переводом его в ДРУГУЮ группу (на год младше, ==> на один курс меньше).

Тоже касается и тех групп, которые закончили обучение. По хорошему, они удаляться не должны, должна быть у группы отметка - "группа закончила обучение".


Цитата:
Программа почти готова, просто нужно сделать некоторые исправления..
Так в чём нужна КОНКРЕТНАЯ помощь?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.09.2012, 18:44   #4
Loreen
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 13
По умолчанию

программа работает не правильно. Конкретно, процедура перевода студентов почему-то не работает. Когда открываю созданный текстовый файл, там оказываются не удаленными, как задано в условии, студенты 5 и 6 курса, и двоешники. И ещё не создается типизированный файл
Loreen вне форума Ответить с цитированием
Старый 27.09.2012, 14:20   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

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

2-е. А чем же Вам конкретно помочь я не знаю, ибо вашего текстового файла нет, проверить работу программы банально не на чем..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.09.2012, 21:03   #6
Loreen
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 13
Вопрос

Мне необходимо обработать исходный текстовый файл "test.txt" найти там двоешников и студентов 5-го и 6-го курса и уже в новый текстовый файл "output.txt" записать новую инфо с упорядочением и без найденных заданных студентов. Вы говорите о пользовательском меню? Зачем мне оно, мне сначала надо прогу нормально написать для сдачи. Я прикрепила исходный текстовый и созданный в результате работы программы
Вложения
Тип файла: txt test.txt (2.9 Кб, 121 просмотров)
Тип файла: txt output.txt (2.5 Кб, 126 просмотров)
Loreen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Записи Женька Good Помощь студентам 2 24.11.2011 08:15
Записи. Pascal dancheg Паскаль, Turbo Pascal, PascalABC.NET 4 13.01.2011 08:51
записи (pascal) remember me Помощь студентам 0 08.12.2010 20:27
записи (pascal) remember me Помощь студентам 0 08.12.2010 16:30
Pascal - Записи Ikari Shinji Помощь студентам 1 10.06.2010 00:24