- •Основи програмування методичні вказівки та індивідуальні завдання
- •В ступ
- •Порядок виконання лабораторних робіт
- •Завдання до лабораторних робіт Лабораторна робота № 1
- •Лабораторна робота № 2
- •Лабораторна робота № 3
- •Int SumaCyfr(long c); /* оголошення функцій */
- •Лабораторна робота № 4
- •Лабораторна робота № 5
- •Варіанти індивідуальних завдань
- •Лабораторна робота № 6
- •Варіанти індивідуальних завдань
- •Лабораторна робота № 7
- •Варіанти індивідуальних завдань
- •Лабораторна робота № 8
- •Варіанти індивідуальних завдань
- •Лабораторна робота № 9
- •Варіанти індивідуальних завдань
- •Лабораторна робота № 10
- •Варіанти індивідуальних завдань
- •Лабораторна робота № 11
- •Варіанти індивідуальних завдань
- •Лабораторна робота № 12
- •Варіанти індивідуальних завдань
- •Література
Int SumaCyfr(long c); /* оголошення функцій */
void LiniaRamky1(int dr);
void LiniaRamky2(int dr);
void main (void)
{
long chysl, chmax; /* зміннi програми */
int n=0, sumc, maxsum=0, nmax;
printf("\n\n Вводьте числа (0 – кінець):\n");
do { /* цикл введення і перевірки чисел */
scanf("%ld", &chysl); /* введене число */
if(chysl==0) break; /* 0 перериває цикл */
n++; /* номер цього числа */
sumc=SumaCyfr(chysl); /* сума цифр числа */
if(sumc>maxsum) { /* якщо сума цифр найбільша */
maxsum=sumc; /* фіксуємо параметри числа */
nmax=n;
chmax=chysl;
}
} while(n<MAXN);
LiniaRamky1(27);
printf("Найбільшу суму цифр - %2d " "має %d–е число %10d", maxsum, nmax, chmax);
LiniaRamky2(27);
}
/* Функція, що визначає суму цифр заданого числа */
int SumaCyfr(long c)
{ int sum=0;
while(c>0) {
sum+=c%10;
c/=10;
}
return sum;
}
/* Функція виведення верхньої частини рамки */
void LiniaRamky1(int dr)
{ int k;
printf("\n\n\t");
for(k=0; k<dr; k++)
printf("*=");
printf("*\n\t* ");
}
/* Функція виведення нижньої частини рамки */
void LiniaRamky2(int dr)
{ int k;
printf("*\n\t");
for(k=0; k<dr; k++)
printf("*=");
printf("*\n");
}
Лабораторна робота № 4
Тема роботи: Типи даних, операції та вирази мови С. Робота з підсистемою допомоги Help
Мета роботи: практично закріпити знання про оголошення даних, класи і типи операцій, правила запису і обчислення виразів у С-програмах; здобути навики роботи з підсистемою допомоги Help інструментального середовища програмування Borland C++ 3.1.
Завдання лабораторної роботи. 1. Перед виконанням завдання лабораторної роботи повторити теоретичний матеріал про формування виразів і класифікацію операцій мови С. Обов’язково звернути увагу на область застосування операцій кожного класу, старшинство операцій, їхню асоціативність, правила узгодження типів операндів у арифметичних виразах і операціях присвоєння.
2. Переглянути у літературі довідку про математичні функції та макроконстанти, оголошені в заголовному файлі <math.h>. Відзначити типи параметрів функцій та значення, яке повертає кожна з функцій.
3. У п. 1 індивідуального завдання записано математичний вираз, в якому застосовуються різні алгебраїчні та тригонометричні функції. Виписати ці функції та детально розглянути їхню реалізацію в бібліотеці математичних функцій С, користуючись підсистемою допомоги Help.
4. Відкрити розділ Help головного меню інтегрованого середовища і переглянути його основні підрозділи. Потім відкрити підрозділ допомоги Contents і ознайомитися з його закладками. Перейти на рівень допомоги з інформацією про математичні функції: Functions / Math routines.
5. Коротко занотувати інформацію про одну із функцій (передусім кількість і типи її параметрів та тип результуючого значення), яка буде використовуватися для запису заданого математичного виразу.
6. Наприкінці більшості параграфів допомоги наведені приклади застосування. Скопіювати у вікно редактора програму прикладу для функції, яка розглядається. Відкомпілювати та виконати цю програму для різних значень даних. Записати в звіт текст програми і результати виконання.
7. Навчитися здійснювати навігацію по рівнях допомоги, використовуючи виділені ключові слова та команди інтерфейса, зокрема Previous topic (Alt+F1).
8. Відкрити підрозділ допомоги Contents / Header Files. Перейти у вікно заголовного файла <math.h> і відкрити довідку про іншу функцію. Опрацювати її за схемою п. п. 5 і 6.
9. Швидку довідку про ключові слова, операції, оператори, макроси, функції та інші компоненти мови С можна отримати через підрозділ допомоги Index. Щоб прискорити пошук, треба клацнути мишкою у довільній точці вікна набрати декілька початкових символів шуканого слова або знака операції. Отримати таким чином довідки про дві операції, що належать до різних класів, та про якесь із ключових слів мови С і занотувати коротко їхній зміст.
10. Записати математичний вираз, заданий у п. 1 індивідуального завдання, використовуючи синтаксис мови С, відповідні операції та функції з бібліотеки <math.h>. Попередньо треба оголосити змінні, які використовуються у цьому виразі (вважати, що змінні k, m, і n – цілочислові, а всі інші мають дійсний тип). Записуючи вираз, звернути окрему увагу на забезпечення необхідного порядку виконання операцій. Якщо якоїсь функції нема в бібліотеці, то треба реалізувати її через інші наявні функції.
11. У вікні редактора набрати оголошення змінних і вираз мовою С та зберегти набране у власному файлі.
12. Встановити текстовий курсор під назвою якоїсь із функцій записаного виразу. Викликати контекстну допомогу Topic search (Ctrl+F1) і переглянути отриману довідку. Повторити ці дії для одного зі знаків операцій. Коротко записати результати.
13. У п. 2 індивідуального завдання наведено оголошення декількох змінних і два вирази. Треба обчислити значення цих виразів, враховуючи порядок виконання операцій. Всі розрахунки мають бути наведені у звіті. Для виконання побітових операцій треба вказати внутрішні двійкові коди операндів, пам’ятаючи, що від’ємні числа зберігаються у доповнювальному коді, а результат цих операцій подати в 16-й і 10-й формах.
14. Уважно прочитати умову задачі з п. 3 індивідуального завдання. Визначити, які змінні і яких типів потрібні для складання заданого виразу. Оголосити ці змінні. Потім записати відповідний до умови вираз. Зауваження: 1) відповіддю на завдання має бути один вираз (групу виразів чи оператори писати не треба); 2) якщо в умові поставлено запитання, яке потребує словесної відповіді, то доцільно щоби значенням виразу був символьний рядок. Наприклад, вираз, що визначає, яке з двох заданих дійсних чисел r та h менше, може бути таким:
double r, h;
r > h ? "друге" : "перше"
15. Оформити звіт, в якому до кожного пункту завдання лабораторної роботи написати, що було зроблено та які отримано результати, навести всі реалізовані програми, розроблені вирази та виконані розрахунки.
Варіанти індивідуальних завдань
1. |
1)
|
2) double x = 3.125; int c = 10, sm = 'B', k = (int)x; 2.1) x > c/3 ? sm + c%3 : sm - c%3 2.2) k ^ 5 | c & 0x3f |
|
3) Написати вираз, який повертає ціле число, значення якого дорівнює двом найстаршим цифрам дробової частини заданого дійсного числа. |
|
2. |
1)
|
2) int d = -5, m = 8; double z = 17.82; 2.1) (d + m)* (int)z % 100 /10 >= m 2.2) d & 1 ? d << 4 : d ^ 0321 |
|
3) Задано символ. Написати вираз, який перевіряє, чи цей символ є одним із знаків побітових операцій мови С. |
|
3. |
1)
|
2) int b = 015, x = 13, nc = 0x5ef; float u = 13.56E-3; 2.1) b /= nc % 10 +((int)u ? x / 2 : x >> 3) 2.2) !(x > b) && ~nc & 3 |
|
3) Задано чотирицифрове ціле число. Написати вираз, який перевіряє, чи збігаються дві середні цифри цього числа. |
|
4. |
1)
|
2) unsigned c = 0245, f = 13, q = 0xf1a5; double y = 0.8276e2; 2.1) (int)(2*y-1) == c ? ++f /3 : --f % 7 2.2) q >> 8 | ~q << 4 & 0xf0 |
|
3) Задано точку площини Q з координатами (xq, yq) і пряму, що описується рівнянням y = ax +k (xq, yq, a та k – дійсні числа). Записати вираз, що визначає як розташована ця точка – над прямою чи під прямою. |
|
5. |
1)
|
2) int b = -9, x = 15, c = 013, m=0; 2.1) x >= b && x <= c || !m 2.2) ~b | x << 3 & 0XF3E5 |
|
3) Задано певний рік. Визначити, чи цей рік високосний. Підказка: високосним вважається рік, що цілочислово ділиться на 4, але не ділиться на 100, крім років, що діляться на 400 (2000 рік високосний, а 1900 – ні). |
|
6. |
1)
|
2) long nb = 0X3A12FB; int c = '5', q = -7; 2.1) (nb >> 12)/10 + -q % 2 == c -'1' 2.2) nb & 3 ? nb ^ ~q : nb & 035 |
|
3) Задано певний символ. Написати вираз, який перевіряє, чи цей символ належить до символів 16-х цифр. |
|
7. |
1)
|
2) int c = 3, sm = '5'; double z = 11.75; 2.1) (int)z/3 <= c ? sm – 5*c%4 : sm - c 2.2) (int)z | 011 ^ c & sm |
|
3) Задано два цілих числа. Написати вираз, який перевіряє, чи остання цифра меншого з цих чисел дорівнює 3. |
|
8. |
1)
|
2) float z = 185.6E-2; int b = -4, c = 12, m = 031, x = 1; 2.1) c -= m / 10 +((int)z % 3 ? x << 4 : m) 2.2) !(x < b || x > c) && m & 1 |
|
3) Написати вираз, який перевіряє, чи найближче до заданого дійсного числа більше ціле є числом, що закінчується цифрою 0. |
|
9. |
1)
|
2) int h = 22, q = 7; double x = 17.82; 2.1) (int)(x+0.5)% 100 /5 > (h + q)/q 2.2) -h & 3 ? 2*h >> 3 : h | 0x3d1 |
|
3) Задано два дійсні числа. Написати вираз, що повертає дві наймолодші цифри числа, яке є результатом округлення до ближчого цілого більшого з цих двох дійсних чисел. |
|
10. |
1)
|
2) double w = 3.77E1; int ch = 'D', d = -6, k = (int)w; 2.1) k/2 == -d*3 ? ch + k%3 : ch - k%3 2.2) d ^ 17 | k & 0xf3 |
|
3) Задано три дійсні числа. Написати вираз, який повертає значення найменшого з цих чисел. |
|
11. |
1)
|
2) long nb = 0631256; int h = ~nb >> 12, c = '9'; 2.1) h /10 + -h % 2 *( c -'1') 2.2) (h & 0xf)!= 13 ? 037 ^ ~h : h & c |
|
3) Задано двобайтове беззнакове ціле число. Написати вираз, який формує нове число, помінявши місцями старший і молодший байти цього числа, і перевіряє, чи значення нового числа більше за значення заданого. |
|
12. |
1)
|
2) int a = 15, d = 017, m = 0x1ba6; long double z = 852.16e-2; 2.1) d *= m % 5 +((int)z ? a >> 2 : a/2) 2.2) !(a >= d) || ~m & 15 |
|
3) Задано дійсне число. Написати вираз, який перевіряє, чи найближче до даного числа ціле є числом, що закінчується цифрою 7. |
|
13. |
1)
|
2) float z = 33.8461; int b = -11, c = (int)z, g = 0x21; 2.1) !(g >= c || b == -c/3 && b <= g) 2.2) ~b ^ 0375 | c << 3 |
|
3) Задано довге ціле число. Написати вираз, який буде істинним, якщо значення молодшого байта цього числа щонайменше вдвічі більше за значення його старшого байта. |
|
14. |
1)
|
2) double p = 17.95; int k = (int)(p+0.5), n = -3; 2.1) -n/5 < ++k % 5 ? 'n' : 'k' 2.2) n ^ k | ~n << 5 & 126 |
|
3) Записати вираз, який повертає найстаршу цифру дробової частини меншого з двох заданих дійсних чисел. |
|
15. |
1)
|
2) unsigned c = 30, f = 13, p = 03175; double y = 0.5676e2; 2.1) (int)y /2 >= c ? ++f /3 : --f % 7 * 2 2.2) p >> 5 & 0x1f | ~p << 4 & 0xf0 |
|
3) Задано два цілі беззнакові числа. Написати вираз, який перевіряє, чи менше з цих чисел є дільником більшого. |
|
16. |
1)
|
2) double r = 23.8; int k = -14, f = 3; 2.1) (k + f)* (int)r % 100 /10 <= f 2.2) (~k ^ 0xf)== 5 ? k << 4 : k & 0321 |
|
3) Написати вираз, який перевіряє, чи точка з координатами (x, y) потрапляє у частину кола з радіусом R , що розташована в другому квадранті (центр кола в точці початку координат). |
|
17. |
1)
|
2) long m = 0xa12b3f; int vb = '5', t = -18; 2.1) t % 10 + ( m >> 16)/10 != 'A'- vb 2.2) (char)m & 10 ? m ^ ~t : m & t |
|
3) Задано рівняння прямої y = kx +c (коефіцієнти k та c дійсні числа) і точку площини P з координатами (xP, yP). Написати вираз, який визначає, де розташована ця точка відносно прямої (над прямою чи під нею). |
|
18. |
1)
|
2) float y = 73.846E-2; int b = -11, h = 015, c = 13; 2.1) (int)y && !(h >= b || h != c) 2.2) ~b | h << 4 ^ 0x53ed |
|
3) Задано дійсне число. Написати вираз, який перевіряє, чи найближче до цього числа ціле є числом кратним 5. |
|
19. |
1)
|
2) int b = -7, sm = 'Q'; double x = 7.92; 2.1) x > -b%10 ? sm + b/3 : sm – b/3 2.2) b & 0134 | (int)x ^ 5 |
|
3) Задано чотирицифрове ціле число. Написати вираз, який перевіряє, чи серед цифр цього числа є 0. |
|
20. |
1)
|
2) int b = -5, c = 15, m = 0236, x = 2; float z = 185.6E-1; 2.1) b += m % 10 +((int)z % 3 ? c : x << 4) 2.2) !(x < b || x > c) && ~m & 1 |
|
3) Записати вираз, який визначає, чи старша цифра дробової частини заданого дійсного числа непарна. |
|
21. |
1)
|
2) unsigned a = 25, k = 19, c = 017563; double q = 128.276e-1; 2.1) (int)(5*q-1)/2 == a ? ++k : --k % 7 2.2) ~c << 4 & 0xf0 ^ c >> 8 |
|
3) Задано символ. Написати вираз, який перевіряє, чи цей символ є одним із знаків арифметичних операцій мови С. |
|
22. |
1)
|
2) float z = 185.6e-2; int d = 015, a = 13, nc = 0X1BA6; 2.1) d *= nc % 5 +((int)z ? a >> 3 : a/2) 2.2) !(a >= d) || (~nc & 7)== 2 |
|
3) Задано дійсне число. Написати вираз, який перевіряє, чи найближче до нього більше ціле є парним числом. |
|
23. |
1)
|
2) double sq = 1.428e2; int t = (int)(sq+0.5), u = -t/10; 2.1) (int)sq % 10 > ++t /10 ? "так" : "ні" 2.2) u ^ t | ~u << 5 & 126 |
|
3) Написати вираз, який повертає наймолодшу цифру числа, що формується як результат округлення до ближчого цілого меншого з двох заданих дійсних чисел. |
|
24. |
1)
|
2) int b = -15, s = '3'; long nb = 02346710; 2.1) (nb >> 15)/10 + s -'0' < -b % 8 2.2) nb & 11 ? nb & 0XA3D : nb ^ ~b |
|
3) Задано ціле трицифрове число. Написати вираз, який перевіряє, чи сума цифр цього числа дорівнює 10. |
|
25. |
1)
|
2) int q = -6, v = 11; double w = 9.71; 2.1) (v - 2*q)/(int)w % 10 >= v /3 2.2) ~q & 1 ? q << 4 : q ^ 0x21 |
|
3) Задано дві точки, кожна з яких описується своїми координатами (x1, y1) та (x2, y2). Написати вираз, що визначає, яка з точок (перша чи друга) розташована ближче до точки початку координат. |
|
26. |
1)
|
2) int v = -5, d = -7*v; unsigned m = oxada5; 2.1) d % 10 + d /2 – (v << 2) 2.2) m & 255 < m >> 8 ? "лівий" : "правий" |
|
3) Записати вираз, який повертає найстаршу цифру дробової частини більшого з двох заданих дійсних чисел. |
|
27. |
1)
|
2) double y = 1207E-2; int c = '3', h = 41, m = (int)y; 2.1) y > h/3 ? c + h%3 : c - h%3 2.2) m & 013 | h ^ 0X3B7 |
|
3) Задано довге ціле число. Записати вираз, що визначає, який з двох середніх байтів цього числа (лівий чи правий) має більше значення. |
|
28. |
1)
|
2) long w = 0xa13b2f; int s = 'Z', b = -12; 2.1) -b/3 + (w >> 16)%100 / 10 >= s -'A' 2.2) w & 5 ? w ^ ~b : w & 0xd3f |
|
3) Задано три цілі числа. Написати вираз, який перевіряє, чи є серед них таке число, що може бути дільником двох інших. |
|
29. |
1)
|
2) int b = -8, k = 0x21; float x = 0.2461e2; 2.1) !(b == -(int)x /3 && b <= k || k >= b) 2.2) b << 3 | ~k ^ 0614 |
|
3) Задано символ. Написати вираз, який перевіряє, чи цей символ належить до символів ідентифікаторів мови С. |
|
30. |
1)
|
2) double z = 3.78; int g = 7, m = -8; 2.1) (g - m)* (int)z % 10 >= 3 * g /10 2.2) m & 1 ? g << 6 : ~g ^ 0207 |
|
3) Задано довге беззнакове ціле число. Написати вираз, який перевіряє, чи сума найстаршого і наймолодшого байтів цього числа перевищує 500. |
|
