Помогите с программной ** паскале, пожалуйста) Используя следующий фрагмент программы,...

0 голосов
42 просмотров

Помогите с программной на паскале, пожалуйста)

Используя следующий фрагмент программы, опишите перечисленные ниже функции:
Type
name = (Аня, Валя, Женя, Петя, Саша, Таня, Шура, Юра);
information = record
pol : (man, woman);
height : 140..200
end;
group = array [name] of information;
а) функция СредРост( ГР ) определяет средний рост женщин из группы ГР;
б) функция Высокий( ГР ) определяет имя самого высокого мужчины из группы ГР;
в) логическая функция ОдинРост( ГР ) проверяет, есть ли в группе ГР хотя бы два человека одинакового роста.


Информатика (59 баллов) | 42 просмотров
0

Какая версия Паскаля? Цикл типа foreach в ней есть?

0

все делаем в этом паскале "PascalABC.NET версия 2.2 сборка 707"

0

Видимо тот, кто задание составлял, не учел простой вещи: в определении перечислимого типа name = (Аня, Валя, Женя, Петя, Саша, Таня, Шура, Юра); все имена должны быть корректными именами переменных Паскаля, т.е. записываться в виде комбинации ЛАТИНСКИХ букв и цифр и при этом начинаться с буквы. Кириллица недопустима!

Дан 1 ответ
0 голосов
Правильный ответ

Type
  name=(Anya,Valya,Zhenya,Petya,Sasha,Tanya,Shura,Yura);
  gender=(man,woman);
  information=record
    pol:gender;
    height:140..200
    end;
  group=array[Anya..Yura] of information;

function SrRost(var Gr:group):single;
var
  i:name;
  s:single;
  n:integer;
begin
  s:=0; n:=0;
  for i:=Anya to Yura do
  begin s:=s+Gr[i].height; Inc(n) end;
  SrRost:=s/n
end;

function Vysokiy(var Gr:group):string;
var
  i,j:name;
  h:integer;
begin
  h:=Gr[Anya].height; j:=Anya;
  for i:=Valya to Yura do
  begin
    if Gr[i].height>h then
    begin h:=Gr[i].height; j:=i end
  end;
  Vysokiy:=j.ToString
end;

function OdinRost(var Gr:group):boolean;
var
  i,j:name;
  flag:boolean;
begin
  i:=Anya; flag:=false;
  repeat
    j:=Succ(i);
    while (not flag) and (j<=Yura) do<br>    begin flag:=(Gr[i].height<>Gr[j].height); Inc(j) end;
    flag:=(Gr[i].height<>Gr[j].height);
    if not flag then Inc(i);
  until flag or (i=Yura);
  OdinRost:=flag
end;

var
  Grp:group;
  i:name;
  g:0..1;
begin
  { ввод данных }
  for i:=Anya to Yura do
  begin
    Write(i.ToString+': укажите пол м/ж числом 0/1 ');
    Readln(g);
    if g=0 then Grp[i].pol:=man else Grp[i].pol:=woman;
    Write(i.ToString+': укажите рост, см (140-200) ');
    Readln(Grp[i].height)
  end;
  { вычисления }
  Writeln('Средний рост равен ',SrRost(Grp):0:1);
  Writeln('Наиболее высокий человек - ',Vysokiy(Grp));
  If OdinRost(Grp) then Writeln('Есть минимум два человека одного роста')
  else Writeln('У всех в группе разный рост');
end.

Тестовое решение:
Anya: укажите пол м/ж числом 0/1 1
Anya: укажите рост, см (140-200) 165
Valya: укажите пол м/ж числом 0/1 1
Valya: укажите рост, см (140-200) 170
Zhenya: укажите пол м/ж числом 0/1 0
Zhenya: укажите рост, см (140-200) 173
Petya: укажите пол м/ж числом 0/1 0
Petya: укажите рост, см (140-200) 178
Sasha: укажите пол м/ж числом 0/1 0
Sasha: укажите рост, см (140-200) 176
Tanya: укажите пол м/ж числом 0/1 1
Tanya: укажите рост, см (140-200) 170
Shura: укажите пол м/ж числом 0/1 1
Shura: укажите рост, см (140-200) 168
Yura: укажите пол м/ж числом 0/1 0
Yura: укажите рост, см (140-200) 175
Средний рост равен 171.9
Наиболее высокий человек - Petya
Есть минимум два человека одного роста

(142k баллов)
0

Хороший пример того, как отвратительно в Паскале сделана работа с перечислимыми типами. Так это еще с расширениями Паскаля, в версии АВС.Net, такими как .ToString.