Задача на pascal.Определение среднего роста

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, dr.Jekill, MOTOCoder, Medved

Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

06 апр 2004, 00:47

Для начала: имена типов, переменных, полей должны быть в латинице:

TSexRange = (m,f);
THeightRange = 140..200;
Date=Record
sex: TSexRange;
height: THeightRange;
End;

Во-вторых, массив Grupe, наверное, все-таки нужно инициализировать :)

А дальше так:

Код: Выделить всё

  ave_height, num_girls: Integer;
  i: Imea;

begin
  ave_height := 0;
  num_girls := 0;
  for i := Low(imea) to High(Imea) do
    with Grupe[i] do
      if sex = f then begin
        Inc(ave_height, height);
        Inc(num_girls);
      end;
  ave_height := ave_height div num_girls;
end.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

06 апр 2004, 15:06

Проверьте, правильно ли Вы инициализируете массив, т.е. заполняете его тестовыми данными. Если в этом массиве не окажется ни одной женщины, то оператор
ave_height := ave_height div num_girls;
приведет к ошибке "Деление на ноль/Division by zero", что скорее всего и происходит.

Попробуйте также переписать этот оператор так

Код: Выделить всё

if num_girls>0 
   then ave_height := ave_height div num_girls
   else ave_height := -1;
Результат -1 в качестве среднего роста будет означать, что средний рост рассчитать нельзя.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

06 апр 2004, 16:40

Сорри, при вставке var потерялся :) Надо объявлять переменные так:

Код: Выделить всё

var
  ave_height, num_girls: Integer; 
  i: Imea;
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

07 апр 2004, 16:42

Перед объявлением типов нужно вставить слово type, например:

Код: Выделить всё

type
  Imea=(anea,mariya,irina,petea,vanea,sereja,iura,igori,lena); 
  TSexRange = (m,f); 
  THeightRange = 140..200; 
  Date=Record 
   sex: TSexRange; 
   height: THeightRange; 
  End;
Первая программа на Паскале, да? :) На будущее: если вопрос касается ошибок в процессе компиляции, всегда приводи точное сообщение компилятора.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

08 апр 2004, 04:07

vitalik, используйте теги code при оформлении текста программ в письмах.

Код: Выделить всё

program p1;
type
  Imea=(anea,mariya,irina,petea,vanea,sereja,iura,igori,lena);
  TSexRange = (m,f);
  THeightRange = 140..200;
  Date=Record
   sex: TSexRange;
   height: THeightRange;
end;
TGrupe = Array[Imea]of date;

var
  ave_height, num_girls: Integer;
  i: Imea;
  Grupe: TGrupe;
begin
  {начало ИНИЦИАЛИЗАЦИИ}
  randomize;
  for i := Low(imea) to High(Imea) do
    with Grupe[i] do begin
      if random(2)=0 then sex:=m else sex:=f;
      height:=random(60)+140;
    end;
  {конец ИНИЦИАЛИЗАЦИИ}


  ave_height := 0;
  num_girls := 0;
  for i := Low(imea) to High(Imea) do
    with Grupe[i] do
      if sex = f then begin
        Inc(ave_height, height);
        Inc(num_girls);
      end;

  if num_girls>0 then begin
    ave_height := ave_height div num_girls;
    writeln('Средний рост = ', ave_height)
  end else
    writeln('Нет ниодной женщины.');
  readln;
end.

Без ИНИЦИАЛИЗАЦИИ будет деление на ноль.
Тут для инициалицации берутся случайный пол и случайный рост.
Ответить