17120

Розробка програм із багатофайлової структурою. Заголовні файли. Класи пам'яті перемінних і функцій

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота № 29 Тема: Розробка програм із багатофайлової структурою. Заголовні файли. Класи пам'яті перемінних і функцій. Ціль роботи: ознайомитися з написанням програм із багатофайлової структурою заголовними файлами вивчити класи пам'яті перемінних і функц

Украинкский

2013-06-29

88.5 KB

1 чел.

Лабораторна робота № 29

Тема: Розробка програм із багатофайлової структурою. Заголовні файли. Класи пам'яті перемінних і функцій.

Ціль роботи: ознайомитися з написанням програм із багатофайлової структурою, заголовними файлами, вивчити класи пам'яті перемінних і функцій, навчитися створювати модульні програми і заголовні файли. Вивчити область дії і час життя перемінних і функцій з різними класами пам'яті.

Обладнання: ПК,ПО Borland C++

Теоретичні відомості

Керування багатофайлової проектами

Оскільки більшість програм складається з декількох файлів, бажано мати можливість автоматичної ідентифікації тих файлів, що повинні бути перекомпільовані і скомпоновані. Ці і багато інших обов'язків виконує убудований адміністратор (менеджер) проектів системи Borland C.

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

імена усіх файлів, що входять у проект;

шляху для пошуку файлів;

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

які компілятори і параметри командного рядка повинні використовуватися при створенні кожної з частин програми;

куди варто помістити результуючу програму;

розмір коду, розмір даних і число рядків, отриманих у результаті останньої компіляції.

Використання адміністратора проектів

Використання адміністратора проектів не представляє утруднень. Для побудови проекту випливає:

вибрати ім'я файлу проекту (за допомогою команди Project|Open Project);

додати до проекту імена вихідних файлів (за допомогою команди Project| Add Item);

задати системі Borland C компіляцію файлу (за допомогою команди Compile|Make EXE).

Потім, коли в меню Project стануть доступні команди ведення проекту, можна:

додавати імена файлів у чи проект видаляти їх з нього;

задавати параметри файлу, що входить у проект;

переглядати уміст файлів, включених у конкретний проект.

Приклад роботи з адміністратором проектів.

Мається програма, що складається з основного вихідного файлу з ім'ям mymain.c, додаткового файлу myfuncs.c, що містить визначення функції і дані, звертання до яких маються в основному файлі, і файлу myfuncs.h, де знаходяться оголошення функцій.

Файл mymain.c виглядає в такий спосіб:

#include <stdio.h>         // заголовний файл у стандартному каталозі

#include "myfuncs.h"    // заголовний файл в активному каталозі

main (int argc, char *argv[ ]) // передача у функцію main() параметрів з //навколишнього середовища: argc – кількість параметрів, argv[i] - масив строкових //параметрів, розділених пробілом, argv[об] – ім'я програми

{

char *s;                                  // клас пам'яті за замовчуванням auto

if (argc > 1)

s = argv[1];                           // вибір другого строкового параметра з масиву

else

s = " уселеної";                // ініціалізація покажчика строковою константою

printf("%s %s.\n",GetString(),s);  // висновок результуючої роботи функції

// GetString()  і рядка, зв'язаної з покажчиком s     

}

Файл myfuncs.c виглядає в такий спосіб:

char ss[] ="Притулок на границі";   // масив ss[ ] проініціалізованні строкової

// константою

char *GetString(void);        // визначення функції

{

return ss;    // доступ до масиву з функції дозволений, тому що клас пам'яті по

// умовчанню extern

}

А файл myfuncs.h виглядає в такий спосіб:

extern char *GetString(void);  // клас пам'яті глобальний - extern.

Приклад

/*    ЗАНЯТТЯ N18

lab18.cpp  -  Основний файл проекту

  Розробив Петров Ю.В.

Оголосити глобальні перемінні r (extern) і f (extern і static),

а також локальні перемінні.

Оголосити в окремому файлі функції, що виконують роботу з перемінними

с різними класами пам'яті. Визначення функцій також розмістити

в окремих файлах. Виконати ініціалізацію перемінних. Вивести

значення розрахованих глобальних і локальних перемінних на екран */

#include <iostream.h>

#include <conio.h>

#include "my_18.h"

int r=5;         //Глобальна перемінна r

extern float f;  //Глобальна перемінна f = 0

void main()

{ auto int r; // Локальна перемінна (auto) r

 r = Sum_Variable(4, 5); //Функція оголошена у файлі "my_18.h" r=9

 clrscr();

 cout << "Локальна (auto) r=\t" << r << " Глобальна r="<< ::r << endl;

 r+=10;                       //Локальна перемінна    r=19

 ::r = Sum_Variable(4, 3);    //Глобальна перемінна ::r=7

 cout << "Локальна (auto) r=\t" << r << " Глобальна r=\t"<< ::r << endl;

 cout << "Глобальна f=" << f;

 cout << endl << " Локальна (auto)     f=\t" << Function_1()

       << " Статична (static) f=\t" << Function_2();

 cout << endl << " Локальна (auto)     f=\t" << Function_1()

       << " Статична (static) f=\t" << Function_2();

 cout << endl << " Локальна (auto)     f=\t" << Function_1()

       << " Статична (static) f=\t" << Function_2();

 getch();

}

/* Локальна (auto) r=  9   Глобальна r= 5

  Локальна (auto) r= 19   Глобальна r= 7

  Глобальна       f= 0.2

  Локальна (auto) f= 8    Статична (static) f= 2

  Локальна (auto) f= 8    Статична (static) f= 3

  Локальна (auto) f= 8    Статична (static) f= 4   */

//lab18f1.cpp – перший допоміжний файл проекту

// Оголошення перемінної r і визначення функцій

extern r;          // Глобальна перемінна r

float Function_1()

{ auto float f= r; // Локальна перемінна f

 return ++f;

}

int Sum_Variable(int a, int b)

{return a + b;

}

// lab18f2.cpp – другий допоміжний файл проекту

//Визначення функції

static float f=1;//Статична  перемінна (static) f

float Function_2()

{  return ++f;

}

//my_18.h – заголовний файл

//Оголошення перемінних і функцій

int Sum_Variable(int, int);

float Function_1();

float Function_2();

static float f = 0.2;

Приклад програми на С++

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

Проект повинний містити:

  •  оголошення і використання глобальних і локальних перемінних;
  •  передача глобальних даних як параметри функцій;
  •  перевизначення глобальних даних усередині функцій;
  •  виклик з допоміжного файлу зовнішньої функції;
  •  виклик з основного файлу зовнішніх функцій;
  •  перевизначення функцій у допоміжних файлах.

Індивідуальні завдання знаходяться в таблицях  18.1 і  18.2

Варіанти

Структура проекту

1-10

основний файл

2 допоміжних файли

заголовний файл

Варіант

локальна функція

зовнішня функція

переопреде
ленна
функція

локаль
ні дані

зовнішні дані

переопре
ділені
дані

6,16,26

cdecl auto int first(int, float)

extern near void * second
(int *,float *)

static near double * first(void, …)

auto long int var1

float var2

static double var1

#include<iostream.h>

#include"mainf.h"

void main()

{cout<<"Vvedite k,l,var2: ";

cin>>k>>l>>var2;

auto int first(int,float);

{auto int var1;

var1=k+l-(var2)/2;

cout<<"\nvar1="<<var1;

}

float first(float k);

{int s=0;

static float var1;

var1=var2/k;

cout<<"\nvar1="<<var1;

s=var1+l;

cout<<"\ns="<<s;

}

}

Хід роботи

1.Вивчити теоретичні відомості.

2.Відповідно до індивідуального завдання розробити алгоритм і програму, що містить заголовний файл і кілька модулів (2-3). У кожнім модулі розробити окремі функції.

3.Виконати оголошення перемінних на зовнішніх і внутрішніх рівнях з різними класами пам'яті.

4.Розробити функції, викликувані з додаткових модулів. Використовувати оголошені перемінні з різною областю дії (класами пам'яті).

5.Створити заголовні файли, що містять інформацію про функції в додаткових модулях.

Написати основну програму, що підключає необхідні заголовні модулі і використовує функції і перемінні з інших модулів.

Показати зміна перемінних у різних областях дії.

Перевірити доступ до перемінного з різними класами пам'яті (усередині блоку, модуля й в інших модулях).

6.Як обмежується доступ до членів класу? Як обмежується доступ до членів класу?

7.Перевірити виконання ініціалізації перемінних із класом пам'яті static, оголошених на зовнішньому рівні й усередині функції при декількох викликах.

8.Перевірити доступ до функцій, оголошеним з різними класами пам'яті.

9.Розробити функції, що мають одне ім'я і різні області дії. Здійснити виклик цих функцій.

10.Набрати програму на комп'ютері, і усунути помилки.

11.Одержати результат.

12.Оформити звіт.

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

Індивідуальне завдання

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

Проект повинний містити:

  •  оголошення і використання глобальних і локальних перемінних;
  •  передача глобальних даних як параметри функцій;
  •  перевизначення глобальних даних усередині функцій;
  •  виклик з допоміжного файлу зовнішньої функції;
  •  виклик з основного файлу зовнішніх функцій;
  •  перевизначення функцій у допоміжних файлах.

Індивідуальні завдання знаходяться в таблицях  18.1 і  18.2

Таблиця 18.1 – індивідуальні завдання

Варіанти

Структура проекту

1-10

основний файл

2 допоміжних файли

заголовний файл

11-20

основний файл

3 допоміжних файли

заголовний файл

21-30

основний файл

4 допоміжних файли

Таблиця 18.2 - індивідуальні завдання

Варіант

локальна функція

зовнішня функція

переопреде
ленна
функція

локаль
ні дані

зовнішні дані

переопре
ділені
дані

1,11,21

auto int first
(int, float)

void second
(int *,float *)

static float *first(float)

auto int var1

const float var2

static long int var1

2,12,22

auto cdecl int first
(int, float)

void second
(int *,float *)

static pascal char *first(int,…)

auto long unsigned int var1

double var2

static float var1

3,13,23

near auto int first
(int, float)

void far second (int *,float *)

huge static int *first(double)

auto int var1

extern float var2

static short unsigned int  var1

4,14,24

auto int first
(near int, near float)

far void * pascal  near second
(far int *,far float *)

static unsigned int *first(char)

near auto double var1

extern unsigned short int var2

static char var1

5,15,25

pascal auto int first(int)

char far * (far * second)
(int *,float *)

cdecl static far short int *first(float, float)

register char var1

far double var2

static int var1

6,16,26

cdecl auto int first(int, float)

extern near void * second
(int *,float *)

static near double * first(void, …)

auto long int var1

float var2

static double var1

7,17,27

huge auto int first(near int *, far int *)

extern void second
(int *,float *)

near static float *first(void)

register int var1

extern near float var2

near static double var1

8,18,28

far int * auto pascal huge first(huge int, huge float)

void second
(int *,float *)

static short int  *first(float *)

huge int var1

far double var2

static long unsigned int var1

9,19,29

auto int first(int, float)

near void * extern far pascal second
(int *,float *)

static float *first(float)

auto int var1

far extern float var2

near static char var1

10,20,30

auto far int * (first)(int *, …)

void second
(int *,float *)

int far * pascal far first()

auto float var1

extern huge float var2

extern long int var1

Вимоги до змісту звіту приведені в лабораторній   роботі   №1.

Контрольні запитання

1.Які класи пам'яті (КП) припустимі стосовно до перемінного і функціям?

2.Які класи пам'яті використовуються для перемінних і функцій за замовчуванням?

3.Назвіть область дії і час життя даних і функцій з різними класами пам'яті.

4.Чи можна використовувати перемінні з КП register у лівій частині вираження присвоювання?

5.У яких випадках можна використовувати перемінні, а також функції з однаковими іменами?

6.Чи можна переоголосити перемінну у вкладених блоках? Яка область дії таких перемінних?

7.Чи можна одержати доступ до глобальній перемінній у блоці, де оголошена локальна перемінна з тим же ім'ям?

8.Чи виробляється ініціалізація перемінних з різними класами пам'яті?

Скільки разів виробляється ініціалізація перемінних із КП static, оголошених у тілі функції?

9.Яку інформацію містять заголовні файли і де вони знаходяться?

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


 

А также другие работы, которые могут Вас заинтересовать

43339. Проектування фундаментів під 9-поверхову блок секцію на 36 квартир 530.5 KB
  Результати лабораторних визначень фізикомеханічних характеристик цього ґрунту наведені в табл. Результати лабораторних визначень фізикомеханічних характеристик ґрунту № 102 Таблиця 3 № ґрунту Фізикомеханічні характеристики ґрунту ρs г см3 ρ г см3 W WL WP E МПа φ град. Остаточна назва ґрунту: суглинок твердий Визначаємо розрахункові характеристики ґрунту питому вагу {м с2 – прискорення вільного падіння} кут внутрішнього тертя питоме зчеплення для розрахунків за Ію і ІІю групами граничних станів. Розрахункове значення...
43340. Розробка веб-сайту електронної бібліотеки 394.5 KB
  Завданням даної курсової роботи є розробка веб-сайту електронної бібліотеки. Веб-сайт повинен надавати можливість користувачам виконувати навігацію по категоріям та завантажувати необхідні їм книги. Також необхідний пошук по імені автора, назві книги та по опису. Для наповнення бібліотеки та редагування її вмісту необхідно реалізувати адміністративну частину сайту
43341. РОЗРОБКА ПРОГРАМНОГО КОМПЛЕКСУ ПО ЗНАХОДЖЕННЮ НАЙКОРОТШИХ МАРШРУТІВ НА ДТМ 871 KB
  Транспортні задачі, у яких вершинами графа є пункти, а ребрами – дороги (автомобільні, залізні й ін.) і/або інші транспортні (наприклад, авіаційні) маршрути. Інший приклад – мережі постачання (енергопостачання, газопостачання, постачання товарами і т.д.), у яких вершинами є пункти виробництва й споживання, а ребрами – можливі маршрути переміщення (лінії електропередач, газопроводи, дороги і т.д.).
43342. ШЛЯХИ УДОСКОНАЛЕННЯ ФОРМ ТА СПОСОБІВ ДІЛОВОГО СПІЛКУВАННЯ НА ПІДПРИЄМСТВІ 185.5 KB
  Але водночас безпосереднє спілкування заміняється опосередкованим що здійснюється засобами масової інформації а це веде до зростання відчуженості між людьми зниження рівня їх комунікабельності контактності а також емоційності. Тому роль слова у міжособистісній та діловій взаємодії людей має особливе значення а у зв'язку з цим зростає актуальність проблеми підготовки майбутніх фахівців до спілкування в нових умовах. Маючи низький рівень культури ділового спілкування співрозмовники нерідко ставляться до інших як до об'єктів яких не...
43343. Розрахунок розгалуженого електричного кола постійного струму 353.5 KB
  Остання цифра номера відповідає номеру схеми кола рис. ЧАСТИНА І Розрахунок розгалуженого електричного кола постійного струму Зміст завдання Для заданого електричного кола рис. 1 виконати наступне: – накреслити початкову а також спрощену схеми на спрощеній схемі відсутні індуктивні і ємнісні елементи які не впливають на розподіл струмів у вітках кола постійного струму; – скласти систему рівнянь для розрахунку кола за методом рівнянь Кірхгофа; – визначити невідомі струми і напруги на елементах кола використовуючи методи контурних струмів і...
43344. Облік статутного капіталу підприємства 1.74 MB
  Вона має постійний характер та відрізняється, по-перше, свободою у виборі напрямів та методів діяльності, самостійністю у прийнятті рішень, по-друге, відповідальністю за прийняття рішень та їх виконання; по-третє цей вид діяльності не виключає ризику, збитків, й банкрутств
43345. Інформаційна база даних служби продажу залізничних білетів 1.3 MB
  База даних — це впорядкований набір логічно взаємоповязаних даних, що використовується спільно, та призначений для задоволення інформаційних потреб користувачів. У технічному розумінні включно й система керування БД.
43346. Створення інформаційної бази даних служби продажу залізничних білетів 1.19 MB
  Курсова робота з дисципліни Організація баз даних та знань на тему: Створення інформаційної бази даних служби продажу залізничних білетів Курсова робота студента 3 курсу групи КН48 Нестеренка М. Проектування інформаційної бази даних Створення реляційної моделі бази даних Створення бази даних
43347. Технологии аппаратной виртуализации 64.5 KB
  Аппаратная виртуализация — виртуализация с поддержкой специальной процессорной архитектуры. В отличие от программной виртуализации, с помощью данной техники возможно использование изолированных гостевых систем, управляемых гипервизором напрямую. Гостевая система не зависит от архитектуры хостовой платформы и реализации платформы виртуализации.