МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
1
ОСНОВИ ПРОГРАМУВАННЯ
МЕТОДИЧНІ ВКАЗІВКИ ТА ІНДИВІДУАЛЬНІ ЗАВДАННЯ
до лабораторних робіт з курсу
“Алгоритмізація та програмування”
для студентів базового напряму 050101
“Комп’ютерні науки”
Львів – 2012
ВСТУП
Загальна мета лабораторних занять полягає у розширенні, поглибленні та практичному закріпленні знань та вмінь, які здобувають студенти у процесі вивчення теоретичного матеріалу з дисципліни “Алгоритмізація та програмування”.
У результатi виконання лабораторних робіт студенти повиннi:
знати етапи та технологiю пiдготовки і комп’ютерної реалізації програм; базові алгоритми, що застосовуються в програмуванні задач обчислювального й інформаційного характеру; правила побудови блок-схем алгоритмів; синтаксис і семантику мови програмування C, типи даних, якими можна оперувати; засоби програмної реалізації алгоритмів; бібліотеки мови C;
вмiти формулювати постановку задачі, розробляти алгоритм її розв’язування і зображати його графiчно; записувати програму розв’язування задачі мовою C, використовуючи відповідні бібліотечні функції; редагувати, налагоджувати та реалізовувати програми, використовуючи засоби одного із інтегрованих середовища програмування мови C/C++; відображати результати виконання програм.
Мова програмування C, яку обрано за базову для вивчення курсу “Алгоритмізація та програмування”, є однією із найпопулярніших мов, що має широку сферу застосування, зокрема в комп’ютерних інформаційних технологіях, системах автоматизованого керування і проектування, комп’ютерній інженерії тощо. Мовою С написано велику кількість прикладних (ужиткових) програмних продуктів та системних компонентів програмного забезпечення комп’ютерів. Вона стала основою створення і розвитку багатьох мов об’єктно-орієнтованого програмування, зокрема: С++, Java, C#.
Мова C характеризується потужністю функціональних можливостей, гнучкістю та високою ефективністю коду, лаконізмом записів, логічною строгістю. За швидкодією програми, складені мовою C, наближаються до програм, написаних на асемблері, але водночас вони значно простіші й наочніші в супроводі та розумінні. C дуже вдало поєднує властивості універсальних мов програмування високого рівня із можливістю безпосереднього доступу до апаратних ресурсів комп’ютера.
ПОРЯДОК ВИКОНАННЯ ЛАБОРАТОРНИХ РОБІТ
Готуючись до лабораторного заняття, студент повинен:
повторити відповідний теоретичний матеріал та ознайомитися з прикладами, що пов’язані з тематикою виконуваної лабораторної роботи, використовуючи конспект лекцій і матеріали практичних занять, а також підручники, навчальні посібники та методичні розробки до даної теми;
уважно прочитати всі пункти завдання лабораторної роботи, занотувати в звіт тему роботи, мету та своє індивідуальне завдання – номер індивідуального завдання співпадає з порядковим номером студента в журналі академгрупи (не підгрупи);
розробити програму комп’ютернї реалізації задачі, заданої в індивідуальному завданні, для чого:
чітко визначити, що має бути отримане як результат розв’язування задачі і які вхідні дані для цього потрібні;
вибрати математичний або інформаційний метод (спосіб) розв’язування поставленої задачі;
розробити алгоритм розв’язування задачі;
написати відповідну програму мовою С – програма обов’язково має бути записана в т. зв. “доброму стилі”, супроводжуватися необхідними коментарями та відповідати вимогам конкретної лабораторної роботи;
продумати й підготувати вхідні дані, які перевірятимуть правильність та коректність роботи програми за різних умов її виконання, зокрема стійкість до помилок введення вхідної інформації.
На лабораторному занятті студент повинен виконати:
відповісти на поставлені йому запитання за темою лабораторної роботи;
використовуючи засоби iнтегрованого інструментального середовища програмування, ввести, відредагувати та налагодити текст програми;
виконати програму для підготованих наборів вхідних даних і зафіксувати отримані результати;
у разі необхідності внести в алгоритм розв’язування і текст програми необхідні зміни та доповнення і повторно виконати пункти 2 та 3;
виконати всі інші завдання, вказані в лабораторній роботі, та занотувати їхні результати в звіті;
оформити та захистити звіт про виконання лабораторної роботи.
ОФОРМЛЕННЯ ЗВІТУ ПРО ВИКОНАННЯ
ЛАБОРАТОРНОЇ РОБОТИ
Звіти про виконання лабораторних робіт оформляються в окремому зошиті, який в кінці семестру (після захисту всіх лабораторних робіт) здається на кафедру. Можна оформляти звіти на аркушах формату А4 – в цьому випадку перед здаванням на кафедру всі звіти необхідно зброшурувати.
Звіт до кожної роботи повинен починатись з нової сторінки і містити такі розділи:
заголовок лабораторної роботи;
тема лабораторної роботи;
мета виконання лабораторної роботи;
для лабораторних робіт 1, 2 та 3:
результати виконання кожного пункту завдання – дії, що виконувались відповідно до цього пункту завдання і засоби, що використовувались для їхньої реалізації,
для лабораторних робіт, починаючи від 4-ї:
індивідуальне завдання (формулювання);
постановка задачі (у випадках, коли формулювання індивідуального завдання потребує доповнення або конкретизації);
алгоритм розв’язування задачі – у формі блок-схеми і/або стислого словесного опису вибраних методів та основних кроків процесу реалізації задачі;
текст програми мовою С;
результати комп’ютерної реалізації програми для різних наборів вхідних даних, які підтверджують правильність роботи програми і встановлюють область її застосування – треба вказати форму введення даних та їхні значення, а також форму і значення отриманих результатів для кожної реалізації;
для всіх лабораторних робіт:
висновки, в яких необхідно зазначити, які знання отримано в процесі виконання даної роботи; а також навести коротку характеристику розробленої програми і зазначити можливі варіанти її застосування та вдосконалення.
Звіт має бути написаний чітко, грамотно, з дотриманням норм ділової документації. Кожен розділ звіту треба виділяти відповідним заголовком і візуально (підкресленням, розміром літер тощо). Оформлений звіт після захисту лабораторної роботи підписує викладач.
ЗАВДАННЯ ДО ЛАБОРАТОРНИХ РОБІТ
Лабораторна робота № 1
Тема роботи: Ознайомлення зі складом та функціональними можливостями інтегрованого середовища програмування Borland C++ 3.1.
Мета роботи: ( ознайомитись з основними складовими компонентами інтегрованого середовища програмування Borland C++ 3.1; ( здобути навики введення, редагування та збереження текстів програм; ( навчитися користуватись багатовіконною підсистемою.
Завдання лабораторної роботи. 1. Використовуючи методичний посібник до лабораторних робіт “Створення, відлагодження та виконання програм в інтегрованому середовищі Borland C++ 3.1” [8], ознайомитись зі структурою та призначенням інструментальної системи програмування Borland С/C++.
2. Активізувати інтегроване середовище програмування, використовуючи один з можливих способів його завантаження. Ознайомитися зі структурою інтерфейсу середовища.
3. Переглянути всі розділи головного меню інтегрованого середовища, ознайомитись з пунктами кожного з вертикальних меню. Особливу увагу звернути на розділи: File, Edit, Window, Help. Інформацію про призначення кожного з розділів головного меню та їхніх підрозділів можна отримати через підсистеми допомоги: Help/Contents/Menus and Hot Keys.
4. Відкрити розділ підсистеми допомоги: Help / Contents / Editor Commands та занотувати команди роботи з блоками тексту – Block Commands (Borland Style). Переглянути та записати інші корисні команди з цього розділу.
5. Змінити поточний каталог середовища на особистий підкаталог у загальному каталозі групи, виконавши необхідні установки у вікні діалогу команди File/Change dir….
6. Відкрити вікно нового файлу і ввести 20-30 рядків довільного тексту (введені рядки можуть бути беззмістовними). Набираючи текст, оволодіти засобами швидкого переміщення курсора по рядку (Home / End) і по тексту (PageUp / PageDown), режимами вставки і заміни, табуляційними відступами (Tab / Backspace) для вертикального вирівнювання початків рядків. Набраний текст має мати декілька рівнів “втоплення” (горизонтальних відступів рядка від краю вікна), кожен рівень повинен складатися із двох або більше рядків. Повернення на попередній рівень виконувати клавішею Backspace. Зберегти набраний текст у файлі з довільним іменем в особистому каталозі.
7. Відкрити пункт меню Options/Enviroment/Editor і встановити оптимальний табуляційний відступ 3 або 4 у вікні Tab Size. Зберегти його: Options/Save….
8. Навчитись виділяти блоки тексту (за допомогою “гарячих” клавіш блокових команд, мишки чи клавіатури) та виконувати операції над ними: перенесення, копіювання, видалення тощо.
9. Відкрити нове текстове вікно. Скопіювати декілька фрагментів тексту з першого вікна у нове. Подивитись, яким є вміст буфера обміну Clipboard після виконання цих операцій. Чи можна змінити активний фрагмент у буфері обміну?
10. Відкрити файл з початковим текстом та ще одне нове вікно. Розташувати відкриті вікна у різному порядку, використовуючи команди Tile i Cascade з розділу меню Window. Навчитись різними засобами (за допомогою команд, мишки та клавіш) здійснювати перехід від одного активного вікна до іншого, закривати вікна, змінювати їхні розміри і пересувати їх, щоб створити зручний для роботи багатовіконний інтерфейс.
11. Наприкінці зберегти потрібні файли, закрити всі вікна і завершити роботу з середовищем.
12. Оформити звіт з лабораторної роботи, в якому до кожного пункту завдання вказати, що було вивчено і/або зроблено в процесі його виконання та які команди чи засоби інтегрованого середовища використовувались для цього. Звіт має відповідати вимогам, зазначеним у розділі “Оформлення звіту”.
Лабораторна робота № 2
Тема роботи: Структура С-програми. Введення, компіляція та виконання програм
Мета роботи: ( ознайомитись із загальною структурою С-програми, її основними компонентами та правилами і стилями запису програм мовою С; ( навчитись швидко записувати текст програми, компілювати її, шукати і виправляти синтаксичні помилки, виконувати програму і переглядати її результати, використовуючи засоби інструментального середовища.
Завдання лабораторної роботи. 1. Прочитати текст першої програми, поданої нижче. Виділити основні структурні компоненти програми: • директиви компілятору (#include та #define); • функцію main(); • оголошення змінних; • оператори (у першій програмі всі оператори є звертаннями до бібліотечних функцій введення/виведення); • коментарі.
2. Відкрити середовище Borland C++ 3.1. У вікні редактора набрати текст першої програми, дотримуючись стилю її запису. Якщо підключення українських літер викликає труднощі, то можна набирати відповідні тексти латиницею. Зберегти програму в особистому каталозі (перед записом файлу обов’язково пересвідчитись, що потрібний каталог встановлено як поточний).
3. Відкомпілювати програму командою Compile (Alt+F9). Проаналізувати всі попередження та повідомлення компілятора. За наявності синтаксичних помилок – виправити їх і повторно відкомпілювати програму. Навчитись послідовно переглядати повідомлення компілятора – команди: Next error (Alt+F8) та Previous error (Alt+F7) і швидко здійснювати переходи між вікном програми і вікном компілятора.
4. Якщо компіляція пройшла успішно, то запустити програму на виконання командою Run (Ctrl+F9). З екрана у звіт переписати результати виконання програми. Навчитися перемикати вікно середовища на повноекранне вікно результатів MS DOS (Alt+F5) та знову повертатись у вікно редактора (довільна клавіша). Можна переглядати результати роботи програми в окремому вікні середовища, відкривши вікно Output (розділ меню Window).
5. Проаналізувати другу програму – це гра, в якій користувач за встановлену кількість спроб, враховуючи підказки “завелике” та “замале”, має вгадати ціле випадкове число з діапазону RMIN..RMAX, “задумане” комп’ютером.
Зауваження: Функція генерування випадкового числа random() та функція запуску (старту) послідовності випадкових чисел від поточного значення системного таймера randomize() не належать до стандартних функцій мови С. Вони реалізовані в бібліотеці <stdlib.h> середовища Borland С/С++ як макропідстановки на основі стандартних функцій rand() та srand(). Якщо середовище, в якому ви реалізуєте програму, не підтримує цих функцій, то звертання до них у програмі треба замінити вказаними нижче виразами зі стандартними бібліотечними функціями:
random(X) ( rand()%(X) , де X – вираз, що є аргументом функції;
randomize() ( srand((unsigned)time(NULL))
і підключити до програми заголовний файл <time.h>.
6. Обов’язково звернути увагу на стиль запису програми, передусім: • вертикальне вирівнювання в межах блоків; відступи (“втоплення”) для вкладених операторів; • розстановку та вирівнювання фігурних дужок {}; • застосування коментарів, пробілів та інші прийоми підвищення наочності програми.
7. Ввести текст другої програми. У процесі введення використати засоби вбудованого редактора текстів, які пришвидшують набір програми, зокрема: копіювання, заміну, перенесення фрагментів. Для горизонтального втоплення і вертикального вирівнювання рядків треба застосовувати клавіші Tab і Bkspace, попередньо змінивши (у разі потреби) крок табуляції. Щоб через випадковий збій у роботі комп’ютера не втратити вже набраний текст, доцільно в процесі введення час від часу записувати його у файл (найпростіше це робити командою Save (F2), попередньо створивши потрібний файл командою Save as…).
8. Відкомпілювати програму і за необхідності виправити помилки. Щоб зменшити кількість операцій, компіляцію і виконання програми можна виконувати однією командою Run (Ctrl+F9).
9. Виконати програму декілька разів. Можна змінити макроконстанти діапазону та кількості спроб (RMIN, RMAX, K). Занотувати екранограму процесу виконання – всі екранні повідомлення та отримані результати.
10. Оформити звіт про виконання лабораторної роботи, зазначивши всі основні кроки, що були зроблені для введення, та виконання програм, та засоби, які для цього використовувалися. Навести тексти обох програм і всі результати їхніх реалізацій. Звіт повинен відповідати вимогам, вказаним у розділі “Оформлення звіту”.
Програми для опрацювання:
/* Перша програма */
#include <stdio.h>
#define TEXT "Ви виконали першу програму" /* повідомлення */
void main (void)
{
char name[15]; /* змінна для імені */
printf("\n\n Ваше ім\’я - ");
gets(name);
printf("\n Вітаємо, %s! %s", name, TEXT);
printf("\n\n \tEnter для завершення -> ");
getchar(); /* зартимка результатів */
}
друга програма:
/*********************** ВГАДАЙ ЧИСЛО *************************/
/* Гра, в якій треба вгадати число "задумане" комп’ютером */
/****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define RMIN 1 /* найменше число */
#define RMAX 100 /* найбільше число */
#define K 6 /* кількість спроб */
int main (void)
{
int numb, answ, k;
randomize(); /* запуск генератора випадкових чисел */
numb = RMIN + random(RMAX - RMIN + 1); /* випадкове число */
printf("\n**** Задумано число з проміжку %d..%d – \n"
"\t\t вгадайте його за %d спроб ****\n\n", RMIN, RMAX, K);
for (k = 1; k <= K; k++) /* цикл вгадування з K спроб */
{
printf("Спроба %d - ",k);
scanf("%d", &answ);
if (answ == numb) /* число вгадано */
{
printf("\n\t *** %d - Ви вгадали!!! ***", numb);
return 0;
}
if (answ > numb) /* виведення підказки */
printf("\t\t - завелике\n");
else
printf("\t\t - замале\n");
}
printf("\n\t*** Ви не вгадали, це число - %d ***", numb);
return 0;
}
Лабораторна робота № 3
Тема роботи: Налагодження програми, контроль за процесом її виконання
Мета роботи: ( розширити знання про структуру С-програм; ( оволодіти основними прийомами налагодження програми через застосування контролю за ходом її виконання.
Завдання лабораторної роботи. 1. Прочитати текст програми, поданої нижче. Ця програма визначає із введеної послідовності довгих цілих чисел перше число, що має найбільшу суму цифр. Для обчислення суми цифр числа використано окрему функцію SumaCyfr(), яка визначає і повертає суму цифр заданого числа. Ще дві користувацькі функції програми LiniaRamky1() та LiniaRamky2() призначені для формування рамки, якою виділяється результат виконання програми. Параметр цих функцій задає довжину лінії рамки. Введення чисел, запис суми їхніх цифр та перевірка, чи ця сума перевищує найбільшу зі знайдених раніше, організовано за допомогою оператора do-while як циклічний процес у функції main(). Коли введення завершено (його можна перервати ввівши 0 замість числа), програма виводить результат: знайдену максимальну суму цифр, номер і значення шуканого числа.
Набрати текст програми, зберігаючи стиль її запису. Записати текст програми у файл в особистому каталозі. Відкомпілювати програму, виправити всі помилки і запустити її на виконання.
Ввести послідовність цілих чисел, які аналізуватиме програма. Кожне число може мати не більше десяти цифр. Числа найкраще набирати в одному рядку, відокремлюючи пробілами або табуляціями. Можна ввести MAXN чисел, або зупинити введення нулем. Переписати у звіт введені числа і результати виконання програми.
Відкрити діалогове вікно замін Replace Text (розділ головного меню Search/Replace…) і переглянути призначення усіх його опцій. Встановити опції, які потрібні для заміни ідентифікаторів змінних у всьому тексті програми. Поміняти імена декількох змінних на вказані нові, наприклад:
chysl ( numb ; n ( nom ; c ( cyfr.
Перевірити правильність замін і виконати змінену програму. Відзначити, чи вплинули внесені зміни на результат роботи програми.
Ознайомитись із основними засобами інтегрованого середовища, призначеними для контролю за ходом виконання програми, пошуку та виявлення помилок на етапі її реалізації (розділи меню Run та Debug ).
Повернутись до першої версії програми. Встановити курсор на одному із символів оператора (рядка) if усередині тіла циклу do-while. Запустити програму на виконання до досягнення вибраного рядка Go to cursor ( F4 ).
Відкрити вікно спостереження Watch і вивести в нього поточні значення основних змінних циклу (n, chysl, sumc, maxsum та ін.). Записати їх у звіт.
Перейти в режим покрокового виконання програми Step over ( F8 ). Виконати в цьому режимі декілька проходів по циклу, фіксуючи зміни в значеннях змінних. За якої умови змінюються значення maxsum, nmax та chmax ?
Потім перейти в режим трасування програми Trace in ( F7 ) і знову зробити декілька проходів по циклу. При вході у функцію SumaCyfr() доповнити вікно спостереження внутрішніми змінними функції c та sum і зафіксувати їхні значення. У чому відмінність команд F7 і F8 ?
Встановити точку зупинки на одному з операторів (рядків) тіла циклу, застосувавши команду Toggle breakpoint – перемикання точок зупинки ( Ctrl+F8 ). Продовжити виконання програми командою Run ( Ctrl+F9 ), записуючи значення змінних циклу після кожної зупинки програми.
Зняти встановлену точку зупинки через вікно Breakpoints або командою ( Ctrl+F8 ) і перенести її на інший оператор. Проаналізувати і записати проміжкові результати та завершити роботу програми ( Ctrl+F9).
Повторно провести контроль ходу виконання програми (п. п. 6 . .11), запустивши її для інших значень вхідних чисел. Режими зупинки і покрокового виконання можна комбінувати різними способами. Занотувати проміжкові та кінцеві результати виконання програми.
Ще раз запустити програму, встановивши точку зупинки на одному з операторів. Після зупинки перейти у вікно редактора і внести довільну (логічно і синтаксично правильну) зміну в текст програми. Спробувати продовжити виконання програми, проаналізувати повідомлення, яке висвітлюється у цьому випадку.
Перезапустити змінену версію програми, зберігши точку зупинки. Переглянути та занотувати поточні значення змінних, відображені у вікні спостереження. Наприкінці записати результати виконання програми.
Оформити звіт про виконання лабораторної роботи, в якому навести текст програми, вказати, що було зроблено на кожному кроці роботи, які засоби для цього використовувалися, які результати зафіксовано. Зробити висновок.
Програма для опрацювання:
/* Пошук числа з найбільшою сумою цифр */
#include <stdio.h>
#define MAXN 10 /* максимальна кількість чисел */
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 % 72.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