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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2010, 23:12   #1
tvorozhenciya
 
Регистрация: 03.12.2009
Сообщений: 4
По умолчанию Delphi. StringGrid. посчитать суммарный балл каждого студента

Я сделала 2 таблицы. Во вторую пыталась вывести фамилии с суммарными баллами. Но проблема с повторением фамилии. Что только не пробовала..
Код:
procedure TForm2.N6Click(Sender: TObject);
var
i,l:integer;
bal,fam,ob:array[1..100] of string;
k,j,flag:integer;
begin
k:=0;
l:=1;
 for i:=1 to stringgrid1.rowcount-1 do
  begin
  if (stringgrid1.Cells[1,i]=stringgrid1.Cells[1,i+1]) then
   begin
    k:=k+1;
    l:=l+1;
    fam[k]:=stringgrid1.Cells[1,i];
    bal[k]:=stringgrid1.Cells[4,i];
   stringgrid2.Cells[1,l]:=fam[k];
   stringgrid2.Cells[2,l]:=bal[k];
  end
  else if (stringgrid1.Cells[1,i]<>stringgrid1.Cells[1,i+1]) then
  begin
    k:=k+1;
    l:=l+1;
    fam[k]:=stringgrid1.Cells[1,i];
    bal[k]:=stringgrid1.Cells[4,i];
   stringgrid2.Cells[1,l]:=fam[k];
   stringgrid2.Cells[2,l]:=bal[k];
  end;
 end;
end;
условие: таблица с данными: фамилия студента, курс, оценка, оценка в баллах. Нужно посчитать суммарный балл каждого студента.

Последний раз редактировалось Stilet; 21.04.2010 в 11:12.
tvorozhenciya вне форума Ответить с цитированием
Старый 21.04.2010, 11:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
с повторением фамилии
Хм... Я бы пожалуй написал функцию, возвращающую фамилии причем без повторов:
Код:
...
 with StringGrid2 do begin
  RowCount:=0;
  for i:=low(fam) to high(fam) do begin
   flag:=false;
   for k:=0 to RowCount-1 do begin
    if fam[i]=cells[1,k] then begin
     flag:=true;break;
    end;
   end;
   if not flag then begin
    rowCount:=rowCount+1;
    cells[1,rowCount-1]:=fam[i];
   end;
  end;
 end;
А терь функцию возвращающую сумму по фамилии, и в цикле пройтись по гриду, передавая функции фамилию, пусть посуммирует, и вернет результат
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2010, 11:43   #3
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от tvorozhenciya Посмотреть сообщение
Код:
procedure TForm2.N6Click(Sender: TObject);
var
i,l:integer;
bal,fam,ob:array[1..100] of string;
k,j,flag:integer;
begin
k:=0;
l:=1;
 for i:=1 to stringgrid1.rowcount-1 do
  begin
  if (stringgrid1.Cells[1,i]=stringgrid1.Cells[1,i+1]) then
   begin
    k:=k+1;
    l:=l+1;
    fam[k]:=stringgrid1.Cells[1,i];
    bal[k]:=stringgrid1.Cells[4,i];
   stringgrid2.Cells[1,l]:=fam[k];
   stringgrid2.Cells[2,l]:=bal[k];
  end
  else if (stringgrid1.Cells[1,i]<>stringgrid1.Cells[1,i+1]) then
  begin
    k:=k+1;
    l:=l+1;
    fam[k]:=stringgrid1.Cells[1,i];
    bal[k]:=stringgrid1.Cells[4,i];
   stringgrid2.Cells[1,l]:=fam[k];
   stringgrid2.Cells[2,l]:=bal[k];
  end;
 end;
end;
А я вообще ничего не понял в твоем коде...
Зачем делать вторую проверку, если она уже является результатом первой проверки на условие... Это два взаимоисключающие друг друга условия... Else будет выполняться если не соблюдено равенство, зачем там проверка того же самого на неравенство. Да и код полностью повторяется в обеих блоках (абсолютно одинаковый), тогда зачем вообще проверки....
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 21.04.2010, 20:08   #4
tvorozhenciya
 
Регистрация: 03.12.2009
Сообщений: 4
По умолчанию

пример: посчитать суммарное количество баллов студентов: Курочкин -50, Лапкин -35, Зайчиков - 70, Лапкин - 45, Зайчиков - 60. Нужно чтобы вывелось: Курочкин -50, Лапкин - 80, Зайчиков - 130. Так не получится в этой процедуре? а тогда как ее изменить чтобы например из таблицы в memo вывести только столбец с фамилиями и баллами с суммированными
procedure TForm2.N6Click(Sender: TObject);
var
i,l:integer;
bal,fam,ob:array[1..100] of string;
k,j,flag:integer;
begin
k:=0;
l:=1;
for i:=1 to stringgrid1.rowcount-1 do
begin
if (stringgrid1.Cells[1,i]=stringgrid1.Cells[1,i+1]) then
begin
k:=k+1;
l:=l+1;
fam[k]:=stringgrid1.Cells[1,i];
bal[k]:=bal[k]+stringgrid1.Cells[4,i]; а такое может быть????
stringgrid2.Cells[1,l]:=fam[k];
stringgrid2.Cells[2,l]:=bal[k];
end
else if (stringgrid1.Cells[1,i]<>stringgrid1.Cells[1,i+1]) then
begin
k:=k+1;
l:=l+1;
fam[k]:=stringgrid1.Cells[1,i];
bal[k]:=stringgrid1.Cells[4,i];
stringgrid2.Cells[1,l]:=fam[k];
stringgrid2.Cells[2,l]:=bal[k];
end;
end;
end;
tvorozhenciya вне форума Ответить с цитированием
Старый 21.04.2010, 20:13   #5
tvorozhenciya
 
Регистрация: 03.12.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Хм... Я бы пожалуй написал функцию, возвращающую фамилии причем без повторов:
Код:
...
 with StringGrid2 do begin
  RowCount:=0;
  for i:=low(fam) to high(fam) do begin
   flag:=false;
   for k:=0 to RowCount-1 do begin
    if fam[i]=cells[1,k] then begin
     flag:=true;break;
    end;
   end;
   if not flag then begin
    rowCount:=rowCount+1;
    cells[1,rowCount-1]:=fam[i];
   end;
  end;
 end;
А терь функцию возвращающую сумму по фамилии, и в цикле пройтись по гриду, передавая функции фамилию, пусть посуммирует, и вернет результат
Не совсем поняла это код только для одинаковых фамилий?
tvorozhenciya вне форума Ответить с цитированием
Старый 24.04.2010, 17:11   #6
tvorozhenciya
 
Регистрация: 03.12.2009
Сообщений: 4
По умолчанию

Я что-то тут вообще не поняла, что за чем нужно и куда вставлять..
tvorozhenciya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
посчитать значение по каждой статье за определенный период для каждого листа Graver Microsoft Office Excel 5 04.12.2009 01:31
Посчитать и преоброзовать Excel в Delphi WithGod Общие вопросы Delphi 2 03.11.2009 09:49
StringGrid посчитать сумму строк или столбцов Sweetness Общие вопросы Delphi 4 12.10.2009 00:19
суммарный отбор Alexi БД в Delphi 9 15.04.2009 15:26
Средний балл KORT Общие вопросы C/C++ 3 27.02.2008 17:04