Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kolokvium-_programuvannya2.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
102.92 Кб
Скачать

26. Об'єднання. Синтаксис опису та сфери їхнього використання.

Об’єднання (union) – це варіант структури у який компілятор повинен усі поля розташувати за однією адресою.

Синтаксис описи union так як і в структури, тільки Struct заміняється на union.

union <назва об’єднання>

{

     <тип поля_1> <назва поля_1>;

     <тип поля_2> <назва поля_2>;

        ...

     <тип поля_n> <назва поля_n>;

};

Довжина об’єднання в байтах = довжині найбільшого його поля. У кожен момент роботи з програмою у змінній типу union містяться значення тільки якогось одного із її полів. Це значення може періодично змінюватись.

Об’єднання використовують з метою економії оперативної пам’яті, коли відомо, Що під час роботи програми одночасно в пам’яті може знаходиться тільки один з полів об’єднання.

Об’єднання часто використовують як поле структури. При цьому в структурі повинно бути присутнє ще одне поле для визначення, яке саме поле в union потрібно використати.

27. Порівняйте синтаксис опису функцій у С++ із синтаксисом підпрограм Delphi.

Делфі

С++

Аналог -> procedure

Procedure < ім’я процедури >(<вхідні параметри :типи параметрів>;

Var <вихідні параметри :типи параметрів>);

[<описова частина процедури>]

Begin

<виконувана частина процедури>;

End;

  1. Функції, які не мають результуючого значення. Їх називають функціями типу void.

Void <ім’я функції>([<тип параметру 1><ім’я параметру1>,

<тип параметру 2><ім’я параметру2>…])

<-заголовок функції

{ <тіло функції>;

Return;

}

Function < ім’я функції>[(<вхідні параметри :типи параметрів>;

Var <вихідні параметри :типи параметрів>)]:<тип результату>;

[<описова частина функції >]

Begin

<виконувана частина >;

< ім’я функції >:=<значення>; (або Result:=<значення>)

End;

  1. <тип результату><ім’я функції>([<тип параметру 1><ім’я параметру1>,

<тип параметру 2><ім’я параметру2>…])

<-заголовок функції

{ <тіло функції>;

Return;

}

У Делфі ми вивчали підпрограми- окремі алгоритмічно завершені фрагменти програми , які оформлення спец. Чином і кожна з них має своє унікальне ім’я.

Ми зазначали, що в Делфі є 2 категорії підпрограм:

  1. Процедури

  2. Функції

Вони відрізняються формами опису і способами передачі їм управління, тобто способом їхнього виклику на виконання.

В С++ поняття процедури відсутнє, тут кожна програма набір окремих функцій, які відносяться до однієї з двох категорій:

  1. Функції, які не мають результуючого значення. Їх називають функціями типу void.

  2. Функції, які таке значення мають. Ця категорія повинна мати в своєму описі тип значення, яке ця функція повертає.

Обидві категорії крім цього використовують вихідні параметри, які можуть повертати в точку їхнього виклику одне чи декілька значень, які формуються під час виконання операторів тіла функції.

Можна стверджувати, що функції типу 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;//якщо корінь не знайдено то друк цього повідомлення

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]