Помощь - Поиск - Пользователи - Календарь
Полная версия: Перечисляемый тип
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
DD
Помогите пожалуйста. Не могу прогу дописать. sad.gif Что-то уже не соображаю. Не правильно считает "Средний рост женщин". Вот код:

Код


Program laba1;
uses crt;
type name=(V, G, Ge, K, M, N, S, T, F, Sh); {Валя, Гена, Женя, Коля, Маша, Нина, Саша, Таня, Федя, Шура}
var Pol: array [name] of (Man,Woman); {мужской, женский}
   Rost: array [name] of 140..200;
   o,i,j:integer;
   z,r:real;
   c:name;


begin
clrscr;
r:=0;
o:=0;
z:=0;

Writeln ('Введите пол (1:Man, 2:Woman): ');
for c:=V to Sh do
begin
Case C of
V:write ('Валя: ');
G:write ('Гена: ');
Ge:write ('Женя: ');
K:write ('Коля: ');
M:write ('Маша: ');
N:write ('Нина: ');
S:write ('Саша: ');
T:write ('Таня: ');
F:write ('Федор: ');
Sh:write ('Шура: ')
end;
readln (i);
end;
Case i of
1:pol[c]:=Man;
2:pol[c]:=Woman;
end;

Writeln ('Введите рост (от 140 до 200): ');
For c:=V to Sh do
begin
case c of
V:write ('Валя: ');
G:write ('Гена: ');
Ge:write ('Женя: ');
K:write ('Коля: ');
M:write ('Маша: ');
N:write ('Нина: ');
S:write ('Саша: ');
T:write ('Таня: ');
F:write ('Федор: ');
Sh:write ('Шура: ')
end;
readln (j);
If pol[c]=Woman then
begin
r:=r+j;
o:=o+1;
end;
end;

If o=0 then writeln ('Невозможно вычислить средний рост женщин!') else
begin
z:=r/o;
Writeln;
Writeln ('Средний рост женщин: ',z:8:3);
end
end.


volvo
DD, а что, обязательно каждый раз использовать Case для распечатки имен? Есть же способ гораздо лучше: использовать типизированные константы...

Кроме этого - используйте "говорящие" имена переменных. Вот, сравните:


Program laba1;
uses crt;
type
name=(V, G, Ge, K, M, N, S, T, F, Sh);
gender = (Man, Woman);

const
people: array[name] of string = (
'Валя', 'Гена', 'Женя', 'Коля', 'Маша',
'Нина', 'Саша', 'Таня', 'Федя', 'Шура');

var
Pol: array [name] of gender; {мужской, женский}
total, count, i, j:integer;
human:name;

begin
clrscr;
total:=0;
count:=0;

Writeln ('Введите пол (1:Man, 2:Woman): ');
for human := low(name) to high(name) do begin
write(people[human], ' '); readln(i);
pol[human] := gender(pred(i));
end;

writeln('Введите рост (от 140 до 200): ');
for human := low(name) to high(name) do begin
write(people[human], ' '); readln(j);
if pol[human] = Woman then begin
total := total + j; inc(count);
end;
end;

If count=0 then writeln ('Невозможно вычислить средний рост женщин!')
else begin
Writeln;
Writeln ('Средний рост женщин: ',total/count:8:3);
end
end.
DD
Цитата(volvo @ 5.05.05 17:19)
DD, а что, обязательно каждый раз использовать Case для распечатки имен? Есть же способ гораздо лучше: использовать типизированные константы...



Да. Это в условии. Если не сложно, помогите пожалуйста мою программу сделать рабочей.
volvo
Цитата(DD @ 5.05.05 19:11)
Если не сложно, помогите пожалуйста мою программу сделать рабочей.

Ну тогда, может быть просто
Case i of
1:pol[c]:=Man;
2:pol[c]:=Woman;
end;

внести внутрь цикла?
Writeln ('Введите пол (1:Man, 2:Woman): ');
for c:=V to Sh do { <--- Вот этого цикла... }


Сейчас это почему-то снаружи, следовательно все считаются лицами мужского пола, и счетчик женщин = 0... А на ноль делить нельзя... smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.