Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Структура программы из двух текстовых файлов



Рассмотрим модель программы из двух текстовых файлов (Рис.1.9). Линии 1-3 указывают область действия глобальных переменных ( ниже точки определения ): массива array, переменных ext_ch и ext_pp. В пределах области определения их можно использовать во всех функциях без дополнительного объявления как extern (линия 1 для массива array; линия 2 для переменной ext_ch; линия 3 для переменной ext_pp). Чтобы использовать переменные ext_ch и ext_pp в функции main(), т.е. выше точки определения, их надо объявить как extern ( внешние ) (например, линия 6 для переменной ext_pp).

Во всех функциях, за исключением function3() из файла File2.cpp, описана внутренняя переменная a, которой соответствует своя память, доступ к которой возможен только из пределов функции, но не из других функций.

Область определения глобальных переменных ограничена пределами одного файла (File1.cpp), и, следовательно, эти переменные невидимы в другом файле (File2.cpp). Для их использования требуется также объявление extern (например, линия 5 для массива array; линия 7 для переменной ext_ch; только функцияfunction3() для переменной ext_pp).

File2.cpp
File1.cpp

Рис.1.9. Структура программы из двух файлов и область действия переменных в программе

Пример более сложной программы на С++ ( сортировка строк ) [10] *

Программа сортирует строки в лексикографическом порядке, возрастающем или убывающем в зависимости от признака, передаваемого функции main() через аргумент argv, и выводит их на экран.

Исходный текст программы представлен в текстовых файлах (main.cpp, bblsort.cpp ) и в заголовочных файлах ( Рис.1.10 ):

· стандартном заголовочном файле stdafx.h

· файле bblsort.h ( подключаемом в начале каждого из текстовых файлов в рамках файла stdafx.h).


Рис.1.10. Структура программы сортировки строк

Программа с комментариями и подробное описание действий, выполняемых каждым фрагментом (А, B, C, D, …), представлены ниже:

//bblsort.h – заголовочный файл
А #define MAXLINES 10 #define LINESIZE (12+1)
//stdafx.h – стандартный заголовочный файл
  B #include <iostream> //для ввода/вывода #include <conio.h> //для _getch() #include <cstring> //для strcmp(), strcpy_s() #include "bblsort.h" //для MAXLINES, LINESIZE int rdlines(void); //прототипы функций, определенных в файле main.cpp void wrlines(int);   int lexcmp(int, int);//прототипы функций,определенных в файле bblsort.cpp void swap(int, int); void bblsort(int);   using namespace std;
   
  //main.cpp – программный файл
C #include "stdafx.h" //подключение стандартного заголовочного файла
D //глобальные переменные char Line[MAXLINES] [LINESIZE]; //буфер строк int Revflg; //признак направления сортировки  
E //определение функции main() int main (int argc, char **argv) //аргументы вызова программы // argc - число аргументов, argv – указатель на строки-аргументы
  {  
F int numlines; //локальная переменная функции main()  
G Revflg = (argc>1 && argv[1][0] =='-'); numlines = rdlines();//вызов функции ввода строк cout << "\n----------------------\n"; bblsort(numlines);//вызов функции сортировки,аргумент – количество строк wrlines(numlines);//вызов функции вывода строк,аргумент – количество строк cout << "\n----------------------\n"; _getch(); //функция _getch(); ожидает нажатия клавиши return 0; }
   
H //определение функции rdlines() ввода строк с клавиатуры static int rdlines() //функция доступна только в данном файлеmain.cpp
I { int i; //локальная переменная функции rdlines() for (i=0; i < MAXLINES; i++) if (!cin.getline(Line[i], LINESIZE)) break; return i; //функция возвращает количество введенных строк }
   
J //определение функции wrlines() вывода n строк на экран static void wrlines(int n) //функция доступна только в файле main.cpp { unsigned i; //локальная переменная функции wrlines() for (i=0; i<n; i++) cout << Line[i] << endl; return; //функция выводит строки и ничего не возвращает }
   
//bblsort.cpp – программный файл
K #include "stdafx.h" //подключение стандартного заголовочного файла
   
L extern char Line [][LINESIZE]; //объявление массива Line, // определенного в файле main.cpp
   
M //определение функции bblsort()сортировки строк void bblsort(int n) // n - число строк { unsigned i, j; //локальные переменные функции bblsort() for (i=1; i<n-1; i++) for (j=n-1; j>=i; j--) if (lexcmp(j-1, j)) swap(j-1, j); return; //функция сортирует строки и ничего не возвращает }
   
N // определение функции lexcmp() сравнения строк //аргументы i, j – номера строк для сравнения static int lexcmp (int i, int j) {//функция доступна только в файле bblsort.cpp extern int Revflg; //объявление Revflg, определение в файле main.cpp int lc; lc= strcmp(Line[i], Line[j]); //библиотечная функция сравнения строк return ((lc<0 && Revflg) || (lc > 0 &&!Revflg)); }//функция lexcmp() возвращает 1 или 0 в зависимости от результата //сравнения строк lc и признака Revflg направления сортировки
   
O //определение функции swap() обмена строк // аргументы i, j – номера строк для обмена static void swap(int i, int j) //функция доступна только в этом файле { char temp [LINESIZE]; strcpy_s(temp, Line[j]); //библиотечная функция копирования строк strcpy_s(Line[j], Line[i]); strcpy_s(Line[i], temp); return; //функция swap() меняет строки и ничего не возвращает }

А – заголовочный файл bblsort.h с препроцессорными константами MAXLINES и LINESIZE. Препроцессорные константы обычно помещаются в заголовочный файл, включаемый в другие файлы программы, по мере необходимости. При изменении значений констант изменения затронут только файл bblsort.h.

B – стандартный заголовочный файл stdafx.h. Содержит директивы препроцессора для подключения стандартных заголовочных файлов с прототипами библиотечных функций (для работы со строками и другими функциями, вызываемыми в файле); директиву препроцессора для подключения пользовательского заголовочного файла bblsort.h с препроцессорными константами MAXLINES и LINESIZE; прототипы функций rdlines(), wrlines(), определенных в файле main.cpp, иlexcmp(), swap(), bblsort(), определенных в файле bblsort.cpp программы, а также директиву using namespace std; определяющую для данной программы в качестве пространства, в котором распознаются ее имена, стандартное пространство имен std (за пределами его имена будутнеизвестны).

Блокиот С до J включительно представляют содержание файла main.cpp с головной функцией main() и вызываемыми в ее теле функциями rdlines() и wrlines().





Дата публикования: 2014-11-29; Прочитано: 269 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...