логическое выражение

  • Автор темы maryfly009
  • Дата начала
M

maryfly009

#1
Здравствуйте уважаемые программисты! Помогите решить задачу.

Разработать программу для вычисления логического выражения. Должно быть построено
логическое выражение, результат которого присваивается целочисленной переменной.
Результат выводится на экран в виде значения «1» - если истина и значения «0» - если
ложь. Дан символ. Проверить: является ли данный символ согласной буквой латинского
алфавита (независимо от регистра).

спасибо за ответы!
 
Z

zeus

#2
Да тут все просто, с этой задачкой даже школьник справиться)))
C++:
#include <ctype.h>

int logical(const char s)
{
const char t = (char)tolower(s);
const char tb[19] = {'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'x', 'z'};

for (int i = 0; i < 19; ++i)
{
if (t == tb[i]) return 1;
} // for

return 0;
} // logical
 
M

maryfly009

#3
прошу обратить внимание нужно составить ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ, т.е. if и tolower использовать нельзя
 
M

maryfly009

#5
Примеры логических выражений:

(x>=0)and(x<=10) (ch='y')or(ch='Y') (x=5)or(y=1)

(x+1>0)and(x+1<10) or (y>0)and(y<2)


int log = (x>=0)and(x<=10);
если x = 5, то log = 1
если x = 15, то log = 0
 

hosm

* so what *
18.05.2009
2 442
6
#6
ну и в чем проблемы написать кучу or ( в С or это ||, если не ошибаюсь), аналогично такому (ch='y')or(ch='Y'), только вместо "y" перечислить все согласные, указав прописные и строчные?

Добавлено: кстати, если - это if, который вы сказали, нельзя использовать :)
как-то нелогично )))

Добавлено: а w - гласная? %)
 
M

maryfly009

#7
ну и в чем проблемы написать кучу or ( в С or это ||, если не ошибаюсь), аналогично такому (ch='y')or(ch='Y'), только вместо "y" перечислить все согласные, указав прописные и строчные?
такой вариант был, но это на мой взгляд не рационально

Добавлено: кстати, если - это if, который вы сказали, нельзя использовать smile.gif
как-то нелогично )))
это мне так преподаватель ответил, после проверки задания

есть у кого-нибудь варианты по поводу решения задачи?
 
M

maryfly009

#9
а почему нельзя использовать tolower?
я её тоже использовала, мне написал преподаватель что:
использовать оператор if и функции из библитек string.h И ctype.h нельзя
 
Z
#10
есть у кого-нибудь варианты по поводу решения задачи?
есть еще такой вариант...
C++:
#include <ctype.h>

int logical(const char s)
{
const char t = (char)tolower(s);
return ('a' < t && t < 'e') || ('e' < t && t < 'i') || ('i' < t && t < 'o') || ('o' < t && t < 'u') || (t == 'v') || (t == 'x') || (t == 'z');
} // logical
Добавлено:
я её тоже использовала, мне написал преподаватель что:
использовать оператор if и функции из библитек string.h И ctype.h нельзя
ну в таком случае тогда вот так
C++:
('A' < t && t < 'E') || ('E' < t && t < 'I') || ('I' < t && t < 'O') || ('O' < t && t < 'U') || (t == 'V') || (t == 'X') || (t == 'Z')
|| ('a' < t && t < 'e') || ('e' < t && t < 'i') || ('i' < t && t < 'o') || ('o' < t && t < 'u') || (t == 'v') || (t == 'x') || (t == 'z')
 

hosm

* so what *
18.05.2009
2 442
6
#11
а, латынь, точно.
Это я тут себя пыталась заставить сделать английский и как-то в голове с инглишем сассоциировалось.
сорри, я не права.
maryfly009
в С вроде есть короткая схема логических вычилений (насколько я помню), берешь частотный словарь и выстраиваешь рациональную последовательность условий для || :)
false это 0. гласных - меньше, выстраиваешь проверку на гласные !(ch == 'a' || ch == 'A' || ... )
 

hosm

* so what *
18.05.2009
2 442
6
#13
zeus - только теперь w считатся согласной, так как не учлось в гласных) вот такая она вредная буква...
 

hosm

* so what *
18.05.2009
2 442
6
#15
кстати, лучше сперва строчные проверять, потом прописные. И проверить, что код попадает в буквенный диапазон, как писали выше... (('a' < t && t < 'z') || ('A' < t && t < 'Z')) && !(куча || )