всем привет. нашел в сети программу вычисляющую факториал числа.
вот код:
program Factorial;
var n:integer;
function Factor(n:integer):real;
_var v:real;
_Begin
_if n in [0,1] then Factor:= 1 else Factor:= n*Factor(n-1);
_end;
begin
_Write('Введите число(0..33): ');
_Readln(n);
_Write('Факториал этого числа равен: ', Factor(n):11:0);
_Readln;
End.
объясите пожалуйста функцию командыFactor(n):11:0
14 февраля 2010 в 17:02
хотя..да.. там и на условиях зафигачить можно. модифицировав пост №30.
типа
if ed=0 {не знаю, можно ли так в паскале делать} or 5 or 6 or 7 or 8 or 9 then writeln('возраст', a,'лет');
и так далее для года и год
14 февраля 2010 в 17:01
с таким подходом можно массивы где угодно присобачивать) условие, вроде как, таково что нужно начала число выводить, цифрами
14 февраля 2010 в 17:01
ну уж не где угодно,
но чем выводить несколько ифов на каждое значение – проще вывести элемент массива(это исключительно личное предпочтение)
14 февраля 2010 в 17:00
если нужно вывести в формате "20 лет" – то даже и условий не очень много будет,
а если полностью буквами – то вопрос применения массивов – вопрос вкуса
14 февраля 2010 в 14:03
во второй массивы ни при чем. там куча условных операторов.
14 февраля 2010 в 14:02
пожалуйста)
14 февраля 2010 в 14:01
нет..её массивами нужно решать..я не разбираюсь в них.
14 февраля 2010 в 14:01
всеравно спасибо!!
14 февраля 2010 в 14:00
Спасибо Влад Ведьмакович!!
14 февраля 2010 в 14:00
а 2 можеш решить? =)
14 февраля 2010 в 13:05
как решить первую знаю, но не знаю как написать…
14 февраля 2010 в 13:04
program summa_cifr;
var ed, dec, sot, tys, a, b:integer;
begin
_writeln('vvedite chislo (4 cifry)');
_readln(a);
_ed:=a mod 10;
_dec:=(a div 10) mod 10;
_sot:=(a div 100) mod 10;
_tys:=a div 1000;
_b:=ed+dec+sot+tys;
_if b=10 then writeln('summa cifr chisla = 10') else writeln('summa cifr chisla NE = 10');
_readln;
end.
вместо _ ставь пробел
14 февраля 2010 в 13:03
Спасибо огромное! я в нем не шарю вообще, а сдавать надо!!
14 февраля 2010 в 13:02
последнюю решить довольно легко. нужно разбить число на разряды операциями mod\div и складывать результаты… потом if then else. сейчас попробую написать и кину сюда текст.
14 февраля 2010 в 12:05
помогите пару задач решить!! 1) Написать программу которая выводит пример на умножение двух однозначных чисел, запрашивает ответ пользователя,проверяет его и выволит сообщение, правильно или ошиблись и правильный ответ))
2)ввести возраст человека (1до 100 лет) и вывести его вместе со следующим словом "год, года, лет"
3)ввести число и определить, верно ли, что сумма его цифр равна 10.
Заранее спасибо откликнувщимся!!
13 февраля 2010 в 9:05
Я проверял прога, до 1750! норм )
12 февраля 2010 в 10:00
до 12 факториал.
12 февраля 2010 в 9:01
прикол, в 9 классе в школе писала эту прогу ) прикольн…
12 февраля 2010 в 1:03
Здесь можна провирать //www.justinwhite.com/big-calc/1000.html
12 февраля 2010 в 0:02
Всем привет. Вот мой прога для факториал.Від 10 – 1000 точно . (пысано T.Pascal 6)
Program Faktorialis;
Uses Crt;
Var c:Array[0..450] Of LongInt; S:String[6];
Nullak,n,i,q,k:Word; Ch:Char; at,at1:LongInt;
{——————— RAMA ——————————-}
PROCEDURE KERET(x1,y1,L,H:Byte);
Var i,x2:Byte;
Begin
x2:=x1+L-1;
GotoXY(x1,y1); Write(#201);
For i:=1 To L-2 Do Write(#205); Write(#187);
GotoXY(x1,y1+H-1); Write(#200);
For i:=1 To L-2 Do Write(#205); Write(#188);
For i:=y1+1 To y1+H-2 Do
Begin GotoXY(x1,i); Write(#186); GotoXY(x2,i); Write(#186);End;
End;
{———————————————————}
BEGIN
TextAttr:=$0C; ClrScr;
KERET(2,1,78,25);
Window(4,2,73,24);
TextColor(2);
GotoXY(30,2); WriteLn(' n! vid 10 do 1000 ');WriteLn;
TextColor(14);
Repeat
TextColor(14);
Write('Vvedite 4islo "n" vid 10 do 1000: '); TextColor(white); ReadLn(n);
at:=0; k:=0; c[0]:=1;
For q:=2 To n Do
Begin
For i:=0 To k Do
Begin
at1:=at;
at:=(q*c[i]+at) Div 1000000; c[i]:=(q*c[i]+at1) Mod 1000000;
End;
While at>0 Do Begin k:=k+1; c[k]:=at Mod 1000000; at:=at Div 1000000 End;
End;
TextColor(2);
Write(c[k]:6,' ');
For i:=k-1 DownTo 0 Do
Begin
Str(c[i],S);
While Length(S)<6 Do S:='0'+S; Write(S,' ')
End;
WriteLn;
Ch:=ReadKey;
Until Ch=#27;
END.
6 февраля 2010 в 22:05
По моему мнению было тупостью писать faktor(n:integer):real;
я про тип функции, а потом писать :11:0. Дибилизм. Лутше faktor(n:integer):integer;
а потом просто :11. Хотя не так это и важно
4 февраля 2010 в 3:05
>Вот с точки зрения практичности лучше как раз, на мой взгляд, вариант с рекурсией.
Найди таким способом факториал достаточно большого числа (наверно, порядка 2^16), находясь в DOS. Стек тут как раз не более 64К, т.е. твоя прога крэшнет систему, переполнив указатель стека и затерев адреса возврата.
ЗЫ ессно, реальный режим, в нереальном можно без проблем это заставить работать)
2 февраля 2010 в 19:00
хаха))))
1 февраля 2010 в 13:01
Кстати, вот ссылка в тему – поржать:
//gist.github.com/289467
31 января 2010 в 22:03
#15
Вот с точки зрения практичности лучше как раз, на мой взгляд, вариант с рекурсией. На C решение прозрачно + занимает ровно одну строчку. С точки зрения оптимизации, да, циклом быстрее будет, но тогда можно вообще все рекурсивные решения отбросить, заменив их циклическими. Но с точки зрения проектирования это не всегда хорошо.
И, да. Задача классическая, практически везде дается для улучшения понимания рекурсии.
31 января 2010 в 14:04
видимо задание таково что нужно юзать рекурсивный алгоритм.
31 января 2010 в 14:03
а оно и не должно правильно считать. если в числе 11 и более знаков, то оно уже не вмещается в стандартные паскалевские типы. там уже длинную арифметику нужно использовать.
31 января 2010 в 14:03
Денис, зачем расходовать память на стеке, когда можно так:
n = 1;
for ( i = 1;i <= n ;++i ) n *= i;
31 января 2010 в 14:02
последние 2 цифры недописывает, а подставляет 4 нуля.
31 января 2010 в 14:02
17! по виндовсовскому калькулятору равно 355687428096000
а по проге 355687428100000
31 января 2010 в 14:02
в №11 ошибся.
31 января 2010 в 14:01
№7
Это еще почему?
31 января 2010 в 14:01
прога только до 16 включительно правильно считает. потом уже чтото левое выдает.
31 января 2010 в 14:01
Что значит "левое"?
31 января 2010 в 14:00
чучуть оффтоп: считать факториал рекурсией типаn! = n*(n-1)! совсем не практично)
31 января 2010 в 10:02
С точностью 11 знаков до запятой и 0 после.
31 января 2010 в 10:02
понятно. еще вопрос: как завершить программу и выйти в окно паскаля после запуска программы с функцией repeat until?
31 января 2010 в 10:02
всё разобрался. ввел неверное число)
31 января 2010 в 10:01
факториал не может быть дробным..по крайней мере паскаль ошибку при вводе выдает.
31 января 2010 в 10:00
число,найденное функцией Factor, с точностью до 11 знаков до запятой. вроде так.