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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2013, 20:50   #1
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию Действия с массива(StringGrid) в Delphi 7

Имеется вот такая задачка:
Найти отношение суммы элементов к произведению отрицательных элементов массива A=(a1,a2,...,aj).

Обязательное условие - Задание массива через StringGrid.(вручную)

Подскажите, как произвести какие-либо арифметические действия с ячейками StringGrid`a с дальнейшим выведением ответа в Edit.

попробовал вот так, но к сожалению считает не правильно, потому что считает в String, в Integer перевести не удаётся.

Вот мой код:


Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
j:integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,1]:='A';

For j:=1 to 10 do
begin
StringGrid1.Cells[j,0]:=IntToStr(j);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,d:integer;
begin
a:=StrToInt(Form1.StringGrid1.Cells[1,1]);
b:=StrToInt(Form1.StringGrid1.Cells[2,1]);
c:=StrToInt(Form1.StringGrid1.Cells[3,1]);
d:=StrToInt(Form1.StringGrid1.Cells[4,1]);
Edit1.Text:=IntToStr(a+b+c+d);                      // Высчитывает сумму всех элементов
end;
procedure TForm1.Button2Click(Sender: TObject);   // 2 кнопка должна умножать все отриц. элементы массива, пока не выходит(
var a:integer;
begin
For j:=1 to 10 do
begin
a:=StrToInt(Form1.StringGrid1.Cells[j,1]);
If a<0 then Edit2.Text:=IntToStr(Form1.StringGrid1.Cells[j,1]);  

end;
end;
end.

Последний раз редактировалось ShaoKhan; 06.02.2013 в 21:39.
ShaoKhan вне форума Ответить с цитированием
Старый 06.02.2013, 21:40   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Вот это - сумма

Код:
sum:=0;
for i:=0 to StringGrid1.RowCount-1 do
  for j:=0 to StringGrid.Colcount-1 do
    sum:=sum+StrToInt(StringGrid1.Cells[j,i]);
Произведение по аналогии

Отношение суммы к произведению - число действительное, а не целое, так как используется деление. Поэтому:

Код:
Edit1.text:=FloatToStr(sum/pr);
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 06.02.2013, 21:46   #3
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Вот это - сумма

Код:
sum:=0;
for i:=0 to StringGrid1.RowCount-1 do
  for j:=0 to StringGrid.Colcount-1 do
    sum:=sum+StrToInt(StringGrid1.Cells[j,i]);
Произведение по аналогии

Отношение суммы к произведению - число действительное, а не целое, так как используется деление. Поэтому:

Код:
Edit1.text:=FloatToStr(sum/pr);


Взгляните, на мой обновлённый код.
Попробовал ваш, к сожалению делфи выдают ошибку.
ShaoKhan вне форума Ответить с цитированием
Старый 06.02.2013, 21:47   #4
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию

Как можно написать вот такое условие?
If a,b,c,d < 0 ?
ShaoKhan вне форума Ответить с цитированием
Старый 06.02.2013, 21:52   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
If (a<0) and (b<0) and (c<0) and (d < 0)?
А чем Ваш обновленный код лучше предыдущего? Я Вам дал универсальный для любого стринггрида независимо от количества колонок и строк. А почему он ошибку выдает - я хз, у Вас же информации нуль. Какая ошибка? Какие данные вводите? Есть ли в стринггриде изначально фиксированные (которые серые) столбцы и строки?

Ну давайте разберем Ваш код:

Код:
a:=StrToInt(Form1.StringGrid1.Cells[1,1]);
b:=StrToInt(Form1.StringGrid1.Cells[2,1]);
c:=StrToInt(Form1.StringGrid1.Cells[3,1]);
d:=StrToInt(Form1.StringGrid1.Cells[4,1]);
Edit1.Text:=IntToStr(a+b+c+d);                      // Высчитывает сумму всех элементов
в принципе работать будет. И, видимо, работает. Но для подобных операций и придумывались такие структуры, как циклы.

Код:
procedure TForm1.Button2Click(Sender: TObject);   // 2 кнопка должна умножать все отриц. элементы массива, пока не выходит(
var a:integer;
begin
For j:=1 to 10 do
begin
a:=StrToInt(Form1.StringGrid1.Cells[j,1]);
If a<0 then Edit2.Text:=IntToStr(Form1.StringGrid1.Cells[j,1]);  

end;
end;
Не вычислит она Вам произведения. Тут даже ни одной операции умножения нет - есть только присвоение значения ячейки едиту.

Так вычислит:

Код:
begin
pr"=1;
For j:=1 to 10 do
begin
  a:=StrToInt(Form1.StringGrid1.Cells[j,1]);
  If a<0 then pr:=pr*a;
end;
Edit2.Text:=IntToStr(pr);  
end;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 06.02.2013 в 21:56.
Sciv вне форума Ответить с цитированием
Старый 06.02.2013, 22:17   #6
ShaoKhan
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 33
По умолчанию

Странно, но произведение тоже выдаёт ту же ошибку.
"Project raised exception class EConvertError with message "' is not a valid integer value'. Process stopped. Use Step or Run to continue.


Попробую по отдельной ячейке высчитать произведение.
ShaoKhan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
действия над матрицами (Delphi) STALKER1993 Помощь студентам 1 26.06.2012 12:42
Действия в StringGrid Алекссс Общие вопросы Delphi 5 19.06.2012 11:43
Действия в WMQueryEndSession (Delphi) Shouldercannon Win Api 1 17.02.2012 16:41
Арифметические действия над элементами массива. danilchican Паскаль, Turbo Pascal, PascalABC.NET 2 15.11.2011 22:53
Действия над матрицами. (Delphi) ekzobyte Помощь студентам 1 20.05.2009 20:52