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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2013, 22:50   #1
Sfiorentin
Новичок
Джуниор
 
Регистрация: 19.03.2013
Сообщений: 1
По умолчанию Задача

Составить программу для вычисления значения функции

y= |1,если a>0;
|0,если a=0;
|-1,если a<0

Последний раз редактировалось Sfiorentin; 19.03.2013 в 22:53.
Sfiorentin вне форума Ответить с цитированием
Старый 19.03.2013, 23:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
const a=2; var y:integer;
begin
 if a>0 then y:=1 else if a=0 then y=0 else y:=-1;write(y);
 readln;
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.03.2013, 07:25   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Еще проще:

Код:
y:=a;
if a<>0 then y:=abs(a)/a;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 20.03.2013, 08:36   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Sciv, я бы, кстати, не рекомендовал такой подход.
Во-первых, если y целочисленное, то потребуется приведение типов.
Во-вторых, никто не гарантирует, что результат деления даст РОВНО единицу!
В-третьих, операция деления гораздо затратнее, чем операция условного перехода и присвоения.
Да и ради чего?! Вы выигрываете всего в паре IF и операторов присвоения...

Поэтому, я бы лично выбрал код Stilet
ну, возможно, забрал бы вашу идею с присвоением нуля:
Код:
  y:=a;
  if a>0 then y:=1 else
   if a<0 then y:=1;
а ещё и так можно:
Код:
function y(A : integer) : integer;
const
   RConstVal : array[false..true] of integer = (-1, 1);
begin
  if a=0 
    then y := a
    else y := RConstVal[ a>0 ];
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.03.2013, 09:27   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Сергей, согласен со всем сказанным. Просто привел вариант решения, причем с ошибкой (y надо было объявлять целочисленным, а деление округлять, чтоб получить единицу). При решении ориентировался на более короткий, а не на менее затратный код, есть у меня такая дурацкая привычка Пытаюсь избавиться.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 20.03.2013, 10:09   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
В-третьих, операция деления гораздо затратнее, чем операция условного перехода и присвоения.
Вообще-то это утверждение неверное.
Верное - как раз обратное: деление намного быстрее условного перехода.
(причем послезавтра будет ровно 20 лет, как это справедливо для процессоров семейства х86)
Но по поводу написания кода - полностью с Вами согласен, не следует применять "хитрую математику" там, где достаточно одной логики. А уж тем более для сокращения объема текста программы.
Вообще: борьба за сокращение объема текста - очень опасная болезнь.
s-andriano вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на зачёт. проблема Задача на нобелевскую премию! Sabotage5 Паскаль, Turbo Pascal, PascalABC.NET 2 18.03.2013 15:18
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
задача на структуру(struct)/задача на работу с файлом SevenArth Помощь студентам 0 26.04.2012 19:06
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51