|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Пояснення до алгоритму. Функція fp знаходиться в циклі основного алгоритму, безпосередньо у виразі, і використовується для обчислення добутку елементів масиву YФункція fp знаходиться в циклі основного алгоритму, безпосередньо у виразі, і використовується для обчислення добутку елементів масиву Y. Їй передаються два фактичних параметри: поточний розмір масиву і сам масив. Результат функції щоразу вміщується в її ім’я. Комірка р є локальною змінною і використовується для обчислення добутку. Зауважимо, по-перше, що для передавання масиву в підпрограму необхідно створити власний тип, за допомогою якого потім описувати фактичні та формальні параметри. Алгоритм мовою Паскаль: Program F; const m=10; type arr = array [1..m] of real; Function Fp (count: word; A: arr): real; var i: word; p: real; Begin p:=1; for i:=1 to count do p:=p*A[i]; Fp:=p; end; const n=20; var x: array [1..n] of real; y: arr; s: real; j: word; Begin s:=0; for j:=1 to n do S:=S+Fp(j, y)*x[j]; writeln (‘S=’, S:8:2); end.
Приклад 3. Скласти алгоритм-функцію обчислення біномінальних коефіцієнтів, використовуючи допоміжний алгоритм-функцію обчислення факторіала. Нагадаємо, що біномінальним коефіцієнтом називається число
Алгоритм мовою Паскаль: Program Bin_coef; Function Fact(a: byte): longint; var F:l ongint; i: byte; Begin F:=1; for i:=1 to a do F:=F*i; Fact:=F; end; var n, m: byte; R: longint; Begin write (‘ введіть n та m’); readln (n, m); R:=Fact(n)/Fact(m)*Fact(n – m); writeln (‘R=’, R); end.
Зверніть увагу, що оскільки n!=1*2*3*…*n, то значення факторіала збільшується настільки швидко, що значення вже 14! не вміщується в жоден стандартний цілочисельний тип, зокрема в найбільший longint. Однак, враховуючи, що біномінальний коефіцієнт знаходять як відношення факторіалів, можна виконати скорочення, зменшивши таким чином чисельник та знаменник дробу. Щоб скорочення було найоптимальнішим, необхідно визначити, який з множників m! чи (n – m)! Більший, і поділити саме на нього. Тоді одержимо: а) якщо m>(n – m) m! в) якщо , скорочуємо на (n – m)! Враховуючи вищесказане, можна змінити функцію Fact таким чином, щоб вона знаходила добуток всіх натуральних чисел у діапазоні від а до b, тобто: Fact:=a*(a+1)*(a+2)*…*(b – 1)*b Алгоритм мовою Паскаль: Program Bin_coef; Function Fact (a, b: byte): longint; var i: byte; F: longint; Begin F:=1; for i:=a to b do F:=F*i; Fact:=F; end; var n, m: byte; R: longint; Begin write (‘введіть n та m’); readln (n, m); if m>n – m then R:=Fact(m+1, n)/Fact(1, n – m) else R:=Fact(n – m+1, n)/Fact(1, m); writeln (‘R=’, R); end.
Приклад 4. Дано квадратну матрицю цілих чисел і квадратне рівняння a1x2+bx+c=0. Треба знайти корінь повного квадратного рівняння, якщо відомо, що його коефіцієнти визначаються в такий спосіб: 1) а1 – кількість простих чисел, розташованих на головній діагоналі; 2) b – мінімальний елемент, розташований нижче від головної діагоналі матриці; 3) с – середнє арифметичне елементів, розташованих на бічній діагоналі матриці. Основний алгоритм має вигляд: АЛГ Приклад 4 (ціл n, таб a[1:n, 1:n], дійсн х1, х2, літ s) АРГ n, a РЕЗ x1, x2, s ПОЧ S:=’ це не повне квадратне рівняння ‘ a1;=KPGD9n, a0 b:=minng(n, a) c:=sapd(n, a) якщо a1>0 і b>0 i c>0 то викликати КВУР (a1, b, c, x1, x2, s) якщо s=’ є розв’язок ‘ то ДРУКУВАТИ ‘ корені рівняння: х1= ‘, x1 ‘x2=’, x2 iнакше ДРУКУВАТИ s Все інакше ДРУКУВАТИ s Все КІН
Допоміжні алгоритми і алгоритми-функції мають вигляд:
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.01 сек.) |