Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2009, 15:44   #1
xRJ10
Новичок
Джуниор
 
Регистрация: 23.12.2009
Сообщений: 5
Сообщение Программа на нахождение верности условия без опереатора IF (Pascal)

Сразу предупрежу что я чайник на Pascal ибо учил только php и ac 2.0. Поэтому надеюсь, на помощь, а самое главное чтобы объяснили как это работает, чтобы больше не возникало вопросов...

Задача: Написать программу, в результате выполнения которой булевская переменная t получает TRUE, если выполняется указанное условие, и FALSE в противном случае.(Оператор IF не использовать).

Условие: введенные символы C1, C2образуют число кратное 3, но не кратное 9.

Это лабораторная работа в универе. Просто я не понимаю...
xRJ10 вне форума Ответить с цитированием
Старый 23.12.2009, 15:53   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

по первому пункту.
Код:
var b,a:integer;
begin
 readln(a,b);
 if b>=a then writeln('b>=a') else writeln('b<a');
 readln;
end.
а теперь без if
Код:
var b,a:integer;
     t:boolean;
label Quit;
begin
 readln(b,a);
 t:=(b>=a);
 while t do begin
                writeln('b>=a');
                goto Quit;
               end;
 writeln('b<a');
 Quit:readln;
end.
вроде так.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.12.2009, 16:14   #3
xRJ10
Новичок
Джуниор
 
Регистрация: 23.12.2009
Сообщений: 5
По умолчанию

Хмм... Ответ с намеком на "думай сам". В принципе все понятно, как обойти использование IF, но все же программу дописать я не могу((.
Во-первых: В начале программы вводится 2 числа, как объединить их в одно двузначное число?
Во-вторых: как понять когда остается остаток (т.е. не кратно);
И последнее: Как понять все же когда число образованное из двух кратно 3 и не кратно 9.

Напишите пожалуйста готовый код, мне проще в нем разобраться...
xRJ10 вне форума Ответить с цитированием
Старый 23.12.2009, 20:28   #4
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Для вычисления остатка от деления существует функция mod.
Если у тебя есть две цифры, то чтобы составить из них двузначное число нужно первую цифру умножить на 10 и к получившемуся прибавить вторую цифру (как число к числу прибавить).
А это число потом уже и проверять на делимость.

Код:
var
   C1, C2: Char;
   R: Integer;
   t: Boolean;
begin
    ReadLn(C1, C2);
    R := 10 * (Ord(C1) - Ord('0')) + Ord(C2) - Ord('0');
    t := (R mod 3 = 0) and (R mod 9 <> 0);
    WriteLn(t);
    ReadLn;
end.

Последний раз редактировалось Alex_FF; 23.12.2009 в 20:53.
Alex_FF вне форума Ответить с цитированием
Старый 23.12.2009, 20:59   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вроде так.
А может через Case лучше?
Код:
var b,a:integer;
begin
 readln(b,a);
 Case (b>=a) of
   true: writeln('b>=a');
   false: writeln('b<a');
 end
end.
psycho-coder вне форума Ответить с цитированием
Старый 23.12.2009, 22:51   #6
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

а может не надо мудрить? зачем всякие там Case, if, goto и тем более циклы?
Код:
var t: Boolean;
.......
t := a < b;
это чем не нравится?
Alex_FF вне форума Ответить с цитированием
Старый 23.12.2009, 22:52   #7
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
А может через Case лучше?
Код:
var b,a:integer;
begin
 readln(b,a);
 Case (b>=a) of
   true: writeln('b>=a');
   false: writeln('b<a');
 end
end.
не лучше
это в одну строчку из 7 символов записывается

Последний раз редактировалось Alex_FF; 23.12.2009 в 22:55.
Alex_FF вне форума Ответить с цитированием
Старый 24.12.2009, 00:05   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
это чем не нравится?
у меня это и написано.
только у меня написана полностью программа. ввод и вывод.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.12.2009, 00:27   #9
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
у меня это и написано.
только у меня написана полностью программа. ввод и вывод.
по условию задачи нужно только вывести значение переменной t.
Alex_FF вне форума Ответить с цитированием
Старый 24.12.2009, 07:07   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Alex_FF
по условию задачи нужно только вывести значение переменной t.
Alex_FF, ошибаетесь...
Цитата:
введенные символы C1, C2образуют
Alex_FF, а что я Вам собственно объясняю, когда Вы в пост #4 полностью написали программу! Что тут уже дальше обсуждать то?!!


p.s. а ещё посмотрите в теме http://www.programmersforum.ru/showthread.php?t=77877
мои ответы... особенно последний, который пост #4
похоже?

Последний раз редактировалось Serge_Bliznykov; 24.12.2009 в 07:14.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal задан текст, проверить на условия Gelu Помощь студентам 1 01.03.2009 13:31
Pascal задача на проверку условия werser Помощь студентам 1 21.12.2008 00:34