PDA

Просмотр полной версии : Задача на pascal.Определение среднего роста



Anonymous
05.04.2004, 20:58
даны следующие выражения
Type Imea=(anea,mariya,irina,petea,vanea,sereja,iura,ig ori,lena);
Date=Record
род:(м,ж):
рост:140..200;
End;
Grupe = Array [imea] of date;
написать программу которая определяет средний рост женского рода

Eugie
06.04.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.

Anonymous
06.04.2004, 13:53
всё сделал как сказали ,но программа не запускается выдаёт ошибку не знаю что делать, помогите!!!

Naeel Maqsudov
06.04.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 в качестве среднего роста будет означать, что средний рост рассчитать нельзя.

Anonymous
06.04.2004, 15:46
До этой строки программа даже и не доходит ,ошибка показывается на первой строке
ave_height, num_girls: Integer; как убрать её не знаю .вроде собрал нормально , а толку нет

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



var
ave_height, num_girls: Integer;
i: Imea;

Anonymous
06.04.2004, 17:58
теперь она не узнает строку TSexRange = (m,f);

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



type
Imea=(anea,mariya,irina,petea,vanea,sereja,iura,ig ori,lena);
TSexRange = (m,f);
THeightRange = 140..200;
Date=Record
sex: TSexRange;
height: THeightRange;
End;


Первая программа на Паскале, да? :) На будущее: если вопрос касается ошибок в процессе компиляции, всегда приводи точное сообщение компилятора.

Anonymous
07.04.2004, 18:46
Вот ,что у меня получилось



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

var
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;
readln;
end.


насчёт первого раза .ДА :oops: ,у меня такой учитель что до конца пара сам досидеть не может.А вот лабораторные даёт :!:

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




program p1;
type
Imea=(anea,mariya,irina,petea,vanea,sereja,iura,ig ori,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.



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

Anonymous
08.04.2004, 12:21
Большое спасибо :P , с меня пиво !!!