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


Ответ
 
Опции темы Опции просмотра
Старый 06.09.2012, 16:56   #1 (permalink)
Oksana777
Member
 
Регистрация: 08.05.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Массив

Создать массив из 20 элементов,хранящих информацию о студенках факультета.Каждый элемент содержит фамилию,курс,форму обучения,(специалист,бакалавр,магис тр)и оценки по 5 предметам за последнюю сессию.
Упорядочить массив по среднему баллу.Осуществить перевод студентов на следующий курс.Переводятся студенты ,не имеющие задолжностей за последнюю сессию,студенты 5-ого курса(специалисты) и 6-ого курса(магистры)должны быть удалены ,как окончившие курс обучения
Код:
uses
  SysUtils,Windows;

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;
//-----------------------------------------------
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 (const S: TStudent): real;
var i: integer;
begin
  result := 0;
  for i := 1 to 5 do
    result := result + S.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 (const S: TStudent; var f:textfile);
var i: integer;
begin
with S 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 (const S: TStudent): boolean;//если студент не двоешник
var i: integer;
begin
  result := true;
  for i := 1 to 5 do
    if S.Session[i].Mark = 2 then result := false;
    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 = 4) and (Form = Bak)) or
             ((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 (const a: TMas; Count: integer; var f:textfile); //печать информации о переведенных студентах
var i: integer;
begin
  for i := 1 to Count do
    PrintStudent (a[i],f);
end;
//-----------------------------------------------

var a: TMas;
    f: textfile;
    filename: string;
    f1: file of TStudent;
    count: integer;
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('Перевод завершен!');
    end
      else
        writeln ('Файла с таким именем не существует!');
  readln
End.
Неправильно работает процедура перевода студентов и необходимы две процедуры ввода и вывода данных в типизированный файл.
Oksana777 вне форума   Ответить с цитированием

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

Поищите в этих ссылках ответы

Массив, Паскаль
Массив в VBA
Массив
Массив в с++

Старый 09.09.2012, 22:31   #2 (permalink)
Oksana777
Member
 
Регистрация: 08.05.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

помогите кто может
Oksana777 вне форума   Ответить с цитированием
Старый 09.09.2012, 23:14   #3 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 766
Записей в дневнике: 1
Сказал(а) спасибо: 11
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

подобные программы уже были тут, особенно в разделе программирования на delphi/pascal
Gruvi вне форума   Ответить с цитированием
Ads

Яндекс

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

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

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

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




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

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