![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Умоляю помогите((((
Мне совершенно никак не дается программирование, ничего не понимаю. Что нужно написать, чтобы посчитать сумму содержимого ячеек StringGrid, найти минимальное и максимальное значение среди них и среднее значение??? |
|
#2
|
|||
|
|||
|
Ну, доступ к данным производится через StringGrid.Cells[I,J]. Соответсвенно, нужны вложенные циклы. Ну и не забыть, что в ячейке может не быть данных (ячейки имеют тип String, соответсвенно, надотданные конвертировать).
Вот пример подсчета суммы ячеек. Мин и Макс по образу сам сделаешь. (предполагаем, что в ячейках целые числа) Код:
var
I, J : Integer;
S : Integer;
begin
S := 0;
For I := 0 To StringGrid1.RowCount-1 Do
For J := 0 To StringGrid1.ColCount-1 Do
Try
S := S + StrToInt(StringGrid1.Cells[I,J]);
Except
// do nothing
End;
ShowMessage('Сумма = ' + IntToStr(S));
end;PS. Под отладчиком могут возникать ошибки, если не удастся конвертировать данные ячейки в число. Просто пускай дальше. Если запускать не из под отладчика, то ошибок видно не будет. PPS. Не помню точно какая координата (колонки или столбца) должна идти первой при обращении к ячейке - проверь по справке. |
|
#3
|
|||
|
|||
|
Я никак не понимаю, почему не запускается именно с того места, где объявляются переменные I,J.
Я может быть вообще что-то не так сделала: Код:
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
StringGrid1.Cols[0].Text:='Январь' ;
StringGrid1.Cols[1].Text:='Февраль' ;
StringGrid1.Cols[2].Text:='Март' ;
StringGrid1.Cols[3].Text:='Апрель';
StringGrid1.Cols[4].Text:='Май' ;
StringGrid1.Cols[5].Text:='Июнь';
StringGrid1.Cols[6].Text:='Июль' ;
StringGrid1.Cols[7].Text:='Август';
StringGrid1.Cols[8].Text:='Сентябрь' ;
StringGrid1.Cols[9].Text:='Октябрь';
StringGrid1.Cols[10].Text:='Ноябрь';
StringGrid1.Cols[11].Text:='Декабрь' ;
StringGrid1.Cells[0,1]:='12000';
StringGrid1.Cells[1,1]:='14500';
StringGrid1.Cells[2,1]:='15800';
StringGrid1.Cells[3,1]:='13700';
StringGrid1.Cells[4,1]:='19900';
StringGrid1.Cells[5,1]:='17400';
StringGrid1.Cells[6,1]:='16200';
StringGrid1.Cells[7,1]:='11700';
StringGrid1.Cells[8,1]:='18700';
StringGrid1.Cells[9,1]:='14200';
StringGrid1.Cells[10,1]:='12800';
StringGrid1.Cells[11,1]:='17600';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
var I, J : Integer;
S : Integer;
begin
S := 0;
For j := 0 To StringGrid1.RowCount-1 Do
For I := 0 To StringGrid1.ColCount-1 Do
Try
S := S + StrToInt(StringGrid1.Cells[I,J]);
Except
// do nothing
End;
ShowMessage('Сумма = ' + IntToStr(S));
end;
Edit1.Text:=s;
end;Что нужно изменить? (Я уже на грани нервного срыва) Последний раз редактировалось Admin, 12.12.2010 в 13:13. |
|
#4
|
||||
|
||||
|
Ну для твоего случая достаточно такого:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i, n: integer;
begin
n := 0;
for i := 0 to StringGrid1.ColCount - 1 do
begin
try
n := n + StrToInt(StringGrid1.Cells[i, 1]);
except
end;
end;
ShowMessage('Сумма = ' + IntToStr(n));
end; |
|
#5
|
|||
|
|||
|
Спасибо огромное!!!
А как тогда сделать, чтобы ответ выводился в Edit1? |
|
#6
|
||||
|
||||
|
Вместо ShowMessage напиши:
Код:
Edit1.Text := 'Сумма = ' + n; |
|
#7
|
|||
|
|||
|
Еще раз благодарю за помощь!!!
|