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.Як запобігти повторне включення заголовних файлів у декількох модулях?


 

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

54070. Подолання вад звуковимови й звукосприймання 23.89 MB
  Виправлення недоліків звуковимови проводиться у певній послідовності за прийнятою методикою. Під час цих вправ звертається увага на положення язика: корінь спокійний а кінчик язика біля нижніх різців. Вправи для язика: рухи язиком вперед і назад відкритим ротом як котик...
54071. Здоровым и грамотным должен быть каждый! Логопедическая спартакиада 63.5 KB
  Скачет лягушонок Дети хлопают в ладоши Квакваква прыгают на месте Плавает утёнок хлопают в ладоши Крякрякря Ставят руки к груди и разводят в стороны. Прыгает козлёнок Хлопают в ладоши Ме ме ме Ставят руки на пояс наклоняются вперёд А за ним ягнёнок Хлопают Бе бе бе приседают Вот мы на зарядке Хлопают Раз дватри Прыгают на месте Все вокруг стараются Хлопают Спортом занимаются Шагают на месте Эстафета Собери букву По команде: Марш первый учащийся с мячом в руках бежит к обручу. Звуковая разминка...
54072. Логопедичне заняття. Осіння лісова галявина 210.5 KB
  Логопедичне заняття Вид. Виховувати вміння слухати вказівки логопеда. Логопед. Діти а зараз давайте пограємо в гру З якого дерева листочок Логопед показує дітям листочок а діти називають.
54073. Звук "ш". Лісова школа (Старша логопедична група) 1.38 MB
  Формувати в малят уявлення про навчання в школі ознайомити із звуком ш акустичною характеристикою; закріпити вміння ділити слова на склади визначати звук який найчастіше звучить у вірші аналізувати слово з допомогою звукових фішок пригадувати слова зі звуком ш ; узгоджувати числівники з іменниками в орудному відмінку; розвивати фонематичні процеси слуховий контроль. Обладнання: фішки для звукового аналізу шишкикартинки картинки з предметами у множині іграшка Лунтик...
54074. Логопедичні міні-заняття як дієва форма корекційно-розвивальної роботи з дітьми дошкільного віку 196 KB
  Наприклад вправа Хто летить хто не летить Учительлогопед промовляє вірш а діти пантомімою зображують: Хто летить хто не летить. Так швиденько покажіть Хто летить хто не летить. Летить летить воронаЛетить летить корова Летить летить шпак Летить летить грак. Летить летить горобчик.
54075. ЛОГОПЕДИЧНА РОЗВАГА «СВЯТО БЕРЕЖЛИВОСТІ» 140 KB
  Закріпити словник споріднених слів гончар гончарство гончарський гончарний гончарня; уточнити та розширити словник антонімів чистий брудний святковий буденний повсякденний натуральна природна штучна однотонна різнокольорова теплий холодний літній зимовий новий старий рвати штопати бруднити ...
54076. Подорож Кораблем Часу. Логопедична розвага 127.5 KB
  Логопедична розвага Подорож Кораблем Часу Мета: узагальнити знання дітей про пори року вчити описувати їх; уточнити та закріпити словник синонімів омонімів та прислівя; розвивати фонематичний слух вміння утворювати присвійні прикметники від іменниківназв диких звірів вміння ділити слова на склади підбирати слова з певною кількістю складів; удосконалювати навички звукового аналізу і синтезу слів; продовжувати розвивати дрібну моторику рук вміння працювати як правою так і лівою...
54077. Использование вектора на логопедических занятиях 216 KB
  Для пропедевтики оптической дисграфии в первую очередь необходимо использовать задания, направленные на развитие зрительно-пространственных представлений и зрительно-моторных координаций.
54078. Взаємозв’язок логопеда та родини у корекційно-відновлювальній роботі з дітьми логопатами 32.5 KB
  Одне з важливих завдань професійної діяльності вчителя логопеда дитячого дошкільного навчального закладу є залучення батьків до проведення роботи із дітьми логопатами по закріпленню засвоєного матеріалу на корекційно відновлювальних заняттях. Оволодіння дитиною мови успішно йде тоді коли з ним займаються не тільки в дошкільному закладі але і в сім'ї: Передумовою ефективного залучення сімейного оточення до корекції звуковимови у дітей є чітко організована взаємодія логопеда з батьками регулярна...