|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сумма столбцов в Stringrid
Мне нужно чтобы программа считала сумму всех ячеек столбца и выводила их в другой Stringrid.
Код:
var Form1: TForm1; SG1 : Array[1..5,1..4] Of integer; //входной массив (стринггрид1) SG2 : Array[1..4] Of integer; //исходной массив (стринггрид2) i, j, s : Integer; //переменные...(сумма, строки, столбцы) Код:
begin For i:=1 To 5 Do For j:=1 To 4 Do If (StrnGrd1.Cells[j-1,i-1]='') Then SG1[i,j] := 0 Else SG1[i,j] := StrToInt(StrnGrd1.Cells[j-1,i-1]); //если ячейки пустые, записать туда "ноль" For i:=1 To strngrd1.ColCount Do //для каждого столбца Begin S:=0; for j:=1 to 5 do begin //считаем сумму каждой ячейки S:=s+SG1[i,j]; end; SG2[i]:=S; //присваиваем сумму ячейке матрицы SG2 End; For i:=1 To 4 Do StrnGrd2.Cells[0,i-1] := FloatToStr(SG2[i]) //Вывод в другой стринггрид (Stringgrid2 или strngrd) end; StrnGrd - тоже самое, что и stringgrid. Программа работает, но считает неправильно. В чем может быть проблема? http://clip2net.com/s/54UMIS - картинка Последний раз редактировалось Restart, 17.05.2013 в 18:23. |
#2
|
||||
|
||||
Ничего не могу понять в этом коде, хоть отформатируй по человечески и подпиши, что значат переменные.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
||||
|
||||
Цитата:
Код:
var SG1 : array [0..4, 0..3] of integer = (( 34, -23, 48, 47), ( -14, 29, 8 , 37), ( 46, 13, -12, 41), ( -3 , 17, 38, 5 ), ( -11, -22, 18, -6)); procedure TForm1.Button1Click(Sender: TObject); var Col, Row: integer; begin for Row:= 0 to StringGrid1.RowCount-1 do // Заполнение грида for Col:= 0 to StringGrid1.ColCount-1 do StringGrid1.Cells[Col, Row]:= IntToStr(SG1[Row, Col]); end; procedure TForm1.Button2Click(Sender: TObject); var Col, Row, Sum: integer; begin for Row := 0 to StringGrid1.RowCount-1 do begin Sum:= 0; for Col := 0 to StringGrid1.ColCount-1 do // Сложение всех колонок Sum:= Sum + StrToInt(StringGrid1.Cells[Col, Row]); StringGrid2.Cells[0, Row]:= IntToStr(Sum); end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Restart (17.05.2013)
|
#4
|
|||
|
|||
Цитата:
Код:
begin Randomize; For i:=1 To 5 Do For j:=1 To 4 Do Strngrd1.Cells[j-1,i-1] := FloatToStr(Random(80)-25); end; Проблем у меня с этим не будет, я переделаю. Ваш код работает, и считает, но не столбцы, а строки. Нужно как-то изменить: Код:
begin for Row := 0 to StringGrid1.RowCount-1 do begin Sum:= 0; for Col := 0 to StringGrid1.ColCount-1 do // Сложение всех колонок Sum:= Sum + StrToInt(StringGrid1.Cells[Col, Row]); StringGrid2.Cells[0, Row]:= IntToStr(Sum); end; end; и тут я всегда зависаю... |
#5
|
||||
|
||||
переменные местами поменять
сейчас слева направо, сверху вниз, а надо сверху вниз и слева направо. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#6
|
||||
|
||||
Ну и неплохо бы учитывать, что могут быть названия колонок, строк. А тогда индекс начальный не 0 будет. Желательно использовать для задания границ грида специальные свойства хранящие эту инфу.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Restart (17.05.2013)
|
#7
|
|||
|
|||
Цитата:
Код:
begin for Col := 0 to StringGrid1.ColCount-1 do begin Sum:= 0; for Row := 0 to StringGrid1.RowCount-1 do Sum:= Sum + StrToInt(StringGrid1.Cells[Col, Row]); StringGrid2.Cells[0, Row]:= IntToStr(Sum); end; end; не работает |
#8
|
|||
|
|||
Цитата:
Картинка http://clip2net.com/s/54UMIS |
#9
|
||||
|
||||
Цитата:
Наверное ещё хорошо бы сделать так Код:
var SG1: array of integer; ... begin SetLength(SG1, StringGrid1.RowCount,StringGrid1.ColCount); ... end; Оффтоп: Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 17.05.2013 в 19:27. |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Restart (17.05.2013)
|
#10
|
|||
|
|||
Цитата:
|
#11
|
||||
|
||||
Цитата:
Код:
procedure TForm1.Button2Click(Sender: TObject); var Col, Row, Sum: integer; begin for Col := 0 to StringGrid1.ColCount-1 do begin Sum:= 0; for Row := 0 to StringGrid1.RowCount-1 do Sum:= Sum + StrToInt(StringGrid1.Cells[Col, Row]); StringGrid2.Cells[Col, 0]:= IntToStr(Sum); end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Restart (17.05.2013)
|
#12
|
|||
|
|||
Цитата:
Да, это оно, работает Спасибо. Но, ведь же есть какой-то способ, чтобы вывести их в столбец (во втором стринггриде)? |
#13
|
||||
|
||||
Можно, нужно добавить ещё одну переменную типа integer, напр b, потом в самом начале процедуры задать её как ноль, а в цикле... не можно проще, вот так
Код:
procedure TForm1.Button2Click(Sender: TObject); var Col, Row, Sum: integer; begin for Col := 0 to StringGrid1.ColCount-1 do begin Sum:= 0; for Row := 0 to StringGrid1.RowCount-1 do Sum:= Sum + StrToInt(StringGrid1.Cells[Col, Row]); StringGrid2.Cells[0, Col]:= IntToStr(Sum); end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Restart (17.05.2013)
|
#14
|
|||
|
|||
Цитата:
Просто и елементарно. Я действительно долго мучался как правильно написать... Спасибо. Вы мне очень помогли |