Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Название темы включает слова - "Помогите", "Спасите", "Срочно"
Название темы не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте >>>правила <<< и заново правильно создайте тему.
 
Опции темы
Старый 24.03.2009, 02:31   #1
DsDevis
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 35
Репутация: 10
По умолчанию вычисление факториала (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, 02:32   #2
alex_fcsm
Профессионал
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Адрес: Орел
Сообщений: 1,502
Репутация: 254

icq: 450490пять84
По умолчанию

Код:
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, 04:54   #3
DsDevis
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 35
Репутация: 10
По умолчанию

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

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

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

Код:
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, 05:57   #5
DsDevis
Пользователь
 
Регистрация: 21.03.2009
Сообщений: 35
Репутация: 10
По умолчанию

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

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

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
Репутация: 420
По умолчанию

Лучше вообще так:
Код:
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
Репутация: 217
По умолчанию

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

Код:
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.
вот, проще всего наверн
madmaniac вне форума  
Закрытая тема

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


19:51.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.