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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2017, 18:25   #1
furymaxim
Пользователь
 
Регистрация: 25.11.2017
Сообщений: 28
По умолчанию Факториал.В чем ошибка?

Код:
Program
var
p,t:LONGINT;
x,i,n:real;
begin
writeln('Введите x');
readln(x);
if (x mod 2) =0 then
t:=1.5 else t:=2;
n:=x*t;
p:=1;
for i:=2 to n do
p := p * i;
end;
writeln('p! = ', p);
end.
Пишет For1.pas(7) : Нельзя преобразовать тип real к integer

Задание звучит так : Вычислить P=(xt)!; n! = 1*2.....n , t = 1,5 если х - четное , t =2 , если нечетное
Какие типы я только не ставил,если бы не 1.5 ,а целое число было бы ,то всё ОК
furymaxim вне форума Ответить с цитированием
Старый 05.12.2017, 18:48   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
if (x mod 2) =0 then
Остаток от деления вычислим только у целых чисел, соответственно оператор mod требует целочисленных аргументов, а Вы ему вещественный x подсовываете

Код:
t:=1.5 else t:=2;
И что ещё интересней, в целочисленную переменную t Вы пытаетесь запихнуть вещественное значение "полтора"

Код:
for i:=2 to n do
Счётчик цикла у Вас также объявлен как real, да ещё и n тоже вещественное

Цитата:
t = 1,5 если х - четное , t =2 , если нечетное
Это фигня какая-то, а не задание. Факториал - целочисленная функция, каким макаром там t = 1,5? Единственное разумное объяснение, которое я могу предложить - это необходимость использования округления произведения (Round). В любом случае при умножении 1.5 на чётное число мы получаем нечто, что делится на 2 без остатка, вот только компьютер-то об этом не знает и считает, что результатом подобного перемножения будет вещественное число (и кстати, он прав).

Потому присвоение надо делать так:

Код:
if (x mod 2) =0 then
  n := Round(x * 1.5)
else
  n := x * 2;
и никакие Real в программе уже не нужны. Также, как и отдельное объявление t
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 05.12.2017 в 18:58.
Sciv вне форума Ответить с цитированием
Старый 05.12.2017, 19:22   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от furymaxim Посмотреть сообщение
t = 1,5 если х - четное , t =2 , если нечетное
Например, так
Код:
if Odd(x) then k:=2*x else k:=3*x div 2;
и дальше считаете k!
Вместо Odd(x) можно (x mod 2 <>0)

Хотя, лучше использовать все, кроме x - не целого типа. Потому что уже 13! = 6227020800 - это не влезет в LongInt

Вот так, например вычисление !
Код:
function factr(n:Integer):Extended;
begin
 if n=0 then factr:=1 else factr:=n*factr(n-1);
end;

Последний раз редактировалось type_Oleg; 05.12.2017 в 19:27.
type_Oleg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО][Python] факториал, Фибоначчи: в ходе выполнения в цикле все последующие значения факториалов перемножаются с предыдущими, а хочу чтоб выводился факториал конкретного числа Staniislav Помощь студентам 2 19.08.2017 23:57
[РЕШЕНО] Помогите в чем может быть ошибка? Ошибка ';' expected but 'BEGIN' found АлександрDelphi Общие вопросы Delphi 7 06.03.2016 19:25
Вычислить факториал числа п. Факториал числа представить в виде целочисленного массива десятичных цифр. M1kefly Общие вопросы C/C++ 1 07.07.2013 21:00
В чем ошибка... Эдвин Галстук Паскаль, Turbo Pascal, PascalABC.NET 3 25.10.2009 20:01
В чем ошибка? AleNa666 Паскаль, Turbo Pascal, PascalABC.NET 2 28.04.2009 14:28