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


Ответ
 
Опции темы Опции просмотра
Старый 19.05.2011, 15:43   #1 (permalink)
Gerald
Member
 
Регистрация: 26.03.2011
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Unhappy Массив записей.(Информация по студентам)

Delphi...
В типизированном файле хранится информация о студентах
(Записи TStud). Необходимо вывести группы, средний балл которых меньше факультетского среднего.

Вначале я использовал двухмерный динамический массив, для хранения средн. баллов групп( курс1 группа2 - A[1,2]). Мне сказали что это оч. сложно,( действительно процедуры получались довольно громоздкие, кроме того необходимо было проверять в массиве каждую группу на существование, т.к. за ранее неизвестно количе-ва студентов, групп, и даже курсов может быть столько сколько введут)

Препод мне намекнул на вариант по-проще: так же использовать многомерный массив, но уже записей:суммы(средн. баллов студентов соответствующей группы), и ID группы. Что я и сделал однако мало что понял:
Код HTML:
const N=10;

type
  bal=array [1..10] of real;

  TStud=record                 //Информация по студентам
        FIO: string [80];   
        Year: TDateTime;
        MedB: bal;
        Kurs: byte;
        Group: byte;
  end;

  TGroup = record   //... - то что ПОСОВЕТОВАЛИ...
    Sum:real;         //сумма сред. баллов студентов
    ID:byte;           
  end;

  fil = file of TStud;
  arr = array of array of TGroup;    //многомерный массив записей

var
  maxK,maxG:integer; // максимальный курс и макс. группа(для задания длины массива) это я нахожу в др. юните

  countGr:integer;  //коли-во групп
  f: fil;                 
  s: TStud;
  ArrGr:arr;             

  function GPAstud(s:Tstud):real;
  procedure GPAgr;
  procedure ResetArray;

implementation

uses DeleteST, ChangeST, AddST, Main_Form, SearchGR;

procedure GPAgr;
begin
  ResetArray;
  CountGr:=0;
  reset(f);
  while not(eof(f)) do
  begin
    read(f,s);  //читаем
    with ArrGr[s.Kurs,s.Group] do begin
      Sum := Sum + GPAstud(s);  //Добавляем ср. балл студента в общую сумму группы

      if ID=0 then begin;
        inc(countGr);
        ID:=countGr;  //добавл АЙди новой группы
      end;  
    end;
  end;
  Closefile(f);
end;

procedure ResetArray;  //обнуляем записи массива
var i,j:integer;
begin
  for i:=1 to maxK do
    for j:=1 to maxG do
      with ArrGr[i,j] do begin
        ID:=0;
        Sum:=0;
      end;
end;

function GPAstud(s:Tstud):real;  //Средний балл студента по оценкам
var
  k:integer;
  sum:real;
begin
  sum:=0;
  for k := 1 to N do
    sum:=sum+s.MedB[k];
  result:=sum/N;
end;
ТОлько вот что дальше? Ну есть у меня суммы ср. баллов для каждой группы, пронумеровал каждую группу, знаю количество всех групп... Но как мне теперь найти ср. балл для каждой группы, не зная количе-ва студентов в ней (ведь в каждой группе оно разное). ТОже-самое: что мне до количе-ва всех групп, если мне необходимо количе-во групп в отдельности для каждого курса - чтобы потом находить средн. факультетское???

Люди помогите пожалста, ведь без всех сданных задач мне зачета не видать А с этой я уже почти месяц мучаюсь...
Gerald вне форума   Ответить с цитированием

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

Если появится свободное время - рекомендую заняться прочтением этих тем

Режим учетных записей
Подсчет количества записей в таблице Access
Перемещение записей между таблицами Access 2003
Обработка строк,массивов,записей
Двумерный массив записей

Старый 19.05.2011, 15:54   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

а в чем, собственно, проблема? анализируйте содержимое всех элементов массива группы и подсчитывайте количество заполненных значениями, так вы узнаете необходимые вам параметры.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 19.05.2011, 16:06   #3 (permalink)
Gerald
Member
 
Регистрация: 26.03.2011
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ну скажем количе-во групп на каждом курсе я так найду. А что с количе-вом студентов получается - проходить по всему файлу, и искать совпадения??? тогда это будет мало чем отличаться от того варианта что я сделал в самом начале - он не примет. Он сказал что как то по максимуму второго массива (array of array of...) я найду количе-во студентов для каждой группы... - это я вообще не могу понять как...
Gerald вне форума   Ответить с цитированием
Ads

Яндекс

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


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

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




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

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