
- •3.Написати процедуру метода Гауса по блок-схемі.
- •2.Розкладання періодичної функції в ряд Фур'є (теорія)
- •3.Написати программу методу половинного ділення за блок-схемою:
- •4.Програма множення матриці на вектор.
- •3.Програма табулювання функції із записом результатів у масив і виведення на текстовий екран
- •4.Знаходження визначеного інтеграла методом Сімпсона
- •3.Програма табулювання функції із записом результатів у масив і виведення на текстовий екран.
- •1.Оператори циклів з відомою кількістю повторень. Ітераційні цикли. Процедури дострокового завершення циклу.
- •3.Запрограмувати метод крамера
- •4.Написати функцію побудови і табулювання ряду Фур’є(за блок схемою)
- •4. Інтеграли з заданою точністю.
- •Функції
- •3.Програма розв’язання квадратного рів-ня (консольна)
- •4.Програма Методу половинного ділення
- •3.Програма Методу половинного ділення
- •4 Метод Ньютона (Консольний)
- •1.Масив (Array) – це обмежена, впорядкована сукупність однотипних пронумерованих
- •4.Програма переглядач графічних файлів
- •1.Метод Ньютона для розвязання нелінійних рівнянь.
- •4. Програма розв’язання квадратного рівняння.
- •1.Компонента tChart та приклад.
- •2.Вказівники
- •3. Програма множення матриці на вектор.
- •4.Метод Ньютона(вік)
- •3.Програма трикутник
- •3.Програма знаходження мінімального і максимального елемента матриці!!!!
- •4.«Елементи_управління»
- •3.Метод Ньютона
- •4.Метод Монте Карло
- •1.Алгоритми
- •3.Фурьє Фурьє
- •3.Запрограмувати метод Крамера (Delphi).
- •2.Функції вводу/виводу мови с
- •4.Метод прямокутників(вкладений файл)
- •4.Табулювання функції із виведенням результатів на екран
- •3.Множення матриці на вектор Делфі
- •3.Трикутник
- •4.Функція методу гАуса
- •1 Метод Крамера та його недоліки
- •3 Програма знаходження мінімального максимального елемента матриці
- •4 Метод половинного ділення
4.Метод прямокутників(вкладений файл)
#include<math.h>
#include<conio.h>
long double f (long double x)
{return (x);}
long double sum (long double n,long double x,long double h)
{long double s=0;long i;
for (i=0;i<n;i++)
{s=s+f(x);
x=x+h;}
return (s);}
void main ()
{long n=640000;clrscr();
long double a=0,b=10,h=(b-a)/n;
double ip=h*sum(n,a+h/2,h),
it=h*0.5*(f(a)+f(b)+2*sum(n-1,a+h,h)),
is=h*(f(a)+f(b)+2*sum(n-1,a+h,h)+4*sum(n,a+h/2,h))/6;
cprintf("Rectangle method : s=%f",ip);
getch();}
Білет21
1.Оператори переходів та розгалужень Розгалужений процес вміщує декілька шляхів. Вибір того чи іншого шляху залежить від виконання деяких умов. У багатьох випадках виникає потреба в зміні послідовного порядку операторів, що стає можливим завдяки операторам управління. До них в першу чергу відносяться IF та CASE.
Оператор IF реалізує операцію умовного переходу (операцію розгалуження на два напрямки).
Загальний вигляд:
If умовний вираз then…else…;
В умовному виразі задається умова розгалуження. При виконанні оператора IF цей вираз обчислюється з отриманням логічного результату. Якщо результат True, то виконується простий або складний оператор після слова Then. Якщо результат False, то виконується оператор після Else.
Наприклад:
If A<7.2 then Y:=5*A else Y:=5/A;
Частину оператора Else … можна не вживати:
If X>0 then K:=K+1;
Це означає, що у випадку, коли число Х більше нуля, буде виконано оператор K:=K+1. Якщо така умова для конкретного числа хибна, то змінення К не відбувається, а управління передається на оператор, який в програмі записано після оператора If.
Складений оператор Begin…End суттєво розширює можливості If:
If A<0 then begin
K:=K+1;
R:=a;
End
Else begin
L:=L+1;
Q:=A;
End;
У складному операторі записують будь-яку кількість операторів. Вони виконуються “як одне ціле”. Тут можуть бути “свої” If, цикли, тощо.
Зверніть увагу на те, що після оператора, який стоїть перед Else, не ставиться крапка з комою.
Оператор Case забезпечує розгалуження на декілька напрямків.
Загальний вигляд:
Case індекс вибору of список вибору;
Else…; End;
де індекс вибору – проста змінна цілого, символічного, перелічуваного або логічного типу;
список вибору – сукупність простих або складних операторів, перед кожним з яких стоїть константа вибору, тип якої співпадає з типом індексу вибору.
Після слова Else може стояти простий або складний оператор (ця конструкція може бути відсутня).
Приклад:
Case Kit of
1: Y:=sin(x);
2: Y:=cos(x);
3: Y:=sin(x)+cos(x);
Else Y:=0;
End; {case}
Змінна Kit (цілого типу) повинна бути визначеною до виконання оператора Case. Якщо Kit дорівнює 1, обчислюється функція Y:=sin(x), якщо вона дорівнює 2, то : Y:=cos(x). У тому випадку, коли Kit відрізняється від 1, 2 або 3, буде виконано оператор Y:=0.
У списку вибору можна вживати складний оператор Вegin… End.
Приклад: скласти програму обчислення функції
Програма:
Var X, Y, Z, F : Real;
Begin
Write(‘Введіть Y, Z :’);
ReadLn(Y,Z);
Write(‘Введіть X :’);
ReadLn(X);
IF (X>=Y) THEN F:=SQR(X)+EXP(Z)/COS(Y)
ELSE F:=SIN(X)+COS(Z);
WriteLn(‘Значення F=’,F);
End.
Оператор безумовного переходу
Використання оператора безумовного переходу goto в практиці програмування на мові С настійно не рекомендується, так як він ускладнюєрозуміння програм і можливість їх модифікацій. Формат цього оператора наступний: goto ім'я-мітки; ... ім'я-мітки: оператор; Оператор goto передає управління на оператор, позначений міткою ім'я-мітки. Приречений оператор повинен знаходитися в тій же функції, що і оператор goto, а використовувана мітка повинна бути унікальною, тобто одне ім'я-мітки не може бути використано для різних операторів програми. Ім'я-мітки - це ідентифікатор. Будь-який оператор у складеному операторі може мати свою мітку. Використовуючи оператор goto, можна передавати управління всередину складеного оператора. Але потрібно бути обережним при вході у складений оператор, що містить оголошення змінних з ініціалізацією, оскільки оголошення розташовуються перед виконуваними операторами і значення оголошених змінних при такому переході будуть не визначені. Оператори умовного переходу
Оператор if
Формат оператора: if (вираз) оператор; Виконання оператора if починається з обчислення виразу. Далі виконання здійснюється за наступною схемою: - Якщо вираз істинний (тобто відмінно від 0), то виконується оператор. - Якщо вираз помилково, то виконується наступний за if оператор. Після виконання оператора if значення передається на наступний оператор програми, якщо послідовність виконання операторів програми не буде примусово порушена використанням операторів переходу. Приклад: if (i <j) i + +: Оператор if-else Формат оператора: if (вираз) оператор-1; else оператор-2; Виконання оператора if починається з обчислення виразу. Далі виконання здійснюється за наступною схемою: - Якщо вираз істинний (тобто відмінно від 0), то виконується оператор-1. - Якщо вираз помилково (тобто дорівнює 0), то виконується оператор-2. Після виконання оператора if значення передається на наступний оператор програми, якщо послідовність виконання операторів програми не буде примусово порушена використанням операторів переходу. Приклад: if (i <j) i + +: else {j = i-3; i + +;} Цей приклад ілюструє також і той факт, що на місці оператор-1, так само як і на місці оператор-2 можуть знаходитися складні конструкції. Допускається використання вкладених операторів if. Оператор if може бути включений в конструкцію if або в конструкцію else іншого оператора if. Щоб зробити програму більш читабельною, рекомендується групувати оператори і конструкції у вкладених операторах if, використовуючи фігурні дужки. Якщо ж фігурні дужки опущені, то компілятор пов'язує кожне ключове слово else з найбільш близьким if, для якого немає else. Приклади: int main () { int t = 2, b = 7, r = 3; if (t> b) { if (b <r) r = b; } else r = t; return (0); } В результаті виконання цієї програми r стане рівним 2. Якщо ж у програмі опустити фігурні дужки, що стоять після оператора if, то програма буде мати наступний вигляд: int main () { int t = 2, b = 7, r = 3; if (a> b) if (b <c) t = b; else r = t; return (0); } У цьому випадку r отримає значення рівне 3, так як ключове слово else відноситься до другого оператору if, який не виконується, оскільки не виконується умова, що перевіряється в першому операторі if.
Оператор if-else if
Наступний фрагмент ілюструє вкладені оператори if: char ZNAC; int x, y, z; : if (ZNAC == '-') x = y - z; else if (ZNAC == '+') x = y + z; else if (ZNAC == '*') x = y * z; else if (ZNAC == '/') x = y / z; else ... З розгляду цього прикладу можна зробити висновок, що конструкції використовують вкладені оператори if, є досить громіздкими і не завжди достатньо надійними. Іншим способом організації вибору з безлічі різних варіантів є використання спеціального оператора вибору switch.
Оператор перемикач switchОператор switch призначений для організації вибору з безлічі різних варіантів. Формат оператора наступний: switch (вираз) {[Оголошення] : [Case константне-вираз1]: [список-операторов1] [Case константне-вираз2]: [список-операторов2] : : [Default: [список операторів]] } Вираз, наступне за ключовим словом switch в круглих дужках, може бути будь-яким виразом, допустимими в мові С, значення якого повинно бути цілим. Значення цього виразу є ключовим для вибору з декількох варіантів. Тіло оператора smitch складається з декількох операторів, помічених ключовим словом case з наступним константним-виразом. Слід зазначити, що використання цілого константного вираження є істотним недоліком, властивим розглянутому оператору. Так як константні вираз обчислюється під час трансляції, воно не може містити змінні або виклики функцій. Звичайно як константного вирази використовуються цілі або символьні константи. Всі вирази в операторі switch повинні бути унікальні. Крім операторів, помічених ключовим словом case, може бути, але обов'язково один, фрагмент, позначений ключовим словом default. Список операторів може бути порожнім, або містити один або більше операторів. Причому в операторі switch не потрібно укладати послідовність операторів у фігурні дужки. Відзначимо також, що в операторі switch можна використовувати свої локальні змінні, оголошення яких знаходяться перед першим ключовим словом case, проте в оголошеннях не повинна використовуватися ініціалізація. Схема виконання оператора switch наступна: - Обчислюється вираз в круглих дужках; - Обчислені значення послідовно порівнюються з константними виразами, наступними за ключовими словами case; - Якщо одне з константних виразів збігається зі значенням висловлювання, то управління передається на оператор, позначений відповіднимключовим словом case; - Якщо жодна з константних виразів не одно висловом, то управління передається на оператор, позначений ключовим словом default, а в разі його відсутності управління передається на наступний після switch оператор. Відзначимо цікаву особливість використання оператора switch: конструкція зі словом default може бути не останньою у тілі оператора switch.Ключові слова case і default в тілі оператора switch істотні тільки при початковій перевірці, коли визначається початкова точка виконання тіла оператора switch. Всі оператори, між початковим оператором і кінцем тіла, виконуються незалежно від ключових слів, якщо тільки якийсь з операторів не передасть управління з тіла оператора switch. Таким чином, програміст повинен сам подбає про вихід з case, якщо це необхідно. Найчастіше для цього використовується оператор break. Для того, щоб виконати одні й ті ж дії для різних значень вираження, можна помітити один і той же оператор декількома ключовими словами case. Приклад: int i = 2; switch (i) { case 1: i + = 2; case 2: i *= 3; case 0: i / = 2; case 4: i -= 5; default:; } Виконання оператора switch починається з оператора, відміченого case 2. Таким чином, змінна i отримує значення, рівне 6, далі виконується оператор, позначений ключовим словом case 0, а потім case 4, мінлива i прийме значення 3, а потім значення - 2. Оператор, позначений ключовим словом default, не змінює значення змінної. Розглянемо раніше наведений приклад, в якому ілюструвалося використання вкладених операторів if, переписаної тепер з використанням оператора switch. char ZNAC; int x, y, z; switch (ZNAC) { case '+': x = y + z; break; case '-': x = y - z; break; case '*': x = y * z; break; case '/': x = u / z; break; default:; } Використання оператора break дозволяє в необхідний момент перервати послідовність виконуваних операторів у тілі оператора switch, шляхом передачі управління оператору, наступного за switch. Відзначимо, що в тілі оператора switch можна використовувати вкладені оператори switch, при цьому в ключових словах case можна використовувати однакові вирази. Приклад: switch (a) { case 1: b = c; break; case 2: switch (d) { case 0: f = s; break; case 1: f = 9; break; case 2: f-= 9; break; } case 3: b-= c; break;
2.Правила використання формальних і фактичних параметрів. Параметри, за допомогою яких здійснюється обмін значеннями змінних між підпрограмами та програмою, що їх викликає, можуть мати будь-який тип, в тому числі структурований. Існують два типи параметрів: параметр-значення; параметр-змінна. Група параметрів, перед якими відсутнє зарезервоване слово Var, називається параметрами-значеннями. Наприклад, в описі Procedure Korrect(S,K:real) S і K - параметри-значення. Формальний параметр-значення обробляється, як локальна стосовно процедури або функції, змінна. Зміни формальних параметрів-значень не впливають на відповідні значення фактичних параметрів. Група параметрів, перед якими знаходиться ключове слово Var, називається параметрами-змінними. Наприклад, в описі Procedure Obr(Var A,B:integer); А та В - параметри-змінні. Параметр-змінна використовується в тому випадку, якщо значення повинно бути передане з процедури в блок, що її викликає. При активізації процедури або функції формальний параметр-змінна заміщується фактичною змінною, а тому будь-які зміни в значенні формального параметра-змінної відбиваються на фактичному параметрі. І в тому, і в іншому випадку тип фактичного параметра повинен збігатися з типом формального. Якщо формальний параметр має рядковий тип, йому надається атрибут довжини, рівний 255, а тому і фактичний параметр в цьому випадку повинен також мати рядковий тип з атрибутом довжини, що дорівнює 255. У якості параметра-змінної може використовуватися будь-який тип, в тому числі файловий.
3.МПД_Делфі_консоль function f(x: real): real;
begin
f:=sin(ln(x))-cos(ln(x))+2*ln(x);
end;
var a,b,eps,k,w:real;
begin
a:=1;
b:=3;
eps:=0.0001;
k:=(a+b)/2;
while b-a>eps do
begin
if f(a)*f(k)<0 then
b:=k
else
a:=k;
k:=(a+b)/2;
end;
w:=(a+b)/2;
writeln ('w=',w:1:4);
readln;
end.
4.Множення матриці на вектор #include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int main()
{
int n,m,i,j,kol;
float A[100][100],c[100],d[100];
char buff[50];
cout<<"Vvedit kilkist r9dkiv: "; cin>>n;;
cout<<"Vvedit kilkist stovbciv: "; cin>>m;
cout<<"Vvedit kilkist koordunat vektora: "; cin>>kol;
cout<<endl<<endl;
cout<<("Vvedit elementu matruci: ");
cout<<buff<<endl;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{cin>>A[i][j]; }
cout<<endl;
cout<<("Vvedit koordunatu vektora: ");
cout<<buff<<endl;
for(j=0;j<kol;j++)
{cin>>c[j]; }
for(j=0;j<n;j++)
{
d[j]=0;
for(i=0;i<m;i++)
d[j]+=A[j][i]*c[i];
}
cout<<endl;
cout<<("Rezyltat: ");
cout<<buff<<endl;
for(i=0;i<n;i++)
cout<<d[i]<<endl;
getch();
return 0;
}
Білет22 1.Методи розв’язання СЛАР. Обумовленість матриці. Метод Гауса.
Методи розв’язання СЛАР. Метод Крамера.
Розвязок слар-вектор,що задовольняє рівняння Ax=b (x b вектори)
Методи розв’язання СЛАР поділяються на 2 групи:
1.прямий-налічує прямі методи обчислення системи рівнянь з не виродженою квадратною матрицею,розвязок за скінченну кількість кроків:Гаус,Крамер,Віддзеркалення та обертання(для занулення елемент матрц використ особлив лінійн перетвор-дає змогу з< накопичен похибок),Модифікац метод оберт(мож розвязув р-ння з однаков лівими частинами),Ортогоналізація(розв’язує матрицю,за відсутнст точного розвязк шукає найбіш наближений),Сингулярне розкладання(=Ортогоналізація,+розвяз вироджені матриці,повільніший за гаус в 10 раз,але самий ЗБС!)
2.ітераційний – кіл-ть арифметичних операцій тут залежить від обраної нами точності обчислень.(метод Гауса(?)
критерій закінчення
||x(i)-x(i-1)||<E
З погляду класичної математики є 3 варіанта розв’язання СЛАР:
1. якщо визначник системи=0 матриця наз. виродженою і розв’язків системи немає
2. якщо систему складають однакові рівняння, які відрізняються коефіцієнтами, то розв’язків буде безліч
3. якщо визначник системи не=0 , то система має єдиний розв’язок
Є ще й 4-й варіант:
4. система із погано обумовленою матрицею: визначник не=0, але дуже близький до 0. розв’язувати подібні системи складно, тут і потрібні ітераційні методи.
Число обумовленості - величина, що характеризує точність розв'язку, отриманого чисельним методом. Якщо точність велика, то дані добре обумовлені, інакше вони погано обумовлені.
Для матриці
—
це
.
Де
- норма
матриці A.
Число обумовленості характеризує стійкість СЛАР до обчислювальної похибки. Тобто, чим більше число обумовленості матриці системи (чим гірше обумовлена СЛАР), тим менш точними будуть розв’язки отримані за допомогою чисельних методів, та навпаки.
Метод Гаусса
Метод Гауса містить два етапи:
-прямий хід-послідовне вилучення невідомих з рівнянь системи для перетворення початкової системи в еквівалентну їй систему з трикутною матрицею
-зворотня підстановка - визначення компонента вестора Х*,що є розвязком системи
Математики доводять,що розвязок системи буде точнішим,якщо на головній діагоналі матриці системи стоятиме максимальне по стовпцю число,тому першим кроком методу гауса є пошук максимального елемента по стовпцю і підстановка цього р-ня на місце першого.Якщо цей максимальний елемент 0,то це значить,що матриця є виродженою і коренів нема,про що і повідомляємо користувачу
.Якщо максимальний елемент є дуже малим,це значить,що матриця є погано обумовлена і розвязувати цю систему не варто.
2.Посилання у мові С++. Операції з посиланнями
Змінні-посилання (references) є окремим різновидом вказівників і також містять адресу іншої змінної. Згідно з [ ] посилання - є альтернативним іменем об’єкта.
Така сучасна мова програмування як Java взагалі використовує іх взамін вказівників. В С# посилання є основою адресації, в той час як використання вказівників - не рекомендований розробником спосіб. Це зумовлено тим, що посилання за своєю суттю є безпечним константим вказівником.
На відміну від вказівників:
· посилання обов'язково ініціалізуються при оголошенні;
· посиланням не можна присвоювати нову адресу;
· посиланням не займає зайвої пам’яті і може знищуватись раніше самого об’єкта, на яке воно організоване;
· стосовно посилань не можна застосовувати операцію знаходження адреси (це стосується окремих С++ компіляторів);
· не можна створювати масив посилань;
· для посилань є зайвою операція розіменування; ними оперують як звичайними змінними.
int& i=2; int j=3;
i = j; // i = 3; посиланнями оперують як звичайними змінними
У даному прикладі показано, що значення за посиланням i змінюється без операції розіменування.
Наступний приклад найкраще ілюструє ідею посилання
Приклад 1.2.4
# include <iostream>
using namespace std;
main()
{
int i = 1;
int * const p1=&i;
int& p2 = i;
cout<<"Variable address: "<<showbase<<hex<< &i<<"\n";
cout<<"Reference address: "<<showbase<<hex<< &p2<<"\n";
cout<<"Pointer address: "<<showbase<<hex<< &p1<<"\n";
}
Результат роботи програми є такий
В прикл. 2.4 інструкції (маніпулятори) showbase i hex вказують на те, що виводити результат треба з вказання системи числення і 16-м форматі. Детальніше про маніпулятори див розділ N.
В переважній більшості випадків посилання використовуються трьома способами
· посилання можна передавати у функцію;
· посилання можна повертати з функції. Тут треба бути обережним. Якщо функція повертає посилання, то це повинна бути адреса реально існуючого доступного об’єкта.;
· допускається створення незалежних посилань (independ references), тобто посилань, які є просто іншим іменем змінної.
int j; int& i=j; // i - незалежне посиланняx
Посилання може посилатись на константу
const int &i = 5;
Оголошення посилання з модифікатором const робить неможливою зміну значення, на яке вказує посилання.
Поняття безтипових посилань (void&) не існує.
3.Запрограмувати метод половинного ділення за блок – схемою.
program polovunne ;
{$APPTYPE CONSOLE}
uses
SysUtils;
function f(x: real): real;
begin
f:=sin(ln(x))-cos(ln(x))+2*ln(x);
end;
var a,b,eps,k,w:real;
begin
a:=1;
b:=3;
eps:=0.0001;
k:=(a+b)/2;
while b-a>eps do
begin
if f(a)*f(k)<0 then
b:=k
else
a:=k;
k:=(a+b)/2;
end;
w:=(a+b)/2;
writeln ('w=',w:1:4);
readln;
end.