Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.02.2011, 21:38
Fanil Fanil вне форума
Прохожий
 
Регистрация: 24.01.2011
Сообщения: 26
Репутация: 10
По умолчанию Как организовать работу с большим массивом в StringGrid

Здравствуйте! Помогите пожалуйста решить следующую задачу:я ввожу в StringGrid (Размерность 2х2) числа. Первая строка это элементы а1,а2. Вторая строка это элементы b1,b2. Нужно вычислить d=(a1*b1+a2*b2)/(b1+b2). В простом варианте я сделал программу:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var 
a1,a2,b1,b2,d:real;

begin 
a1:=StrToFloat(StringGrid1.Cells[1, 0]);
 a2:=StrToFloat(StringGrid1.Cells[2, 0]);
b1:=StrToFloat(StringGrid1.Cells[1, 1]);
b2:=StrToFloat(StringGrid1.Cells[2, 1]);
d:=(a1*b1+a2*b2)/(b1+b2);
Label1.Caption:='d= '+FloatToStrF(d,ffFixed,5,2); 

end;
end.
Но как сделать, если, допустим, у меня будет не 2 а 100 столбцов? Понимаю, что нужно делать ч\з циклы, но я никак не могу понять их.Помогите пожалуйста! Заранее спасибо!
Ответить с цитированием
  #2  
Старый 18.02.2011, 22:07
Аватар для eXplorer
eXplorer eXplorer вне форума
Активный
 
Регистрация: 06.08.2010
Адрес: Ярославль
Сообщения: 264
Версия Delphi: 7
Репутация: 14
По умолчанию

Цитата:
Но как сделать, если, допустим, у меня будет не 2 а 100 столбцов?

столбцов? а не строк?
__________________
Ответить с цитированием
  #3  
Старый 18.02.2011, 22:35
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Если я правильно понял задание то так:

Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
 i,j: Integer;
 Pr, SumKi, Sum, D: Real;
begin
 Sum:= 0; SumKi:= 0;
 For i:= 0 To StringGrid1.ColCount - 1 Do
  begin
   Pr:= 1;
   For j:= 0 To StringGrid1.RowCount - 1 Do Pr:= Pr*StrToFloat(StringGrid1.Cells[i,j]);
   SumKi:= SumKi + Pr;
   Sum:= Sum + StrToFloat(StringGrid1.Cells[i,StringGrid1.RowCount-1]);
  end;
 D:= SumKi/Sum;
end;

Тут без разницы сколько строк, столбцов. (Sum - сумма последней строки. Правильно?)
__________________
If end Then begin;

Последний раз редактировалось AND_REY, 18.02.2011 в 22:38.
Ответить с цитированием
  #4  
Старый 18.02.2011, 23:07
Fanil Fanil вне форума
Прохожий
 
Регистрация: 24.01.2011
Сообщения: 26
Репутация: 10
По умолчанию

Спасибо, всё работает! но я хочу сделать так, чтобы можно было вводить не все значения, т.е. пустые ячейки приравнивались бы к нулю.
Для одномерного массива это выглядит примерно так:
Код:
for i:= 1 to 100 do
     if Length(StringGrid1.Cells[i-1,0]) <> 0
        then a[i] := StrToFloat(StringGrid1.Cells[i-1,0])
        else a[i] := 0;
А как это осуществить для двумерного? Заранее спасибо
Ответить с цитированием
  #5  
Старый 18.02.2011, 23:46
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Код:
For i:= 0 To StringGrid1.ColCount - 1 Do
 For j:= 0 To StringGrid1.RowCount - 1 Do
  if StringGrid1.Cells[i,j] = '' Then StringGrid1.Cells[i,j]:= '0';
__________________
If end Then begin;
Ответить с цитированием
  #6  
Старый 19.02.2011, 16:52
Fanil Fanil вне форума
Прохожий
 
Регистрация: 24.01.2011
Сообщения: 26
Репутация: 10
По умолчанию

Спасибо! Всё работает!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:03.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025