singlepost

Pascal – что значит Write(…, Factor(n):11:0))? << На главную или назад  

всем привет. нашел в сети программу вычисляющую факториал числа.
вот код:
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

40 ответов в теме “Pascal – что значит Write(…, Factor(n):11:0))?”

  1. 40
    Влад Ведьмакович ответил:

    хотя..да.. там и на условиях зафигачить можно. модифицировав пост №30.
    типа
    if ed=0 {не знаю, можно ли так в паскале делать} or 5 or 6 or 7 or 8 or 9 then writeln('возраст', a,'лет');
    и так далее для года и год

  2. 39
    Максим Самойлов ответил:

    с таким подходом можно массивы где угодно присобачивать) условие, вроде как, таково что нужно начала число выводить, цифрами

  3. 38
    Артём Бикинеев ответил:

    ну уж не где угодно,
    но чем выводить несколько ифов на каждое значение – проще вывести элемент массива(это исключительно личное предпочтение)

  4. 37
    Артём Бикинеев ответил:

    если нужно вывести в формате "20 лет" – то даже и условий не очень много будет,
    а если полностью буквами – то вопрос применения массивов – вопрос вкуса

  5. 36
    Максим Самойлов ответил:

    во второй массивы ни при чем. там куча условных операторов.

  6. 35
    Влад Ведьмакович ответил:

    пожалуйста)

  7. 34
    Влад Ведьмакович ответил:

    нет..её массивами нужно решать..я не разбираюсь в них.

  8. 33
    Маша Куринкова ответил:

    всеравно спасибо!!

  9. 32
    Маша Куринкова ответил:

    Спасибо Влад Ведьмакович!!

  10. 31
    Маша Куринкова ответил:

    а 2 можеш решить? =)

  11. 30
    Влад Ведьмакович ответил:

    как решить первую знаю, но не знаю как написать…

  12. 29
    Влад Ведьмакович ответил:

    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.

    вместо _ ставь пробел

  13. 28
    Маша Куринкова ответил:

    Спасибо огромное! я в нем не шарю вообще, а сдавать надо!!

  14. 27
    Влад Ведьмакович ответил:

    последнюю решить довольно легко. нужно разбить число на разряды операциями mod\div и складывать результаты… потом if then else. сейчас попробую написать и кину сюда текст.

  15. 26
    Маша Куринкова ответил:

    помогите пару задач решить!! 1) Написать программу которая выводит пример на умножение двух однозначных чисел, запрашивает ответ пользователя,проверяет его и выволит сообщение, правильно или ошиблись и правильный ответ))
    2)ввести возраст человека (1до 100 лет) и вывести его вместе со следующим словом "год, года, лет"
    3)ввести число и определить, верно ли, что сумма его цифр равна 10.
    Заранее спасибо откликнувщимся!!

  16. 25
    Адам Югас ответил:

    Я проверял прога, до 1750! норм )

  17. 24
    Адам Югас ответил:

    до 12 факториал.

  18. 23
    Натаха Анисян ответил:

    прикол, в 9 классе в школе писала эту прогу ) прикольн…

  19. 22
    Адам Югас ответил:

    Здесь можна провирать //www.justinwhite.com/big-calc/1000.html

  20. 21
    Адам Югас ответил:

    Всем привет. Вот мой прога для факториал.Від 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.

  21. 20
    Сергій Сухарчук ответил:

    По моему мнению было тупостью писать faktor(n:integer):real;
    я про тип функции, а потом писать :11:0. Дибилизм. Лутше faktor(n:integer):integer;
    а потом просто :11. Хотя не так это и важно

  22. 19
    Руслан Кабацаев ответил:

    >Вот с точки зрения практичности лучше как раз, на мой взгляд, вариант с рекурсией.
    Найди таким способом факториал достаточно большого числа (наверно, порядка 2^16), находясь в DOS. Стек тут как раз не более 64К, т.е. твоя прога крэшнет систему, переполнив указатель стека и затерев адреса возврата.
    ЗЫ ессно, реальный режим, в нереальном можно без проблем это заставить работать)

  23. 18
    Влад Гринько ответил:

    хаха))))

  24. 17
    Денис Федоренко ответил:

    Кстати, вот ссылка в тему – поржать:

    //gist.github.com/289467

  25. 16
    Денис Федоренко ответил:

    #15

    Вот с точки зрения практичности лучше как раз, на мой взгляд, вариант с рекурсией. На C решение прозрачно + занимает ровно одну строчку. С точки зрения оптимизации, да, циклом быстрее будет, но тогда можно вообще все рекурсивные решения отбросить, заменив их циклическими. Но с точки зрения проектирования это не всегда хорошо.
    И, да. Задача классическая, практически везде дается для улучшения понимания рекурсии.

  26. 15
    Максим Самойлов ответил:

    видимо задание таково что нужно юзать рекурсивный алгоритм.

  27. 14
    Максим Самойлов ответил:

    а оно и не должно правильно считать. если в числе 11 и более знаков, то оно уже не вмещается в стандартные паскалевские типы. там уже длинную арифметику нужно использовать.

  28. 13
    Алексей Авраменко ответил:

    Денис, зачем расходовать память на стеке, когда можно так:
    n = 1;
    for ( i = 1;i <= n ;++i ) n *= i;

  29. 12
    Влад Ведьмакович ответил:

    последние 2 цифры недописывает, а подставляет 4 нуля.

  30. 11
    Влад Ведьмакович ответил:

    17! по виндовсовскому калькулятору равно 355687428096000
    а по проге 355687428100000

  31. 10
    Влад Ведьмакович ответил:

    в №11 ошибся.

  32. 9
    Денис Федоренко ответил:

    №7

    Это еще почему?

  33. 8
    Влад Ведьмакович ответил:

    прога только до 16 включительно правильно считает. потом уже чтото левое выдает.

  34. 7
    Денис Федоренко ответил:

    Что значит "левое"?

  35. 6
    Алексей Авраменко ответил:

    чучуть оффтоп: считать факториал рекурсией типаn! = n*(n-1)! совсем не практично)

  36. 5
    zubr kabbi ответил:

    С точностью 11 знаков до запятой и 0 после.

  37. 4
    Влад Ведьмакович ответил:

    понятно. еще вопрос: как завершить программу и выйти в окно паскаля после запуска программы с функцией repeat until?

  38. 3
    Влад Ведьмакович ответил:

    всё разобрался. ввел неверное число)

  39. 2
    Влад Ведьмакович ответил:

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

  40. 1
    Максим Самойлов ответил:

    число,найденное функцией Factor, с точностью до 11 знаков до запятой. вроде так.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.