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


 

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

42976. Двухэтажный 4-квартирный жилой дом со стенами из керамических камней 87.5 KB
  Объемнопланировочное решение здания. Конструктивные решения здания. Характеристика района строительства Место расположения будущего здания в городе Рязань. Климатические условия района строительства: среднегодовая температура 38 0С минимальная зафиксированная температура 410С максимальная зафиксированная температура 380С продолжительность периода со среднесуточной температурой  0С составляет 145 суток количество осадков за год 644мм средняя месячная относительная влажность воздуха: наиболее холодного месяца...
42977. Цех по ремонту автотранспорта 61.5 KB
  Введение Исходные данные Характеристики климатического района Характеристика рельефа Характеристики огнестойкости и взрыво-пожаробезопасности Технологическая часть Направленность технологического процесса Технологические зоны Грузоподъемное оборудование Технологические зоны с агрессивными средами Объемно-планировочные решения Параметры проектируемого здания Помещения и перегородки Ворота Окна Полы Кровля Расчет количества водоприемных воронок Фасад...
42978. Газоснабжение жилого микрорайона в Советском районе г. Астрахань с газификацией жилого много квартирного дома 86 KB
  При определении сметной стоимости строительства внутренних инженерных систем использованы Территориальные единичные расценки на строительные работы ТЕР. ТЕР2001 предназначены для определения прямых затрат в сметной стоимости строительства а также для расчётов за выполненные строительные работы. Сборники ТЕР2001 разработаны в базисном уровне цен Госстроя по состоянию на 1 января 2001 года. При расчёте сметной стоимости базовоиндексным методом приняты: а Объёмы работ для подсчета сметной стоимости работ определяются в разделе...
42979. Двухэтажный 6-квартирный жилой дом со стенами из силикатного кирпича 88.5 KB
  Объемнопланировочное решение здания. Конструктивные решения здания. Характеристика района строительства Место расположения будущего здания в городе Орел. Климатические условия района строительства: среднегодовая температура 49 0С минимальная зафиксированная температура 350С максимальная зафиксированная температура 380С продолжительность периода со среднесуточной температурой  0 0С составляет 138 суток количество осадков за год 571мм средняя месячная относительная влажность воздуха: наиболее холодного месяца...
42980. Проект производственного здания с административно-бытовым корпусом для строительства в г.Томск 111.5 KB
  Основными конструктивными элементами ячейкового промышленного здания являются: колонны которые передают нагрузки на фундаменты; конструкции покрытия которые состоят из несущей части фермы; Вертикальные ограждающие конструкции стены перегородки конструкции остекления причем конструкции стен опираются на фундаментные и обвязочные балки; Двери и ворота для движения людей и транспорта; Окна обеспечивающие необходимый световой режим в помещении Основные характеристики: По...
42981. Проектирование промышленного здания в г. Омск 97 KB
  Краткое изложение задания Характеристика района строительства Объемно-планировочное решение Конструктивное решение Теплотехнический расчет стенового ограждения и покрытия Расчет административно бытовых помещений Литература Краткое изложение задания Универсальный корпус предназначен для размещения в нем некоторых производств легкого и среднего машиностроения не требующих применения тяжелых кранов. Фахверковые колонны жёстко заделывают в фундаменты и сверху шарнирно соединяют с элементами покрытия....
42982. ОДНОЭТАЖНОЕ ПРОМЫШЛЕННОЕ ЗДАНИЕ В г. ЧИТА 107 KB
  Фахверковые колонны жёстко заделывают в фундаменты и сверху шарнирно соединяют с элементами покрытия. Шарнирное крепление выполняют так чтобы оно передавало ветровую нагрузку на каркас здания и исключало возможность передачи вертикальных нагрузок от покрытия на фахверковые колонны т. В качестве главных несущих конструкций покрытия приняты сборные железобетонные фермы подстрапильные для зданий с плоским покрытием пролёт 24м и 18м. Фермы покрытия соединяют с колоннами анкерными болтами выпущенными из колонн и проходящими через опорный...
42983. Производство листового стекла флоат-способом формования на расплаве олова 6.62 MB
  Целью данного дипломного проекта было запроектировать производство листового стекла флоатспособом формования на расплаве олова и усовершенствовать его. В работе рассмотрены различные технологии производства листового стекла пути и средства его совершенствования. Технология производства стекла флоатспособом. Научнотехнический прогресс в производстве стекла позволил значительно расширить области его эффективного применения.
42984. Расчет соосного вертикального цилиндрического редуктора 542.93 KB
  Частота вращения приводного вала. nв – частота вращения выходного вала: В итоге Согласуя диаметр выходного конца быстроходного вала редуктора с диаметром выходного конца вала электродвигателя принимаем