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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2011, 00:14   #1
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию Подсчитать итоговые значения в StringGrid

Есть StringGrid заполненный цифрами. Как сделать так, в чтобы в нижней дополнительной строке выводилось произведение нечетных элементов каждого столбца



Подправил тему.
и совет на будущее, старайтесь давать тему так,
чтобы было понятно, что, где и как?
и какой язык программирования нужен...

Модератор

Последний раз редактировалось Serge_Bliznykov; 12.02.2011 в 08:15. Причина: Подправил тему. Модератор.
StudentMarat вне форума Ответить с цитированием
Старый 12.02.2011, 08:18   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Теперь по сути проблемы.

Какой язык программирования?
Что именно не получается?
Не знаете, как перемножить нечётные элементы каждого столбца?
Или не знаете, как записать полученное произведение в нижнюю строчку?
Или не знаете, на какое событие "повесить" обрабтку?..

p.s. по сути задача сводится банально к двум вложенным циклам. всего примерно 7-10 строчек кода...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.02.2011, 14:02   #3
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Язык программирования Delphi 7.
Не знаю как перемножить нечётные элементы каждого столбца и как записать полученное произведение в нижнюю строчку

p.s. Serge_Bliznykov если не трудно подскажите. Я задачу свою почти всю сделал, вот только на этом и застрял.

Ну неужели никто не знает???

Последний раз редактировалось Stilet; 12.02.2011 в 17:52.
StudentMarat вне форума Ответить с цитированием
Старый 12.02.2011, 17:50   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

ну а в чём проблема?
Пробегаете по столбцу и умножаете.
Проверка на не чётность всё таже
Код:
if (chislo mod 2) <> 0 then умножаете
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 12.02.2011, 17:58   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ну неужели никто не знает???
Неа. Прикинь, непорядок, да?

Код:
with StringGrd do 
 for i:=0 to ColCount-2 do begin s:=StrToInt(Cells[i,0]);
  for j:=1 to RowCount-1 do begin
   s:=s*StrToInt(Cells[i,j]);
   Cells[i,ColCount-1]:=IntToStr(s);
  end;
 end;
Где S Целая переменка
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.02.2011, 18:39   #6
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Ну вот код который я сделал
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    StringGrid1: TStringGrid;
    ScrollBar1: TScrollBar;
    StringGrid2: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    RadioGroup1: TRadioGroup;
    procedure ScrollBar1Change(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure FormDblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.ScrollBar1Change(Sender: TObject);
begin
  StringGrid1.RowCount:=ScrollBar1.Position;
end;

procedure TForm2.RadioGroup1Click(Sender: TObject);
begin
StringGrid1.ColCount:=strtoint(RadioGroup1.Items[RadioGroup1.itemindex]);
StringGrid2.ColCount:=strtoint(RadioGroup1.Items[RadioGroup1.itemindex]);
end;

procedure TForm2.FormDblClick(Sender: TObject);
var i,j,s:byte;
    t:integer;
begin
randomize;
for i:=0 to StringGrid1.ColCount-1 do
  begin
    for j:=0 to stringgrid1.RowCount-1 do
      begin
        t:=round(random*200-100);
        StringGrid1.Cells[i,j]:=inttostr(t);
         if (t mod 2)<>0 then s:=s*j;
      end;


        StringGrid2.Cells[i,0]:=inttostr(s);
  end;

  end;


end.
Здесь StringGrid1 заполняется случайными числами. Это у меня сделано. Попробовал сделать произведение нечетных чисел не получилось. Что-то он у меня не то считает

Не знаю че то не получается. Помогите доделать

У меня почти получилось. Он подсчитывает сумму элементов каждого столбца, но мне нужно, чтобы он подсчитывал сумму нечетных элементов каждого столбца. Помогите доделать. Вот код

Код:
procedure TForm2.FormDblClick(Sender: TObject);
var
    i,j,t,s,k,l:integer;
begin
randomize;

for i:=0 to StringGrid1.ColCount-1 do
  begin

  for j:=0 to stringgrid1.RowCount-1 do
  begin
  t:=round(random*200-100);
  StringGrid1.Cells[i,j]:=inttostr(t);

  end;
end;

  with StringGrid1 do
 for i:=0 to ColCount-1 do
 begin
  s:=StrToInt(Cells[i,0]);
    for j:=1 to RowCount-1 do begin
      s:=s+StrToInt(Cells[i,j]);
      StringGrid2.Cells[i,0]:=IntToStr(s);
  end;
 end;


 end;
Помогите доделать

Последний раз редактировалось Stilet; 13.02.2011 в 12:12.
StudentMarat вне форума Ответить с цитированием
Старый 13.02.2011, 00:22   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
  with StringGrid1 do
 for i:=0 to ColCount-1 do
 begin
  s:=StrToInt(Cells[i,0]);
    for j:=1 to RowCount-1 do begin
      if odd(StrToInt(Cells[i,j])) then   s:=s+StrToInt(Cells[i,j]);
      StringGrid2.Cells[i,0]:=IntToStr(s);
  end;
 end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.02.2011, 12:17   #8
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Привет всем!!! В общем получилось у меня эта работа. 2 дня мучений не прошли даром. Вроде бы работа легкая, а как не смешно, застрял на ней. Serge_Bliznykov т.к. Вы подсказали, впринципе программа работала, но там был маленький "косяк": программа обязательно складывала первые числа первое число каждого столбца, и при этом не проверяло, четное число это или нет. Но все равно спасибо Вам за подсказку. Именно на основании этой подсказки у меня получилось написать программу. Я немного переделал код программы. Вот он, может кому-нибудь пригодиться.

Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    StringGrid1: TStringGrid;
    ScrollBar1: TScrollBar;
    StringGrid2: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    RadioGroup1: TRadioGroup;
    Label3: TLabel;
    procedure ScrollBar1Change(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure FormDblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.ScrollBar1Change(Sender: TObject);
begin
  StringGrid1.RowCount:=ScrollBar1.Position;
end;

procedure TForm2.RadioGroup1Click(Sender: TObject);
begin
StringGrid1.ColCount:=strtoint(RadioGroup1.Items[RadioGroup1.itemindex]);
StringGrid2.ColCount:=strtoint(RadioGroup1.Items[RadioGroup1.itemindex]);
end;

procedure TForm2.FormDblClick(Sender: TObject);
var
    i,j,t,s,k,l,temp:integer;
begin
randomize;

for i:=0 to StringGrid1.ColCount-1 do
  begin

  for j:=0 to stringgrid1.RowCount-1 do
  begin
  t:=round(random*200-100);
  StringGrid1.Cells[i,j]:=inttostr(t);

  end;
end;


  for i:=0 to stringgrid1.ColCount-1 do begin
  temp:= 0;
  for j:=0 to stringgrid1.RowCount-1 do
   try
    if odd(StrToInt(StringGrid1.Cells[i,j])) then temp:= temp+ strtoint(stringgrid1.Cells[i,j])
   except
   end;
  stringgrid2.Cells[i,0]:= inttostr(temp)
 end
end;
StudentMarat вне форума Ответить с цитированием
Старый 13.02.2011, 17:54   #9
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Уважаемые знатоки! Снова нужна помощь. Очень прошу помочь разобраться!
Дана матрица StringGrid - заполняется она случайными числами от -100 до 100 на двойной щелчок мыши. Дополнительный столбец матрицы выводит сумму нечетных чисел в каждом столбце. Сравнивая эти суммы, я должен выбрать наименьшую, и по нажатию на кнопку столбец с наименьшей суммой выделяется красной рамкой.
Все работает, наименьшая сумма находится, а вот чтобы столбец выделялся красной рамкой не могу сделать. Привожу код программы

Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ExtCtrls, Menus;

type
  TForm2 = class(TForm)
    StringGrid1: TStringGrid;
    ScrollBar1: TScrollBar;
    StringGrid2: TStringGrid;
    Label1: TLabel;
    Label2: TLabel;
    RadioGroup1: TRadioGroup;
    Label3: TLabel;
    Button1: TButton;
    procedure ScrollBar1Change(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure FormDblClick(Sender: TObject);

    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;


implementation

{$R *.dfm}

procedure TForm2.ScrollBar1Change(Sender: TObject);
begin
  StringGrid1.RowCount:=ScrollBar1.Position;
end;

procedure TForm2.RadioGroup1Click(Sender: TObject);
begin
StringGrid1.ColCount:=strtoint(RadioGroup1.Items[RadioGroup1.itemindex]);
StringGrid2.ColCount:=strtoint(RadioGroup1.Items[RadioGroup1.itemindex]);
end;

procedure TForm2.FormDblClick(Sender: TObject);
var
    i,j,t,temp:integer;
begin
randomize;

for i:=0 to StringGrid1.ColCount-1 do
  begin

  for j:=0 to stringgrid1.RowCount-1 do
  begin
  t:=round(random*200-100);
  StringGrid1.Cells[i,j]:=inttostr(t);

  end;
end;


  for i:=0 to stringgrid1.ColCount-1 do begin
  temp:= 0;
  for j:=0 to stringgrid1.RowCount-1 do
   try
    if odd(StrToInt(StringGrid1.Cells[i,j])) then temp:= temp+ strtoint(stringgrid1.Cells[i,j])
   except
   end;
  stringgrid2.Cells[i,0]:= inttostr(temp);
 end;

end;



procedure TForm2.Button1Click(Sender: TObject);
var
min, i, j : Integer;
begin
  min := High(Integer);
  for i := 0 to StringGrid2.ColCount - 1 do
    for j := 0 to StringGrid2.RowCount - 1 do
      if min > StrToInt(StringGrid2.Cells[i, j])
            then
                min := StrToInt(StringGrid2.Cells[i, j]);
   Label3.Caption:=IntToStr(min);
end;
end.
StudentMarat вне форума Ответить с цитированием
Старый 13.02.2011, 19:12   #10
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Вот пока до чего додумался.
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
min, i, j : Integer;
begin
  StringGrid1.Repaint;
  StringGrid1.Canvas.Brush.Style:=bsClear;
  StringGrid1.Canvas.Pen.Width:=2;
  StringGrid1.Canvas.Pen.Color:=clRed;
  min := High(Integer);
  for i := 0 to StringGrid2.ColCount - 1 do
    for j := 0 to StringGrid2.RowCount - 1 do
      if min > StrToInt(StringGrid2.Cells[i, j])
            then
            begin
                min := StrToInt(StringGrid2.Cells[i, j]);

            end;
    Label3.Caption:=IntToStr(min);
     stringgrid1.Canvas.Rectangle(i*65,0,i*65+65,25*stringgrid1.RowCount);

end;
StudentMarat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(C++) Подсчитать в цикле значения функции Mister_Originalnos Общие вопросы C/C++ 6 05.12.2010 22:51
Все значения из ComboBox в StringGrid artemavd Общие вопросы Delphi 6 21.07.2010 10:00
Сложить значения в StringGrid zluchka Помощь студентам 3 31.10.2009 17:40
Итоговые поля в ленточной форме Botanik1987 Microsoft Office Access 4 14.09.2009 09:00
Как подсчитать все значения в колоне aesoem БД в Delphi 5 03.07.2008 15:50