Контрольные вопросы для подготовки и самостоятельной работы. Управление многофайловыми проектами




Контрольные вопросы для подготовки и самостоятельной работы

1 Приведите общий формат объявления функции.

2 Приведите формат определения функции.

3 Какие классы памяти используются при объявлении функций.

4 Охарактеризуйте формальные параметры приведенных функций.

5 Что означает запись FILE *?

6 Что означает термин-поток?

7 Какие стандартные потоки открываются при выполнении программы?

8 Какие существуют режимы работы с файлами?

9 Какие заголовочные файлы содержат объявления библиотечных функций для работы с потоками.

10 Какие функции обеспечивают форматированный ввод/вывод данных?

11 Что такое буферизация и можно ли ею управлять?

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

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

(4 часа)

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

Теоретические сведения

Управление многофайловыми проектами

Поскольку большинство программ состоит из нескольких файлов, желательно иметь возможность автоматической идентификации тех файлов, которые должны быть перекомпилированы и скомпонованы. Эти и многие другие обязанности выполняет встроенный администратор (менеджер) проектов системы 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;

Ход работы

1 Изучить теоретические сведения.

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

3 Выполнить объявление переменных на внешних и внутренних уровнях с различными классами памяти.

4 Разработать функции, вызываемые из дополнительных модулей. Использовать объявленные переменные с различной областью действия (классами памяти).

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

6 Написать основную программу, подключающую необходимые заголовочные модули и использующую функции и переменные из других модулей.

7 Показать изменение переменных в различных областях действия.

8 Проверить доступ к переменным с различными классами памяти (внутри блока, модуля и в других модулях).

9 Как ограничивается доступ к членам класса? Как ограничивается доступ к членам класса?

10 Проверить выполнение инициализации переменных с классом памяти static, объявленных на внешнем уровне и внутри функции при нескольких вызовах.

11 Проверить доступ к функциям, объявленным с различными классами памяти.

12 Разработать функции, имеющие одно имя и различные области действия. Осуществить вызов этих функций.

13 Набрать программу на компьютере, и устранить ошибки.

14 Получить результат.

15 Оформить отчет.

16 Подготовиться к защите лабораторной работы, изучив контрольные вопросы по данной теме.

 

Индивидуальное задание к лабораторной работе №18

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

Проект должен содержать:

- объявление и использование глобальных и локальных переменных;

- передача глобальных данных в качестве параметров функций;

- переопределение глобальных данных внутри функций;

- вызов из вспомогательного файла внешней функции;

- вызов из основного файла внешних функций;

- переопределение функций во вспомогательных файлах.

Индивидуальные задания находятся в таблицах 18.1 и 18.2

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

Варианты Структура проекта
1-10 основной файл 2 вспомогательных файла заголовочный файл
11-20 основной файл 3 вспомогательных файла заголовочный файл
21-30 основной файл 4 вспомогательных файла

 

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

Вариант функция c классом памяти static внешняя функция переопреде ленная функция локаль ные данные внешние данные переопре деленные данные
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 Производится ли инициализация переменных с различными классами памяти?

9 Сколько раз производится инициализация переменных с КП static, объявленных в теле функции?

10 Какую информацию содержат заголовочные файлы и где они находятся?

11 Как предотвратить повторное включение заголовочных файлов в нескольких модулях?

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

Изучение графических средств С

(2 часа)

Цель работы: приобрести практические навыки в использовании графических функций языка С.

 

Теоретические сведения

Графические функции предназначены для управления видеорежимами работы дисплея, выводом графической информации на экран.

 

Графические функции

void far detectgraph(int far *graphdriver, int far *graphmode); – определение доступного видео-драйвера.

void far initgraph(int far * graphdriver, int far *graphmode, char far *pathtodriver); - установка видеорежима.

vo id far setgraphmode(int mode); - установка видеорежима.

void far restorecrtmode(void); - временный переход из графического видеорежима в текстовый.

void far closegraph(void); - закрытие графической системы.

void far setvisualpage(int page); - установка активной видеостраницы.

void far setactivepage(void); -вывод на активную видеостраницу.

int far getmaxx(void); - определение максимального значения координаты х.

int far getmaxy(void); - определение максимального значения координаты у.

void far setviewport(int left, int top, int right, int botton, int clip); - установка нового графического окна.

void far getviewsettings(struct viewporttype far *viewport); - получение параметров текущего окна.

void far moveto(int x, int y); void far moverel(int dx, int dy); - перемещение текущей графической позиции в координаты x, y или на величину dx, dy.

void far setlinestyle(int linestyle, unsigned upattern, int thickness); - установка типа линии.

i nt far getx(void); - получить текущую графическую позицию (х).

int far gety(void); - получить текущую графическую позицию (у).

void far clearviewport(void); - очистка текущего графического окна.

void far cleardevice(void); - очистить активную видеостраницу.

int far getmaxcolor(void); -определить максимальное количество цветов.

void far setpalette(int colornum, int color); - установка палитры.

void far setbkcolor(int color); -установка цвета фона.

Доступ к пикселям

unsigned far getpixel(int x, int y); - получить текущие параметры пикселя.

void far putpixel(int x, int y, int color); - вывести пиксель с параметрами.

Графические примитивы

void far bar(int left, int top, int right, int botton);

void far bar3d(int left, int top, int right, int botton, int depth, int topflag);

void far fillpoly(int numpoints, int far *polypoints);

void far fillelipse(int x, int y, int xradius, int yradius);

void far pielipse(int x, int y, stangle, int endangle, int radius);

void far sector(int x, int y, int stangle, int endangle, int xradius, int yradius);

void far line(int x1, int y1, int x2, int y2);

void far linerel(int dx, int dy);

void far lineto(int x, int y);

void far rectangle(int left, int top, int right, int botton);

void far drawpoly(int numpoints, far *polypoints);

void far circle(int x, int y, int radiuces);

void far arc(int x, int y, int stangle, int endangle, int radius);

void far ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius);

Пример

/* ЗАНЯТИЕ N 19

Разработал Гармаш В.Н.

Объявить массивы для вывода текста в графическом режиме,

выполнить их инициализацию. Инициализировать графический режим работы.

Выполнить расчеты и построить заданную геометрическую фигуру.

Вывести тексты на экран с применением необходимых функций. */

#include <graphics.h>

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#include <DOS.H>

#define ANGLES 15

#define PIXEL_COUNT 1000

#define DELAY_TIME 100 /* in milliseconds */

 

char *str[]={"А","л","ь","ф","а"," ","Ц","е","н","т","а","в","р","а","."};

char st[]="_";

void demo(int x,int y,int size,int color);

void demo1(void);

 

void main()

{// Инициализация графического режима работы

int graphdriver=DETECT,graphmode,errorcode;

initgraph(&graphdriver,&graphmode,"");

errorcode = graphresult();

if (errorcode!= grOk)

{ printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

}

//Рисование рамки по контуру экрана

setcolor(9); //Установка цвета

setlinestyle(0,0,3); //Установка типа линии

line(0,0,getmaxx(),0); // Рисование линии

line(0,0,0,getmaxy());

line(getmaxx(),0,getmaxx(),getmaxy());

line(0,getmaxy(),getmaxx(),getmaxy());

setcolor(10); // Вывод текста "ЗАДАНИЕ 19"

settextstyle(GOTHIC_FONT,HORIZ_DIR,4);

outtextxy(260,10,"ЗАДАНИЕ 19");

demo(320,250,125,11); // Функция вывода рисунка

demo1(); // Функция вывода текста "Альфа Центавра"

getch();

closegraph(); // Окончание графического режима работы

clrscr();

}

 

void demo(int x,int y,int size,int color)

{ setcolor(color);

setlinestyle(0,0,1);

int xx[ANGLES],yy[ANGLES],i,j;

for (i=0;i<=ANGLES-1;i++)

{ xx[i]=x+(int)(cos(i*2*M_PI/ANGLES)*size);

yy[i]=y-(int)(sin(i*2*M_PI/ANGLES)*size);

}

for (i=0;i<=ANGLES-1;i++)

{ for (j=0;j<=ANGLES-1;j++)

if (i!=j)

{ line(xx[i],yy[i],xx[j],yy[j]);

}

}

}

 

void demo1(void)

{ int f1 = installuserfont("rtri.CHR"); //Установка шрифта

unsigned int sz;

void far *ptr;

sz=imagesize(10,10,50,50);

ptr=malloc(sz);

getimage(10,10,50,50,ptr);

int size = 2,tt,ff,i;

while(!kbhit())

{ tt=0;

settextstyle(DEFAULT_FONT, HORIZ_DIR, size);

for(i=0; i<3; i++)

{ setcolor(3); outtextxy(260,60,st); delay(90);

setcolor(0); outtextxy(260,60,st); delay(90);

}

setcolor(3); ff=260;

for(i=0; i<15; i++)

{ setcolor(3);

settextstyle(f1, HORIZ_DIR, 4);

outtextxy(260+tt, 50, str[i]);

tt+=textwidth(str[i]);

sound(30); delay(20); nosound();

settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);

outtextxy(260+tt+4, 60, st); delay(40);

setcolor(0);

outtextxy(260+tt+4, 60, st); delay(10);

}

settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);

for(i=1;i<4;i++)

{ setcolor(3); outtextxy(260+tt+4, 60, st); delay(90);

setcolor(0); outtextxy(260+tt+4, 60, st); delay(90);

}

setcolor(3);

ff=tt+260; tt=0;

for(i=14;i>=0;i--)

{ settextstyle(f1, HORIZ_DIR, 4);

tt+=textwidth(str[i]);

sound(30); delay(20); nosound();

putimage(ff-tt, 50, ptr, COPY_PUT);

settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);

setcolor(3); outtextxy(ff-tt-4, 60, st); delay(40);

setcolor(0); outtextxy(ff-tt-4, 60, st); delay(10);

}

}

}

Ход работы

1 Изучить теоретические сведения.

2 В соответствии с индивидуальным заданием разработать алгоритм решения задачи и оформление интерфейса программы.

3 Подготовить и разметить на экране эскиз чертежа детали в масштабе 1:1.

4 Составить программу с использованием графических функций языка С для вывода на экран подготовленной графической информации. Размеры, указанные на чертеже, ввести с клавиатуры.

5 Набрать программу на компьютере и устранить ошибки.

6 Получить результат.

7 Оформить отчет.

8 Подготовиться к защите лабораторной работы, изучив контрольные вопросы по теме.

 

Индивидуальное задание к лабораторной работе №19.

Варианты индивидуальных заданий находятся в таблице 19.1.

Таблица 19.1 - индивидуальные задания

Вариант Номер рисунка Вариант Номер рисунка
  а   г
  б   д
  в   е
  г   ж
  д   з
  е   и
  ж   к
  з   л
  и   м
  к   а
  л   б
  м   в
  а   г
  б   д
  в   е

 

Рисунок 19.1 - индивидуальные задания

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-09-06 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: