Списки.

 

Teg – описание структуры.

 

<определение типа структура с помощью тега>≡

struct <идент.>

{

<резервирование памяти>;

{< резервирование памяти >;}

};

 

Пример: Определим тип элемента односвязного списка.

 

struct tinfo

{

float x, y;

}

struct tel //здесь tel-идентификатор типа пользователя//

{

tinfo info; //информационная часть//

tel *link; //ссылочная часть//

}

typedef tel* ptel; //теперь ptel является указателем на tel//

 

В Си++ вместо t^.info.x (как было в паскале) мы будем писать t->info.x.Это является обращением к записи, на которую ссылается указатель

 

Организация односвязного списка по принципу ссылки вперед.

Пример:

Функция ввода списка с клавиатуры

b, t, p – указатели на первый, текущий и на предшествующий элементы соответственно.

 

Блок – схема:

 

Текст программы:

 

void VVKL (ptel &b, int &n)

{

ptel t, p;

n=0;

do

{

t=new tel;

n++;

cout<<”Znachenie pervogo chlena ? ”;

cin>>t->info.x;

cout<<” Znachenie vtorogo chlena ? ”;

cin>>t->info.y;

if (n==1) b=t; else p->link=t;

p=t;

}

while (printf(“Prodolgit’ vvod? y/n ? ”)&&getchar()==’y’);

t->link=NULL;

}

 

 

Файлы.

 

Файл – упорядоченная совокупность произвольного числа компонентов, расположенная на внешнем запоминающем устройстве, и имеющая имя, называемое физическим именем файла. В программе файлу соответствует внутреннее логическое имя файла <идент.>. На языке С файл имеет сложную организацию и рассматривается как структура.

Работа с файлами в С реализуется через буфер. В С существует два вида файлов: текстовые и бинарные (двоичные). Текстовый – это файл, содержащий текстовые данные, как правило, организованные в виде строк. По умолчанию файлы рассматриваются как текстовые.Бинарный (двоичный) – это файл, содержащий последовательность произвольных байтов. Байты состоят из бит, т.е. двоичных цифр. Текстовые файлы являются частным случаем двоичных файлов, и, таким образом, в широком значении слова под определение «двоичный файл» подходит любой файл.

Внутреннее логическое имя файла <идент.> должно быть объявлено в программе:

<резерв. памяти под указатель на буфер файла>≡FILE* <идент.>

Например:

FILE *prfl;

после объявления имя prfl будет являться указателем на некоторый файл.

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

 

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

<открытие файла >≡fopen(“<имя файла>; <атрибут файла>”)

атрибуты: w - чтение, r - запись, q;

значение функции – указатель на буфер.

<идент.>≡fopen (“имя файла”, “<атрибут>”); - связывает имя файла с буфером.

 

Для работы с существующим файлом можно использовать следующую структуру

if ((<идент.>=fopen(“<имя файла>”,”r”))!=NULL)

{

//работа с файлами//

}

else

cout<<”fayl ne nayden”<<endl;

 

2. После окончания работы с файлом он должен быть закрыт с помощью функции:

<закрытие файла >≡fclose(<идент>)

Она возвращает значение 0, если файл закрыт успешно, и ненулевое значение в противном случае.

 

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

 

3.Функции форматированного ввода и вывода в файл имеют следующий вид: <форматированный вывод в файл>≡fprintf(<идент.>,<шаблон вывода>,<список вывода>);

<форматированный ввод из файла>≡fscanf(<идент.>,<шаблон вввода>,<список ввода>)

Действие этих функции аналогично действию функций scanf() и printf(), но здесь дополнительно вводится указатель на файл <идент.>, который в отличие от предыдущих функций используется в качестве первого аргумента.

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

Пример:

getc()!=EOF.