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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 24.03.2009, 01:31   #1
DsDevis
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 35
По умолчанию вычисление факториала (Pascal)

Еще раз здравствуйте. Вот такая задача:
Вычислить значение n! для n, введенного с клавиатуры. Вот мой код:
Код:
program faktorial;
var n,s,k: real;
begin
write('Введите n ');
readln(n);
s:=1; k:=1;
while k<=n do
k:=k+1;
s:=s*k;
writeln('ответ ',s:0:1);
end.
Выдаются неверные значения s, то есть ввожу 3 - ответ 4, ввожу 4 - ответ 5. В чем ошибка?
DsDevis вне форума
Старый 24.03.2009, 01:32   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
program faktorial;
var n,s,k: real;
begin
write('ВВедите n ');
readln(n);
s:=1; k:=1;
while k<n do
begin
k:=k+1;
s:=s*k;
end;
writeln('ответ ',s:0:1);
end.
Ошибку поняли?
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума
Старый 24.03.2009, 03:54   #3
DsDevis
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 35
По умолчанию

Честно говоря, не очень. Отличие моего и Вашего кода только в сравнении k и n, но ваша программа тоже выдает неверные значения: у Вас s всегда равен вводимому n.
П.С. Все понял, прошу прощения.

Последний раз редактировалось DsDevis; 24.03.2009 в 04:08. Причина: Посыпаю голову пеплом.
DsDevis вне форума
Старый 24.03.2009, 04:04   #4
DENCREAT
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 32
По умолчанию

лучше делать через рекурсию.. мне так удобнее, например)

Код:
program fac;
 var n:integer;

function fact(n:integer):integer;
begin
if n=1 then fact:=1
         else fact:=fact(n-1)*n;
end;

begin
write('vvedi chislo: ');
readln(n);
o:=fact(n);
writeln('otvet:', o);
read;
end.
DENCREAT вне форума
Старый 24.03.2009, 04:57   #5
DsDevis
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 35
По умолчанию

До рекурсии я еще не дошел, я только 2 день паскаль изучаю
DsDevis вне форума
Старый 30.09.2010, 15:39   #6
Safik
Новичок
Джуниор
 
Регистрация: 30.09.2010
Сообщений: 1
По умолчанию

можно и без рекурсии)) просто в первых двух кодах действительно есть небольшие ошибки)) вот мой код)

program fact;
var s,k,n: longint; {некоторые факториалы не умещаются в integer, а использовать real не вижу смысла}
begin;
k:=1; s:=1;
readln(n);
while k<=n do begin
s:=s*k;
k:=k+1;
end;
writeln(s);
end.

А если написать k<n, то следует сделать вот так: writeln(s*n);
Когда k<n при n=6 например, цикл доходит до 5 и останавливается, и на 6 не умножает, так как неравентство строгое, поэтому нужно умножить на n при выводе)) вот))
Safik вне форума
Старый 30.09.2010, 16:34   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Лучше вообще так:
Код:
Uses CRT;
Var
     Fact:Integer;
     N,I:Integer;
Begin
        Clrscr;
        Write('N = ');
        Readln(N);
        Fact:=1;
        For I:=2 To N-1 Do
        Fact:=Fact*I;
        Write('Fact = ',Fact);
        Readln;
End.
_-Re@l-_ вне форума
Старый 01.10.2010, 10:01   #8
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Лучше вообще так:
А чем лучше? Если ещё учесть что не
Код:
 For I:=2 To N-1 Do
а
Код:
 
For I:=2 To N
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума
Старый 09.12.2010, 18:56   #9
madmaniac
Форумчанин
 
Регистрация: 09.12.2010
Сообщений: 115
Радость

Код:
program faktorial;
uses crt;
var n,i,k : longint;

begin
  writeln('Введите желаемое значение');
  readln(n);
 k:=1;
 for i:=1 to n do
   k:=k*i;
 writeln('Факториал числа ',n,'   равен  ', k);
  
end.
вот, проще всего наверн
Господа - учитесь юзать поисковые машины
web-обитель | авто
madmaniac вне форума
Закрытая тема


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вычисление выражений (pascal) вкусняшка Помощь студентам 4 14.03.2009 16:42
Си, вычисление факториала ManInBlack Помощь студентам 2 07.03.2009 00:50
вычисление X n-го порядка // delphi, pascal JENqa Помощь студентам 2 26.12.2008 17:02
Pascal: Вычисление корна с помощью рекурсии. MaGWaY_minsk Помощь студентам 2 11.11.2008 22:20
Вычисление факториала числа PAVEL315 Общие вопросы Delphi 17 21.03.2007 07:32