Примеры выполнения задания лабораторной работы. Пример 1. Составьте программу нахождения числа сочетаний из n элементов по m по формуле
Пример 1. Составьте программу нахождения числа сочетаний из n элементов по m по формуле Решение. Для решения данной задачи составим процедуры Cnm и Fact (текст программы) (рис. 6.1). На рис. 6.2 представлена схема алгоритма функции нахождения n!.
Текст программы
program lr6_1_1; { Вычисление C из n по m =n! /(m! *(n-m)!)} { $APPTYPE CONSOLE } Uses SysUtils; Var m, n: integer; function fact(const n: integer): int64; { Нахождение n! } Var i: integer; p: longint; Begin p: =1; for i: =1 to n do p: = p * i; fact: = p; end; Begin clrscr; write('n и m = '); readln(n, m); writeln('n= ', n, ' m= ', m, ' Cmn= ', fact(n) div (fact(m)*fact(n - m)): 6); readln; End.
Если нахождение n! оформить в виде подпрограммы-про-цедуры, то предыдущая программа могла бы быть следующей:
program lr6_1_2; { Вычисление C из n по m =n! /(m! *(n-m)!) } { $APPTYPE CONSOLE } Uses SysUtils; Var m, n: integer; fn, fm, fn_m, Cnm: int64; procedure fact(const n: integer; var p: int64); { Нахождение n! } Var i: integer; Begin p: =1; for i: =1 to n do p: = p * i; end; Begin write('n и m = '); readln(n, m); fact(n, fn); { Обращение к процедуре Fact для нахождения } fact(m, fm); { факториалов n, m, n-m } fact(nm, fn_m); Cnm: =fn div (fm*fn_m); { Нахождение числа сочетаний из n по m } writeln('n= ', n, ' m= ', m, ' Cmn= ', Cnm: 6); readln; end.
Оформим вычисление искомой величины в виде функции Cmn, содержащей внутри себя описание функции вычисления факториала.
program lr6_1_3; { Вычисление C из n по m =n! /(m! *(n-m)!) } { $APPTYPE CONSOLE } Uses SysUtils; Var m, n: integer; function Cmn (cons t m, n: integer): int64; function fact(const n: integer): int64; Var i: integer; p: int64; Begin p: =1; for i: =1 to n do p: = p * i; fact: = p; end; Begin Cmn: =fact(n) div (fact(m)*fact(n-m)); end; Begin write('m и n = '); readln(m, n); writeln('m= ', m, ' n= ', n, ' Cmn= ', Cmn (m, n): 6); readln; End. Надо заметить, что приведенные примеры не очень удачны с точки зрения эффективности алгоритмов. Понятно, что трижды вычислять заново факториалы чисел n, m, n-m совсем не обязательно. Рассмотрим следующий пример. Пример 2. Составьте программу перевода натуральных чисел из одной системы счисления в другую. Переводимое число необходимо вводить в форме исходной системы счисления. Системы счисления, из которой и в которую выполняется перевод, должны принимать значения от двух до шестнадцати. Обратите внимание на то, в качестве фактического параметра, передаваемого по значению, может быть выражение, в частности вызов функции.
|