Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Многомерный массив или записи? (http://www.tehnari.ru/f41/t51666/)

Gerald 14.05.2011 15:57

Многомерный массив или записи?
 
Язык: Delphi
Дана информация о студентах: курс, группа, оценки. Мне нужно будет выяснять средний балл каждой группы. Т.е. группы 1.1, 1.2, ..., 2.2, 2.3, ...
Что меньше будет занимать памяти и что луше использовать для этого - многомерный массив или записи? Интересны также ваши предложения...

Vladimir_S 14.05.2011 18:05

Цитата:

Сообщение от Gerald (Сообщение 520224)
Язык: Delphi
Дана информация о студентах: курс, группа, оценки. Мне нужно будет выяснять средний балл каждой группы. Т.е. группы 1.1, 1.2, ..., 2.2, 2.3, ...
Что меньше будет занимать памяти и что луше использовать для этого - многомерный массив или записи? Интересны также ваши предложения...

Дело вкуса, конечно, и если все данные (курс, группа, оценки) - сугубо числовые, то можно и массив. Но я бы в любом случае использовал записи.

Gerald 14.05.2011 18:10

А памяти они занимают одинаково?

Vladimir_S 14.05.2011 18:25

Цитата:

Сообщение от Gerald (Сообщение 520306)
А памяти они занимают одинаково?

А пёс их знает... Как-то с современными компьютерами подобные вопросы для такого рода задачек теряют актуальность.

Gerald 14.05.2011 18:56

Ясно, спасибо за ваше мнение. Вот только у меня появилась проблема. Где то ошибся в коде - не могли бы вы посмотреть:
Код:

procedure GPAgr(var count:integer);
var
  i,j:integer;
  sum:real;
begin
  reset(f);
  for i := 1 to high(GPAgroup) do
    for j := 1 to high(GPAgroup[0]) do
    begin
      count:=0;
      sum:=0;
      while not(eof(f)) do
      begin
        read(f,s);
        if (i=s.Kurs) and (j=s.Group) then //Вот тут что-то нетак!!!
        begin
          sum:=sum+GPAstud(s);
          inc(count);
        end;
      end;
      if existGR(i,j)=true then GPAgroup[i,j]:=sum/count;
    end;
  Closefile(f);
end;

s.Kurs и s.Group имеют тип byte.
Так как код написал уже с массивом а особой роли как вы говорите это не играет, решил все так и оставить как есть.
Проверял по счетчику count в первом операторе if не находит совпадения - не могу понять почему... а именно в переменной j чтото нетак - подставлял число вместо нее - все ок... Помогите пожалуйста.

Vladimir_S 14.05.2011 19:21

Возможно, здесь:
Цитата:

Сообщение от Gerald (Сообщение 520328)
for j := 1 to high(GPAgroup[0]) do

Что есть вообще
high(GPAgroup)?

Gerald 14.05.2011 19:26

GPAgroup - это многомерный массив.
high(GPAgroup)- это должен быть индекс максимальной строки
а high(GPAgroup[0]) - по идее максимальный столбец. Или это неправильно?

Vladimir_S 14.05.2011 19:33

Извините, но вообще-то я Делфи плохо знаю. Лучше бы кто из спецов посмотрел.

Gerald 14.05.2011 19:37

Кажется теперь я понимаю почему вы советовали записи. :tehnari_ru_203: С ними меньше проблем, должно быть... Попробую я через записи...

AlexZir 16.05.2011 09:33

Покажите как вы определили этот массив. Максимальное значение индекса вообще-то это MaxValue, но вам, наверное, виднее :)

high(GPAgroup) - это не индекс максимальной строки (кстати, как это понять?), а вообще непонятно что!

GPAgroup - что это за компонента? На какой палитре инструментов находится?


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.