Учебная работа. Реферат: Модульное программирование 3

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Реферат: Модульное программирование 3

1.

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

Один из методов решения сложной задачки – это разбиение её на части. В этом состоит способ нисходящего программирования.

При программировании на языке Си непростая программка быть может разбита на наиболее обыкновенные подзадачи( функции). Это дозволяет: 1)упростить структуру программки; 2) избежать избыточности кода, т.к. функции записывают один раз, а вызывать её на выполнение можно неоднократно; 3) упростить процесс отладки и сопровождение программки, поместив нередко применяемые ф-ии в библ. Разработанные ф-ии можно сгруппировать в отдельные файлы (модули ) компилируемые раздельно, кот. потом соединяются воединыжды в исполняемою программку при помощи компоновщика.

Ф-ия – это самостоятельная единица программки, реализующая определенную задачку либо её часть. Любая программка написанная на Си обязана содержать главную ф-ию «main».

3.
Объявление и определение функции. Вызов функции.

Объявление(-написание макета)хоть какой функции имеет последующий вид:

(спис.форм.перем.)

Определениефункции

{
}

Можно задать класс пам(обл видимости ф-ии) (пр:[класс] тип…)

.extern-глобальная видимость во всех модулях прогр.(умолч.)

.static-видимость лишь в границах модуля, в кот определ ф-ия

Тип возвр. знач быть может люб не считая масс и ф-ии. Но быть может ук. на мА либо ф-ию. Если ф-ия не возвр ни какого рез, то указывается тип void.

имя ф-ии – это идентиф задаваемой программером. Перечень форм парам: (тип имя_пар1, тип имя_пар2) Опред величины , кот требуется передать в ф-ию при её вызове. Быть может пустым. тело ф-ии – это или сост опер., или блок с описателем перем, масс и т.д. тело ф-ии не может содерж внутри себя определ др ф-ий. Из всякой ф-ии может быть воззвание к др. ф. Но они постоянно явл внеш по отн к вызыв-ей ф-ие.др ф-ий. ызове. ей мере 2 поля: для хранения данных, для ук.

Вызов функции

(перечень фактич. перем.) В объяв. опред и в вызове одной и той же ф-ии обязано соблюдаться правило соотв типов и порядка следования парам.

4.
Обмен информацией меж функциями. Рекурсивные функции.

методы:

1) С пом. глоб. перем.

2) Через возвращение ф-ией значения (оператор return).

— returnвыражение (в этом случ. знач. будет присвоено ф-ии в её типе)

— return (завершает выполн. ф-ии и передаёт вып. след. опер-у в вызыв-ей ф-ии)

3) Через характеристики:

Три метода передачи пар-ра в ф-ию:

а) по значению ( оп-ры работают лишь с копиями знач-ий фактич-их парам)

б) по адресу (в стек заносятся копии адресов арг-тов, ф-ия осущ-ая доступ к сиим адр может изм исх знач)

в)по ссылке (в ф-ию перед адр указ-ого при вызове парам) обозн int&z

Рекурс ф-ия – ф-ия, кот вызывает саму себя. Таковая рек. наз-ся прямой. Косвенная рек.- когда 2 и наиболее ф-ий вызывают др друга. Недочеты: расход времени и памяти на повторные вызовы ф-ий и передачу ей копий парам, также опестн. переполн стека.

5.
Библиотечные функции. Функции для работы в графическом режиме.

Неважно какая прогр на Си содержит воззвание к обычной библ. Не считая того программер может созд собств библ. Их подключ с пом. директивы include (.h – header – заголовок).

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

Сами библ. ф-ий хранятся в скомпил.виде и подлюч. к осн. прогр. на шаге компан-ки.

Библ. ф-ий можно разбить на группы по их назнач.:ввод/выв;матем.ф-ии;для управл.графич системой.

Монитор ПК может работать в одном из 2-х режимов: тестовом и графич-ом. Наим. элем-ом изобр.яв-ся пиксель. В Си име-ся граф. библ. graphics.h. Она сод. огромное кол-во ф-ий для: упр. цветом, созд.изобр.различ.формы, для вывода граф.текст.сообщ.,для упавл.курсором. Настройка этих ф-ий на работу осущ-ся путём подл.граф.драйвера. Граф.драйверы нах-ся в отдельных файлах с расш .BGIв каталоге BGI(Borl.Graph.Interf.).

Граф.ф-ии исп.понятие указателя текущ. позиции. Этот указатель идентиф. избранный

пиксель и хар-ся парой цел.чмсел(гор.и верт.коорд.).

Иниц.гр.режима осущ. ф-иёй initgraph(&gd,&gm, «путь к BGI файлам). gd-гр.драйв.,gm-гр.режим.

Для обр.ошиб.при работе с гр-ой исп.ф-ия: graphresult().Эта ф-ия возвр. код крайней исп.ф-ии. grOk=0

цвет в гр.режиме Си имеет собственный номер и буквенное обозн. Фон-setbkcolor(цв),цв лин. и симв.-setcolor(цв).

Парам.текста-settextstyle(шрифт,направл.,разм)

Нрав и толщина лин.геом. объектов-setlinestyle(вид,эталон,толщина)

Стиль закраски к-то области-setfillstyle(тип,закраска,цв)

Чистка экрана-cleardevice()/

Определ.макс.зная.по x (getmaxx()) и по y (getmaxy()).

Текущ корд. указат.курсора(getx(),gety()).

Перемещение указат-ля позиции moveto(x,y);moverel(dx,dy).

установка парам. по умолч.-graphdefault();

Вывод точки на экран-putpixel(x,y,цв).

Вывод текста-outtext(«строчка»),outtextxy(x,y, «строчка»).

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

Выводлин.-setwritemode(режим). 0-COPY_PUT,1-XOR_PUT. Если 0,то лин.затирает то,что было на дисплее.

Рисов.лин.-line(x1,y1,x2,y2),lineto(x,y),linerel(dx,dy)

Выв.прямоуг.-rectangle(x1,y1,x2,y2)

Ломан.лин.-drawpoly(кол-во вершин,указатель на массив целых)

Окр.(x,y,r)

Дуга arc(x,y,нач.угол,кон.уг,r)

Дуга эллипса (x,y,нач.угол,кон.уг,rx,ry)

Закр.прямоуг.bar(x1,y1,x2,y2)

Закр.параллел.bar3d(x1,y1,x2,y2,глубина,круша(от0до1))

Закр.элипс fillellipse(x,y,rx,ry)

Закр.круг pieslice (x,y,нач.угол,кон.уг,r)

Закр. секторэллипса sector(x,y,нач.угол,кон.уг,rx,ry)

Закр.произв.замкн.обл. floodfill(x,y,граница(должен совп.с цв контура)

7.
Классы памяти.

В ПК память представляется разделён.насегменты. Исп.прогр-а сост.из:

1)Сектора кода, в кот.размещены машинные команды.

2)Сектор данных, в кот расп. глоб.перемен. и константы.

3)Сектор стека, в кот размещены локал.перем.

Остальна дост-ая прогр.память наз-ся динам-ой либо хепом(«куча»), в кот располож. динам.перем.

Под всякую переем. исп-ую в прогр. обязано быть выделено пространство в памяти. Выделение пам.может происходить или на стадии компиляции прогр., или во время выполнения прогр.(для динам.перем.)

Любая перем. имеет оперд. тип. Не считая того она имеет класс памяти. Существует 4 класса памяти: 1)extern(внеш.);2)auto(автоматич-ий);3)static(статический); 4)register(регистровый).

Класс пам.опред-ся местом её описания и главным словом.

Класс пам.описывает:

1)Область видимости (дей-я перем-х)

2)время жизни пер.,т.е. продолж-ость её хранения в памяти.

В Си быть может 3 области видимости:

1)в границах файла

2)в пр.блока{ }

3)в пр.макета ф-ии

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

Перем. опис. вне ф-ии наз-ся внеш. либо глоб.(extern).Глоб. перем. располагается в секторе данных и вначале обнуляется. время жизни данной для нас перем.-на протяж всей прогр., обл.действ-файл.

Перем. описанная снутри ф-ии явл-ся локальной. По дефлоту объявленные в ф-ии пер-ые явл-ся автоматич. Перем. авт.класса располагаются в секторе класса вначале не обнуляются. время жизни и действие-блок, в кот описана перем.

Перем.стат.кл. тоже явл.локальными. Они видны лишь в своём блоке, но в отличие от перем. класса auto они подобно глобальным переменным располагаются в секторе данных, есть в протяжении всей прогр. и однократно иниц.(при первом вхожд. в блок)

Регистровая пам.выделяется под локал. перем. Это самый резвый и самый небольшой вид памяти. Эту пам. исп. не реком., т.к. ей распоряжается компил.Размещение-регистр.пам.;обл.действ.-блок;вр.жизни-блок;иниц-нет.

8.
Указатели: понятие, инициализация.

В процессе компьютер.прогр.имена перем. преобр. в адреса ячеек пам., в кот хранятся значения перем. Программер может найти собств. перем. для хранения адресов обл-ёй пам. Такие перем.наз-ся указателями.

ук.- (тип*имя перем.). Т.е. ук. не явл. самост. типом, он постоянно связан с к-либо др. конкр. типом.

Ук. могут быть константой либо перем., а так же указывать на константу либо перем.

ук.

Значение ук. перед его исп. обяз.обязано быть иниц-но(т.е. присвоено нач.знач.)

1) присвоение ук. адреса сущ-его объекта

пример:

int a=5 int*pti=&a int*p=pti

Ук-ям можно присв. зн-я адресов объектов лишь того типа, кот они описаны: intb[10]; int*t=6?//присв. адр. начала масс-а

2) Присв. подходящего знач.

ptf=NULL (это означает что отсутств. конкрет. адр. ссылки.

3) Выделение участка динам. пам. и присв. её адр. перем. Доступ к выделен. участ.динам.пам.произв.лишь ч/з ук-и.

Для работы с динам. пам. примен.опер-ии:NEW(для выделения пам.),delete(для освобожд.пам.)

пример:

1)int*n=newint(выделяется достат. для размещ. величины типа int учасика динам. пам. и записывается адр. начала этого участка в перем. n).

2) int*m=newint(10);(делается иниц. выделен. динам. пам. и запис. 10)

3) int*q=newint[10];(выделяется пам.под 10 величин типа int и записывается адресок начала этого участка в перем. q,кот может трактоватся как имя массива.

Чтоб высвободить пам.

1) …delete n; 2)…delete m; 3)…delete [];

9.
Операции с указателями.

1) Оп. разадресации

-косвенное воззвание к объекту. Оп.разадр-ии предусмотрены для доступа к величине адресок кот хранится в ук. Эту опер. можно исп. как для получ. так и для изменен. знач. величины.

пример:

int a=5,b,d;

int*pti=&a;

….

b=*pti;d=pti+2;

cout<<b<<d;

2) Арифм. оп.

Арифм оп. с ук. автоматич. учитывают размер типа величин адресных ук.

Единицей измерения значения ук. явл.размер соответсв.ему типа. Эти оп. примен. в главном при работе со структурами данных поочередно размещённых в пам.(пр.:массивы). Если ук. на определённый тип увел. либо умен. на константу его

3) Сравнивание ук.

Допускается лишь для ук. 1-го типа.

4) Взятие адреса

Применимо к величинам имеющим имя и размещённым в оперативки.

10.
Указатели и массивы. Массив как параметр функции.

имя масс. обозн. как ук.-константа на массив. В массиве intx[10] x-ук. на нулевой элемент масс-ва, т.е. x=&x[0]. Потому для доступа к элементам масс., не считая индексированных имён можно применять разадрессованные ук.: имя[индекс]-*(имя+индекс) (пр:x[i]-*(x+i))

Т.к. имя масс. явл. ук.- константой, то его недозволено изм. в прогр., т.е. ему недозволено ничего присвоить.

При исп. в качестве парам масс-ва в ф-ию передаётся ук.на его 1-ый элемент, т.е. масс.постоянно передаётся по адресу. При всем этом инф. о кол-ве элем. масс. пропадает и следует передавать его размерность ч/з отдельные парам. Передать масс. в ф-ию можно след. сп.:

1)func(inta[N],intN)

2)func(int a[], int N)

3)func(int *a, int N)

11.
Динамические массивы.

Дин. масс. используются если до начала работы прогр. неизв.сколько в масс.элем-в. Пам. под их выделяется с пом. операции new.

В дин. обл.пам.(heap) во время вып.прогр. Адр.её начала запис-ся в ук.(пр:intn=10; int*a=newint[n]//в дин.пам.выд.обл.пам.дост-я для размещ.10 элем.типа int.

Дин.мас-ы недозволено при созд. иниц-ать. и они не обнуляются.

Преимущество дин.мас.-размерность быть может переменной, т.е. объём пам. выд-ой под масс.определяется на шаге выполнен.прогр.

Воззвание к элементу дин.мас.осущ. так же как к элементу обыденного (a[3] либо *(а+3)

Если дин. масс. в к-то момент работы прогр. больше не нужен нужно высвободить область пам. кот.он занимает с пом. операции delete[]a;

Для созд.дин.многомер.мас. нужно указать в операции new все его размерности. Самая левая (1-ая) размерность быть может переменной.

пример:

int nstr=5;

int **m=(int**)new int[nstr][10];

либо

int n;

cout int m=5;

cin>>n;

int(*a)[m]=new int[n][m];

Наиболее всепригодный метод выделения пам.под 2-мерн.мас., когда обе его размерности задаются на шаге выполнения прогр. Освобождение пам. из под мас. с хоть каким кол-вом конфигураций вып. с пом. оп delete[].

12.
Структуры: определение, инициализация.

С. – непростой тип данных, представляющий из себя совокупа разнотипных частей.

Тип стр. – обычно исп. при разработке информационных систем и баз данных.

Struct [ имя типа ]

{ тип 1 элемент_1;

тип 2 элемент_2;

тип n элемент_n;

}[список_описателей];

Элем-ы стр. наз-ся палями стр. и могут иметь хоть какой тип, не считая типа эт.стр., но быть может ук-лем на него

пример:

struct student

{char fam[30];

int kurs;

char group[6];

float ball;}

student-имя стр.типа, кот. быть может назначен некот. перем.

Описание перем: [struct] student stud1, stud2(перем.структ.типа);

Быть может совмещено описание типа стр. и объявление перем-х этого типа

пример:

[struct] student

{char fam[30];

int kurs;

char group[6];

float ball;}

{stud1,stud2,*pst(ук.наструктуру);}

Поля стр. могут быть в свою очередь данными типа стр.

пример:

struct

{float x: float y;};

struct line

{struct

Инициал.перем.стр.типа

struct 1{a,b,c,d};

pointz={l;2;3}

Перем.стр.типа можно располагать в дин.обл.пам. Для этого нужно обрисовать ук.на стр.и выд.под неё пространство.(пр:student*pst=newstudent)

Доступ к элем. стр. осущ.с пом.опер.выбора (точка) при воззвании к полю ч/з имя структ. и-> при воззвании ч/з ук.

пример:

struct student stud1, *ps;

ps->stip=150;

К любому элем. стр. перем. Stud 1 можно обратится 3-мя методами.

1) Stud 1. fam;

2) (* pst). fam;

3) pst -> fam

Если элем. стр. явл. др. стр., то доступ к её элем. осущ. ч/з 2 операции выбора.

к примеру:

Struct A

{ int a;

double x;

}

Struct B

{ Struct A b;

double x;

} S, x;

S.b.a=1;

S, b. x= 0.5;

S.x=0.125;

x. b. a=2;

x. b. x=-0.5;

x. x.=2.5;

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

13.
Операции над структурами.

1) Присвоение стр.,если они имеют одинак.тип.При всем этом происходит поэлементное копирование:

пример:

a) struct student stud1,stud2,*ps;

stud2=stud1;

(*ps)=stud1;

b) struct

(a.x=1;a.y=1;)-(bx=ax;by=ay) b=a;

2) Вв/вывстр., какимас-ов, выполняетсяпоэлементно(пр:cin>>stud.fam>>stud.kurs; cout<<stud.fam<<” “<<stud.kurs<<endl;

3) Получение адр стр-ы(studentstud1,*ps; studentps=&stud1;).В отличие от масс. имя стр.не имеет никакого значения.

4)Стр-у можно возвращать в качестве значения ф-ии. Стр-у можно передавать в качестве парам.ф-ии.(пр: structpointmake(intx, inty) {structpointtemp; temp.x=x; temp.y=y; returntemp;} b =make(1.1);)

При вызове ф-ии в качестве фактич.аргум.указываются имена стр-ых перем-ых.(пр:structcomplexx,y,z;….z=add1(x,y);)

14.
Массивы структур. Объединения.

Структуры, как и др. переменные, могут объединяться в массивы. Массив структур – это комфортное ср-во представления и обработки табличной инфы. Так к примеру: сведения о 100 студентах могут хранится в массиве структур:

Studentstud [100];

Тогда сведения о одном студенте могут обозначатся как:

stud [1]. fam;либо

stud [5]. kurs;

О. представляют собой все поля кот представл. по одному адресу.(пр: union имя_типа {определения частей};

Длина о. равна большей из длин его полей. В любой момент времени переменной типа о. хранится лишь одно больше 1-го поля сразу не требуется.(пр: unions {inti; chark; longintL;};

15.
понятие потока. Систематизация потоков.

Под вв/выв понимается процесс обмена инф. м/у оперативной пам. и внеш. устр-ми. Осн. понятием связанным с инф. на вне шустр явл-ся понятие «файл». Всякая опер вв/выв трактуется как опер обмена с файломи. Потому организация вв/выв в языке прогр-это организация работы с файлами.

Различают понятия внутр.(логического) и наружного (физического). Аналогом понятия внутр. файла в Си явл понятие потока. Поток(stream)-это последовательность байтов, передаваемая в процессе вв/выв и независимая от определенного устр., с кот делается обмен инф.

Чтение данных из потока наз-ся помещением либо подключением.

По направлению обмена потоки можно поделить на входные(данные вводятся в пам.) и данные выводимые из памяти.

По виду устр. с кот. работает поток их можно поделить на:

-стандартные (для передачи данных от клав)

-файловые(для обмена инф. с файлами на внеш носит.)

-строковые(для работы с массивами симв в операт пам)

Для поддержки потоков библ Си содержит иерархию классов построенную на базе класса ios(includeoutputstream)

Этот класс содержит общие для вв и выв поля и способы.

16. Обычные потоки.

Прямыми потоками класса ios (производными классами) явл-ся класс istream (класс входных потоков) и ostream(класс выходных потоков); потомком этих 2-х классов явл класс iostream вв/выв).

объект cout принадлежит классу ofstream и представляет собой поток вывода связанный с экраном.Оп. поместить в поток cout<<aозначает, что зн. «а» обязано быть выв. из пам.на экран.

объект cin принадлежит iostream и явл.потоком связанным с клав. Операции:взять из потока cin>>а значит что

17.
Файловые потоки. Запись данных в файл. Режимы открытия файлов.

При обработке файлов в Си исп. 3 класса:

1)ifstream-класс входных потоков,вып.опер.вв. из файла.

2)ofstream-класс выходных пот,вып.опер.выв в файл.

3)fstream-класс двунаправленных ф.пот.,вып.вв/выв инф.

Эти классы явл. производными от классов istream,ostream,iostream. Потому они наследуют операции >>,<< и др.оп.

По способу доступа файлы можно поделить на:

1) поочередные (текстовые,чт. и зап. в кот.произв-ся с начала б зи б)

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

1)#include<fstream.h>

2)объединяем файловую перем.выходного ф-ого потока.

ofstreamfout:

открываем физ-ий файл fout.open (“имя физ.файла”)

ofstreamfout(“output.txt [режим открытия ф.]);

3) Записываем в ф.инф. fout<<”z=”<<z<<endl;

4) Закр.ф. fout.close();

ios::app – отрк.ф.для добав. в конец

ios::ate – установить ук.на конец ф.

ios::in – откр.ф.для вв.

ios::out – откр.ф.для выв.(зап.)

ios::trunt – если ф.сущ.,то удалить. По умолч.устан.для ios::out

ios::nocreate – если ф.не сущ,выдать ош.

ios::noreplace – если ф. сущ., выдать Ош.

ios::binary – откр.ф. в двоичном режиме.

пример: ifstream fin(“input.txt”,ios::in|ios::nocreate)

18.
Чтение данных из файла.

1) Подкл.библ. fstream

2) Объявл.ф-вую перем входного ф.потока.

3) откр.физ.ф. ifstream.fin(“input.txt”,[режим откр.ф.])

4) Вв данные из ф. fin>>a

5) Закрываем fin.close();

19.
Форматирование данных: флаги форматирования. Манипуляторы.

Ф. может осущ 3-мя методами:

1) с пом. флагов

2) с пом. манипуляторов

3) с пом. форматирующих способов

1 метод

Флаги представл.собой отдельные виды объединенные в поле x_flags класса ios.

left-выравн. по левому краю

right-по правому(умолч)

dec: десятичн.сис.счисл.(умолч)

oсt: 8-ая сис.сч.

hex: 16-аясис.сч.

scientific:выв вещ.чисел в форме мантиссы с порядком.

fixet: выв вещ чисел в форме с фиксир. точкой.

Не считая флагов для форм-я исп.след.поля класса ios:

x_width- задаёт мин. ширину выв.

x_precision- задаёт кол-во цифр дроб.части при выв значения fixed либо общее кол-во означающих цифр при выв знач scientific.

(<iomanip.h>)

М. делятся на:

1)обыкновенные, не требующие указания аргумента.

2)параметризированные: требуют парам.

Воспользоваться манн.проще чем флагами.

Параметриз.ман.

setbase(intn)-задаёт парам сис.сч.

setfill-устанавливает знак заполнитель с кодом равным значению парам

setprecision- устанавливает макс.кол-во в дробной части, если число с фикс точкой, либо если число представлено её мант. и парядком.

setw(int)-задаёт макс. ширину поля вв.

20.
Строчки: описание, ввод/вывод.

В Си 2 вида строк: Си строчки и Класс обычные библ Си, класс стринг. Си строчка представл. собой масс симв завершающийся сим-м с кодом нуль(‘