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


 

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

45073. Девиантное поведение – определение, причины, классификация 24.5 KB
  Девиантное поведение определение причины классификация. Девиантное поведение представляет собой устойчивое сознательное и избирательное нарушение социальных норм. Крайние проявление социально-пассивного типа саморазрушающее поведение.: аддиктивное поведение сексуальная распущенность аутоагрессия суицидальное поведение синдром сгорания.
45074. Эпилепсия (G40) 50.5 KB
  При этом чем интенсивнее представлены одни из них тем меньшая выраженность других достаточна для проявления эпилепсии. Почти в половине случаев причину эпилепсии установить не удается даже при самом тщательном обследовании. Эти идиопатические эпилепсии связаны главным образом с наследственным предрасположением имеют помимо других отличий типичный возраст заболевания и в большинстве случаев хорошо реагируют на терапию. В случаях когда при анализе особенностей клинического синдрома и данных исследования предполагается вероятность отнесения...
45075. ПОВЕДЕНЧЕСКАЯ ПСИХОТЕРАПИЯ 34.5 KB
  Могут рассматриваться методы психотерапии основанные на принципах научения которые появились во втором десятилетии нашего века. содействовать увеличению потенциала их личного поведения мыслей чувств и уменьшению или исключению нежелательных способов реагирования;2 не ставится задача изменить эмоциональную суть отношений и чувств личности;3 позитивное терапевтическое отношение необходимое но недостаточное условие эффективной психотерапии;4 жалобы пациента принимаются как значимый материал на котором терапия фокусируется а не как...
45076. КЛАССИЧЕСКИЙ ПСИХОАНАЛИЗ 39 KB
  Психоанализ инструмент дающий возможность Эго достичь победы над Ид . Он считал что в психоанализе основные усилия направлены на то чтобы усилить Эго сделать его более независимым от СуперЭго расширить сферу действия перцепции и укрепить его организацию. Цель психоанализа Фрейд видел в том чтобы сделать бессознательное сознательным; он утверждал что дело анализа обеспечить насколько это возможно хорошие условия для функционирования Эго .
45077. Гуманистическая психотерапия 26 KB
  Метод позитивной психотерапии основывается на 3х принципах каждому из которых соответствует определённая методическая составляющая: Принципу надежды соответствует позитивный подход в видении способностей и возможностей человека. Принципу баланса соответствует содержательный дифференциальный анализ психодинамики личности результатом которого есть гармонизация первичных и вторичных актуальных способностей человека. Принципу самопомощи соответствует 5шаговая метамодель используемая как стратегия гармонизации адаптации и развития...
45078. Социальная реабилитация 29 KB
  Все реабилитационные мероприятия должны быть нацелены на вовлечение самого больного в лечебно-восстановительный процесс. Реабилитировать больного без его активного участия в этом процессе невозможно. Реабилитация объединяет усилия врача медицинского персонала и больного направленные на восстановление социальнопсихологического статуса последнего. Охранительный режим предусматривает постоянное пребывание больного в постели преимущественно по соматическим показаниям и требует от медицинского персонала постоянного наблюдения за ним.
45080. Введение. Сестринский процесс в психиатрии 45 KB
  Психиатрия медицинская дисциплина которая занимается диагностикой терапией и профилактикой психических заболеваний человека. В качестве этиологических факторов психических заболеваний выступают эндогенные чаще наследственная предрасположенность генетические аномалии конституциональная неполноценность и экзогенные инфекции интоксикации черепномозговые травмы психотравмы. В основе патогенеза психических расстройств лежит нарушение взаимоотношения процессов возбуждения и торможения в ЦНС. Сделаны первые шаги в понимании психических...