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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.06.2010, 14:14
serg154 serg154 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию Помогите с решением Задачи

Определить количество ячеек, удовлетворяющих определенным условиям, в столбце
Ответить с цитированием
  #2  
Старый 16.06.2010, 14:47
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
По умолчанию

А поподробнее вопрос
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #3  
Старый 16.06.2010, 15:15
serg154 serg154 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Задача следующая:
Анкета спортсмена, подавшего заявку на соревнование, состоит из его пола, роста, веса, размеров одежды и обуви. По заданной последовательности заявок найти средний размер обуви женщин, вес которых не превышает 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  
Старый 16.06.2010, 15:29
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
По умолчанию

Так тебе же нужно просто количество строк указать
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #5  
Старый 16.06.2010, 15:33
serg154 serg154 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Так оно не фиксированное! Туда же вводятся различные данные, которые не модходят под условия - мужчины или женщины, вес которых выше 50. Нужно указать число тех, кто под условия подходит.
Ответить с цитированием
  #6  
Старый 16.06.2010, 15:41
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
По умолчанию

Ну тогда сначала нужно посчитать количество женщин с помощью счетчика
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #7  
Старый 16.06.2010, 15:43
serg154 serg154 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Как это сделать?
Ответить с цитированием
  #8  
Старый 16.06.2010, 15:47
Аватар для SerginhoLD
SerginhoLD SerginhoLD вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 73
Репутация: 12
По умолчанию

у тебя код:
Код:
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  
Старый 16.06.2010, 15:50
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
По умолчанию

запустим еще один цикл для подсчета
Код:
 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  
Старый 16.06.2010, 15:52
serg154 serg154 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Вопросы поставил чтоб проблему обозначить, поставил все как ты сказал, не выходит каменный цветок , считает не правильно
Ответить с цитированием
  #11  
Старый 16.06.2010, 15:54
Аватар для SerginhoLD
SerginhoLD SerginhoLD вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 73
Репутация: 12
По умолчанию

короче так:
Код:
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  
Старый 16.06.2010, 15:57
serg154 serg154 вне форума
Прохожий
 
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Kailon, все получилось. Огромное человеческое спасибо!)
Ответить с цитированием
  #13  
Старый 16.06.2010, 16:02
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Радость

Пожалуйста
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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