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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2011, 20:44   #1
evklid
Пользователь
 
Регистрация: 29.09.2010
Сообщений: 57
По умолчанию Pascal Сортировка по среднему балу. За вознаграждение

Помогите в этой программе организовать сортировку студентов по среднему баллу 2 семестра
Код:
     type  student=record
                   fio: string;
                   birth: 1990..2000;
                   god_postup: 2000..2010;
                   sess_1:
                         record
                               matan:2..5;
                               informatika:2..5;
                               phisika:2..5;
                         end;
                   sess_2:
                         record
                               history:1..5;
                               inteh:1..5;
                               ci:1..5;
                         end;
                   end;
     var  group:array[1..5] of student;
          t:student;
          i,j:integer;
     begin
      writeln();
      writeln();
      with t do begin
                   for i:=1 to  2 do begin
                     writeln('введите фио');
                        readln(fio);
                     writeln('год рождения');
                     readln(birth);
                     writeln('год поступления');
                     readln(god_postup);
                     with sess_1 do begin

                      writeln(введите оценку по матану за первый семестр');
                      readln (matan);
                      writeln('введите оценку по инфе за 1 семестр);
                      readln (informatika);
                      writeln(введите оценку по физике за 1 семестр');
                      readln (phisika);
                     end;
                     with sess_2 do begin
                      writeln();

                      writeln('введите оценку по истории за 2 семестр');
                      readln (history);
                      writeln('введите оценку по интех за 2 семестр');
                      readln (inteh);
                      writeln('по СИ за 2 семестр');
                      readln (ci);
                     end;
                     group[i]:=t;
                     writeln();
                     writeln();
                   end;
      end;


     writeln('Список студентов);
      for  i:=1 to 5 do
        with group[i],sess_1, sess_2  do
            writeln(i,') ', fio,' | год поступления: ',god_postup,' |год рождения: ',birth, ' ', ' ', ' ', '|  оценки 1 семестр: |', sess_1.matan,'(матан),| ', sess_1.informatika,'(инфа),| ',sess_1.phisika, '(физика);|', ' ', '2 семестр:| ',sess_2.history,'(история),| ',sess_2.inteh,'(интех),| ',sess_2.ci,'(pascal).|');
      writeln();

      

     end.

Последний раз редактировалось evklid; 24.02.2011 в 20:52.
evklid вне форума Ответить с цитированием
Старый 24.02.2011, 20:54   #2
evklid
Пользователь
 
Регистрация: 29.09.2010
Сообщений: 57
По умолчанию

На данный момент программа выводит список студентов и оценки за 2 семестра. Нужно как то организовать сортировку по среднему баллу за 2 семестр.
evklid вне форума Ответить с цитированием
Старый 24.02.2011, 21:20   #3
evklid
Пользователь
 
Регистрация: 29.09.2010
Сообщений: 57
По умолчанию

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

предложенный код содержит ряд ошибок и вообще не компилируется.

вот, изучайте:
Код:
const
  cntRecord = 5;
type student = record
    fio: string[50];
    birth: 1990..2000;
    god_postup: 2000..2010;
    sess_1:
    record
      matan: 2..5;
      informatika: 2..5;
      phisika: 2..5;
    end;
    sess_2:
    record
      history: 1..5;
      inteh: 1..5;
      ci: 1..5;
    end;
  end;

function AverageSess2(One: student): double;
var res: double;
begin
  res := One.sess_2.history + One.sess_2.inteh + One.sess_2.ci;
  AverageSess2 := res / 3
end;

var group: array[1..cntRecord] of student;
  t: student;
  i, j, IndexMin: integer;
begin
  writeln;
  writeln;
  with t do begin
    for i := 1 to cntRecord do begin
      writeln('введите фио');
      readln(fio);
      writeln('год рождения');
      readln(birth);
      writeln('год поступления');
      readln(god_postup);
      with sess_1 do begin

        writeln('введите оценку по матану за первый семестр');
          readln(matan);
          writeln('введите оценку по инфе за 1 семестр');
          readln(informatika);
          writeln('введите оценку по физике за 1 семестр');
          readln(phisika);
      end;
      with sess_2 do begin
        writeln;

        writeln('введите оценку по истории за 2 семестр');
        readln(history);
        writeln('введите оценку по интех за 2 семестр');
        readln(inteh);
        writeln('по СИ за 2 семестр');
        readln(ci);
      end;
      group[i] := t;
      writeln;
      writeln;
    end;
  end;


  writeln('Список студентов');
    for i := 1 to cntRecord do
      with group[i], sess_1, sess_2 do
        writeln(i, ') ', fio, ' | год поступления: ', god_postup,
           ' |год рождения: ', birth, ' ', ' ', ' ',
           '|  оценки 1 семестр: |', sess_1.matan, '(матан),| ',
           sess_1.informatika, '(инфа),| ',
           sess_1.phisika, '(физика);|', ' ',
           '2 семестр:| ', sess_2.history, '(история),| ',
           sess_2.inteh, '(интех),| ',
           sess_2.ci, '(pascal).|');
    writeln;



   {сортировка методом "пузырька" (методом простого выбора )

    Сортировка методом простого выбора
    Выбирается минимальный (самый "лёгкий"=наименьший) элемент массива
    и меняется местами с первым элементом массива.
    Затем процесс повторяется с оставшимися элементами и т. д.  }

    for i := 1 to cntRecord - 1 do begin
      IndexMin := i; {предварительно считаем, что первый элемент наименьший}
      {ищем индекс минимального элемента}
      for j := i + 1 to cntRecord do
        if AverageSess2(group[j]) < AverageSess2(group[IndexMin]) then IndexMin := j;

      {меняем местами элементы массива с индексами i и IndexMin
         (ну, если они не равны, конечно) }
      if i <> IndexMin then begin
        t := group[IndexMin];
        group[IndexMin] := group[i];
        group[i] := t;
      end;
    end;

  writeln('Список студентов после сортировки: ' );
    for i := 1 to cntRecord do
      with group[i], sess_1, sess_2 do
        writeln(i, ') ', fio, ' | год поступления: ', god_postup,
           ' |год рождения: ', birth, ' ', ' ', ' ',
           '|  оценки 1 семестр: |', sess_1.matan, '(матан),| ',
           sess_1.informatika, '(инфа),| ',
           sess_1.phisika, '(физика);|', ' ',
           '2 семестр:| ', sess_2.history, '(история),| ',
           sess_2.inteh, '(интех),| ',
           sess_2.ci, '(pascal).|');
    writeln;

  readln;
end.
p.s. мне лень вводить данные, поэтому работоспособность кода не проверял.. доверяю это сделать Вам!
Успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.02.2011, 21:31   #5
evklid
Пользователь
 
Регистрация: 29.09.2010
Сообщений: 57
По умолчанию

Блин в вашем коде ошибка
Код:
function AverageSess2(One: student): double;
неизвестное имя типа double
evklid вне форума Ответить с цитированием
Старый 24.02.2011, 21:32   #6
evklid
Пользователь
 
Регистрация: 29.09.2010
Сообщений: 57
По умолчанию

А мой код точно работает только что проверил ))
evklid вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нахождение числа, ближайшего к максимальному/среднему/минимальному Fantom.as Помощь студентам 5 14.11.2010 08:56
Найти число равно среднему арифметическому. Rastislav Помощь студентам 15 25.10.2010 09:35
4 задачи за вознаграждение (pascal) Triko Фриланс 5 30.04.2010 18:31
Pascal, Лаборатораная работа за вознаграждение Cayce Фриланс 2 24.12.2009 23:01
Выборка по среднему Kip Microsoft Office Access 3 11.08.2008 21:56