Тема: два цикла
Показать сообщение отдельно
  #7  
Старый 19.08.2008, 18:28
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Во надо писать так
Код:
var
 i, j, Buf: Integer;
begin

{ прогоняешь всю таблицу и ищешь пустые ячейки }

 for i := 1 to 25 do
  for j := 0 to 3 do
   if SG2.Cells[j,i] = '' then
   begin
    ShowMessage(Format('Ошибка в таблице! Ячейка [%d, %d]', [j+1, i]));
    Exit;
   end;

{ таблица заполнена выполянем код }

 for i := 1 to 25 do
 begin
 //количество оценок в SG3
   SG3.Cells[0,i]:=IntToStr(StrToInt(SG2.Cells[0,i])+
                            StrToInt(SG2.Cells[1,i])+
                            StrToInt(SG2.Cells[2,i])+
                            StrToInt(SG2.Cells[3,i]));
 //средний бал в SG3
   SG3.Cells[1,i]:=
   FloatToStrF(2*StrToInt(SG2.Cells[0,i])/StrToInt(SG3.Cells[0,i])+
               3*StrToInt(SG2.Cells[1,i])/StrToInt(SG3.Cells[0,i])+
               4*StrToInt(SG2.Cells[2,i])/StrToInt(SG3.Cells[0,i])+
               5*StrToInt(SG2.Cells[3,i])/StrToInt(SG3.Cells[0,i]), ffFixed, 1, 1);
 //Качество успеваемости в SG3
   SG3.Cells[2,i]:=
   FloatToStrF(Trunc((StrToInt(SG2.Cells[2,i])+StrToInt(SG2.Cells[3,i]))*100)
               /StrToInt(SG3.Cells[0,i]), ffFixed, 0, 0);
 //Успеваемость в SG3
   SG3.Cells[3,i]:=
   FloatToStrF(100-Trunc(StrToInt(SG2.Cells[0,i])*100)/
               StrToInt(SG3.Cells[0,i]), ffFixed, 0, 0);
 //Обученность в SG3
   SG3.Cells[4,i]:=
   FloatToStrF(Trunc((2*StrToInt(SG2.Cells[0,i])+
                      3*StrToInt(SG2.Cells[1,i])+
                      4*StrToInt(SG2.Cells[2,i])+
                      5*StrToInt(SG2.Cells[3,i]))*20)
                      /StrToInt(SG3.Cells[0,i]), ffFixed, 0, 0);
 //Четвертная оценка в SG3
   SG3.Cells[5,i]:=
   FloatToStrF(Trunc(2*StrToInt(SG2.Cells[0,i])+
                     3*StrToInt(SG2.Cells[1,i])+
                     4*StrToInt(SG2.Cells[2,i])+
                     5*StrToInt(SG2.Cells[3,i]))
                     /StrToInt(SG3.Cells[0,i]), ffFixed, 0, 0);
 end;

{а вот таким образом заменяется второй участок}

 for i := 0 to 3 do
 begin
  Buf := 0;
   for j := 1 to 25 do
    Buf := Buf + StrToInt(SG2.Cells[i, j]);
  SG2.Cells[i, 26] := IntToStr(Buf);
 end;

А теперь по самой программе вопрос возник. Мне кажется ты делаешь ее неправильно, а точнее саму реализацию ...
Сматри ты пишешь количество оценок в SG3, а насамом неле считаешь их сумму О_о
Дальше я не стал вникать, НО то что если у тебя оценки 1, 1, 5, 2 и ты в четверти получаешь 4, ну это уже никак (((
Ответить с цитированием