Главная Обратная связь Поможем написать вашу работу!

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Signed char unsigned char signed short int unsigned short int signed int unsigned int signed long int




1 –128…127

1 0…255

2 –32768…32767

2 0…65535

2 –32768…32767

2 0…65535

4 –2147483648…2147483647


unsignedlongint 4 0…4294967295

 

Слово signed не є обов’язковим. Також не є обов’язковим слово int в типах short int, long int і unsigned int.

Мова С використовує цілі типи також і для зображення логічних тве- рджень, тобто нуль означає хибність (false), а ненульове значення – істину (true).

У С/С++ припустимо використання суфіксів U(або uunsigned), L(або l– long) і H(або h– short) для змінення типу цілочислового літералу, наприклад, 1234L має тип long, 1234U – unsigned int, а 1234UL – unsigned long.

Застосування префіксів 0(нуль) та 0X(або 0x) дозволяє записувати цілі числа у вісімковому та шістнадцятковому форматах відповідно, на- приклад: 0724, 0x9FAC тощо.

Числа з плаваючою комою (дійсні числа) у C/С++ записуються у фо- рмі з десятковою крапкою або за допомогою «наукової нотації», напри- клад: 375.5, або 3.755Е2, або 37.55е+01, або 0.3755е3, або 37550Е–2 тощо.

Діапазони значень дійсних чисел Borland C++:

Тип даних Розмір, байт Діапазон значень


Float double

long double


4 ±3.4∙10-38…±3.4∙1038

8 ±1.7∙10-308…±1.7∙10308

10 ±3.4∙10-4932…±1.1∙104932


 

 

Використання суфіксів F(або ffloat) і L(або l– long double) дозво- ляє змінювати тип дійсного літералу, наприклад, число 8.75f має тип float, а 8.75L – long double.

У програмах С/С++ використовуються наступні оператори: арифме- тичні, відношень, логічні, оператор заперечення, інкременту і декременту, порозрядні, присвоєння.

Арифметичні оператори С/С++:

Оператор Дія Приклад

 

+ додавання c=a+b;
віднімання c=a–b;
* множення c=a*b;
/ ділення c=a/b;

% остачавідділення c=a%b;

 

Оператори відношень С/С++:

Оператор Опис Приклад


<менше

<=менше або дорівнює

>більше

>=більше або дорівнює

==дорівнює


(a<b)



(a<=b)

(a>b)

(a>=b)

(a==b)


!= недорівнює (a!=b)

 

Логічні оператори &&і ||об’єднують вирази відношень у відповід- ності до правил для логічного «І» (AND) і «АБО» (OR) відповідно та вико- ристовуються у складених логічних виразах, наприклад:

 


 

 

або


((a<b)&&(b<с))

 

 

((a<b)||(c<d))


 

Унарний оператор заперечення !використовується для інвертування результату будь-якого логічного виразу. Наприклад, наступні вирази є ек- вівалентними:

 

(!(a<b)) і (a>=b) та

(!(a==b)) і (a!=b)

 

Оператор інкременту (++) додає до операнду одиницю, а оператор декременту (--) віднімає її, наприклад:

 

 

k++; /* k=k+1 */


 

 

k--; /* k=k–1 */

x=k++; /* x=k; k=k+1; */ x=--k; /* k=k–1; x=k; */

 

 

Порозрядні оператори С/С++:

Оператор Опис Приклад


&порозрядне «І»

|порозрядне «АБО»

^порозрядне виключне «АБО»

<<зсув бітів уліво

>>зсув бітів управо


c=a&b; c=a|b; c=a^b; c=a<<b; c=a>>b;


~ порозряднезаперечення c=~a;

 

Традиційний оператор присвоєння (=) застосовується для присвоєн- ня результату будь-якого виразу змінній, а також для одночасної ініціалі- зації декількох змінних, наприклад:

 

 

z=1;

x=y+n; c=a=b=d+50;

 

 

У С/С++ застосовуються також скорочені оператори присвоєння:



 

 

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=,

 

 

наприклад:

 

 

count+=x; /* count=count+x; */ count*=x; /* count=count*x; */

 

 

У складних виразах операції виконуються у відповідності до пріорите- ту та асоціативності (порядку обчислень):


Рівень пріоритету 1.

 

(), ., [], –>


Оператори Асоціатив- ність

зліва направо


2. *, &, !, ~, ++, --, +, , (тип), sizeof

3. *, /, %

4. +,

5. <<, >>

6. <, <=, >, >=

7. ==, !=

8. &


справа наліво

зліва направо зліва направо зліва направо зліва направо зліва направо зліва направо


9. ^зліва направо


 

 


10.

11.

12.

13.

14.


|

&&

||

?:

=, *=, /=, –=, +=, %=, <<=, >>=, &=, ^=, |=


зліва направо зліва направо зліва направо справа наліво справа наліво


15. ,зліва направо

 

Borland С++ містить достатньо обширну бібліотеку стандартних фу- нкцій. Найбільш використовувані наступні математичні функції:

Виклик функції Призначення #include abs(x), labs(x)– абсолютне значення цілого х math.h acos(x), acosl(x)– арккосинус х, радіан math.h

asin(x), asinl(x)– арксинус х, радіан math.h

atan(x), atanl(x)– арктангенс х, радіан math.h

atan2(y,x),atan2l(y,x)– арктангенс y/х, радіан math.h ceil(x), ceill(x)– округлення х до більшого цілого math.h cos(x), cosl(x)– косинус х math.h div(x,y), ldiv(x,y)– частка і остача від ділення цілих x і y stdlib.h exp(x), expl(x)– експонента ex math.h fabs(x), fabsl(x)– абсолютне значення дійсного х math.h floor(x), floorl(x)– округлення х до меншого цілого math.h fmod(x,y), fmodl(x,y)– остача від ділення дійсних x і y math.h

log(x)– натуральний логарифм х math.h



log10(x)– десятковий логарифм х math.h


modf(x,&y),

modfl(x,&y)


– розбивка дійсного x на цілу

і дробову частини


math.h


poly(…)– значення поліному math.h

pow(x,y),powl(x,y)– значення x у степені y math.h

pow10(x),pow10l(x)– значення 10 у степені x math.h

rand()– генероване випадкове ціле від 0 stdlib.h

random(n)– генероване випадкове ціле від 0 до n-1 stdlib.h


randomize()– ініціалізація генератора випадкових чисел


stdlib.h,

time.h


sin(x), sinl(x)– синус х math.h

sinh(x), sinhl(x)– гіперболічний синус х math.h

sqrt(x), sqrtl(x)– квадратний корінь х math.h


srand(n)– ініціалізація генератора передбачуваних випадкових чисел


stdlib.h


tan(x), tanl(x)– тангенс х math.h

tanh(x),tanhl(x) –гіперболічнийтангенсх math.h

 

Деякі функції, із-за їх відсутності серед бібліотечних, необхідно конструювати самостійно, за допомогою інших наявних функцій. Так,


 

 

наприклад, логарифм за основою logax можна замінити виразом С/C++: log(x)/log(a), а котангенс ctg(x) – виразом: 1/tan(x) тощо.

Також у заголовному файлі math.h визначено багато корисних сим- волічних констант математичного призначення, наприклад:

 

 

M_E=2.71828182845904523536 /* e */ M_LN10=2.30258509299404568402 /* ln(10) */ M_PI=3.14159265358979323846 /*p */ M_SQRT2=1.41421356237309504880 /* 2 */

 

та інші, які використовуються у математичних виразах замість їх літеральних значень.

 


Приклад завдання 3.1:

Дано дійсні числа a, b та x.


 

 

p a æ a ö


Обчислити:

 

 

Розв’язок:

/* 3.1 */


w = lg a


+ arctg(x2 )


ç 3

a + x è


b - cos ÷ .

b ø


#include <stdio.h>

#include <math.h> main()

{

float a,b,x,w;

printf("a=");

scanf("%f",&a);

printf("b=");

scanf("%f",&b);

printf("x=");

scanf("%f",&x); w=log10(fabs(a))+atan(x*x)*M_PI*a*(pow(b,1.0/3)–

cos(a/b))/sqrt(fabs(a+x));

printf("Result=%8.5f",w); return 0;

}

 

Результати роботи:


 

 

Завдання:

1. Дано дійсні числа y та генероване випадкове дійсне число x (x=0…1).


 

 

Обчислити


 

a = (1 + y5 )


x + y /(


x + 4)


 

 

. Результат округлити.


e-x-2 + 1/( x2 + 4)

2.Дано дійсне число y, натуральне число n та генероване випадкове дійс-

1 + sin 2 (x + y)


не число x (x=0…n). Обчислити

 

 

дробову частину результату.


a = + 3

2 + x - 2x /(1 + x2 y3 )


x . Вивести


3. Дано дійсні числа y, z, натуральне число n та генероване випадкове на-


 

туральне число x (x=0…n). Обчислити


a = ln (y -


æ y ö

)
x × ç x - ÷ .


 

 

Вивести цілу частину результату.


è z 5 + x2 / 4 ø

 

 

x


 

4.Дано дійсні числа x та y. Знайти цілу частину


a= x3 + sin y


+ x - y 2 .


 

 

Вивести значення молодшого біта цілої частини числа a.


2x - y + 1


 

5.Дано дійсні числа x та y. Округлити


 

a = x +


5 x

. Вивести зна-


 

 

чення старшого біта округленого числа a.


1 + sin 2 (x + y)

 

 

x - 1 - 3 z


6. Дано дійсні числа x, y і z Обчислити

 

y-1


a =

1 + x2 / 2 + y 2 / 4


+ z 4 і


b= 3 + e


 

+ x 2


 

та знайти залишок від цілочислового ділення


1 + x5


y - tgz


округлених a і b.

7.Дано дійсні числа х, у та натуральне число n. Обчислити

a = 2cos(x- p / 6) + 10xy . Виконати цілочислове ділення округленого a

1/ 2 + sin 2 y

на n.

8.Дано ціле число y. Генерувати випадкове ціле число n (n=0…x), де

x = 2 y4 - 3y3 + 4 y2 - 5 y + 6 .

9.Дано дійсні числа х, у, натуральне число n та генероване випадкове ціле


 

число k (k=0…n). Обчислити


a = 2sin( x- p / 6) + xy 2 . Виконати цілочис-

1/ 3 + cos5 y


лове ділення округленого a на k+1.

10.Дано дійсні числа x і y. Обчислити


 

 

a = x5 + x4 - 3x3 + 4x 2 - 5x + 6 і


b = 9 y3 - 7 y2 + 5 y - 3

лених a і b.


та знайти результат цілочислового ділення округ-


11.Дано натуральне число n та генеровані випадкові цілі числа x і y


 

 


 

(x=0…n; y=0…n). Обчислити


a = sin (y -


æ y ö

)
x × ç x - ÷ .


è y 2 + x7 / 4 ø

12. Дано дійсне число x (x=0…1) та генероване випадкове дійсне число y


 

(y=0…1). Обчислити a =


2 y3


- y 2


+ 3y -1


 

. Результат округлити.


x2 - 2x + 1 + sin y

 

13.Дано дійсне число y, натуральне число n та генероване випадкове дійс-

x


 

не число x (x=0…n). Обчислити


a= cos y


+ x - y


3 . Вивести дробову


 

 

частину результату.


2x2 - y + 1


14.Дано дійсні числа y, z, натуральне число n та генероване випадкове на-

5x5 ln y + 3


туральне число x (x=0…n). Обчислити

 

цілу частину результату.


a =

4 y2 esin z - x


(y+ 1) . Вивести


15.Дано дійсне число x (x<10) та генероване випадкове дійсне число y

x


 

(y<10). Знайти цілу частину


a = x5 + tgy


+ x - y


2 . Вивести значення


 

 

молодшого біта цілої частини числа a.


2x2 - y3 + 1

 

 

5


 

16.Дано дійсні числа x (x<10) та y. Округлити


 

a = x7 +


arctg x .


 

 

Вивести значення старшого біта округленого числа a.


ln y + sin 2 (x + y)


 

 

17.Дано дійсні числа x, y і z Обчислити


 

a = 5x


x - 1 - 3 z

і


 

b = 3y


 

 

2 + e


 

 

2 y-3


1 + x 2 / 2 + y 2 / 4

 

та знайти залишок від цілочислового ділення окру-


1 + x5

глених a і b.


y - tgz


18.Дано ціле число y. Генерувати випадкове ціле число n (n=0…x), де

x = y4 + 3y3 + 9 y2 + y + 7 .

19.

ö
Дано натуральне число n та генеровані випадкові цілі числа x (x=0…n) і


 

y (y=0…n). Обчислити


a = cos (y3 +


æ

)
x × ç x -


y ÷ + log(x0,25 y).


è

20.Дано дійсні числа х і у. Обчислити значення а також цілу та дробову його частини.


sin y 2 + x5 / 5 ø

sin 3 3x3 + 2 y2 - 6

a = ,

(3x3 + 2 y 2 - 6)2 + p


21.Дано дійсні числа х і у. Знайти z – результат цілочислового ділення ці-

лих частин х і у та використати його для обчислення поліному

z 5 + z 4 - 5,4z3 + 6,5z 2 - 6,7z + 8,7 .


 

 

22.Дано дійсні числа х і у. Знайти z – залишок від цілочислового ділення цілих частин х і у та використати його для обчислення поліному z 4 + 1,09z 3 + 7,03z 2 + 2,01z - 5,05 .

23.Дано два натуральних числа х і у. Генерувати випадкове ціле число z

2 3 x + 10 y


(z=0…xy) та використати його для обчислення


a = e z.

z - xy


24. Дано натуральне число х та дійсне число у. Обчислити

ln 3 2x3 + 3y2 - 7


a = x +

3 xy


 

(3x3 + 2 y2 - 6)2 + p


. Результат округлити і помножити на


 

генероване випадкове ціле число n (n=0…x).

25.Дано натуральне число z. Генерувати випадкове ціле число (0…y), де

y = z 4 + 10z3 + 7z 2 + 2z - 5 . Результат поділити на z та округлити.

26. Дано дійсні числа y та генероване випадкове дійсне число x (x=0…1).


 

 

Обчислити


 

a = (1 + y5 )


x + y /(


x + 4)


 

 

. Результат округлити.


e-x-2 + 1/( x2 + 4)

27.Дано дійсне число y, натуральне число n та генероване випадкове дійс-

1 + sin 2 (x + y)


не число x (x=0…n). Обчислити

 

 

дробову частину результату.


a = + 3

2 + x - 2x /(1 + x2 y3 )


x . Вивести


28. Дано дійсні числа y, z, натуральне число n та генероване випадкове на-


 

туральне число x (x=0…n). Обчислити


a = ln (y -


æ y ö

)
x × ç x - ÷ .


 

 

Вивести цілу частину результату.


è z 5 + x2 / 4 ø

 

 

x


 

29.Дано дійсні числа x та y. Знайти цілу частину


a= x3 + sin y


+ x - y 2 .


 

 

Вивести значення молодшого біта цілої частини числа a.


2x - y + 1


 

30.Дано дійсні числа x та y. Округлити


 

a = x +


5 x

. Вивести зна-


 

 

чення старшого біта округленого числа a.


1 + sin 2 (x + y)

 

 

x - 1 - 3 z


31. Дано дійсні числа x, y і z Обчислити

 

y-1


a =

1 + x2 / 2 + y 2 / 4


+ z 4 і


b= 3 + e


 

+ x 2


 

та знайти залишок від цілочислового ділення


1 + x5


y - tgz


округлених a і b.

32.Дано дійсні числа х, у та натуральне число n. Обчислити

a = 2cos(x- p / 6) + 10xy . Виконати цілочислове ділення округленого a

1/ 2 + sin 2 y

на n.

33.Дано ціле число y. Генерувати випадкове ціле число n (n=0…x), де

x = 2 y4 - 3y3 + 4 y2 - 5 y + 6 .

 

 

Контрольні запитання:

1. Які основні числові типи даних С/С++?

2. Які основні характеристики цілочислових типів С/С++?

3. Які основні характеристики дійсних типів С/С++?

4. Яким чином можна змінювати тип числового літерального значення?

5. Які основні оператори С/С++ та як вони використовуються?

6. Який порядок виконання операцій у складних виразах?

7. Які основні функції С/С++ математичного призначення.

8. Коли і яким чином застосовуються символічні константи?


 

 

6. Лабораторна робота №4. Реалізація алгоритмів розгалуження

 

 

Мета роботи:набуття навичок роботи з алгоритмічними конструк- ціями розгалуження у середовищі Borland C++, у тому числі з використан- ням складених операторів.

 

 

Теоретичні основи.

Алгоритмічна конструкція, що дозволяє обирати ту чи іншу послідовність дій залежно від певних умов, називається розгалуженням. Існують такі різновиди конструкції розгалуження: альтернатива і поліваріантний вибір.

В алгоритмічній мові С/С++ алгоритми розгалуження реалізуються умо- вними операторами, що функціонують за наступними схемами (рис. 6.1).

 


 

так (+) ні (–) вираз


 

так (+) ні (–) вираз


 

 

оператор_1   оператор_2
     
         

 

оператор

 

 

а) б)

 

 

вираз

 

знач_1 знач_2 знач_N інакше

 

оператор_1   оператор_2   оператор_N   оператор_i
         
                     

 

 

в)

 

 

Рисунок 6.1 – Схеми алгоритмів розгалуження

 

 

Альтернативне розгалуження (рис. 6.1, а) реалізується умовним опе- ратором за таким синтаксисом:

 

 

if (вираз) оператор_1; else оператор_2;

 

 

де if (якщо) та else (інакше) – зарезервовані слова; оператор_1 і оператор_2


 

 

– довільні оператори, що виконуються в залежності від результату обчис- лення виразу. Якщо цей вираз є істинним (має ненульове значення), то ви- конується оператор_1 і керування передається наступному за умовним опе- ратору, а оператор_2 пропускається; якщо вираз є хибним (має нульове зна- чення), то оператор_1 пропускається, проте виконується оператор_2.

В той же час і оператор_1 і оператор_2 можуть бути як простими так і складеними. Складені оператори обмежуються фігурними дужками, наприклад:

 

 

if(a>b) b++; else

{

printf(″%d\n″,a); a++;

}

 

Скорочена форма умовного оператора (рис. 6.1, б) реалізує безаль- тернативне розгалуження (корекцію) за таким синтаксисом:

 

 

if (вираз) оператор;

 

 

тобто якщо вираз є істинним (має ненульове значення), то оператор вико- нується, якщо хибним (має нульове значення) – не виконується, і на цьо- му дія умовного оператора припиняється, наприклад:

 

 

if(x<=y) x+=y;

 

 

Логічні оператори &&і ||об’єднують окремі вирази умовних опера- торів у складені вирази відношень у відповідності до правил для логічних

«І» (AND) та «АБО» (OR) відповідно, наприклад:

 

 

if((х>=a) && (x<=b)) …; /* якщо a<=x<=b … */ if((х<=a) || (х>=b)) …; /* якщо x<=a або x>=b … */

 

 

У С/С++ існує також скорочений оператор if–else, який ще має назву умовний вираз або операція умови:

 

 

вираз_1 ? вираз_2 : вираз_3;

 

 

Програма обчислює вираз_1, і якщо він є істинним (має ненульове значення), то результат усього виразу дорівнює виразу_2, у противному разі результат дорівнює виразу_3.

Умовний вираз цілком відповідає наступному оператору альтернати-


 

 

вного розгалуження:

 

 

if (вираз_1) вираз_2; else вираз_3;

 

 

Отже наступні оператори, що знаходять найбільше з двох чисел, є цілком еквівалентними:

 

if(x>y) max=x; else max=y; та

max=(x>y)?x:y;

 

За допомогою умовного виразу можна, наприклад, наступним чином розв’язати задачу заміни нулем найменшого серед двох цілих чисел x і y:

 

 

(x>y)?x:y=0;

 

 

Гілки деякого розгалуження можуть містити інші розгалуження, наприклад:

 

 

if (вираз_1) оператор_1;

else if вираз_2 оператор_2; else оператор_3;

 

 

Поліваріантний вибір (рис. 6.1, в), що дозволяє виконувати одну з декількох алгоритмічних гілок залежно від значення деякого виразу, у С/С++ реалізується оператором вибору за таким синтаксисом:

 

 

switch (вираз)

{

case значення_1 : оператор_1; break; case значення_2 : оператор_2; break;

case значення_3, …, значення_N : оператор_3; break;

 

 

default : оператор_замовчання;

}

 

 

Оператор вибору виконується за таким алгоритмом. Спочатку обчи- слюється значення виразу switch. Потім це значення порівнюється по чер- зі з запропонованими значеннями селекторів case (значення_1, значення_2,

…, значення_N тощо). Щойно результат порівняння дасть значення «іс- тина», одразу ж виконується відповідний оператор або набір операторів, аж до першого наявного оператора break. Якщо значення виразу switch


 

 

не збігається з жодним значенням селекторів case, то виконується нео- бов’язкова гілка default, або, якщо її нема, виконання оператора вибору завершується. Оператор break у кожному блоці case негайно призводить до завершення оператора switch.

Приклад застосування оператора switch:

 

 

switch(i)

{

case 1:printf(″i=1\n″); break; case 2:printf(″i=2\n″); break;

case 3,4,5:printf(″i=3–5\n″); break; default:printf(″i=All\n″);

}

 

 

Для безумовного завершення поточної функції (у тому числі фу- нкції main()) використовуються оператори exit()і abort(), прототипи яких знаходяться у заголовному файлі stdlib.h, наприклад:

 

 

exit(0);

abort();

 

 

Приклад завдання 4.1:

Знайти корені квадратного рівняння ax2+bx+c=0, коефіцієнти якого є дійсними числами, що їх вводить користувач.

 

 

Розв’язок:

/* 4.1 */

#include <stdio.h>

#include <math.h> main()

{

float x1,x2,x,a,b,c,d; printf("a="); scanf("%f",&a);

printf("b="); scanf("%f",&b);

printf("c="); scanf("%f",&c); if((d=b*b–4*a*c)>=0)

if(d>0)

{

x1=(–b+sqrt(d))/(2*a);

x2=(–b–sqrt(d))/(2*a); printf("x1=%6.2f x2=%6.2f",x1,x2);

}

else


 

 

{

x=–b/(2*a); printf("x=%6.2f",x);

}

else printf("Complex roots"); return 0;

}

 

Результати роботи:

 

 

Завдання:

1.Дано чотирьохзначне натуральне число. З’ясувати яка з двох його час-

тин більша.

2.Дано чотирьохзначне натуральне число. З’ясувати яка сума більша, пе- рших двох його цифр чи останніх.

3.Дано трьохзначне натуральне число. З’ясувати яка з його цифр менша,

перша чи остання.

4.Дано натуральне число. З’ясувати, чи рівні між собою остання та пере- достання цифри.

5.Дано трьохзначне натуральне число. З’ясувати, чи всі його цифри різні.

6.Дано п’ятизначне натуральне число. Якщо остання його цифра більша за першу, то переставити їх місцями.

7.Дано два дійсних числа. З’ясувати, чи одного знаку ці числа.

8.Дано два дійсних числа. Розташувати їх таким чином, щоб на першому місці стояло те з них, у котрого дробова частина менша. Додаткову змінну не використовувати.

9.Дано три дійсних числа. Знайти суму двох найбільших серед них.

10.Дано три дійсних числа. Знайти серед них таке, що за значенням знахо- диться між найбільшим та найменшим.

11.Дано три дійсних числа. З’ясувати які з них належать до діапазону [0,1].

12.Дано три натуральних числа. Розташувати їх таким чином, аби на пер- шому місці стояло найменше з них, а на останньому – найбільше.

13.Дано три дійсних числа. З’ясувати що більше, квадрат мінімального чи максимальне з них.

14.Дано два натуральних числа. Розташувати їх таким чином, аби на пер- шому місці стояло найбільше з них.

15.На площині задано три точки з координатами (x1,y1), (x2,y2), та (x3,y3).

Визначити, яка з них ближча до початку координат.


 

 

16.Дано три натуральних числа. З’ясувати, чи є серед них хоча б два одна- кових.

17.Дано дійсні числа а, b, с. Подвоїти ці числа, якщо abc чи залишити їх без змін, якщо це не так.

18.Дано дійсне число. Якщо його дробова частина менша за 0,5, то округ- лити це число до найближчого більшого, а якщо ні, то знайти його цілу частину.

19.Дано три дійсних числа, що визначають довжину сторін деякого трику- тника. З’ясувати, чи існує такий трикутник.

20.Дано натуральне число, що визначає деякий рік. З’ясувати, чи є він ви- сокосним. Високосний рік, ділиться на 4, за виключенням тих років, ко- трі діляться на 100 та не діляться на 400 (наприклад, 300, 1300 і 1900 не є високосними, а 1200 і 2000 – високосні роки).

21.За віком клієнта дозволити чи відмовити йому придбати горілчані вироби з відповідними поясненнями (>=21- дозволити, <21-відмовити).

22.Визначити, чи належить число інтервалу (0,7].

23.Дані два дійсних числа. Вивести на екран перше число, якщо воно більше другого, та обидва числа, якщо це не так.

24.Знайти максимальне з двох чисел. Знайти мінімальне з двох чисел.

25.Знайти мінімальне та максимальне з трьох чисел.

26.Дані дійсні числа a, b, c. Перевірити , чи виконуються нерівності a<b<c.

27.З’ясувати, чи дане число ділиться на 2 (двома способами).

28.З’ясувати, чи ділиться дане число на 6.

29.З’ясувати, чи ділиться дане число чи на 4 чи на 3, і на 4 і на одночасно.

30.Дані дійсні числа x, y. З’ясувати, чи належить точка з координатами x,y зашрихованій частині площини (малюнок викладача) .

31.З’ясувати скільки коренів має квадратне рівняння.

32.Дані дійсні числа а, в, с ( довжина у см). З’ясувати, чи можливо побудувати трикутник з такими сторонами.

33.Дані дійсні числа а, в, с ( градуси ). З’ясувати чи можливо побудувати трикутник з такими кутами.

34.За номером місяця з’ясувати кількість днів у ньому.

35.За номером місяця з’ясувати його назву.

36.За назвою дня тижня визначити кількість уроків у цей день.

37.За віком людини визначити назву періоду життя ( раннє дитинство, дитинство, отроцтво, юність, молодість, зрілість, похилий вік, старість).

38.Дане ціле число. Вважати його віком та дати йому відповідне найменування російською мовою (год,года, лет).

39.Визначити за балом оцінки її словесне найменування.

40.Дано натуральне число від 1 до 12, що визначає деякий місяць року.

З’ясувати скільки днів у цьому місяці.


 

 

41.Дано дійсне число x. Обчислити


ìsin( x),

í
ï
z = ïx2 - x,


якщо якщо


x £ 0;

0 < x £ 1;


îx - sin(px2


) - 1


інакше.


í
ì0.5x,


якщо


x < -1;


 

42.Дано дійсне число x. Обчислити


z = ï

ï


 

1 - x2 ,


 

якщо


 

- 1 £ x £ 1;


î0.5x - 1

ìsin( x),


інакше.

 

якщо


 

 

x < 0;


 

43.Дано дійсне число x. Обчислити


ïex

z = í x

ïe


- e-x

+ e- x ,


 

якщо


 

0 £ x


 

£ 3;


ïîln( x)


інакше.


 

 

44.Дано дійсне число x. Обчислити


ì- x / 5,

í
ï
z = ï2x2e-2 x ,


якщо якщо


x < 0;

0 £ x < 1;


x
/ 4
0.2

î


інакше.


 

Контрольні запитання:

1. Яка алгоритмічна конструкція називається розгалуженням?

2. Які існують різновиди конструкції розгалуження у С/С++ і як вони працюють?

3. Який синтаксис умовного оператора?

4. Який синтаксис та призначення умовного виразу або операції умови?

5. Що таке складений оператор?

6. Як поєднуються в умовних операторах прості вирази в складений?

7. Яке призначення та як функціонує оператор поліваріантного вибору?

8. Як підвищити ефективність алгоритмів розгалуження?

9. Як забезпечити безумовне завершення головної функції програми?


 

 

7. Лабораторна робота №5. Реалізація простих циклічних алгоритмів

 

 

Мета роботи:вивчення основних прийомів роботи з алгоритмічною конструкцією повторення (циклами) засобами Borland С++; набуття нави- чок розв’язку задач, що потребують застосування ітераційних процесів.

 

 

Теоретичні основи.

Під час розробки програми часто постає потреба виконати один і той

самий оператор декілька разів. Для цього застосовують оператори циклів, що реалізують алгоритмічну конструкцію повторення. Кожне повторне ви- конання операторів, що являють собою тіло циклу, називається ітерацією.

В програмах С/С++ застосовуються цикли трьох видів (рис. 7.1):

– із параметром-лічильником (for);

– із передумовою (while);

– із постумовою або післяумовою (do–while).

Вибір того чи іншого оператора циклу визначається застосованим алгори- тмом розв’язку певної задачі.

 

 


 

лічильник


 

умова


ні оператор


 


 

оператор


так

 

оператор


 

умова нітак


 

 

а) б) в) Рисунок 7.1 – Схеми операторів циклу

 

 

Основна форма циклу for має наступний синтаксис (рис. 7.1, а):

 

 

for (вираз_1; вираз_2; вираз_3) оператор;

 

 

де for – зарезервоване слово; вираз_1 (ініціалізуючий) виконується лише один раз, перед початком роботи циклу; вираз_2 зазвичай є виразом від- ношення, що визначає умову виконання оператору; вираз_3, як правило, застосовується для змінення параметра циклу (збільшення або зменшення).

Наприклад, наступні рядки програми виводять на екран спочатку чи- сла від 0 до 9, а потім від 9 до 0 за допомогою оператора циклу for (кожне з


 

 

нового рядка):

 

 

for(i=0;i<=9;i++) printf(″%i\n″,i); for(i=9;i>=0;i--) printf(″%i\n″,i);

 

 

Кожен із виразів заголовку оператора for може бути відсутнім, проте символ «;» вказується обов’язково. Наприклад, якщо вирази оператора for зовсім поминути, то отримаємо безкінечний цикл:

 

 

for(; ;) …;

 

 

Для об’єднання декількох послідовно записаних підвиразів операто- ра for в один загальний вираз застосовується операція «кома». Так, напри- клад, наступний оператор обчислює значення суми s чисел від 1 до 10:

 

 

for(n=1,s=0;n<=10;n++) s+=n;

 

 

При використанні оператора for дозволяються внутрішні оголошення змінних циклу, але ці змінні можна використовувати лише у межах даного циклу, наприклад:

 

 

for(int i=1;i<=n;i++) …;

 

 

Цикл із передумовою (while) працює за наступним синтаксисом (рис. 7.1, б) і застосовується для повторного виконання оператора упродовж усього часу, доки значення виразу є істинним (ненульовим):

 

 

while (вираз) оператор;

 

 

У циклі з передумовою перевірка умови виконання циклу (значення виразу) відбувається ще до першого виконання його тіла. Якщо умова іс- тинна (ненульове значення виразу), то виконується оператор (тіло циклу), інакше – цикл не виконується, тобто цикл виконується, доки умова не ста- не хибною. Це означає, що тіло циклу з передумовою може не виконатися жодного разу. Тіло циклу має містити хоча б один оператор, що впливає на умову закінчення ітераційного процесу, інакше відбудеться «зациклення».

Наступний фрагмент програми виводить на екран латинський алфа- віт у верхньому регістрі:

 

 

int c=65;

while(c<=′Z′) printf(″%c″,c++);

 

 

Оператор циклу з постумовою (do–while) є «перевернутим» циклом


 

 

while, тобто виконується оператор, а вже потім перевіряється значення ви- разу (рис. 7.1, в). Цикл працює за наступним синтаксисом і повторюється доти, доки значення виразу буде істинним (ненульовим):

 

 

do оператор; while (вираз);

 

 

Отже цикл з постумовою за будь-яких обставин буде виконано при- наймні один раз – в цьому і полягає його головна відмінність від циклу з передумовою.

Наступний фрагмент програми виводить на екран латинський алфа- віт у верхньому регістрі, тобто виконує ті ж самі дії, що і попередній фраг- мент, але за допомогою циклу do–while:

 

 

int c=65;

do print(″%c″,c++); while(c<=′Z′);

 

 

Зауважимо, що оператори тіла циклу з постумовою мають впливати на умову закінчення ітераційного процесу, інакше відбудеться «зациклен- ня».

Для передчасного завершення будь-якого циклу застосовуються опе- ратори переходу breakта continue. Для примусового переривання циклу слід викликати оператор break. Оператор continue здійснює пропуск усіх інструкцій, записаних за її викликом в тілі циклу, та керування передається на перевірку виразу, що обумовлює завершення (або продовження) циклу.

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

 

 

Приклад завдання 5.1:

Дано натуральне число n. Визначити скільки цифр містить це число.

 

 

Розв’язок:

/* 5.1 */

#include <stdio.h> main()

{

unsigned int x=1; unsigned long int n,y; printf("n=");

scanf("%li",&n);

y=n;

while((y/=10)>=1) x++; printf("In %li – %hi digits",n,x);


 

 

return 0;

}

 

Результати роботи:

 

 

Завдання:

1.Дано натуральні числа a і b. Обчислити суму та добуток усіх чисел, ко-

трі знаходяться між a і b.

2.Дано натуральні числа a і b. Обчислити середнє арифметичне усіх пар- них чисел, котрі знаходяться між a і b.

3.Два натуральних числа називаються «дружніми», якщо кожне з них до- рівнює сумі дільників іншого за винятком самого числа. Дано натура- льні числа a і b. З’ясувати, чи є задані числа дружніми. Приклади пар дружніх чисел: 220 і 284, 1184 і 1210, 2620 і 2924, 5020 і 5564, …

4.Дано натуральне число n. Обчислити факторіал n за формулою

n!=1∙2∙…∙n.


5.Дано натуральне число n. Обчислити

6.Дано натуральне число n. Обчислити

7.Дано натуральне число n. Обчислити

8.Дано натуральне число n. Обчислити


S = -1 3 + 1 5 - K± 1 (2n + 1)

S = 1 + 1 2 + 1 3 + K + 1 n .

S = 1 + 1 2!+1 3!K + 1 n!.

S = sin1 + sin 2 2 + K + sin n n .


9.Дано натуральні числа a і b. Обчислити ab


без використання функцій.


10.Дано дійсні числа a, b і с. Обчислити значення функції


y = excos x з


кроком с на відрізку


x Î[a,b] .


11. Дано дійсне число a. Знайти серед чисел що більше за a.


1, 1 + 1 2, 1 + 1 2 + 1 3, K


таке,


12.Дано натуральне число n. Обчислити подвійний факторіал n за форму-

лою n!!=1∙3∙5∙…∙n для непарного n або за формулою n!!=2∙4∙…∙n для парного n.

13.

(
Простим називається число, що має тільки два дільники – саме число й одиницю. З’ясувати, чи є задане натуральне число n простим.


 

14.Дано натуральне число n та дійсне число x. Обчислити


n

å 1 i!+


x ).


 

 

15.Дано натуральне число n та дійсне число x. Обчислити


i=1

n
Õ(1 + sin(ix) i!)

i=1


16. Дано дійсне число x та натуральне число k ( 0 < k £ 10 ). Обчислити при-


близне значення


sin(x) = x - x3


3! + x5


5! - ...


з точністю 10–k. Порівняти


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

17.Дано натуральне число n. Як найменшою кількістю монет можна ви- платити грошову суму n, якщо в достатній кількості є монети гідністю в 1, 2, 5, 10, 25 та 50 коп.

18.Дано натуральне число n. Вивести усі його дільники.

19.Дано натуральне число n. Вивести це число у зворотному порядку.

20.Дано натуральне число n. Обчислити добуток його першої і останньої цифр.

21.Дано натуральні числа n і m (m<10). З’ясувати, чи входить цифра m в запис числа n.

22.Дано натуральне число n. Визначити суму його цифр.

23.Дано натуральні числа n і m. Визначити суму m останніх цифр числа n.

24.Дано натуральне число n. Визначити його першу цифру.

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

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

27.Скласти програму, яка вводить з клавіатури послідовність з п'яти дробових чисел і після введення кожного числа виводить середнє арифметичне введеній частині послідовності.

28.Скласти програму, яка обчислює середнє арифметичне послідовності дробових чисел, що вводяться з клавіатури. Після введення останнього числа програма повинна вивести мінімальне і максимальне число послідовності. Кількість чисел послідовності повинна задаватися під час роботи програми.

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

30.Написати програму, яка обчислює суму перших n цілих позитивних чисел. Кількість підсумованих чисел повинна вводитися під час роботи програми.

31.Написати програму, яка обчислює суму перших n цілих позитивних парних чисел. Кількість підсумованих чисел повинна вводитися під час роботи програми

32.Скласти програму, яка генерує три послідовності з десяті випадкових чисел в діапазоні від 1 до 10, виводить кожну послідовність на екран і обчислює середнє арифметичне кожній послідовності.

1 1 1


33.

S K
Дано натуральне число n. Обчислити


= - + ± .

1× 2 2 × 3 n(n + 1)


 

Контрольні запитання:

1. Коли застосовуються ітераційні процеси та що таке цикли?

2. Які існують різновиди циклів?

3. Який синтаксис операторів циклу С/С++?

4. Яке призначення мають вирази оператора for?

5. Як застосовується операція «кома» у заголовку циклу for?

6. Як виконуються внутрішні оголошення змінних циклу?

7. У чому полягає відмінність різних умовних циклів?

8. Що може спричинити «зациклення» програми?

9. Як працюють оператори переривання циклу break та continue?


 

 

8. Лабораторна робота №6.


Просмотров 709

Эта страница нарушает авторские права




allrefrs.ru - 2021 год. Все права принадлежат их авторам!