Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
vi-ip
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 18
1

Подсчитать сумму строки в StringGrid

15.04.2012, 15:49. Просмотров 5338. Ответов 16
Метки нет (Все метки)

Здравствуйте.
Delphi
1
2
3
 For i := 2 To 6 Do
    For j := 1 To 1 Do
          S := S + StrToInt(Sg.Cells[I,j]);
- так он считает только одну строку.
Мне нужно посчитать сумму каждой строки в диапозоне
Delphi
1
2
for i:=2 to 40 do
for j:=1 to 6 do
т.е от 2 до 6 по строке и так 6 раз
от 3 до 6 и т .д...
Помогите пож-ста...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2012, 15:49
Ответы с готовыми решениями:

Подсчитать сумму каждого столбца и каждой строки StringGrid-а и вывести результат в FixedCols и FixedRows
Нужно рандомно заполнить таблицу, считать ее в двумерный массив. Далее...

Подсчитать сумму элементов, стоящих над главной диагональю StringGrid
Дан двумерный целочисленный массив размера 4х4. Подсчитать сумму элементов,...

Подсчитать сумму элементов строки и столбца матрицы...
Дан двумерный массив. Найдите сумму элементов столбца и строки массива, на...

Содержимое выделенной строки из первого StringGrid-а перенести во второй StringGrid
Нужно написать программу которая выполняет следующие действия. Есть два...

Подсчитать количество одинаковых значений в StringGrid
ДУмал дооолго не вернусь = )) Есть таблица 1 2 6 , kby 2 2 5 [hty 3 4 4...

16
malenkaya
22 / 22 / 12
Регистрация: 13.09.2010
Сообщений: 88
15.04.2012, 20:30 2
Если в первой строке заголовки, то начинаем отсчёт от 1 (иначе от нуля)
Delphi
1
2
 Sum5 := 0;
  for i:=1 to StringGrid1.RowCount-1 do Sum := Sum + StrToFloat(StringGrid1.Cells[4, i]);
Дальше по аналогии
0
vi-ip
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 18
16.04.2012, 03:38  [ТС] 3
Не работает. Пишет, что несовпадение типов 'incompatible type:'integer' and 'extended''
0
pobedinsky
70 / 70 / 13
Регистрация: 21.12.2011
Сообщений: 188
16.04.2012, 09:48 4
Если Sum Integer, то
Delphi
1
2
Sum5 := 0;
  for i:=1 to StringGrid1.RowCount-1 do Sum := Sum + StrToInt(StringGrid1.Cells[4, i]);
0
malenkaya
22 / 22 / 12
Регистрация: 13.09.2010
Сообщений: 88
16.04.2012, 11:03 5
Цитата Сообщение от pobedinsky Посмотреть сообщение
Если Sum Integer, то
Delphi
1
2
Sum5 := 0;
  for i:=1 to StringGrid1.RowCount-1 do Sum := Sum + StrToInt(StringGrid1.Cells[4, i]);
замени StrToInt на StrToFloat и будет тебе счастье
0
vi-ip
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 18
26.04.2012, 15:13  [ТС] 6
Так... По пути возникла новая проблема. У меня 42 строки, сумму каждой из которых мне нужно посчитать. Можно это как нибудь проще сделать, нежели писать код для каждой строки? Помогите пож-ста разобраться.
0
Andretti
250 / 136 / 45
Регистрация: 19.03.2012
Сообщений: 314
Записей в блоге: 2
26.04.2012, 15:54 7
вот он ведь автоперебор строк:
Цитата Сообщение от malenkaya Посмотреть сообщение
Delphi
1
...for i:=1 to StringGrid1.RowCount-1 do ...
а если ты говоришь не про строки а про столбцы, то сделай так:
Delphi
1
2
3
Sum5 := 0;
for i1:=1 to StringGrid1.ColCount-1 do
  for i:=1 to StringGrid1.RowCount-1 do Sum := Sum + StrToInt(StringGrid1.Cells[i1, i]);
0
vi-ip
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 18
26.04.2012, 16:58  [ТС] 8
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
sum1:=0;
sum2:=0;
sum3:=0;
sum4:=0;
sum5:=0;
sum6:=0;
for i:=2 to SG.RowCount-1 do Sum1 := Sum1 + StrToInt(SG.Cells[i, 1]);
for i:=2 to SG.RowCount-1 do Sum2 := Sum2 + StrToInt(SG.Cells[i, 2]);
for i:=2 to SG.RowCount-1 do Sum3 := Sum3 + StrToInt(SG.Cells[i, 3]);
for i:=2 to SG.RowCount-1 do Sum4 := Sum4 + StrToInt(SG.Cells[i, 4]);
for i:=2 to SG.RowCount-1 do Sum5 := Sum5 + StrToInt(SG.Cells[i, 5]);
for i:=2 to SG.RowCount-1 do Sum6 := Sum6 + StrToInt(SG.Cells[i, 6]);
 
B:=sum1/5;
IF (b=a)  THEN
SG1.Rows[1]:=sg.Rows[1];
c:=sum2/5;
IF (c=a) THEN
SG1.Rows[2]:=sg.Rows[2];
d:=sum3/5;
IF (d=a) THEN
SG1.Rows[3]:=sg.Rows[3];
e:=sum4/5;
IF (e=a) THEN
SG1.Rows[4]:=sg.Rows[4];
q:=sum5/5;
IF (a=q) THEN
SG1.Rows[5]:=sg.Rows[5];
z:=sum6/5;
IF (a=z) THEN
SG1.Rows[6]:=sg.Rows[6];
т.е я пишу посчитать сумму каждой строки, а потом, ниже, вычисляю средний бал и копирую строки во вторую SG. Но если это делать для 42 строк-это огого) Как сделать проще, HELP ME PLEASE!
0
pobedinsky
70 / 70 / 13
Регистрация: 21.12.2011
Сообщений: 188
27.04.2012, 09:34 9
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm1.btn2Click(Sender: TObject);
var
  i, j, s: Integer;
  sr: Real;
begin
  SG.ColCount := 6;
  SG.RowCount := 43;
  SG1.ColCount := 6;
  SG1.RowCount := 43;  // кол-во столбцов и строк
 
  for j := 1 to SG.RowCount - 1 do
    for i := 1 to SG.ColCount - 1 do
      SG.Cells[i, j] := FloatToStr(Random(8));
  Randomize; // заполняем случайными числами
 
  s := 0;
 
  SG1.Cells[1, 0] := 'Сумма';
  SG1.Cells[2, 0] := 'Среднее';
 
  for j := 1 to SG.RowCount - 1 do
  begin
    for i := 1 to SG.ColCount - 1 do
    begin
      s := s + StrToInt(SG.Cells[i, j]); // считаем сумму по строке
    end;
    SG1.Cells[1, j] := IntToStr(s); // пишем сумму во второй грид 1 столбец
    sr := s / (SG.ColCount - 1); // считаем среднее (сумма/ на кол-вол эл-в в строке - 1)
    SG1.Cells[2, j] := FloatToStr(sr); // пишем сумму во второй грид 2 столбец
    s := 0;
  end;
end;
p.s. Только я не понял, что у Вас в a находится и зачем сравнивать его со средним значением по строке.
1
vi-ip
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 18
27.04.2012, 12:05  [ТС] 10
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
procedure TForm1.Button2Click(Sender: TObject);
var
  i, j, s: Integer;
  sr,a: Real;
begin
  
a:=strtofloat(edit1.Text);   //             ПРИСВАИВАЮ А 
  
SG.ColCount := 7;
  SG.RowCount := 42;
  SG1.ColCount := 7;
  SG1.RowCount := 42;  
 
   for j := 1 to SG.RowCount - 1 do
    for i := 2 to SG.ColCount - 1 do
 
  a:=0;
  s := 0;
 
  for j := 1 to SG.RowCount - 1 do
  begin
    for i := 2 to SG.ColCount - 1 do
    begin
      s := s + StrToInt(SG.Cells[i, j]); 
       end;
 
    sr := s / 5; 
 
      if (a=sr) then
    sg1.Cells[i,j]:=sg.Cells[i,j]; //                                   КОПИРУЮ
    s := 0;
end;
end;
Он должен при условии, если А (то-что ввел в Edit1) равно SR (среднему значению ) скопировать строки с SG в SG1, но при запуске ничего не происходит...Что не правильно?
0
pobedinsky
70 / 70 / 13
Регистрация: 21.12.2011
Сообщений: 188
27.04.2012, 12:27 11
Не понимаю, что Вы хотите сделать. Если средний балл = А, то что куда скопировать ?

Добавлено через 11 минут
Скопировать всю строку с оценками в другой грид?
1
vi-ip
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 18
27.04.2012, 13:44  [ТС] 12
Цитата Сообщение от vi-ip Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
procedure TForm1.Button2Click(Sender: TObject);
var
  i, j, s: Integer;
  sr,a: Real;
begin
  
a:=strtofloat(edit1.Text);   //             ПРИСВАИВАЮ А 
  
SG.ColCount := 7;
  SG.RowCount := 42;
  SG1.ColCount := 7;
  SG1.RowCount := 42;  
 
   for j := 1 to SG.RowCount - 1 do
    for i := 2 to SG.ColCount - 1 do
 
  a:=0;
  s := 0;
 
  for j := 1 to SG.RowCount - 1 do
  begin
    for i := 2 to SG.ColCount - 1 do
    begin
      s := s + StrToInt(SG.Cells[i, j]); 
       end;
 
    sr := s / 5; 
 
      if (a=sr) then
    sg1.Cells[i,j]:=sg.Cells[i,j]; //                                   КОПИРУЮ
    s := 0;
end;
end;
Он должен при условии, если А (то-что ввел в Edit1) равно SR (среднему значению ) скопировать строки с SG в SG1, но при запуске ничего не происходит...Что не правильно?
т.е строка должна копироваться, если её средний балл равен A(edit1).

Добавлено через 55 минут
Цитата Сообщение от pobedinsky Посмотреть сообщение
Не понимаю, что Вы хотите сделать. Если средний балл = А, то что куда скопировать ?

Добавлено через 11 минут
Скопировать всю строку с оценками в другой грид?
нет, только сроки, которые по среднему баллу равны А(Edit)
0
pobedinsky
70 / 70 / 13
Регистрация: 21.12.2011
Сообщений: 188
27.04.2012, 13:52 13
Проект приложил. Код кому нужно будет.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
procedure TForm1.btn2Click(Sender: TObject);
var
  i, j, l, m, s, k: Integer;
  sr: Real;
begin
  SG.FixedCols := 1;
  SG.FixedRows := 1;
  SG1.FixedCols := 1;
  SG1.FixedRows := 1;
  SG.ColCount := 6;
  SG.RowCount := 43;
  SG1.ColCount := 6;
  SG1.RowCount := 43; 
 
  s := 0;
  l := 1;
 
  for j := 0 to SG1.RowCount - 1 do
    for i := 0 to SG1.ColCount - 1 do
      SG1.Cells[i, j] := '';
 
  if (Length(edit1.Text) > 0) then
  begin
    for j := 1 to SG.RowCount - 1 do
      for i := 1 to SG.ColCount - 1 do
        SG.Cells[i, j] := FloatToStr(Random(8));
    Randomize;
 
    for j := 1 to SG.RowCount - 1 do
    begin
      for i := 1 to SG.ColCount - 1 do
      begin
        s := s + StrToInt(SG.Cells[i, j]);
      end;
 
      sr := s / (SG.ColCount - 1);
 
      if (sr = StrToFloat(edit1.Text)) then
      begin
        SG1.Rows[l] := SG.Rows[j];
        SG1.Cells[0, l] := IntToStr(j) + ' строка';
        inc(l);
      end;
      s := 0;
    end;
  end
  else
    ShowMessage('Вы не ввели число');
end;
1
Вложения
Тип файла: rar sg_rand.rar (195.5 Кб, 58 просмотров)
vi-ip
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 18
27.04.2012, 15:44  [ТС] 14
Спасибо огромное! И совсем не большой вопрос, в конце где вы указываете Inc(l) когда копирует, в 0 столбце показывает номер строки с набранными баллами. Можно ли туда впихнуть строки с фамилиями?
0
pobedinsky
70 / 70 / 13
Регистрация: 21.12.2011
Сообщений: 188
27.04.2012, 15:48 15
Можно впихнуть, что угодно. Где фамилии хранятся ?
1
vi-ip
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 18
27.04.2012, 15:53  [ТС] 16
Фамилии у меня хранятся в sg.cells[0,1], sg.cells[0,2]... sg.cells[0,42], чтобы, когда ср.значение строки совпадало с введенным, копирование происходило с sg.cells[0,1]...
0
pobedinsky
70 / 70 / 13
Регистрация: 21.12.2011
Сообщений: 188
27.04.2012, 16:03 17
Delphi
1
SG1.Cells[0, l] := SG.Cells[0, j]
по идее так, если Фамилии в 0 ячейке хранятся.
1
27.04.2012, 16:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 16:03

Как подсчитать значение из колонок в Stringgrid
У меня имеется Stringgrid и в нем есть есть три колонки в которых указаны...

Нужно, чтобы переносились из одного stringgrid в другой. Переносится, но на те же строки и образуются пустые строки
Прикрепляю код. Помогите пожалуйста. Я в DElphi новичок var i: integer;...

Delphi 7 Stringgrid Нужно сделать цикл для заполнения Stringgrid данными из другого Stringgrid
Нужно чтобы из Stringgrid1 данные переносились в Stringgrid2 Но ТОЛЬКО ПО...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru