Модульное программирование

Автор работы: Пользователь скрыл имя, 03 Ноября 2009 в 12:46, Не определен

Описание работы

Шпаргалки по информатике

Файлы: 1 файл

Информ_шпоры_теория.doc

— 183.00 Кб (Скачать файл)
  1. Модульное программирование. Понятие  функции.

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

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

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

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

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

 тип-результата имя-функции (спис.форм.перем.)

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

{операторы}

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

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

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

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

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

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

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

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

   Способы:

  1. С пом. глоб. перем.
  2. Через возвращение ф-ией значения (оператор return).

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

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

  1. Через параметры: 

  Три способа  передачи пар-ра в ф-ию:

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

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

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

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

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

  Любая прогр на Си содержит обращение к стандартной библ. Кроме того программист может созд собств библ. Их подключ с пом. директивы 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 (getmax x()) и по y (getmax y()).

  Текущ корд. указат.курсора(get x(),get y()).

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

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

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

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

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

  Вывод лин.-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,граница(должен совп.с цв контура)  
 
 
 

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

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

1)Сегмента кода, в кот.расположены машинные команды.

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

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

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

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

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

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

 Класс пам.определяет:

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

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

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

1)в пределах  файла

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

3)в пр.прототипа   ф-ии

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

  Внешний класс

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

  Автоматич. класс

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

  Статический класс.

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

  Регистровый класс

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

     

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

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

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

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

  Инициализация ук.

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

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

пример:

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

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

  1. Присв. нужного знач.

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

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

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

  пример:

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

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

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

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

  1. …delete n; 2)…delete m; 3)…delete [];
  2. Операции с указателями.
  3. Оп. разадресации(*)-косвенное обращение к объекту. Оп.разадр-ии предназначены для доступа к величине адрес кот хранится в ук. Эту опер. можно исп. как для получ. так и для изменен. знач. величины.

  пример:

int a=5,b,d;

int*pti=&a;

….

b=*pti;d=pti+2;

cout<<b<<d;

  1. Арифм. оп.

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

 Единицей  измерения значения  ук. явл.размер соответсв.ему типа. Эти оп. примен. в основном при работе со структурами данных последовательно размещённых в пам.(пр.:массивы). Если ук. на определённый тип увел. или умен. на константу его значение изм на величину этой конст. умноженную на размер объекта данного типа. Разность 2-х ук.-это разность их знач. делённая на размер типа в байтах. Суммирование ук. не допускается. Инкремент перемещает ук.к след.элем. масс., декремент – к предыдущ.

  1. Сравнивание ук.

Информация о работе Модульное программирование