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

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

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

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

Файлы: 1 файл

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

— 183.00 Кб (Скачать файл)

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

  1. Взятие адреса

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

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

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

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

  Мас. как параметр ф-ии

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

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

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

3)func(int *a, int N) 

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

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

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

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

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

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

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

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

 пример:

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[]. 

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

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

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

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 point

{float x: float y;};

struct line

{struct point p1;struct point p2;};

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

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

point z={l;2;3}

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

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

 пример:

struct student stud1, *ps;

ps->stip=150;

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

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;

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

 

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

  пример:

   a) struct student stud1,stud2,*ps;

    stud2=stud1;

    (*ps)=stud1;

     b) struct point a,b;

       (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) Получение  адр стр-ы(student stud1,*ps; student ps=&stud1;).В отличие от масс. имя стр.не имеет никакого значения.

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

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

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

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

Student stud [100];

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

stud [1]. fam;или

stud [5]. kurs;

  Объединения

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

 Длина об. равна наибольшей из длин его  полей. В каждый момент времени  переменной типа об. хранится  только одно значение. Об. применяются  для экономии памяти в тех случаях когда известно, что больше одного поля одновременно не требуется.(пр: union s {int i; char k; long int L;}; 

  1. Понятие потока. Классификация  потоков.

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

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

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

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

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

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

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

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

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

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

Иерархия  классов 
 
 
 
 
 

  1. Стандартные потоки.

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

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

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

 

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

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

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

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

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

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

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

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

 Создание ф.послед.доступа и запись его данных.

1)#include<fstream.h>

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

 ofstream fout:

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

 ofstream fout(“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) 

  1. Чтение  данных из файла.
  2. Подкл.библ. fstream
  3. Объявл.ф-вую перем входного ф.потока.
  4. откр.физ.ф. ifstream.fin(“input.txt”,[режим откр.ф.])
  5. Вв данные из ф. fin>>a
  6. Закрываем fin.close();
 
  1. Форматирование  данных: флаги форматирования. Манипуляторы.

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

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

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

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