19.05.2011, 15:43 | #1 (permalink) |
Member
Регистрация: 26.03.2011
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Массив записей.(Информация по студентам)
В типизированном файле хранится информация о студентах (Записи 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; Люди помогите пожалста, ведь без всех сданных задач мне зачета не видать А с этой я уже почти месяц мучаюсь... |
19.05.2011, 15:43 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Если появится свободное время - рекомендую заняться прочтением этих тем Режим учетных записей Подсчет количества записей в таблице Access Перемещение записей между таблицами Access 2003 Обработка строк,массивов,записей Двумерный массив записей |
19.05.2011, 15:54 | #2 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
а в чем, собственно, проблема? анализируйте содержимое всех элементов массива группы и подсчитывайте количество заполненных значениями, так вы узнаете необходимые вам параметры.
__________________
Убить всех человеков! |
19.05.2011, 16:06 | #3 (permalink) |
Member
Регистрация: 26.03.2011
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Ну скажем количе-во групп на каждом курсе я так найду. А что с количе-вом студентов получается - проходить по всему файлу, и искать совпадения??? тогда это будет мало чем отличаться от того варианта что я сделал в самом начале - он не примет. Он сказал что как то по максимуму второго массива (array of array of...) я найду количе-во студентов для каждой группы... - это я вообще не могу понять как...
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|