
- •Скорочений if
- •2.Повний if
- •15. Вкладені цикли. Оператори дочасного завершення циклу.
- •17.Поясніть операції з вказівниками і способи ініціалізації вказівників.
- •Посилання та правила їхнього використання.
- •19. Масиви статичні і динамічні, Правила опису і використання одно та дво вимірних масивів.
- •20. Визначений інтеграл. Метод центральних прямокутників.
- •26. Об'єднання. Синтаксис опису та сфери їхнього використання.
26. Об'єднання. Синтаксис опису та сфери їхнього використання.
Об’єднання (union) – це варіант структури у який компілятор повинен усі поля розташувати за однією адресою.
Синтаксис описи union так як і в структури, тільки Struct заміняється на union.
union <назва об’єднання>
{
<тип поля_1> <назва поля_1>;
<тип поля_2> <назва поля_2>;
...
<тип поля_n> <назва поля_n>;
};
Довжина об’єднання в байтах = довжині найбільшого його поля. У кожен момент роботи з програмою у змінній типу union містяться значення тільки якогось одного із її полів. Це значення може періодично змінюватись.
Об’єднання використовують з метою економії оперативної пам’яті, коли відомо, Що під час роботи програми одночасно в пам’яті може знаходиться тільки один з полів об’єднання.
Об’єднання часто використовують як поле структури. При цьому в структурі повинно бути присутнє ще одне поле для визначення, яке саме поле в union потрібно використати.
27. Порівняйте синтаксис опису функцій у С++ із синтаксисом підпрограм Delphi.
Делфі |
С++ |
Аналог -> procedure Procedure < ім’я процедури >(<вхідні параметри :типи параметрів>; Var <вихідні параметри :типи параметрів>); [<описова частина процедури>] Begin <виконувана частина процедури>; End;
|
Void <ім’я функції>([<тип параметру 1><ім’я параметру1>, <тип параметру 2><ім’я параметру2>…]) <-заголовок функції { <тіло функції>; Return; } |
Function < ім’я функції>[(<вхідні параметри :типи параметрів>; Var <вихідні параметри :типи параметрів>)]:<тип результату>; [<описова частина функції >] Begin <виконувана частина >; < ім’я функції >:=<значення>; (або Result:=<значення>) End;
|
<тип параметру 2><ім’я параметру2>…]) <-заголовок функції { <тіло функції>; Return; }
|
У Делфі ми вивчали підпрограми- окремі алгоритмічно завершені фрагменти програми , які оформлення спец. Чином і кожна з них має своє унікальне ім’я.
Ми зазначали, що в Делфі є 2 категорії підпрограм:
Процедури
Функції
Вони відрізняються формами опису і способами передачі їм управління, тобто способом їхнього виклику на виконання.
В С++ поняття процедури відсутнє, тут кожна програма набір окремих функцій, які відносяться до однієї з двох категорій:
Функції, які не мають результуючого значення. Їх називають функціями типу void.
Функції, які таке значення мають. Ця категорія повинна мати в своєму описі тип значення, яке ця функція повертає.
Обидві категорії крім цього використовують вихідні параметри, які можуть повертати в точку їхнього виклику одне чи декілька значень, які формуються під час виконання операторів тіла функції.
Можна стверджувати, що функції типу void є аналогами процедур мови Паскаль. Оскільки їх виклик подібний до виклику процедур.
Мова С++ дозволяє мати декілька функцій з одним і тим же іменем, тому що функції розрізняються не тільки за іменами, але й за типами аргументів.
На відмінну від Делфі в С++ не можна всередині однієї функції описувати ще одну функцію.
28. Напишіть мовою С++ програму-калькулятор на чотири дії.
#include<math.h>
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
voidmain()
{
charop;//змінна, що містить знак операції
float a,b,c;//перше, друге число та результат
clrscr(); //очистка екрану
bool stop=1; //початкове значення s
do
{
cout<<"Vveditpershe 4yslo,\nznakoperacii(abocyslo sh4ob vyitu)\n,druge 4uslo (vsi 4erez probily)\n";
cin>>a>>op>>b;
switch (op)//початок оператора вибору
{
case'+' :c=a+b;break;
case '-' :c=a-b;break;
case '*' :c=a*b;break;
case '/' :c=a/b;break;
default : stop=0;} //якщо дрегезначенння не (+-*/)то змінна stop=фолс
if (stop) {cout<<"Rezultat c="<<c<<endl;}} //якщо змінна stop=тру то друк результуту
while (stop); //інакше вихід
}
29. Напишіть мовою С++ програму обчислення квадратного кореня числа.
#include<math.h>
#include<iostream.h>
#include<conio.h>
voidmain()
{ double a,b;
clrscr();cout<<"Programaobchyslennyakvadratnogokorenya 4ysla"<<"\nVvedit 4uslo a\n";
cin>>a;
if (a>=0) {
b=sqrt(a);
cout<<"Kvadratnyikorin 4ysla "<<a<<" rivnyi "<<b;getch();
}
else
{
b=sqrt(fabs(a));
cout<<"Kvadratnyikorin 4ysla "<<a<<" rivnyi "<<b<<"i";getch();}
//формулa кореня з комплексного числа
}
30. Напишіть програму та поясніть алгоритм розв'язання квадратних рівнянь на С++.
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdio.h>
voidmain()
{
double a,b,c,x,x1,x2,D; //опис коефіцієнтів кв.р-ння, змінних
cout<<"Vveditkoeficienty a,b,c\n";cin>>a>>b>>c;//вивід інф.повідомлення та зчитування коеф.
if (a==0) { //перевірка коеф. біля х^2
if (b==0){ //перевірка коеф. біля х
cout<<"Rivnyannyanesumisne";getch();/*якщо обоє =0 то друк повідомлення*/}
else {x=-c/b; //інаккше розрахунок і вивід значення єдиного кореня
cout<<"Korin r-nnja x="<<x;}
} else {D=pow(b,2)-4*a*c; //обч. дискримінанта кв. р-ння
if (D<0) {cout<<"Diisnyhkorenivnemae";
getch();//якщо дискр. від"ємний то вивід повідомлення
} else {x=-b/(2*a);//обч. єдиного кореня при D=0
if (D==0) {cout<<"Dwakorenirivni x, x="<<x;getch();}//вивід повідомлення із знач. кореня
else{x2=-sqrt(D)/(2*a);//якщо дискр. додатній то
x1=x2+x; //обч.значення коренів за фрмулами
x2=x-x2; //і виводим їхні знач. на екран
cout<<"Koreni rivni\nx1="<<x1<<endl<<"x2="<<x2;getch();
}
}
}
}
31. Напишіть програму мовою С++ та поясніть алгоритм розв'язання нелінійних рівнянь методом половинного ділення.
#include<math.h>
#include<iostream.h>
#include<conio.h>
double f(double x)
{return (pow(x,2)/2-1);
}
intmain()
{
double c, a/*ліва межа інт-лу*/,b/*права межа*/,eps/*точність обчислень*/,x;//корінь
cout<<"Vveditintervalvid a dob\n";cin>>a>>b;
cout<<"Vvedit to4nist eps\n";cin>>eps;//ввід даних
if (f(a)*f(b)>0) {cout<<"Nevirnyiinterval";getch();return 0;}//графік не перетинає вісь
//Ох тому розв"язок не належить інтервалу
else c=0.5*(a+b); //середина відрізку a,b
while (fabs(f(c))>eps){//поки модуль знач. ф-ії більше epsділим відрізок і беремс-нє знач.
if (f(a)*f(c)>0)// якщо добуток додатній, то ми не потрапили в інтервал, тоді
a=c;elseb=c; // ліву межу переносим у середину або праву межу переносим у середину
c=0.5*(a+b);//обч. середину інтервалу
}
cout<<"Korinznaideno, x="<<c<<endl;getch();return 0;//виводимо значення кореня, тобто середини відрізка
}
32. Напишіть програму мовою С++ та поясніть алгоритм розв'язання нелінійних рівнянь методом Ньютона.
#include<math.h>
#include<iostream.h>
#include<conio.h>
double f(double x) //описуємо c++ф-ію, яка обчислює задану нами ф-ію
{return (3*x-4*log(x)-5);}
doublefp(double x)//описуємо c++ф-ію, яка обчислює похідну нашої ф-ії
{return 3-4*(1/x);}
double f2p(double x)//описуємо c++ф-ію, яка обчислює другу похідну нашої ф-ії
{return -(pow(x,-2));}
intmain()
{
double a,b,x,Dx,kmax,eps; //описуємо змінні
cout<<"Vveditintervalvid a dob\n";cin>>a>>b;//вводимо інтервал
cout<<"Vvedit to4nist Epstamax k-stiteraciy\n";cin>>eps>>kmax;//вводимо точність та макс.к-сть ітерацій
x=b;//присвоюємо х знач. правої межі і робимо перевірку
if (f(x)*f2p(x)>0) {goto p8;}else {x=a;//якщо умова виконується то ідем то мітки р8 інакше x присвоюємо знач. лівої межі
if (f(x)*f2p(x)>0){goto p8;}//ідем до мітки р8, якщо умова не виконується то друк повідомлення
elsecout<<"Dlyadanogo r-nnyazbizhnistmetoduNyutonanegarantuetsya";}
p8:for (int i=1;i<kmax;i++)//задаємо макс.к-сть витків циклу
{do{ // виконуємо обч. та ітерацію Ньютона
Dx=f(x)/fp(x);
x=x-Dx;}while (fabs(Dx)>eps);cout<<"Nablyzhene zna4ennya korenya\n"<<x;getch();return 0;//якщо корінь знайдено то друк. це повідомлення
}cout<<"Zazadanu k-stiteraciykorenyaneznaideno";getch();return 0;//якщо корінь не знайдено то друк цього повідомлення
}