if ErrCode = grOk then
begin
{ Малювання червоної кулі }
SetColor (red);
X:= Radius+2;
Y:= Radius+2;
Circle (X, Y, Radius);
SetFillStyle (1, red);
FloodFill (Radius, Radius, red);
{ Створення динамічної змінної }
Size:= ImageSize (0, 0, 2*X, 2*Y);
GetMem (P, Size);
GetImage (0, 0, 2*X, 2*Y, P^);
ClearDevice;
Repeat
{ Переміщення кулі вздовж верхньої сторони екрана }
for I:=1 to GetMaxX-2*X do
begin
PutImage (I, 1, P^, CopyPut);
Delay (10);
end;
{ Переміщення кулі вздовж правої сторони екрана }
for I:=1 to GetMaxY-2*Y do
begin
PutImage (GetMaxX-2*X, I, P^, CopyPut);
Delay (10);
end;
{ Переміщення кулі вздовж нижньої сторони екрана }
for I:=1 to GetMaxX-2*X do
begin
PutImage (GetMaxX-2*X-I, GetMaxY-2*Y, P^,CopyPut);
Delay (10);
end;
{ Переміщення кулі вздовж лівої сторони екрана}
for I:=1 to GetMaxY-2*Y do
begin
PutImage (1, GetMaxY-2*X-I, P^, CopyPut);
Delay (10);
end;
{ Повторення переміщень до натискання клавіші }
Until KeyPressed;
FreeMem (P, Size);
CloseGraph;
end
else
Writeln(GraphErrorMsg(ErrCode));
End.
2. ЗАВДАННЯ НА РОБОТУ
Розробити та запустити у роботу програму на мові програмування "Паскаль", яка вирішує задачу відповідно до заданого нижче варіанта.
2.1. Безперервно переміщувати по замкнутій еліптичній траєкторії графічний об'єкт, який складається з різнокольорового заповненого трикутника та круга.
2.2. Безперервно переміщувати за зворотно-поступальною траєкторією з лівого верхнього до правого нижнього кута екрана графічний об'єкт, який складається з різнокольорового заповненого п'ятикутника та стовпця.
2.3. Безперервно переміщувати горизонтально між сторонами екрана за зворотно-поступальною траєкторією графічний об'єкт, який складається з різнокольорового заповненого шестикутника та еліпса.
2.4. Безперервно переміщувати за зворотно-поступальною траєкторією з лівого нижнього до правого верхнього кута графічний об'єкт, який складається з трьох різнокольорових концентричних кругів.
2.5. Безперервно переміщувати вертикально між сторонами екрана за зворотно-поступальною траєкторією рухомий об'єкт, який складається з різнокольорового семикутника та еліптичного сектора.
2.6. Безперервно переміщувати горизонтально за синусоїдальною зворотно-поступальною траєкторією графічний об'єкт, який складається з різнокольорового заповненого прямокутника та сектора круга.
2.7. Безперервно переміщувати вертикально за синусоїдальною зворотно-поступальною траєкторією графічний об'єкт, який складається з різнокольорового заповненого трикутника та еліпса.
2.8. Безперервно переміщувати по колу на весь екран графічний об'єкт, який складається з різнокольорового заповненого прямокутника та сектора еліпса.
2.9. Безперервно переміщувати за прямолінійною замкнутою траєкторією типу “вертикальна вісімка” на весь екран графічний об'єкт, який складається з різнокольорового стовпця та круга.
2.10. Безперервно переміщувати за прямолінійною замкнутою траєкторією типу “горизонтальна вісімка” на весь екран графічний об'єкт, який складається з двох різнокольорових концентричних кругів.
3. КОНТРОЛЬНІ ЗАПИТАННЯ
3.1. Що називається динамічною пам'яттю.
3.2. Для чого використовується динамічна пам'ять.
3.3. Що таке динамічні змінні.
3.4. Які є типи вказівників та як вони описуються.
3.5. Якими командами виділяється та звільняється динамічна пам'ять у залежності від типу вказівників.
3.6. Як позначаються динамічні змінні у виконавчій частині програми.
3.7. Як визначити об'єм вільної динамічної пам'яттю
3.8. Як визначити об'єм неперервної ділянки динамічної пам'яті.
3.9. В якій послідовності створюється рухоме зображення.
3.10. Якою командою фрагмент зображення відображується з динамічної пам'яті на екран.
3.11. Які є способи поєднання поточного зображення екрана із зображенням рухомого фрагмента.
3.12. Який максимальний об'єм одного прямокутного фрагмента зображення, що вирізається з екрана.
3.13. Якою командою задається колір та шаблон заповнення геометричних фігур.
Комп'ютерний практикум № 9
ОБ’ЄКТНО-ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ НА МОВІ "ПАСКАЛЬ"
Мета практикуму – розробка програмного забезпечення на мові прграмування "Паскаль" з використанням методів об’єктно-орієнтованого програмування.
1. ТЕОРЕТИЧНІ ВІДОМОСТІ
1.1. Об’єктно-орієнтоване програмування (ООП) характеризується трьома властивостями:
1). Об’єднання даних та підпрограм, що їх обслуговують, в один тип даних “Об’єкт”. Ця властивість ООП називається інкапсуляцією. В ПАСКАЛІ для опису об’єктів застосовується зарезервоване слово object. Традиційно ім'я типу починається з великої букви Т. Наприклад, створений об’єкт “Персона” (TPerson) уміщує три поля даних про людину:
· Прізвище, ім'я, по батькові – Name;
· Адреса – Address;
· Телефон – Telephon;
та дві підпрограми-процедури, що їх обслуговують:
· Read_Date – ввід даних про людину;
· Write_Date – вивід даних про людину.
Підпрограми об’єкта називаються методами і їх повний опис подається нижче опису об’єкта. Для позначення належності метода перед його іменем через крапку записується ім’я об’єкта, наприклад, Tperson.Read_Date. Для зменшення такої громіздкості при звертанні до методів у виконавчій частині програми застосовується оператор With аналогічно до типу даних “Запис”. Повний опис об’єкта “Персона” має наступний вигляд:
Type
TPerson= object
Name:string;
Address:string;
Telephon:string;
Procedure Read_Date;
Procedure Write_Date;
end;
Procedure TPerson.Read_Date;
begin
Write ('ПІБ? ');
Readln (Name);
Write ('АДРЕСА? ');
Readln (Address);
Write ('ТЕЛЕФОН? ');
Readln (Telephon);
end;
Procedure TPerson.Write_Date;
begin
Writeln ('ПІБ: ',Name);
Writeln ('АДРЕСА: ',Address);
Writeln ('ТЕЛЕФОН: ',Telephon);
end;
Var
Person:TPerson;
2). При створенні нового об’єкта можна використати всі поля вже існуючого об’єкта, який є батьківським для створюваного дочірнього. Це дозволяє значно скоротити опис програми, бо непотрібно повторно описувати необхідні для роботи поля об’єкта. Ця властивість ООП називається наслідування. Ім'я батьківського об’єкта записується в круглих дужках після слова object в описі дочірнього об’єкта. Наприклад, опис об’єкта “Студент”, який уміщує всі поля існуючого об'єкта “Персона” та додатково одне поле з назвою інституту, здійснюється наступним чином:
Type
TStudent= object (TPerson)
Institute:string;
Procedure Read_Date;
Procedure Write_Date;
end;
Procedure TStudent.Read_Date;
begin
TPerson.Read_Date;
Write ('ІНСТИТУТ? ');
Readln (Institute);
end;
Procedure TStudent.Write_Date;
begin
TPerson.Write_Date;
Writeln ('ІНСТИТУТ: ',Institute);
end;
Var
Student:TStudent;
Як видно, методи об’єкта “Студент” Read_Date та Write_Date доповнюються командами вводу та виводу інформації про інститут;
3). Методи ієрархічних об'єктів у наведених прикладах “Персона” та “Студент” мають однакові імена Read_Date та Write_Date, проте у кожному об'єкті їх дія відрізняється. Ця властивість ООП називається поліморфізм.
1.2. Зв'язок між методами дочірніх та батьківських об'єктів у наведених прикладах установлюється під час компіляції програми, тому такі методи називаються статичними. Існують більш зручні методи, які дозволяють встановлювати зв'язок під час виконання програми. Вони називаються віртуальними й розширюють властивість поліморфізм, бо забезпечують зміну роботи методів у ході виконання програми. Віртуальні методи позначаються при описі типу об'єкта словом Virtual після заголовка підпрограми. При цьому всі відповідні методи в дочірніх об'єктах повинні також бути віртуальними. При наявності в об'єкті віртуальних методів його полям даних у виконавчому блоці програми повинні задаватися початкові значення, наприклад, нульові. Для цього служить спеціальний метод об'єкта Constructor (конструктор) по типу звичайної процедури, який за згодою має ім'я Init.
Недоліком віртуальних методів є менша швидкодія порівняно зі статичними методами.
1.3. Об'єкти, як й інші типи даних, можна розміщувати в динамічній пам'яті й працювати з ними за допомогою вказівників. Виділення та звільнення динамічної пам'яті здійснюється відомими командами New й Dispose. Наприклад, створення динамічного об'єкта TPerson проходить наступним чином
Var
Person:^TPerson;
Begin
New (Person);
...
Dispose (Person);
End.
Якщо динамічний об'єкт має віртуальні методи, то перед його використанням у виконавчому блоці здійснюється ініціалізація об'єкта за допомогою метода Constructor
Person^.Init;
Для зменшення громіздкості можна об'єднати в одну команду процес ініціалізації та виділення динамічної пам'яті
New (Person, Init);
Для звільнення динамічної пам'яті особливо від ієрархічного класу об'єктів зручно застосовувати спеціальний метод Destructor (деструктор), який виконує функцію “прибиральника сміття”. За згодою він має ім'я Done і як будь-які методи може унаслідуватися. Найчастіше Destructor описується як віртуальний метод
Destructor Done; Virtual;
з порожнім тілом
Destructor TPerson.Done;
Begin
End.
Для зручності виклик деструктората звільнення динамічної пам'яті об'єднується в одну команду
Dispose (Person, Done);
1.4. При вирішенні задач за допомогою ООП спочатку створюється ієрархічний клас об'єктів, причому батьківський об'єкт повинен уміщувати тільки загальні дані та методи, а дочірні об'єкти – дані та методи, які їх розширюють та уточнюють.
1.5. Приклад 1. На основі батьківського динамічного об'єкта “Персона”, віртуальний метод якого обчислює ідеальну вагу W людини за її зростом G по формулі W=G*100-100, створити два дочірні динамічні об’єкти “Жінка” й “Чоловік” та уточнити ідеальну вагу жінки та чоловіка за формулами Ww=W*0,85 та Wm=W*0,9 відповідно.
Program Weight_OOP;
Uses Crt;
{Опис об’єкта “Персона”}
Type TPerson=object
Name:string [15];
Growth:real;
Constructor Init;
Destructor Done; Virtual;
Procedure Read_Date;
Procedure Write_Date;
Function Weight:real; Virtual;
end;
Constructor TPerson.Init;
begin
Name:= ' ';
Growth:= 0.0;
end;
Destructor TPerson.Done;
begin
end;
Procedure TPerson.Read_Date;
begin
Write (' ІМ"Я? ');
Readln (Name);
Write (' ЗРІСТ, м? ');
Readln (Growth);
end;
Procedure TPerson.Write_Date;
begin
ClrScr;
Writeln (' ІМ"Я: ',Name);
Writeln (' ІДЕАЛЬНА ВАГА: ',Weight:5:1,' кГ');
end;
Function TPerson.Weight:real;
begin
Weight:=Growth*100-100;
end;
{Опис об’єкта “Жінка”}
Type TWoman= object (TPerson)
Function Weight:real; Virtual;
end;
Function TWoman.Weight:real;
begin
Weight:=TPerson.Weight*0.85;
end;
{Опис об’єкта “Чоловік”}
Type TMan= object (TPerson)
Function Weight:real; Virtual;
end;
Function Tman.Weight:real;
begin
Weight:=TPerson.Weight*0.9;
end;
Var
Woman:^TWoman;
Man:^TMan;
Ch:char;
Begin
TextColor (yellow);
TextBackGround (lightgray);
ClrScr;
New (Woman,Init);
New (Man,Init);
{Визначення статі людини}
Write (' СТАТЬ (Ч/Ж)? ');
Repeat
Ch:=ReadKey;
Until (Ch='Ж') or (Ch='ж') or (Ch='Ч') or (CH='ч');
Writeln;
{Реалізація методів у залежності від статі людини}
If (Ch='Ж') or (Ch='ж') then
with Woman^ do
begin
Read_Date;
TextColor (red);
Write_Date;
end
else
with Man^ do
begin
Read_Date;
TextColor (blue);
Write_Date;
end;
Dispose (Woman, Done);
Dispose (Man, Done);
Readln;
End.
2. ЗАВДАННЯ НА РОБОТУ
Розробити та запустити у роботу програму на мові програмування "Паскаль", яка вирішує задачу відповідно до заданого нижче варіанта.
2.1. На основі базового динамічного об'єкта, який реалізує функцію y=А*соs(D*х), створити два підлеглі динамічні об'єкти та обчислити за допомогою віртуальних методів функції y1=А*соs(D*х)+В*sin(C*х) та y2=А*соs(D*х)*(К+2) відповідно при зміні аргументу Х від нуля до 10 із кроком 0,1. Параметри функцій увести з клавіатури.
2.2. На основі базового динамічного об'єкта, який реалізує функцію у=В*(1-е-t/T1), створити два підлеглі динамічні об'єкти та обчислити за допомогою віртуальних методів функції y1=В*(1-е-t/T1)+А*соs(D*t) та y2=В*(1-е-t/T1)*sin(K*t) відповідно при зміні аргументу t від нуля до 8 із кроком 0,05. Параметри функцій увести з клавіатури.
2.3. На основі базового динамічного об'єкта, який реалізує функцію y=С-K*z, створити два підлеглі динамічні об'єкти та обчислити за допомогою віртуальних методів функції y1=(С-K*z)+А*соs(z) та y2=(С-K*z)-В*(1-е-z) відповідно при зміні аргументу Z від нуля до 20 із кроком 0,5. Параметри функцій увести з клавіатури.
2.4. На основі базового динамічного об'єкта, який реалізує функцію y=А*sin(B*х), створити два підлеглі динамічні об'єкти та обчислити за допомогою віртуальних методів функції y1=А*sin(B*х)-С*соs(2*х) та y2=А*sin(B*х)-D*х2 відповідно при зміні аргументу Х від нуля до 16 із кроком 0,2. Параметри функцій увести з клавіатури.
2.5. На основі базового динамічного об'єкта, який реалізує функцію y=D*е-t/T, створити два підлеглі динамічні об'єкти та обчислити за допомогою віртуальних методів функції y1=D*е-t/T+соs(C*t) та y2=D*е-t/T-соs(A*t) відповідно при зміні аргументу t від нуля до 12 із кроком 0,06. Параметри функцій увести з клавіатури.
2.6. На основі базового динамічного об'єкта, який реалізує функцію y=A*z, створити два підлеглі динамічні об'єкти та обчислити за допомогою віртуальних методів функції y1=A*z+В*соs(z) та y2=A*z-D*(1-е-z) відповідно при зміні аргументу Z від нуля до 10 із кроком 0,02. Параметри функцій увести з клавіатури.
2.7. На основі базового динамічного об'єкта, який реалізує функцію y=А*соs(z), створити два підлеглі динамічні об'єкти та обчислити за допомогою віртуальних методів функції y1=А*соs(z)*sin(C*z) та y2=А*соs(z)+В*z відповідно при зміні аргументу Z від нуля до 17 із кроком 0,1. Параметри функцій увести з клавіатури.
2.8. На основі базового динамічного об'єкта, який реалізує функцію y=В*(1-е-t), створити два підлеглі динамічні об'єкти та обчислити за допомогою віртуальних методів функції y1=В*(1-е-t)*соs(D*t) та y=В*(1-е-t)+соs(C*t) відповідно при зміні аргументу t від нуля до 13 із кроком 0,1. Параметри функцій увести з клавіатури.
2.9. На основі базового динамічного об'єкта, який реалізує функцію y=K*z+А, створити два підлеглі динамічні об'єкти та обчислити за допомогою віртуальних методів функції y1=(K*z+А)+соs(B*z) та y2=(K*z+А)-С*е-z відповідно при зміні аргументу Z від нуля до 4 із кроком 0,01. Параметри функцій увести з клавіатури.
2.10. На основі базового динамічного об'єкта, який реалізує функцію y=А*sin(B*х+1), створити два підлеглі динамічні об'єкти та обчислити за допомогою віртуальних методів функції y1=А*sin(B*х+1)-В та y2=А*sin(B*х+1)-(х2+С) відповідно при зміні аргументу Х від нуля до 8 із кроком 0,04. Параметри функцій увести з клавіатури.
3. КОНТРОЛЬНІ ЗАПИТАННЯ
3.1. Якими трьома властивостями характеризується об’єктно-орієнтоване програмування.
3.2. Як реалізується кожна із властивостей об’єктно-орієнтованого програмування при описі об'єкта.
3.3. Як визначається належність метода до об'єкта.
3.4. Чим відрізняються статичні та віртуальні методи.
3.5. Як описуються віртуальні методи.
3.6. Для чого служить конструктор.
3.7. Як виділяється та звільняється динамічна пам'ять для динамічних об'єктів.
3.8. Як виділяється динамічна пам'ять для об'єктів із віртуальними методами.
3.9. Для чого служить деструктор та як він описується.
Комп’ютерний практикум № 10
ФОРМАТОВАНИЙ ВВІД ТА ВИВІД ДАНИХ НА МОВІ “CІ”
Мета практикуму – вивчення методів форматованого введення та виведення інформації на мові “СІ”.
1. ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
1.1. Основні функції введення-виведення знаходяться у стандартному бібліотечному файлі stdio.h. Він підключається на початку програми за допомогою директиви компілятора #include:
#include <stdio.h>
Найпростіший механізм введення-виведення – по одному символу з клавіатури за допомогою функцій getchar() та putchar(). Інструкція c=getchar(); дозволяє присвоїти змінній с черговий введений з клавіатури символ. Інструкція putchar(c); видає значення цієї змінної на екран.
1.2. Функція printf призначена для форматованого виведення даних на екран. Синтаксис функції наступний:
printf(“керуючий рядок”,аргумент1,аргумент2,...);
Керуючий рядок вміщує об’єкти трьох типів:
-звичайні символи, які виводяться на екран;
-специфікації перетворення, кожна з яких викликає виведення на екран значення чергового аргументу зі списку аргументів;
-керуючі символи (для початку з нового рядка, табуляції, звукового сигналу та ін.).
Специфікація розпочинається символом % і закінчується символом, який задає перетворення. Між цими знаками може стояти:
- знак мінус “-”, який вказує, що параметр при виведенні на екран повинен вирівнюватися по лівому краю. Інакше - по правому;
- рядок цифр, який задає розмір поля для виведення. Крапка, яка відділяє розмір поля від наступного рядку цифр, що визначає розмір поля для виведення розрядів після коми для типів float та double;
- символ довжини l, який вказує на тип long;
Далі вказується символ типу інформації виведення (перетворення):
d - десяткове число;
o - вісімкове число;
x - шістнадцяткове число;
c - символ (тип char);
s - рядок символів (string);
e - дійсне число в експоненціальній формі;
f - дійсне число (float);
g - використовується як e і f, але виключає виведення на екран незначущих нулів;
u - беззнаковий тип (unsigned);
p - вказівник (pointer).
Якщо після % записано не символ перетворення, то він виводиться на екран.
Керуючі символи:
\a - для короткочасної подачі звукового сигналу (alarm);
\b - для переведення курсору вліво на одну позицію (back);
\n - для переходу на новий рядок (new);
\r - для повернення каретки (курсор на початок поточного рядка) (return);
\t - для горизонтальної табуляції (tabulation);
\v - для вертикальної табуляції (vertical).
Приклади використання функції printf:
printf(“\tКафедраАЕМСЕП\n%d\n”,i);
Команда виконає наступне: у поточному рядку буде зроблено відступ (табуляцію \t), далі виведено текст "КафедраАЕМСЕП" і переведено курсор на новий рядок (\n). Специфікація %d викличе виведення на екран значення змінної і у десятковому вигляді. Після цього курсор перейде на новий рядок (\n).
printf(“\ti=%ld;\nj=%d.\n”,i,j);
Команда виконає послідовно наступні маніпуляції: відступ у поточному рядку (\t), виведе текст "і=", специфікація %ld викличе виведення на екран значення змінної і у десятковому довгому вигляді, виведе текст “;”, перейде на новий рядок (\n), виведе текст “j=”, специфікація %d викличе виведення на екран значення змінної j у десятковому вигляді, поставить крапку, перемістить курсор на новий рядок.
1.3. Функція scanf призначена для форматованого введення даних з клавіатури. Вона знаходиться в бібліотечному файлі stdio.h.
Синтаксис функції наступний:
scanf(“керуючий рядок”,аргумент1,аргумент2,...);
Керуючий рядок аналогічний як і для функції printf. Якщо після % стоїть знак *, це означає заборону присвоювання.
Аргументи функції scanf на відміну від printf повинні бути вказівниками на відповідні значення (перед іменем змінної ставиться знак взяття адреси &).
Приклади використання функції scanf:
scanf(“%d %f %c %s”,&i,&j,&k,l);
Команда виконує наступне: зчитує значення, введенні з клавіатури через пропуски, змінної і в десятковому вигляді, змінної j як дійсного числа, змінної k як символу, змінної l як рядка символів. Перед l немає знаку & оскільки рядок є масивом символів, наприклад l[20], а l при цьому є адресою першого елементу масиву.
scanf(“%d %*d %d”, &i,&j);
При введення значень 5 7 9 змінній i присвоїться значення 5, j - 9, значення 7 буде проігноровано (через знак * після %).
scanf(“%d,%d”,&n,&m);
У цьому випадку інформацію необхідно вводити через кому.
Приклад 1. Продемонструвати введення та виведення інформації цілого та дійсного типів, символів та беззнакових величин.
#include <stdio.h>
main()
{
int a;
char b;
float c;
double d;
short x;
long y;
unsigned z;
scanf("%d %c %f %lf %d %ld %u",&a,&b,&c,&d,&x,&y,&z);
printf("%d %c %9.5f %19.11f\n %d %ld %u",a,b,c,d,x,y,z);
}
Цифри 9.5 для змінної c типу float в прикладі означають, що виділяється загалом 9 позицій для виведення змінної, причому 5 з них для розрядів після коми. Аналогічно 19.11 для змінної d типу double.
Приклад 2. Продемонструвати виведення рядків символів з різним вирівнюванням та форматом, та виведення дійсних чисел у форматах f, e, g.
#include <stdio.h>
main()
{
char s[30];/*задається рядок з 30 символів*/
float a=86.531;
printf("%s\n","Electrical Drive Department");
/*виведення звичайного тексту*/
printf("Input String\n");
scanf("%s",s);
/*зчитування рядка*/
printf("(20s):%20s\n",s);
/*виводить рядок на екран, вирівнювання вліво від 20-ої позиції*/
printf("(-20s):%-20s\n",s);
/*виводить рядок на екран, вирівнювання вправо від 1-ої позиції*/
printf("(20.10s):%20.10s\n",s);
/*цифра після крапки задає максимальне число символів, які необхідно*/
/*вивести з рядка при вирівнюванні вліво від 20-ої позиції*/
printf("(-20.10s):%-20.10s\n",s);
/*цифра після крапки задає максимальне число символів, які необхідно*/
/*вивести з рядка при вирівнюванні вправо від 1-ої позиції*/
printf("(.10s):%.10s\n",s);
/*з рядка буде виведено 10 символів в поле з 10 символів*/
/*зайві символи відкидаються*/
printf("%%\n");
/*приклад виведення знаку %*/
printf("a=%e\n",a);
printf("a=%f\n",a);
printf("a=%g\n",a);
/*приклади виведення дійсного числа в різних форматах*/
}
Приклад 3. Продемонструвати можливості введення даних через пропуск, без пропуску, через кому, ігнорування введених даних, обмеження кількості символів, які присвоюються масиву символів.
#include <stdio.h>
main()
{
int a,b;
char c[50],d,f;
printf("Input 3 integer and string\n");
/*введіть 3 цілих і рядок*/
scanf("%d %*d %d %s",&a,&b,c);
/*демонстрація ігнорування другої введеної змінної*/
printf("a=%d; b=%d; c=%s\n",a,b,c);
printf("Input integer and symbol without space\n");
/*введіть ціле і символ без пропуску*/
scanf("%d%c",&a,&d);
printf("a=%d; d=%c\n",a,d);
printf("Input 2 unteger devided by comma\n");
/*введіть 2 цілих, розділених комою*/
scanf("%d,%d",&a,&b);
printf("a=%d; b=%d\n",a,b);
printf("Input string\n");
/*введіть рядок*/
scanf("%3s\n",c);
/*з введеного рядка змінній с присвоюються лише 3 перші символи*/
printf("c=%s",c);
}
1.4. У випадку, коли необхідно виконати зчитування або виведення на екран рядкових змінних, доцільно використовувати функції puts() та gets() для виведення та введення відповідно, наприклад:
puts ("Electric drive");
gets (vstring);
Приклад 4. Продемонструвати зчитування рядка символів за допомогою команди gets та виведення його на екран за допомогою команди gets та виведення його на екран за допомогою команди puts.
#include <stdio.h>
main()
{
char q[40];
puts("Input string");
/*введіть рядок символів*/
gets(q);
/*зчитування рядка символів з клавіатури*/
puts(q);
/*виведення рядка символів на екран*/
}
2. ЗАВДАННЯ НА РОБОТУ
Розробити та запустити у роботу програму на мові програмування “СІ”, яка вирішує задачу відповідно до заданого нижче варіанта.
2.1. Зчитати два цілих числа a та b,та дійсне число с з клавіатури, введені через кому. Розрахувати значення виразу d=(a2+b2)/(c-b), та вивести a, b, c, d на екран у наступному форматі: для кожної змінної виділено 10 позицій; для дійсних чисел виводити 3 знаки після коми, вирівнювання по правому краю поля, виведення через пробіл.