![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Определить количество ячеек, удовлетворяющих определенным условиям, в столбце
|
|
#2
|
||||
|
||||
|
А поподробнее вопрос
![]() |
|
#3
|
|||
|
|||
|
Задача следующая:
Анкета спортсмена, подавшего заявку на соревнование, состоит из его пола, роста, веса, размеров одежды и обуви. По заданной последовательности заявок найти средний размер обуви женщин, вес которых не превышает 50 кг. Код ниже. Непонятно, как вычислить количество ячеек, на которое нужно разделить сумму, чтобы получить среднее арифметическое. Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0, 0] := 'Пол';
StringGrid1.Cells[1, 0] := 'Рост';
StringGrid1.Cells[2, 0] := 'Вес';
StringGrid1.Cells[3, 0] := 'Размер одежды';
StringGrid1.Cells[4, 0] := 'Размер обуви';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
Sum, Kol: integer;
Srob:Real;
begin
Srob:= 0;
Sum:=0;
for i := 1 to StringGrid1.RowCount-1 do
begin
if ((StringGrid1.Cells[0, i] = 'Жен') and (StrToInt(StringGrid1.Cells[2, i]) < 50)) then
Sum := (Sum + StrToInt(StringGrid1.Cells[4, i]));
Kol:= ???????????;
Srob:=Sum/Kol;
end;
if (Srob <> 0) then
ShowMessage('Средний размер обуви женщин равен ' + FloatToStr(Srob))
else
ShowMessage('Такой анкеты нет!');
end;
end. |
|
#4
|
||||
|
||||
|
Так тебе же нужно просто количество строк указать
|
|
#5
|
|||
|
|||
|
Так оно не фиксированное! Туда же вводятся различные данные, которые не модходят под условия - мужчины или женщины, вес которых выше 50. Нужно указать число тех, кто под условия подходит.
|
|
#6
|
||||
|
||||
|
Ну тогда сначала нужно посчитать количество женщин с помощью счетчика
|
|
#7
|
|||
|
|||
|
Как это сделать?
|
|
#8
|
||||
|
||||
|
у тебя код:
Код:
if ((StringGrid1.Cells[0, i] = 'Жен') and (StrToInt(StringGrid1.Cells[2, i]) < 50)) then
Sum := (Sum + StrToInt(StringGrid1.Cells[4, i]));
Kol:= ???????????;
Srob:=Sum/Kol;
end;Код:
Kol:=0; Код:
inc(Kol); //увеличивает Kol на единицу вот это пишешь уже после цикла, а не внутри: Код:
Srob:=Sum/Kol; Последний раз редактировалось SerginhoLD, 16.06.2010 в 15:49. |
|
#9
|
||||
|
||||
|
запустим еще один цикл для подсчета
Код:
for i := 1 to StringGrid1.RowCount-1 do
begin
if ((StringGrid1.Cells[0, i] = 'Жен') and (StrToInt(StringGrid1.Cells[2, i]) < 50)) then
Sum := (Sum + StrToInt(StringGrid1.Cells[4, i]));
for j := 1 to StringGrid1.RowCount - 1 do
if StringGrid1.Cells[0,j] = Жен' then Inc(Kol);
Srob:=Sum/Kol;
end; |
|
#10
|
|||
|
|||
|
Вопросы поставил чтоб проблему обозначить, поставил все как ты сказал, не выходит каменный цветок
, считает не правильно |
|
#11
|
||||
|
||||
|
короче так:
Код:
kol:=0; Sum:=0;
for i := 1 to StringGrid1.RowCount-1 do
if ((StringGrid1.Cells[0, i] = 'Жен') and (StrToInt(StringGrid1.Cells[2, i]) < 50)) then
begin
Sum := Sum + StrToInt(StringGrid1.Cells[4, i]);
inc(Kol);
end;
Srob:=Sum/Kol;Последний раз редактировалось SerginhoLD, 16.06.2010 в 15:56. |
|
#12
|
|||
|
|||
|
Kailon, все получилось. Огромное человеческое спасибо!)
|
|
#13
|
||||
|
||||
|
Пожалуйста
![]() |