Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
30.05.2020
Размер:
375.81 Кб
Скачать

Технологія створення програм

Лабораторна робота №1_2

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

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

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

Лабораторна робота розрахована на 6 годин виконання:

1 Заняття (2 години):

  • видача індивідуальних завдань;

  • розробка плану виконання робіт групою (розподіл ролей в команді, розподіл завдань, розробка єдиного інтерфейсу);

  • розробка алгоритмів, написання код кожним членом команди.

2 Заняття (2 години):

  • тестування код;

  • написання звітів-інструкцій;

  • вироблення одного загального звіту.

3 Заняття (2 години):

  • захист лабораторної роботи (виконується керівником групи);

  • оцінка вкладу кожного члена команди.

Звіт повинен містити:

  1. Тему і мету лабораторної роботи;

  2. Блок-схему алгоритму;

  3. Коди кожного завдання;

  4. Інструкцію по роботі.

Тема: Лінійне програмування

Структура програми. Загальна структура програми на Си/Си++ наступна:

директиви_препроцесора

визначення_функции_1

визначенн _функции_2

визначення_функции_N

Серед функцій обов'язково присутня головна функція з ім'ям main. Проста програма містить лише головну функцію і має наступну структуру:

директиви препроцесора

void main()

{ визначення_об'єктів;

виконувані_оператори;

}

Розглянемо всі необхідні засоби мови для складання лінійних обчислювальних програм. Як опорний приклад розглянемо програму для обчислення площі трикутника за формулою Герона.

Приклад 1. Дано: а, b, з — сторони трикутника. Обчислити S — площа трикутника. По формулі Герона:

де р — півпериметр трикутника.

#ftinclude <stdio.h>

#include <math.h>

Void main ()

{float а,b,c,p,s;

printf("\na="); scanf("%f",sa);

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

printf("\nc="); scanf("%f",&c);

p=(a+b+c) /2;

s==sqrt (р* (p-а) * (p-b) * (p-с) ) ;

printf("\пПлоща трикутника=%:е", s);

}

Програма складається з однієї головної функції із стандартним ім'ям main. Слово void позначає відсутність якого-небудь повертаного цією функцією результату, а порожні дужки — відсутність у неї аргументів. Все, що слідує після заголовка функції і поміщене у фігурні дужки, можна назвати тілом функції. Перший рядок — оголошення використовуваних змінних. Всі вони плаваючого типа double. Звернете увагу на те, що оголошення змінних закінчується крапкою з комою.

Подальша частина програми — виконувані оператори. Серед них оператори виводу на екран, введення даних з клавіатури, оператори привласнення.

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

З точки зору даного вище визначення наступна конструкція в програмі є оператором:

i++;

Його називають оператором-вираженням Якщо обчислення вираження закінчується привласненням, то його можна назвати оператором привласнення. У даній програмі присутньо двох операторів привласнення: обчислення півпериметра (р) і обчислення площі трикутника (S).

У вираженні для обчислення площі використовується бібліотечна функція sqrt() — квадратний корінь (як і в Паськале). Дана функція відноситься до бібліотеки математичних функцій. Для підключення цієї бібліотеки до нашої програми використовується директива препроцесора #include <math.h>. Тут math.h — ім'я заголовного файлу цієї бібліотеки. У таблиці. 1 даны опису деяких найбільш часто використовуваних функцій математичної бібліотеки Сі.

Таблиця 1

Математичні функції (заголовний файл math.h)

У даній програмі оператори printf (...); і scanf (...) ; реалізують відповідно вивід на екран і введення вихідних даних з клавіатури. Вони здійснюють звернення до відповідних функцій стандартної бібліотеки введення-виведення Сі, заголовний файл якої має ім'я stdio.h.

Форматований вивід на екран. Оператор виклику функції printf() має наступну структуру:

printf(рядок формату, список_аргументов);

Рядок формату обмежений подвійними лапками (тобто є текстовою константою) і може включати довільний текст, символи, що управляють, і специфікатори формата. Список аргументів може бути відсутнім або ж складатися з виразів, значення яких виводяться на екран (у окремому випадку з констант і змінних).

У прикладі 1 оператор printf ("\nа="); містить текст ("а=") і символи, що управляють ("\n"). Текст виводиться на екран в тому вигляді, в якому він записаний. Символи, що управляють, впливають на розташування на екрані знаків, що виводяться. В результаті виконання цього оператора на екран з нового рядка виведуться символи а=.

Ознакою символу, що управляє, є значок \. Нижче наводиться їх список:

Оператор printf ("\nПлощадь треугольника=%f",s); містить всі види параметрів функції printf. Список аргументів складається з однієї змінної s. Її значення виводиться на екран. Пара символів %f є специфікацією формату значення змінної s, що виводиться. Значок % — ознака формату, а буква f вказує на те, що число, що виводиться, має речового (плаваючий) типа і виводиться на екран у формі з фіксованою крапкою

Наприклад, якщо в результаті обчислень змінна s набуде значення 32,435621, то на екран виведеться:

Площа трекутника=32.435621

Специфікатор формату визначає форму зовнішнього представлення величини, що виводиться. Ось деякі специфікатори формату:

Наприклад, після виконання наступних операторів

на екран виведеться рядок:

m=84.299999     k=-12    p=3.21500e+01

Тут двічі використовуваний символ табуляції, що управляє \t відокремив один від одного значення, що виводилися. З цього прикладу видно, що відповідність між специфікаторами формату і елементами списку аргументів встановлюється в порядку їх запису зліва направо.

До специфікатора формату можуть бути додані числові параметри: ширина поля і точність. Ширіна — це число позицій, що відводяться на екрані під величину, а точність — число позицій під дробову частину (після крапки). Параметри записуються між значком % і символом формату і відділяються один від одного крапкою. Внесемо зміни в оператора виводу для розглянутого вище прикладу.

В результаті на екрані отримаємо:

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

До специфікаторів формату можуть бути додані модифікатори в наступних варіантах:

Форматоване введення з клавіатури. Оператор виклику функції scanf() має наступну структуру:

scanf(форматная_строка, список_аргументов);

Дана функція здійснює читання символів, що вводяться з клавіатури, і перетворення їх у внутрішню виставу відповідно до типа величин. У функції scanf() рядок формату і список аргументів присутні обов'язково. У програмі з прикладу 1 є оператор:

scanf("%f",&a);

Тут "%f" - рядок формату; &а — список аргументів, що складається з одного елементу. Цей оператор проводить введення числового значення в змінну а.

Символьну послідовність, що вводиться з клавіатури і сприйману функцією scanf(), прийнято називати вхідним потоком. Функція scanf() розділяє цей потік на отдельные величини, що вводяться, інтерпретує їх відповідно до вказаного типа і формату і привласнює змінним, таким, що міститься в списку аргументів.

Список аргументів — це перелік змінних, що вводяться, причому перед ім'ям кожної змінної ставиться значок &. Це знак операції «узяття адреси змінною». Детальніше сенс цієї дії буде пояснений пізніше, а доки приймемо це правило формально.

Рядок формату полягає в лапки (як і для printf) і складається із списку специфікацій. Кожна специфікація починається із знаку %, після якого можуть слідувати

*ширина поля модифікатор специфікатор

З них обов'язковим елементом є лише специфікатор. Для введення числових даних використовуються наступні специфікатори:

d — для цілих десяткових чисел (тип int);

u — для цілих десяткових чисел без знаку (тип unsigned int);

f — для дійсних чисел (тип float) у формі з фіксованою крапкою;

е — для дійсних чисел (тип float) у формі з плаваючою крапкою.

Зірочка в специфікації дозволяє пропустити у вхідному потоці певну кількість символів. Ширіна поля — ціле позитивне число, що дозволяє визначити число символів з вхідного потоку, що належать значенню відповідної змінної, що вводиться. Як і в специфікаціях виводу для функції printf(), у специфікаціях введення функції scanf() допустиме використання модифікаторів h, l, L. Вони застосовуються при введенні значень модифікованих типів:

hd — для введення значень типа short int;

ld — для введення значень типа long int;

lf, le — для введення значень типа double у формі з фіксованою і плаваючою крапкою;

Lf, Le — для введення значень типа long double у формі з фіксованою і плаваючою крапкою.

У програмі з прикладу 1 всі три величини а, b, з можна ввести одним оператором:

scanf("%f%f%f",&a,&b,&c);

Якщо послідовність введення буде такою:

5 3.2 2.4 <Enter>

то змінні набудуть наступних значень: а = 5,0, b = 3,2, з = 2,4. Роздільником в потоці введення між різними значеннями може бути будь-яка кількість пропусків, а також інші пробільні символи: знак табуляції, кінець рядка. Лише після натиснення на клавішу Enter значення, що вводяться, привласняться відповідним змінним. До цього вхідний потік поміщається в буфер клавіатури і може редагуватися.

Потокове уведення-виведення в Сi++. Програмуючи на мові Сi++, можна користуватися засобами введення-виведення стандартної бібліотеки Сі, що підключається за допомогою заголовного файлу stdio.h, як це робилося вищим. Проте в Си++ є свої специфічні засоби введення-виводу.

Це бібліотека класів, що підключається до програми за допомогою файлу iostream.h. У цій бібліотеці визначені як об'єкти стандартні символьні потоки з наступними іменами:

сin — стандартний потік введення з клавіатури;

cout — стандартний потік виводу на екран.

Введення даних інтерпретується як витягання з потоку сin і привласнення значень відповідним змінним. У Си++ визначена операція витягання із стандартного потоку, знак якої >>. Наприклад, введення значень в змінну х реалізується оператором

cin>>x;

Виведення даних інтерпретується як приміщення в стандартний потік cout значень, що виводяться. Виводитися можуть тексти, ув'язнені в подвійні лапки, і значення виразів. Знак операції приміщення в потік <<. Приклади використання потокового виводу:

cout<<a+b;

соut<<"\nРезультат="<<Y;

cout<<"x="<<x<<" y="<<y<<" z="<<z<<endl;

З наведених прикладів видно, що у вихідному потоці можна використовувати символи, що управляють, як і при використанні функції printf(); перед кожним елементом виводу потрібно ставити знак операції <<. Елемент виведення endl є так званим маніпулятором, що визначає переклад курсора на новий рядок (діє аналогічно символу, що управляє \n).

В процесі потокового введення-виводу відбувається перетворення з форми зовнішньої символьної вистави у внутрішній формат і назад. Тип даних і необхідний формат визначаються автоматично. Стандартні формати задаються спеціальними прапорами форматування, які встановлюються за допомогою функції setf(). Крім того, на формат окремих даних, що виводяться, можна впливати шляхом вживання спеціальних маніпуляторів. Тут ми детально не розбиратимемо ці питання.

Перепишемо програму з прикладу 1 у варіанті з використанням потокового введення-виведення Си++.

Соседние файлы в папке Лабораторні роботи