Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите с boolean, comp, char

Автор: Вячеслав Людской 10.10.2009 22:00

Задание:
Написать программу, использующую при своей работе не меньше 3х переменных boolean.
То же самое для comp и char. То есть три разных программы. Натолкните хотя бы на мысль - не представляю, что это должны быть за программы - сами проги уже попытаюсь написать сам.

Автор: RathaR 10.10.2009 22:27

Цитата(Вячеслав Людской @ 10.10.2009 18:00) *

Задание:
Написать программу, использующую при своей работе не меньше 3х переменных boolean.
То же самое для comp и char. То есть три разных программы. Натолкните хотя бы на мысль - не представляю, что это должны быть за программы - сами проги уже попытаюсь написать сам.



if Dojd=True then zontik:=true else plyag:=true;
{или}
if (dojd=false) and (sonce=true) then plyag:=true;
write('plyag = ',plyag);


идея понятна? smile.gif

З.Ы. можна развить идею, добавив - comp - температура, а char - дни недели например smile.gif
Получишь програму определяющую стоит тебе сидеть дома, или пойти на пляж, при заданых температуре, дне недели и состоянии погоды smile.gif

Автор: volvo 10.10.2009 23:26

Цитата
идея понятна?
Нет, не понятна... Зачем сравнивать сами по себе логические значения еще с чем-то?
Цитата
if (dojd=false) and (sonce=true) then plyag:=true;
должно звучать так:
if (not dojd) and sonce then plyag:=true; { скобки необязательны, но приветствуются }
или вообще:
plyag := (not dojd) and sonce;

Автор: TarasBer 10.10.2009 23:39

А лучше


Beach := (not Rain) and Sun;


Автор: RathaR 11.10.2009 0:15

Цитата(volvo @ 10.10.2009 19:26) *

Нет, не понятна... Зачем сравнивать сами по себе логические значения еще с чем-то?

Так то оно так, но зачем заставлять человека сразу розсматривать оператор not,если он еще даже булевый тип не разсмотрел толком и путать выражением
 and sonce
, если можна пояснить, и записать
 and (sonce=true)
...
Говорю по себе, ибо как только начинал програмировать я сам несразу понял что переменные булевого типа можно сравнивать именно так
 and sonce
, а не
 and (sonce=true)

Автор: andriano 11.10.2009 1:36

var
i : array[0..2]of integer;
b : array[0..2]of boolean;
c : array[0..2]of comp;
d : array[0..2]of char;
begin
for i[0] := 0 to 2 do
b[i[0]] := i[0] = 1;
for i[1] := 0 to 2 do
c[i[1]] := i[1];
for i[2] := 0 to 2 do
d[i[2]] := char(byte('0') + i[2]));
end.

Автор: Lapp 11.10.2009 8:26

Цитата(RathaR @ 10.10.2009 21:15) *
я сам несразу понял что переменные булевого типа можно сравнивать именно так
 and sonce
, а не
 and (sonce=true)
Ну, и зачем вводить другого человека в ту же ошибку? Чем раньше он поймет, тем лучше. А надо бы (при условии хороших преподавателей или достаточной собственной сообразительности) просто сразу. Мне кажется, в любом учебнике при вводе boolean именно так и делается. Я неправ?

Автор: andriano 11.10.2009 12:33

if (BoolVar1 = TRUE) and ((not BoolVar1) = FALSE) then
BoolVar2 := TRUE
else
BoolVar2 := FALSE;

Автор: Вячеслав Людской 11.10.2009 12:34

Мне лично более всего понравилась запись:

plyag := (not dojd) and sonce;
Имхо, кажется, наиболее логичной и понятной.

Я понял, что мне надо попробовать для начала написать прогу, определяющую надо ли идти на пляж в зависимости от dojd и sonce. Получилось что-то такое:
var
dojd,sonce,plyag:boolean;
begin
read(dojd);
read(sonce);
plyag := (not dojd) and sonce;
write('plyag = ',plyag);
end.
Появляется "ошибка:нельзя вводить данные этого типа". Где я неправ?

Цитата
З.Ы. можна развить идею, добавив - comp - температура, а char - дни недели например
Получишь програму определяющую стоит тебе сидеть дома, или пойти на пляж, при заданых температуре, дне недели и состоянии погоды
Как это сделать я незнаю (за 40 мин в неделю мы не много успеваем smile.gif ), напишите примерный алгоритм, пожалуйста.

Еще вопрос, что это за программа такая?
Цитата
var
i : array[0..2]of integer;
b : array[0..2]of boolean;
c : array[0..2]of comp;
d : array[0..2]of char;
begin
for i[0] := 0 to 2 do
b[i[0]] := i[0] = 1;
for i[1] := 0 to 2 do
c[i[1]] := i[1];
for i[2] := 0 to 2 do
d[i[2]] := char(byte('0') + i[2]));
end.

Поясните, пожалуйста, что она делает и как работает (прокомментируйте короче smile.gif )?

Автор: Lapp 11.10.2009 12:52

Цитата(Вячеслав Людской @ 11.10.2009 9:34) *
Еще вопрос, что это за программа такая?
Поясните, пожалуйста, что она делает и как работает (прокомментируйте короче smile.gif )?
Ничего она не делает. Она даже не скомпилируется..

2 andriano: нельзя ли поответственее? Зачем вводить начинающего в заблуждение? Это шутка такая была?..

Автор: andriano 11.10.2009 14:06

Цитата(Вячеслав Людской @ 11.10.2009 9:34) *
Еще вопрос, что это за программа такая?
Поясните, пожалуйста, что она делает и как работает (прокомментируйте короче smile.gif )?
Программа ничего ПОЛЕЗНОГО не делает, а служит лишь для иллюстрации использования по 3 штуки переменных каждого из типов: integer, boolean, char и comp одновременно.
Все три переменные каждого типа объединены в массив.
Что же касается компилируемости, то мне кажется странной сама постановка такого вопроса: данная программа служит для иллюстрации, а не для того, чтобы быть откомпилированной. Она может быть написана, например, на псевдокоде, как и любая другая программа, написанная в иллюстративных целях. Никто ведь не требует компилируемости от псевдокода!
Если же всерьез рассматривать компилируемость, то следует сразу отметить, что любой вменяемый компилятор не оставит от этой программы в буквальном смысле ничего. Скорее всего, не выделит даже память под переменные.

Автор: Lapp 11.10.2009 14:15

Цитата(andriano @ 11.10.2009 11:06) *
Что же касается компилируемости, то мне кажется странной сама постановка такого вопроса: ...
А мне кажется странной постановка ответа. -1

И впредь попрошу обращать более пристальное внимание на замечания модераторов/администраторов.

Автор: Вячеслав Людской 13.10.2009 19:34

Так, все таки... Что с вот этим. Мне сдавать уже скоро, а дело не продвигается.

Цитата
Понял, что мне надо попробовать для начала написать прогу, определяющую надо ли идти на пляж в зависимости от dojd и sonce. Получилось что-то такое:

var
dojd,sonce,plyag:boolean;
begin
read(dojd);
read(sonce);
plyag := (not dojd) and sonce;
write('plyag = ',plyag);
end.
Появляется "ошибка:нельзя вводить данные этого типа". Где я неправ?


Цитата

З.Ы. можна развить идею, добавив - comp - температура, а char - дни недели например
Получишь програму определяющую стоит тебе сидеть дома, или пойти на пляж, при заданых температуре, дне недели и состоянии погоды
Как это сделать я незнаю (за 40 мин в неделю мы не много успеваем ), напишите примерный алгоритм, пожалуйста.


Автор: volvo 13.10.2009 22:54

Цитата
Так, все таки... Что с вот этим.
А что с этим? Правильно компилятор тебе говорит: не вводятся значения логического типа напрямую с клавиатуры. Вводи "окольными путями", например запрашивай "Y/N":
var
dojd,sonce,plyag:boolean;
ans: char;
begin
write('дождь?'); readln(ans); dojd := (ans = 'Y');
write('солнце?'); readln(ans); sonce := (ans = 'Y');

plyag := (not dojd) and sonce;
write('plyag = ',plyag); { А вот выводить - можно }
end.