Символи кодової таблиці ascii 6 страница
2.2. Зчитати два цілих числа k та m,та дійсне число p з клавіатури, введені через пробіл. Розрахувати значення виразу u=(k-m2)/(p+k+m), та вивести k, m, p, u на екран у наступному форматі: для кожної змінної виділено 15 позицій; для дійсних чисел виводити 1 знак після коми, вирівнювання по лівому краю поля, виведення через кому.
2.3. Зчитати два дійсних числа j та u,та ціле беззнакове число m з клавіатури, введені через крапку з комою ;. Розрахувати значення виразу l=(j+u-m)/(ju-m2), та вивести j, u, m, l на екран у наступному форматі: для кожної змінної виділено 8 позицій; для дійсних чисел виводити 5 знаків після коми, вирівнювання по лівому краю поля, виведення через кому.
2.4. Зчитати 4 символи, введені через кому. Вивести числові коди прочитаних символів на екран у наступному форматі: для кожної змінної виділено 3 позиції, вирівнювання по правому краю поля, виведення через крапку з комою.
2.5. Зчитати три цілих беззнакових числа a, b, c, введених через знак /;. Розрахувати значення виразу k=(a+b+c), та вивести на екран a,bу вісімковій формі, kтас–у шістнадцятковій у наступному форматі: для кожної змінної у вісімковій формі виділено 8 позицій, у шістнадцятковій – 4 позиції, вирівнювання по правому краю поля, виведення через пробіл.
2.6. Зчитати 6 цілих коротких числа, введених через пробіл. Вивести числа на екран у шістнадцятковій формі у наступному форматі: дві змінні у одному рядку, на початку рядку горизонтальна табуляція, для кожної змінної виділено 5 позицій, вирівнювання по правому краю поля, виведення через знак /.
2.7. Зчитати 4 символи та одне ціле беззнакове число, що записані одним рядком. Вивести змінні на екран у вісімковій формі у наступному форматі: на початку рядку горизонтальна табуляція, для кожної змінної виділено 6 позицій, вирівнювання по лівому краю поля, виведення через кому.
2.8. Зчитати поточну дату із клавіатури у наступному форматі день/місяць/рік як змінні цілого типу. Вивести дату у форматі: місяць день рік, із одним вільним рядком між введеним та виведеним значенням.
2.9. Зчитати дійсні числа a, b, c, записані через знак -. Розрахувати значення d=(a2+b2)/c. Вивести змінні на екран у наступному форматі: одна змінна у рядку, на початку рядку горизонтальна табуляція, для кожної змінної виділено 10 позицій, 5 позицій після коми, вирівнювання по правому краю поля, виведення через пробіл.
2.10. Зчитати 6 символів,записаних одним рядком. Вивести десяткові коди змінних на екран у наступному форматі: дві змінні у рядку, для кожної змінної виділено 20 позицій, вирівнювання по правому краю поля, виведення через кому.
3. КОНТРОЛЬНІ ЗАПИТАННЯ
3.1. Які команди слугують для форматованого введення-виведення.
3.2. Який формат керуючого рядка у командах форматованого введення-виведення.
3.3. Як змінити ширину поля, що відводиться для виведення змінної
3.4. Які команди застосовуються для введення-виведення рядків.
3.5. За допомогою яких команд реалізується введення та виведення окремих символів.
Комп’ютерний практикум № 11
ОПЕРАТОРИ ОРГАНІЗАЦІЇ ПЕРЕХОДІВ НА МОВІ "СІ"
Мета практикуму– розробка програмного забезпечення на мові програмування "СІ" із використанням операторів умовного переходу.
1. ТЕОРЕТИЧНІ ВІДОМОСТІ
1.1. Для реалізації умовних переходів у мові "Сі" використовується оператор if. Структура оператора має вигляд
if (<умова>) <оператор1>; else <оператор2>;
Якщо <умова>, що знаходиться в дужках після оператора if, істинна, то виконується <оператор 1>, в іншому разі – <оператор 2>. Else та <оператор 2> можуть бути відсутніми. Якщо в тілі умови необхідно виконати більше одного оператора, то вони беруться у фігурні дужки {}.
Приклад 1.З клавіатури вводяться два цілих числа a і b. Необхідно порівняти їх значення і видати результат порівняння на екран.
#include <stdio.h>
main()
{int a,b;
puts("Input a and b");
/*введіть a і b*/
scanf("%d %d",&a,&b);
if (a>b) puts ("a>b");
else {if (a==b) puts ("a=b");
else puts("a<b");}
}
Приклад 2.Вирахувати значення функції y={ax2+bx+c, якщо x>2; ax2-bx+c, якщо x<2; a+b+c, якщо x=2;}.
#include <stdio.h>
main()
{int a,b,c,x,y;
printf("\nInput a b c x\n");
/*введіть a b c x*/
scanf("%d %d %d %d",&a,&b,&c,&x);
if (x>2) y=a*x*x+b*x+c;
else {if (x<2) y=a*x*x-b*x+c;
else y=a+b+c;}
printf("y=%d",y);
}
1.2.Для організації умовного переходу по одному із багатьох варіантів доцільно використовувати оператор switch. Він має наступний формат:
Switch (вираз)
{
case константи_1: інструкції_1;
case константи_2: інструкції_2;
………………………………………………………………………………
case константи_n: інструкції_n;
Default: інструкції
}
У операторі switch перевіряється умова рівності виразу одному із наборів констант константи_1,константи_2,…,константи_n,і виконання відповідного набору інструкцій. У випадку, коли жодна із умов не виконується, відбувається перехід на вітку default.
Приклад 3.Реалізуватинайпростіший калькулятор.З клавіатури вводиться значення a, операція (+ або -, або *, або %) у вигляді символу (тип char). За допомогою оператора switch виконати операцію і вивести значення виразу на екран.
#include <stdio.h>
main()
{int a,b,y;
char znak;
printf("\n\tInput a, + or - or * or %, b (without spaces between symbols\n\n");
/*введіть a, + або - або * або %, b (без пропусків між символами)*/
scanf("%d%c%d",&a,&znak,&b);
switch(znak)
{case '+': y=a+b; break;
case '-': y=a-b; break;
case '*': y=a*b; break;
case '%': y=a%b; break;
default: printf("Error"); break;}
if((znak=='+')||(znak=='')||(znak=='*')||
(znak=='%')) printf("a%cb=%d",znak,y);
}
2. ЗАВДАННЯ НА РОБОТУ
Розробити та перевірити роботу програми на мові "СІ", яка вирішує задачу відповідно до заданого нижче варіанта.
2.1. Визначити, чи має студент стипендію, якщо середній бал більший 4, а кількість предметів, що були здані у додаткову сесію, не більша 2. У разі, якщо студент є сиротою, він має право на стипендію тільки за умови середнього балу, більшого 3.5.
2.2. Розрахувати корені квадратного рівняння, AX2+BX+C=0, коефіцієнти якого вводяться з клавітури. Якщо дискримінант менший нуля, вивести відповідне повідомлення, та завершити виконання програми.
2.3. Створити програму, яка визначає, чи паралельні дві прямі A1X+B1Y+C1=0 та А2X+B2Y+C2=0.
2.4. Створити програму, яка визначає, чи перпендикулярні дві прямі, що задані у вигляді Y1=K1X+B1, Y2=K2X+B2.
2.5. Задано прямокутник АBCD із вершинами А (X1;Y1) та С (X2;Y2), що відповідають головній діагоналі пряокутника. Визначити, чи лежить точка K (Xk;Yk) в межах прямокутника.
2.6. Задано кільце з центром у точці А (Xa;Ya), та зовнішнім та внутрішнім радіусом R1 та R2 відповідно. Визначити, чи належить точка B (XB;YB) кільцю.
2.7. Задано прямокутник АBCD із вершинами А (X1;Y1) та С (X2;Y2), що відповідають головній діагоналі прямокутника. Визначити, чи належить точка K (X3;Y3), сторонам прямокутника.
2.8. Задано рядок символів, що вводиться із клавіатури. Визначити кількість голосних букв у рядку. Символом закінчення рядка слугує пробіл.
2.9. Задано круг з центром С (XC;YC) радіусом R. Визначити, чи належить точка А (XA;YA) сектору круга, який визначається кутами α1, α2.
2.10. Задано трикутник ABC, координати вершин якого A (XA;YA), B (XB;YB), C (XC;YC). Визначити, чи належить точка D (XD;YD) площині трикутника.
3. КОНТРОЛЬНІ ЗАПИТАННЯ
3.1. Який оператор застосовується для реалізації умовного переходу.
3.2. Який оператор застосовується для організації умовного переходу по одному із багатьох варіантів.
3.3. Для чого слугує ключове слово else.
3.4. Для чого слугує ключове слово default.
3.5. З якою метою при застосуванні оператора switch застосовуються оператори break.
Комп’ютерний практикум № 12
ОРГАНІЗАЦІЯ ЦИКЛІВ НА МОВІ "СІ"
Мета практикуму– розробка програмного забезпечення на мові програмування "СІ" з реалізації алгоритмів циклічних розрахунків.
1. ТЕОРЕТИЧНІ ВІДОМОСТІ
1.1. Якщо кількість повторень у циклі відома заздалегідь, доцільно використовувати оператор організації циклів for. Структура оператора має наступний вигляд:
for(<вираз1>;<вираз2>;<вираз3>)<тіло циклу>;
Вираз 1 слугує для присвоєння початкового значення керуючої змінної; вираз 2 – для перевірки виконання продовження циклу; вираз 3 – для зміни керуючої змінної.
Будь-який з трьох виразів у циклі for може бути відсутнім. Проте, крапка з комою повинна залишатись.
Для організації нескінченного циклу може бути використаний вираз:
for(;;) <тіло циклу>;
Якщо тіло циклу складається більш ніж з одного оператору, то воно виділяється фігурними дужками {}.
Приклад 1. За допомогою оператора for вивести на екран тричі текст “Electrical Drive”, розрахувати факторіал n!=1*2*3*4*…*n, та показати процес його обчислення.
#include <stdio.h>
main( )
{int i,j=1,n;
printf("\n");
for(i=1;i<=3;i++)printf("Electrical Drive\t");
printf("\nInput value of n\n");
/*введіть величину n*/
scanf("%d",&n);
for(i=1;i<=n;i++) j*=i;
printf("n!=%d",j);
j=1;
printf("\n");
for(i=1;i<=n;i++)printf("%d\t",(j*=i));}
1.2. У випадку, коли кількість повторень у циклі заздалегідь не відома, доцільно використовувати оператор циклів while. Структура оператора має наступний вигляд:
while(<умова>) <тіло циклу>;
Тіло циклу виконується доти, доки умова істинна.
Приклад 2. Скласти програму, яка дозволяє визначити порядковий номер першої введеної букви R в послідовності символів, використовуючи оператор while.
#include <stdio.h>
main( )
{int i=1;
printf("\nInput string of symbols\n");
/*введіть рядок символів*/
while((getchar())!='R')i++;
printf("Symbol R is %d",i);
/*символ R є*/
}
1.3. У циклі do-while, на відміну від циклів for та while, спочатку виконується тіло циклу, а вже потім виконується перевірка істинності умови. Таким чином, тіло циклу do-while виконується принаймі один раз. Структура оператора має наступний вигляд:
do <тіло циклу> while(<умова>);
Приклад 3. Скласти програму, яка дозволяє визначити порядковий номер першої введеної букви R в послідовності символів, використовуючи оператор do while.
#include <stdio.h>
main( )
{int i=0;
printf("\nInput string of symbols\n");
/*введіть рядок символів*/
do i++;
while((getchar())!='R');
printf("Symbol R is %d",i);
/*виведення номера символу R */
}
1.4. При роботі із циклами for, while, do-while зручно використовувати оператори breakтаcontinue,які зазвичай використовуються із оператором умовного переходу if. Оператор breakзабезпечуєнегайний вихід із циклу, а continue викликає зупинку поточної ітерації та перехід до наступної.
1.5. У мові "Сі" також реалізовано оператор безумовного переходу goto, який має наступний формат:
goto <мітка>;
Перед оператором, на який здійснюється перехід, ставиться мітка, яка відокремлюється від оператора двокрапкою:
<мітка>:<оператор>;
Необхідно відмітити, що використання оператора безумовного переходу goto може призвести до ускладнення розуміння програми, тому доцільно уникати її застосування;
Приклад 4. Написати програму, яка реалізує виведення на екран цілих чисел від 1 до 9
#include <stdio.h>
int main(void)
{int i;
i = 1;
again:
printf("%d ", i);
i++;
if(i<10)goto again;
return 0;
}
2. ЗАВДАННЯ НА РОБОТУ
Розробити та запустити у роботу програму на мові програмування "Сі", яка вирішує задачу відповідно до заданого нижче варіанта.
2.1. Задана квадратна матриця n-го порядку. Ввести порядок та елементи матриці з клавіатури. Знайти мінімальний додатний елемент, розташований в області згідно рисунка 1а. Вивести результат екран.
2.2. Задана квадратна матриця n-го порядку. Ввести порядок та елементи матриці з клавіатури. Знайти максимальний від’ємний елемент, розташований в області згідно рисунка 1б. Вивести результат на екран.
2.3. Задана квадратна матриця n-го порядку. Ввести порядок та елементи матриці з клавіатури. Знайти суму елементів, розташованих в області згідно рисунка 1в.
2.4. Задана квадратна матриця n-го порядку. Ввести порядок та елементи матриці з клавіатури. Знайти максимальний елемент, розташований в області згідно рисунка 1г.
Рисунок 1а Рисунок 1б Рисунок 1в Рисунок 1г
2.5. Розрахувати значення кусково-заданої функції на інтервалі від 0 до 2π, з кроком 0.05. Вивести результати у вигляді таблиці, виведення організувати поекранно, по натисканню довільної клавіші.
2.6. Розрахувати значення кусково-заданої функції на інтервалі від 0 до π, з кроком 0.02. Вивести результати у вигляді таблиці, виведення організувати поекранно, по натисканню довільної клавіші.
2.7. Розрахувати значення кусково-заданої функції на інтервалі від 0 до 10, з кроком 0.1. Вивести результати у вигляді таблиці, виведення організувати поекранно, по натисканню довільної клавіші.
2.8. Розрахувати значення кусково-заданої функції на інтервалі від 0 до 20, з кроком 0.4. Вивести результати у вигляді таблиці, виведення організувати поекранно, по натисканню довільної клавіші.
2.9. Розрахувати значення кусково-заданої функції на інтервалі від 0 до 1, з кроком 0.01. Вивести результати у вигляді таблиці, виведення організувати поекранно, по натисканню довільної клавіші.
2.10. Розрахувати значення кусково-заданої функції на інтервалі від 0 до 5, з кроком 0.1. Вивести результати у вигляді таблиці, виведення організувати поекранно, по натисканню довільної клавіші.
3. КОНТРОЛЬНІ ЗАПИТАННЯ
3.1. Який оператор застосовується для реалізації циклу, кількість ітерацій в якому відома.
3.2. Які оператори застосовується для реалізації циклу, кількість ітерацій в якому не відома.
3.3. Яким чином можна впливати на виконання поточної ітерації.
3.4. Який синтаксис має оператор безумовного переходу.
3.5. В чому полягає різниця між операторами while та do-while.
Комп’ютерний практикум № 13
ОДНОВИМІРНІ ТА ДВОВИМІРНІ МАСИВИ НА МОВІ "СІ"
Мета практикуму– вивчення методів побудови та обробки одновимірних та двовимірних масивів на мові “СІ”.
1. ТЕОРЕТИЧНІ ВІДОМОСТІ
1.1. За допомогою одновимірних та двовимірних масивів зручно обробляти структури інформації, всі елементи яких належать до одного типу, наприклад, вектори та таблиці. Оголошення масиву містить тип елементів, ім’я масиву, та кількість його елементів, що записані у квадратних дужках [], наприклад:
int a[100];
char b[30];
Індексація елементів розпочинається з 0 : a[0], a[1], …,a[n-1]. Тобто, в масиві зі ста елементів індекси змінюються від 0 до 99.
Двовимірний масив представляється як одновимірний, елементи якого теж є масивами, наприклад,
char a[10][20];
Необхідно пам’ятати, що спочатку змінюється крайній правий індекс. За допомогою двовимірних масивів зручно обробляти таблиці даних, при цьому перший індекс масиву є номером рядка, а другий – номером стовпця, наприклад, А[5][9] – елемент, який знаходиться у 6 рядку, 10 стовпці матриці.
1.2. Існує сильний взаємозв’язок між вказівниками і масивами. Будь-яка дія, яка досягається індексуванням масиву, може бути виконана за допомогою вказівників. Нехай задано масив:
int a[5];
який містить 5 елементів a[0], a[1], a[2], a[3], a[4].
Якщо int *y;–вказівник на змінну цілого типу, тоy=&a[0];– вказівник на нульовий елемент масиву a[0]. Оскільки саме ім’я масиву є адресою його нульового елементу, то інструкцію y=&a[0]; можна записати у вигляді y=a;.
Тоді елемент a[i] можна представити як *(a+i). Якщо y вказівник, то y[i] можна представити *(y+i).
Між іменем масиву і відповідним вказівником є одна відмінність. Вказівник – це змінна. З ним допустимі операції типу y=a; y++;. Ім’я масиву – константа. Тому конструкції типу a=y; a++; z=&a; використовувати неможливо, оскільки значення константи стале і не може бути змінено.
Не можна порівнювати або застосовувати в арифметичних операціях вказівники на різні масиви. Будь-яку адресу можна перевіряти на рівність чи нерівність значенню NULL, яке записується замість 0. Вказівники на елементи одного масиву можна віднімати. Тоді результатом буде число елементів масиву, розміщених між вказівниками.
Приклад 1.Впорядкувати рядок із 10 цілих чисел, які вводяться з клавіатури через пропуски, по зростанню.
#include <stdio.h>
main()
{int m[10],i,n,k,ind;
puts("\nInput string of 10 integer through the spaces");
/*введіть рядок із 10 цілих чисел через пропуски*/
for(i=0;i<10;i++)
scanf("%d",&m[i]);
for(n=9;n>=0;n--)
{k=-32768; /*найменше можливе ціле число*/
for(i=0;i<=n;i++)
if(m[i]>k)
{k=m[i];ind=i;}
m[ind]=m[n];m[n]=k;
}
puts("Constructed string");/*впорядкований рядок*/
for(i=0;i<10;i++) printf("%d ",m[i]);
}
Впорядкування відбувається наступним чином. З поміж усіх 10 елементів знаходиться найбільший і переміщується на 10 позицію. 10-й елемент переміщується на місце максимального. Далі проводиться аналогічна процедура для перших 9 елементів. І так далі, поки не залишиться один елемент.
Приклад 2. Створити масив з п'яти елементів. Кожен з елементів є рядком літер. Впорядкувати масив за зменшенням кодів першої букви рядка. Зв’язок між вказівниками та рядками до і після впорядкування представлено на рис. 1.1.
Рис. 1.1. Зв’язок між вказівниками та рядками до і після впорядкування
#include <stdio.h>
main()
{int i,j,q,ind[5]={0,0,0,0,0};
char p, s[5][20], *m[5];
printf("\nInput 5 raws of symbols\n");
/*введіть 5 рядків символів*/
for(i=0;i<5;i++){printf("Input raw\n");
/*введіть рядок*/
scanf("%s",s[i]);
m[i]=&s[i][0];}
for(i=0;i<5;i++)
printf("Raw %d address of raw - %p\t%s\n",i,m[i],m[i]);
/*виведення на екран номеру рядка, його адреси та вмісту*/
for(i=0;i<5;i++)
{p='A';q=0;
for(j=0;j<5;j++)
if (s[j][0]>=p && ind[j]==0)
{p=s[j][0]; q=j;}
ind[q]=1;
m[i]=&s[q][0];}
puts("\nOrdered raws");/*впорядковані рядки*/
for(i=0;i<5;i++)
printf("Raw %d\t%p\t%s\n",i,m[i],m[i]);
/*виведення на екран номеру рядка, його адреси та вмісту*/}
2. ЗАВДАННЯ НА РОБОТУ
2.1. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Замінити елементи з парними індексами середнім арифметичним значенням рядка, в якому знаходяться дані елементи. Вивести на екран задану та результуючу матрицю.
2.2. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Замінити елементи, сума індексів яких кратна 3, максимальним значенням стовпця, в якому знаходяться дані елементи. Вивести на екран задану та результуючу матрицю.
2.3. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Побудувати нову матрицю, кожен елемент якої дорівнює меншому із відповідних елементів вихідної та транспонованої матриці. Вивести результат на екран.
2.4. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Видалити рядок матриці, номер якого задається з клавітури. При цьому всі рядки, які знаходяться під заданим, зсуваються на одну позицію вгору, а останній рядок заповнюється мінімальними елементами стовпців вихідної матриці. Вивести задану та результуючу матрицю на екран.
2.5. Дано вектор розміром n (n<=20), елементи якої задаються з клавітури. Знайти максимальний елемент, який повторюється більше одного разу.
2.6. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Побудувати нову матрицю, кожен елемент якої дорівнює сумі елементів, які знаходяться навколо нього. Вивести задану та результуючу матрицю на екран.
2.7. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Видалити стовпець матриці, номер якого задається з клавітури. При цьому всі стовпці, які знаходяться справа від заданого, зсуваються на одну позицію вліво, а останній рядок заповнюється максимальними елементами стовпців вихідної матриці. Вивести задану та результуючу матрицю на екран.
2.8. Дано число n та квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Поміняти місцями рядок та стовпець матриці. Вивести задану та результуючу матрицю на екран.
2.9. Дано два вектори розміром n (n<=20), елементи якої задаються з клавітури. Впорядкувати перший вектор за зростанням, другий – за спаданням. Побудувати вихідний вектор, кожен елемент якого дорівнює мінімальному із елементів впорядкованих векторів.
2.10. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Замінити нулями всі елементи матриці, величина яких більша за середнє арифметичне стовпця, в якому знаходиться даний елемент.
3. КОНТРОЛЬНІ ЗАПИТАННЯ
3.1. Як оголошуються одновимірні та двовимірні масиви.
3.2. Який зв’язок існує між масивами та вказівниками.
3.3. З якого елемента починається індексація масиву.
3.4. Який зв’язок існує між таблицями та масивами.
Комп’ютерний практикум № 14
ЗАПИСИ, ВКЛАДЕНІ ЗАПИСИ, МАСИВИ ЗАПИСІВ НА МОВІ "СІ"
Мета практикуму– розробка програмного забезпечення на мові "СІ" з використанням записів, вкладених записів, масивів записів.
1. ТЕОРЕТИЧНІ ВІДОМОСТІ
1.1. Для записів в "СІ" використовують також термін "структура". Оголошення запису здійснюється за допомогою ключового слова struct, за яким записується його тип і перелік елементів, які беруться в фігурні дужки, наприклад,
struct тип{тип елементу 1 ім’я елементу 1;
тип елементу 2 ім’я елементу 2;
...............................
тип елементу n ім’я елементу n;};
Іменем елементу може бути будь-який ідентифікатор. В одному рядку можна записувати через кому декілька ідентифікаторів одного типу, наприклад,
struct date{int day;
int month;
int year;};
Одразу ж за фігурною дужкою можуть задаватися змінні даного типу, наприклад,
struct date{…} a,b,c;
При цьому виділяється відповідний об’єм пам’яті. При описі без наступного списку ніякої пам’яті не виділяється, а задається форма запису. Далі ім’я типу можна використовувати для оголошення запису, наприклад,
date a;
При необхідності записи можна ініціалізувати, розміщуючи за оголошенням перелік початкових значень елементів. Дозволяється розміщувати записи один в одному, наприклад,
struct pupil{char name[15],
firstname[15];
struct date borndate;
int class, age;};
Після введення типів date і pupil можна оголошувати змінні, значення яких належать цим типам, наприклад,
struct pupil pupils[50];