Лабораторна робота
Тема:
Функції
Мета роботи: вивчення засобiв мови Сi для програмування проце-
дур, оволодiння прийомами складання алгоритмiв i
програм з пiдпрограмами.
Завдання 1: Майстерня отримала замовлення на виготовлення циліндричних бочок різної висоти, але діаметр основи кожної з них d=80 см. Скласти програму для визначення кількості бляхи (в квадратних одиницях ); потрібної для випуску 10 бочок висотою 1м, 15 бочок - 0.9м, 20 бочок - 0.7м. Повна поверхня циліндра дорівнює:
, де R - родіус основи.
Обчислити як процедуру-функцію.
Завдання 2: Обчислити сполучення з n елементів по m (n<m)
Обчислення факторіала виконати у вигляді підпрограми.
Короткі теоретичні відомості:
Мова Сi дозволяє використовувати лише один вид пiдпрограми:
процедуру-функцiю з параметрами. Характерною особливiстю процедури-функцiї є наявнiсть багатьох вхiдних параметрiв i одного вихiдного, який присвоюється iменi функцiї. Всi пiдпрограми повиннi
бути оголошенi в головнiй або пiдпорядкованих програмах. Оголошення процедури-функцiї має такий вигляд:
ТПЗ IПФ(СТП);,
де ТПЗ – тип значення, яке повертає процедура-функцiя;
IПФ – iм’я процедури-функцiї, iдентифiкатор;
СТП – список типiв дiйсних параметрiв.
Крiм оголошення, функцiя має бути визначена, тобто має бути вказано, що ця функцiя власне виконує. Визначення функцiї має вигляд:
ТПЗ IПФ(СФП){ОЗП;ТПФ;},
де:СФП - список формальних параметрiв i їх типiв;
ОЗП - оголошення внутрiшнiх (власних) змiнних функцiї;
ТПФ - тiло процедури, оператори та вирази.
Тiло процедури-функцiї може мiстити один або декiлька операторiв return(вираз); Його виконання приводить до завершення процедури i повернення в програму, з якої функцiя викликалася. Якщо цей оператор має вираз, то його значення присвоюється iменi процедури i є результатом її виконання. Формальнi параметри функцiї,
якщо вони є, локалiзованi в її тiлi, пам’ять пiд них дублюється.
Локалiзованими є також внутрiшнi змiннi функцiї, їх значення теж
втрачаються пiсля виходу з процедури, якщо вони не мають клас пам’ятi static. Звернення до процедури-функцiї в головнiй програмi
вiдбувається шляхом вказування її iменi, пiсля якого в круглих
дужках дається список дiйсних параметрiв.
Забороняється передавати масиви в якостi параметрiв функцiї.
Натомiсть можна використовувати вказівники на масиви. Масиви в
процедурi не дублюються.
Звернення до процедури графiчно вiдображається за допомогою
прямокутника з подвоєними бiчними сторонами.
Завдання 1
Ідентифікація змінних:
Змінна | Висота |
Діаметр | Радіус | Площа | Кількість
бочок | р
Ідентифікатор | Н | d | r | S | n | Pi
Програма:
/*Програма*/
main()
{
int n[3]={10,15,20},i;
float plos(float),H[3]={1,0.9,0.7},S=0;
clrscr();
for(i=0;i<3;i++)
{
S+=plos(H[i])*n[i];
}
printf("Потрiбно %.3f м.кв.бляхи",S);
getch();
}
/*Функцiя*/
float plos(float H)
{
float Pi=3.14,d=0.8,r,y;
r=d/2;
y=2*Pi*r*(H+r);
return y;
}
Результати: Потрiбно 139.416 м.кв.бляхи.
Завдання 2
Ідентифікація змінних:
Змінна | n | m | x!
Ідентифікатор | Сnm | n | m | fact(x)
Програма:
/*Програма*/
main()
{
int n,m;
float fact(int),Cnm;
clrscr();
vvid:printf("Введiть n=");
scanf("%d",&n);
printf("Введiть m=");
scanf("%d",&m);
if(n>=m)
{
printf("Невiдповiдає умовi - n<m !!!\nПовторiть ввiд!\n");
goto vvid;
}
Cnm=fact(n)/fact(m)/fact(n-m);
printf(" C%d%d=%f",n,m,Cnm);
getch();
}
/*Функцiя-обчислення факторiала*/
float fact(int x)
{
int y,z=1;
if(x>0)for(y=1;y<=x;y++)z*=y;
else
if(x<0)for(y=-1;y>=x;y--)z*=y;
else
z=1;
return z;
}
Результати: C01=-1.000000; C02=0.250000; C03=-0.027778
C12=-0.500000; C13=0.083333; C14=-0.006944 і т.д.
Висновок: Я вивчив засоби мови Сi для програмування процедур, оволодiв прийомами складання алгоритмiв i програм з пiдпрограмами.
Блок-схема 1
Блок-схема 2