МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
Національний університет “Львівська політехніка”
Кафедра ІСМ
Звіт
Лабораторна робота №10
“Функції мови Сі та багато файлова організація програми”
Львів – 2007
Мета роботи: Навчитися розробляти функції мови Сі, як основні елементи структурного програмування; освоїти способи обміну даними між функціями. Навчитися створювати проект багато файлової програми з використанням бібліотек функцій.
Методичні вказівки:
Кожне завдання складається із двох варіантів, розміщених у частинах 1 та 2.
У завданнях першої частини необхідно:
Розробити одно файлову програму з використанням функцій. У випадку багато файлової програми забезпечити створення одного файлу за допомогою директив препроцесора #include. У зібраній програмі повинна бути тільки одна функція main().
На початку файла програми розмістити: 1) директиви препроцесора; 2) прототипи функцій; 3) глобальні оголошення; 4) функцію main(); 5) розроблені функції.
Усі дії (введення, перетворення, виведення даних) оформити у вигляді окремих функцій. У функції main() виконати локальні оголошення та розмістити виклики усіх потрібних для роботи програми функцій.
Передачу даних між функціями організувати за допомогою списку фактичних - формальних параметрів, або явного повернення результату функції. При необхідності у програмі бажано здійснювати глобальні оголошення типів, а не констант чи змінних.
Необхідно пам’ятати, що передача параметрів у функцію здійснюється “по значенню”, тобто у стек записуються копії фактичних параметрів. Для повернення даних з функції через список параметрів необхідно використати вказівники. Масиви та рядки завжди передаються/повертаються через вказівники.
У завданнях другої частини необхідно:
Розробити багато файлову (не менше двох файлів) програму з використанням функцій. За допомогою ключового слова extern оголосити зовнішні глобальні дані, визначені в інших файлах. Усі функції є такими по замовчуванню.
Розробити файли включення з прототипами бібліотечних функцій та оголошеннями типів; під’єднати їх до файлів програми (де це потрібно).
Відкомпілювати файл, у якому відсутня функція main(). За допомогою програми tlib.exe утворити бібліотечний файл з розширенням .lib . Вивчити ключі програми tlib.exe.
Утворити проект програми, використавши меню інтегрованого середовища Project. У проект можна включати текстові файли програми на мові C/C++, об’єктні та бібліотечні файли. Проекти зберігаються як файли з розширеннями .prj. У проекті повинна бути тільки одна функція main().
Відкомпілювати проект програми та отримати результат. При відсутності помилок редактор зв’язків сформує з файлів проекту автономний exe-код програми.
Частина 1. Функції та одно файлова організація програми
Написати функцію, яка знаходить мінімальний елемент вектора дійсних чисел. Використовуючи цю функцію, виконати сортування одновимірного масиву дійсних чисел по зростанню значень елементів. Для сортування знайти мінімальний елемент та записати його на місце першого елемента масиву. Серед елементів, що залишилися, знайти наступний мінімальний елемент і записати його на друге місце і т. д.
Частина 2. Функції та багато файлова організація програми
Написати функцію, яка знаходить мінімальний елемент вектора дійсних чисел. Використовуючи цю функцію, виконати сортування одновимірного масиву дійсних чисел по зростанню значень елементів. Для сортування знайти мінімальний елемент та записати його на місце першого елемента масиву. Серед елементів, що залишилися, знайти наступний мінімальний елемент і записати його на друге місце і т. д.
Текст програми 1
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define n 10
void main()
{
clrscr();
int minimal(int a[]),k,z,j,b[n],a[]={5,9,12,3,2,4,6,7,8,10};
for(j=0;j<n;j++)
{
k=minimal(a);
if(j==0) z=k;
b[j]=a[k];
a[k]=100+j;
printf("b[%d]=%d;\n",j,b[j]);
}
printf("Min element a[%d]=%d\n",z,b[0]);
getch();
}
int minimal(int x[])
{
int i,min=100,numb;
for(i=0;i<n;i++) {if(min>x[i]) {min=x[i]; numb=i;} }
return numb;
}
Текст програми 2
10_2.cpp
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define n 10
void main()
{
clrscr();
int minimal(int a[]),k,z,j,b[n],a[]={5,9,12,3,2,4,6,7,8,10};
for(j=0;j<n;j++)
{
k=minimal(a);
if(j==0) z=k;
b[j]=a[k];
a[k]=100+j;
printf("b[%d]=%d;\n",j,b[j]);
}
printf("Min element a[%d]=%d\n",z,b[0]);
getch();
}
10_21.cpp
#include<stdio.h>
#define n 10
int minimal(int x[])
{
int i,min=100,numb;
for(i=0;i<n;i++)
{
if(min>x[i]) {min=x[i]; numb=i;}
}
return numb;
}
Результати роботи програми:
Обидві програми виконують однакові дії, тому й результати будуть однаковими.