Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.06.2010
Сообщений: 10
1

Для 7 человек, среди которых есть мужчины и женщины, хранятся следующие данные: имя, пол (true - мужской, false - женский), рост.Опишите логическую ф

07.06.2010, 21:40. Просмотров 1979. Ответов 11
Метки нет (Все метки)

условие:
Для 7 человек, среди которых есть мужчины и женщины, хранятся следующие данные: имя, пол (true - мужской, false - женский), рост.Опишите логическую функцию Test(G), проверяющую, что в группе самая высокая из женщин ниже самого высокого из мужчин.

Мое решение:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
uses crt;
type
name = (Mary, Jane, Kim, Bob, Jan, Pit, Tom);
data = record
male : boolean;
height:140..200;
end;
group = array[name] of data;
function Test(g:group):boolean;
var i,j:name;
mn:140..200;
iv:140..200;
begin
Test:=false;
mn:=140;
iv:=140;
for i:=Mary to Tom do
if (g[i].male=false)and(g[i].height>mn)then mn:=g[i].height;
writeln ('Максимальный рост из женщин = ',mn);
for i:=Mary to Tom do
if (g[i].male=true)and(g[i].height>iv) then iv:=g[i].height;
writeln ('Максимальный рост из мужчин = ',iv);
for i:=Mary to Tom do
if (g[i].male=true)and(mn<iv) then
begin
Test:=true;
break;
end;
end;
var a:group;
i:name;
s:string;
begin
clrscr;
writeln('Введите ',ord(Tom)+1,' записей:');
for i:=Mary to Tom do
begin
writeln('Запись ',ord(i)+1);
repeat
write(' Пол (муж или жен): ');readln(s);
if s='муж' then a[i].male:=true
else a[i].male:=false;
until(s='муж')or(s='жен');
repeat
write(' Рост [140..200]: ');readln(a[i].height);
until a[i].height in [140..200];
end;
if Test(a) then write('В группе есть женщина с высоким ростом ,которая ниже мужчины с самым высоким ростом')
else write('В группе нету женщин, либо в группе нету женщины с самым высоким ростом ,которая ниже самого выского мужчины');
readln;
end.

Вроде все нормально! Но ошиибка в том, что когда во все 7 записей я ввожу "муж" или "жен" он выводит недостоющие записи,как сделать так, чтоб без женщин или без мужчин сортировка не работала.
я делал,так давал условие, что если >= 140, то выполняется, если нет то нет.. ну это не красиво и не правильно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2010, 21:40
Ответы с готовыми решениями:

В группе из 25 человек (мужчины и женщины) определить средний рост женщин
Программу записать на языке Pascal с использованием процедур (функций) Всем,заранее, спасибо!!!

Мужской и женский пол
Разработать приложение для определения подходящего возраста кандидатуры для вступления в брак,...

В структуре хранятся следующие данные об учениках: фамилия, имя, отчество, рост, масса. Создать массив стру
В структуре хранятся следующие данные об учениках: фамилия, имя, отчество, рост, масса. Создать...

В файл вводятся имена, пол и рост человека. Программа считывает данные из файла и выдает совпадения если в нем есть мужчины одного роста. Тема:работа
В файл вводятся имена, пол и рост человека. Программа считывает данные из файла и выдает совпадения...

11
167 / 94 / 11
Регистрация: 16.04.2010
Сообщений: 464
07.06.2010, 21:46 2
И сюда тебе тожеКак запостить тему, чтобы не получить ответ
0
0 / 0 / 0
Регистрация: 07.06.2010
Сообщений: 10
07.06.2010, 21:47  [ТС] 3
Цитата Сообщение от toxa92 Посмотреть сообщение
спасибо прочитал, и как мне это исправить, еще одну тему создать?
0
167 / 94 / 11
Регистрация: 16.04.2010
Сообщений: 464
07.06.2010, 21:55 4
Не апать тему каждые 15 минут. От того, что она мозолит мне глаза мне помогать не захочется

Добавлено через 5 минут
что значит
Цитата Сообщение от deejayyug Посмотреть сообщение
выводит недостоющие записи
?
0
0 / 0 / 0
Регистрация: 07.06.2010
Сообщений: 10
07.06.2010, 21:58  [ТС] 5
Цитата Сообщение от toxa92 Посмотреть сообщение
Не апать тему каждые 15 минут. От того, что она мозолит мне глаза мне помогать не захочется

Добавлено через 5 минут
что значит

?
мм,например во все 7 записей я ввожу "муж" "муж" "муж". и т.д. в конце он мне говорит, что условие прошло, и самая высокая женщина ниже самого высокого мужчины, хотя я данные не вводил женщины...т.е. он женщине дает значение 140..а мне надо исключить, что если нету женщины, то сравнение не происходит!
я сделал так в 24 строке исправил на:
Pascal
1
if (g[i].male=true)and(g[i].male=false) and(mn<iv) then
но еще остался 1 вопрос, я там вывожу максимыльный рост женщины и мужчины, вот когда во все значени ввожу "муж" , он мне выводит максимальный рост у женщины 140, как это исключить?
0
167 / 94 / 11
Регистрация: 16.04.2010
Сообщений: 464
07.06.2010, 22:04 6
У тебя по умолчанию функция false. Потом она просто не меняется, поэтому и выводится один из вариантов.
Можно сделать флаг, который будет контролировать наличие разных полов
0
0 / 0 / 0
Регистрация: 07.06.2010
Сообщений: 10
07.06.2010, 22:08  [ТС] 7
Цитата Сообщение от toxa92 Посмотреть сообщение
У тебя по умолчанию функция false. Потом она просто не меняется, поэтому и выводится один из вариантов.
Можно сделать флаг, который будет контролировать наличие разных полов
ммм, не могу сообразить как это сделать и куда флаг это вставить?
0
167 / 94 / 11
Регистрация: 16.04.2010
Сообщений: 464
07.06.2010, 22:41 8
mn и iv сделай по умолчанию равными нулю. Перед выводом максимальных ростов проверяй. Если они ноль - выводи соответствующее сообщение
это исправит баг с выводом минимального роста при отсутствии пола


в процедуре объяви 2 переменных типа boolean. при вводе мужчины меняй одну из них на true, при вводе женщины - другую на true. затем перед выводом результатов проверяй: если они не совпадают - выводи сообщение, что присутствует только один пол

Костыль, но меньше переписывать надо
1
0 / 0 / 0
Регистрация: 07.06.2010
Сообщений: 10
07.06.2010, 23:02  [ТС] 9
Цитата Сообщение от toxa92 Посмотреть сообщение
mn и iv сделай по умолчанию равными нулю. Перед выводом максимальных ростов проверяй. Если они ноль - выводи соответствующее сообщение
это исправит баг с выводом минимального роста при отсутствии пола


в процедуре объяви 2 переменных типа boolean. при вводе мужчины меняй одну из них на true, при вводе женщины - другую на true. затем перед выводом результатов проверяй: если они не совпадают - выводи сообщение, что присутствует только один пол

Костыль, но меньше переписывать надо
с первым справился, спасибо, а вот со вторым, лучше вы перепишите, если можете, а то я чувствую что то натворю!
0
167 / 94 / 11
Регистрация: 16.04.2010
Сообщений: 464
07.06.2010, 23:32 10
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
uses crt;
type
name = (Mary, Jane, Kim, Bob, Jan, Pit, Tom);
data = record
male : boolean;
height:140..200;
end;
group = array[name] of data;
 
 
function Test(g:group):boolean;
var i,j:name;
mn:140..200;
iv:140..200;
begin
Test:=false;
mn:=140;
iv:=140;
for i:=Mary to Tom do
    if (g[i].male=false)and(g[i].height>mn)then mn:=g[i].height;
writeln ('Максимальный рост из женщин = ',mn);
for i:=Mary to Tom do
    if (g[i].male=true)and(g[i].height>iv) then iv:=g[i].height;
writeln ('Максимальный рост из мужчин = ',iv);
for i:=Mary to Tom do
    if (g[i].male=true)and(mn<iv) then
    begin
        Test:=true;
        break;
    end;
end;
 
 
var a:group;
i:name;
s:string;
flag1,flag2:boolean;
begin
clrscr;
writeln('Введите ',ord(Tom)+1,' записей:');
for i:=Mary to Tom do
begin
    writeln('Запись ',ord(i)+1);
    repeat
        write(' Пол (муж или жен): ');readln(s);
        if s='муж' then 
        begin
            a[i].male:=true
            flag1:=true;
        end;
        else 
        begin
            a[i].male:=false;
            flag2:=true;
        end;
    until(s='муж')or(s='жен');
    repeat
        write(' Рост [140..200]: ');readln(a[i].height);
    until a[i].height in [140..200];
end;
if (Test(a))and(flag1)and(flag2) then write('В группе есть женщина с высоким ростом ,которая ниже мужчины с самым высоким ростом')
if (Test(a)=false)and(flag1)and(flag2) then write('В группе нету женщины с самым высоким ростом ,которая ниже самого выского мужчины');
if ((flag1)and(flag2))=false) then write('В группе присутствует только мужчины или только женщины');
readln;
end.
Должно быть правильно
0
0 / 0 / 0
Регистрация: 07.06.2010
Сообщений: 10
07.06.2010, 23:40  [ТС] 11
Цитата Сообщение от toxa92 Посмотреть сообщение
Должно быть правильно
М, чет у меня Pascal кучу ошибок нашел, не стал замарачиваться, я решил вот так смешно , но действует!.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
uses crt;
type
name = (Mary, Jane, Kim, Bob, Jan, Pit, Tom);
data = record
male : boolean;
height:140..200;
end;
group = array[name] of data;
function Test(g:group):boolean;
var i,j:name;
mn:140..200;
iv:140..200;
y:integer;
begin
y:=0;
Test:=false;
for i:=Mary to Tom do
if (g[i].male=false)and(g[i].height>mn)then mn:=g[i].height;
if (mn=0) then writeln ('Не существует женщин')
else writeln ('Максимальный рост из женщин = ',mn);
for i:=Mary to Tom do
if (g[i].male=true)and(g[i].height>iv) then iv:=g[i].height;
if (iv=0) then writeln ('Не существует мужчин')
else writeln ('Максимальный рост из мужчин = ',iv);
if(mn<iv)and (mn>0) and (iv>0)then y:=iv-mn;
if (y>0) then writeln ('Самая высокая женщина ниже самого высокого мужчину на ',y)
else writeln ('Нету самой высокой женщины ниже самого высокого мужчины');
if (mn<iv) and (mn>0) and (iv>0) then writeln ('Самая высокая женщина с ростом ',mn, ' ниже самого высокого мужчины с ростом ',iv);
for i:=Mary to Tom do
if (g[i].male=true)and(mn<iv)then
begin
Test:=true;
break;
end;
end;
var a:group;
i:name;
s:string;
begin
clrscr;
writeln('Введите ',ord(Tom)+1,' записей:');
for i:=Mary to Tom do
begin
writeln('Запись ',ord(i)+1);
repeat
write(' Пол (муж или жен): ');readln(s);
if s='муж' then a[i].male:=true
else a[i].male:=false;
until(s='муж')or(s='жен');
repeat
write(' Рост [140..200]: ');readln(a[i].height);
until a[i].height in [140..200];
end;
if Test(a) then write(' ')
else write(' ');
readln;
end.
всеми способами проверял, все делает правильно! спасибо за помощь!
0
0 / 0 / 0
Регистрация: 02.04.2012
Сообщений: 8
04.04.2012, 20:05 12
Опишите функцию Name(G), определяющую имя мужчины из группы с ростом x.
как будет выглядеть код
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2012, 20:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

С помощью структуры определить группу из 7 человек, имя, пол и рост
С помощью структуры определить группу из 7 человек.имя пол и рост. вывести самую высокую девочку...

В анкетных данных обозначены фамилия, пол, рост. Определите средний рост женщин, фамилию самого высокого мужчины
Помогите, пожалуйста, с написанием кода. Задание: В анкетных данных обозначены фамилия, пол,...

Определите структуру данных, которая описывает студента и включает следующие данные: фамилия, пол, рост, групп
Определите структуру данных, которая описывает студента и включает следующие данные: фамилия, пол,...

Известны рост и пол нескольких человек. Найти средний рост мужчин
Известны рост и пол нескольких человек. Найти средний рост мужчин. рост и пол вводятся с...

Записи: Даны рост и пол 20 человек. Найти средний рост всех мужчин
Помогите решить задачу на паскале,используя списки(record).Даны рост и пол 20 человек.Найти средний...

Известны вес, пол, рост каждого из 22 человек. Найти общую массу и средний рост мужчин.
Помогите с задачей Известны вес, пол, рост каждого из 22 человек. Найти общую массу и средний...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.