Разделы презентаций


Структуры

Содержание

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

Слайды и текст этой презентации

Слайд 1Структуры

Структуры

Слайд 2Структура – это составной объект языка Си, содержащий данные, объединенные

в группу под одним именем. Данные, входящие в эту группу,

называют полями (членами структуры). В отличие от массивов поля могут иметь различные типы.
Для создания объектов-структур надо:
- объявить структурный тип данных, т.е. описать пользовательский тип (выделения памяти не происходит);
- объявить структурные переменные описанного типа, при этом происходит выделение памяти.
Структура – это составной объект языка Си, содержащий данные, объединенные в группу под одним именем. Данные, входящие

Слайд 3Объявление структурного типа выполня-ется в виде шаблона, общий формат которого:

struct

Имя_Типа {
Описание полей
} ;

Структурный тип обычно декларируется

в глобальной области, т.е. до первой выполняемой функции. Тогда его можно использовать во всех функциях, входящих в проект.
Объявление структурного типа выполня-ется в виде шаблона, общий формат которого:			struct Имя_Типа {   		Описание полей			} ;Структурный

Слайд 4 Структурный тип обычно применяется для групповой обработки объектов. Параметрами таких

операций являются адрес и размер структуры.
Так как одним из параметров

обработки структур является размер, нельзя объявлять поля структуры указателем на объект переменного размера, т.е. использовать указатели на char и объекты классов String и AnsiString.
Пример шаблона для обработки информации о результатах сессии студентов
struct Spisok {
char fio [21]; - Фамилия студента
double s_bal; - Средний балл
};
Структурный тип обычно применяется для групповой обработки объектов. Параметрами таких операций являются адрес и размер структуры.	Так как

Слайд 5Создание структурных переменных можно выполнить двумя способами.
Способ 1. В любом

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

описанного ранее типа Spisok :
Spisok zap, *pzap, mas_zap[30];
Объявлены
zap – структурная переменная (запись),
pzap – указатель на структуру,
mas_zap[30] – массив структур.
Создание структурных переменных можно выполнить двумя способами.Способ 1. В любом месте программы объявить переменные, используя описанный ранее

Слайд 6 Способ 2. Объявляют переменные в шаблоне структуры между закрывающейся фигурной

скобкой и символом «;».
Для приведенного ранее примера:
struct Spisok {
char

fio[21];
double s_bal;
} zap, *pzap, mas_zap[30] ;
В таком случае, если объявлены все необходимые переменные, Имя_Типа (Spisok) может отсутствовать.
Способ 2. Объявляют переменные в шаблоне структуры между закрывающейся фигурной скобкой и символом «;». 	Для приведенного ранее

Слайд 7 Объем выделяемой памяти на один элемент структуры кратен байту (8

бит), т.е. для приведенного ранее примера:
struct Spisok {
char fio[21];
double s_bal;
}

;
результат операции
sizeof ( Spisok )
будет равен ???
Объем выделяемой памяти на один элемент структуры кратен байту (8 бит), т.е. для приведенного ранее примера:		struct Spisok

Слайд 8Обращение к полям структур выполняется с помощью составных имен, которые

образуются двумя способами:
1) при помощи операции принадлежности ( . )

от значения (имени структурной переменной) к полю:
Имя_Структуры . Имя_Поля
или
( *Указатель_Структуры ) . Имя_Поля
2) при помощи операции косвенной адресации ( –> ) от адреса к полю
Указатель_Структуры –> Имя_Поля
или
( &Имя_Структуры ) –> Имя_Поля
Обращение к полям структур выполняется с помощью составных имен, которые образуются двумя способами:1) при помощи операции принадлежности

Слайд 9Для объявленных ранее переменных
Spisok zap, *pzap, mas_zap[30];
содержащих поля

char fio[21]; и double s_bal;
1) обращение к полям fio и

s_bal переменной zap:
а) с помощью операции принадлежности
zap . fio и zap . s_bal
б) с помощью операции косвенной адресации
( &zap ) -> fio и ( &zap ) -> s_bal
2) обращение к первому символу строки fio пере-менной zap:
zap . fio [0]
Для объявленных ранее переменных		 Spisok zap, *pzap, mas_zap[30];содержащих поля  char fio[21]; и double s_bal;1) обращение к

Слайд 103) обращение к полям fio и s_bal от указателя

pzap:
а) с помощью операции косвенной адресации
pzap -> fio и

pzap -> s_bal
б) с помощью операции принадлежности
( *pzap ) . fio и ( *pzap ) . s_bal
4) обращение к полям fio и s_bal i-го элемента массива mas_zap:
а) с помощью операции принадлежности
mas_zap[i] . fio и mas_zap[i] . s_bal
б) с помощью операции косвенной адресации
( mas_zap+i ) -> fio и ( mas_zap+i ) -> s_bal
3) обращение к полям fio и s_bal  от указателя pzap:	а) с помощью операции косвенной адресации	 			pzap

Слайд 11Рассмотрим пример программы создания динамического массива структур, содержащих поля fio

и s_bal (как раньше), его заполнение, вывод всей информации на

экран и поиск сведений о студентах, у которых средний балл выше 7,99 баллов.
Рассмотрим пример программы создания динамического массива структур, содержащих поля fio и s_bal (как раньше), его заполнение, вывод

Слайд 12 . . .
struct Spisok { - Шаблон структуры

char fio [21];
double s_bal;
};
Spisok In (void); - Функция

ввода
void Out (Spisok); - Функция вывода

void main ()
{
Spisok *Stud; - Указатель для массива
int i, n;
cout << " Input n : "; - Количество студентов
cin >> n;
. . . struct Spisok {		- Шаблон структуры	   char fio [21];	   double s_bal;};Spisok

Слайд 13 Stud = new Spisok [n]; - Захват памяти
for(i=0;i

[ i ] = In ( );
cout

"\n\t Spisok “ << endl;
for(i=0;i Out ( Stud [ i ] ); - Вывод информации
cout << "\n\t Ball > 7.99“ << endl;
for(i=0;i if ( Stud [ i ] . s_bal > 7.99) - Поиск
Out ( Stud [ i ] ); и вывод
delete [ ] Stud; - Освобождение памяти
}
Stud = new Spisok [n];	- Захват памяти		for(i=0;i 7.99“

Слайд 14//------- Функция Ввода одного элемента структуры -------
Spisok In ( )

{
Spisok z;
cout

Очистка стандартного буфера ввода stdin, необходимая в данном случае перед использованием функции gets
gets ( z.fio );
cout << "\n Ball - ";
cin >> z.s_bal;
return z;
}
//------- Функция Вывода одного элемента структуры ------
void Out ( Spisok z ) {
cout << setw(20) << z.fio << " \t “ << z.s_bal << endl;
}
//------- Функция Ввода одного элемента структуры -------Spisok In ( ) {	Spisok z;	cout z.s_bal;	return z;}//------- Функция Вывода одного

Слайд 15Ф а й л ы

Ф а й л ы

Слайд 16 Файл – это набор данных, размещенный на внешнем носителе и

рассматриваемый в процессе обработки как единое целое. В файлах размещаются

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

Слайд 17 Файлы рассматриваются компилятором как последовательность (поток байт) информации. В начале

работы любой программы автоматически открываются стандартные потоки ввода (stdin) и

вывода (stdout).
Для файлов определен указатель (маркер) чтения-записи данных, который определяет текущую позицию доступа к файлу.
В языке Си имеется большой набор функций для работы с файлами, большинство в stdio.h и io.h.
Потоки данных, с которыми работают функции ввода-вывода по умолчанию, буферизированы. При открытии потока с ним связывается определенный участок памяти, который называется буфером. Все операции чтения-записи ведутся через этот буфер.
Файлы рассматриваются компилятором как последовательность (поток байт) информации. В начале работы любой программы автоматически открываются стандартные потоки

Слайд 18 Для обработки любого файла необходимо выполнить следующие действия:
1) открыть файл;
2)

обработать данные файла (запись, чтение, поиск и т.п.);
3) закрыть файл.


Для обработки любого файла необходимо выполнить следующие действия:		1) открыть файл;		2) обработать данные файла (запись, чтение, поиск и

Слайд 19Открытие файла
Каждому файлу в программе присваивается внутреннее логическое имя, используемое

в дальнейшем при обращении к нему.
Логическое имя (имя файла)

– это указатель на файл, т.е. на область памяти, где содержится вся необходимая информация о нем.
Формат объявления :
FILE *Имя_Указателя;
FILE – структурный тип, описанный в библиотеке stdio.h, содержащий 9-ть полей:
Открытие файла	Каждому файлу в программе присваивается внутреннее логическое имя, используемое в дальнейшем при обращении к нему. 	Логическое

Слайд 20typedef struct
{
unsigned char *curp; //

Current active pointer
unsigned char *buffer;

// Data transfer buffer
int level; // fill/empty level of buffer
int bsize; // Buffer size
unsigned short istemp; // Temporary file indicator
unsigned short flags; // File status flags
wchar_t hold; // Ungetc char if no buffer
char fd; // File descriptor
unsigned char token; // Used for validity checking
} FILE;
typedef struct{  unsigned char *curp;    	// Current active pointer   unsigned char

Слайд 21 Прежде чем начать работать с файлом, его нужно открыть для

доступа с помощью функции
fopen ( Имя_Файла, Режим )
Данная

функция фактическому Имени Файла на носителе (дискета, винчестер) ставит в соответствие логическое имя (Указатель файла).
Имя файла и путь к нему задается первым параметром – строкой, например:
“d:\\work\\Sved.txt” – файл с именем Sved, расширением txt, находящийся на d: в папке work.
Обратный слеш «\», как специальный символ в строке записывается дважды.
Прежде чем начать работать с файлом, его нужно открыть для доступа с помощью функции 		fopen ( Имя_Файла,

Слайд 22 Если путь к файлу не указан, его размещением будет текущая

папка.

При успешном открытии функция fopen возвращает указатель на файл (указатель

файла).

При ошибке возвращается NULL.

Ошибки обычно возникают, когда неверно указывается путь к открываемому файлу, например, если указать путь, запрещенный для записи.
Если путь к файлу не указан, его размещением будет текущая папка.		При успешном открытии функция fopen возвращает указатель

Слайд 23 Второй параметр – строка, в которой задается режим доступа к

файлу:
w – файл открывается для записи (write);
если файла нет,

то он создается; если файл уже есть, то прежняя информация уничтожается;
r – файл открывается для чтения (read); если такого файла нет, то возникает ошибка;
a – файл открывается для добавления (append или add) новой информации в конец;
t – файл открывается в текстовом режиме;
b – файл открывается в двоичном режиме.
Второй параметр – строка, в которой задается режим доступа к файлу:	w – файл открывается для записи (write);

Слайд 24 Последние два режима используются совместно с рассмотренными выше. Возможны следующие

комбинации режимов доступа: w+b, wb+, а также некоторые другие комбинации.
По

умолчанию файл открывается в текстовом режиме.
Пример открытия файла:
FILE *f; – Объявляется указатель f
f = fopen («dat_sp.txt ", "w");
– открывается для записи текстовый файл в текущей папке с именем dat_sp.txt и указателем f,
или более кратко:
FILE *f = fopen (“dat_sp.txt", "w");
Последние два режима используются совместно с рассмотренными выше. Возможны следующие комбинации режимов доступа: w+b, wb+, а также

Слайд 25Закрытие файла
После работы с файлом доступ к нему необходимо закрыть

с помощью функции
fclose ( Указатель_Файла );
Для предыдущего примера: fclose

( f );
Если надо изменить режим доступа к уже открытому файлу, то его необходимо закрыть, а затем открыть с другим режимом:
freopen ( Имя_Файла, Режим, Указатель );
- закрывается файл с заданным в третьем параметре Указателе (аналогично функции fclose), а затем открывается файл, используя первый и второй параметры (аналогично функции fopen).
Закрытие файла	После работы с файлом доступ к нему необходимо закрыть с помощью функции		fclose ( Указатель_Файла ); 	Для

Слайд 26Запись-чтение информации

Основными действиями при работе с файлами являются запись и

чтение информации.
Все действия по чтению-записи данных в файл можно разделить

на три группы:
– операции посимвольного ввода-вывода;
– операции построчного ввода-вывода;
– операции ввода-вывода блоками.

Рассмотрим основные функции записи-чтения данных.
Запись-чтение информации	Основными действиями при работе с файлами являются запись и чтение информации.	Все действия по чтению-записи данных в

Слайд 27 Создание текстовых результирующих файлов обычно необходимо для оформления различных отчетов.
Для

работы с текстовыми файлами чаще всего используются функции
fprintf, fscanf, fgets,

fputs
Параметры и действия этих функций аналогичны рассмотренным ранее функциям printf, scanf, gets и puts.
Отличие состоит в том, что printf и др. работают по умолчанию с экраном монитора и клавиатурой, а функции fprintf и др. – с файлом, указатель которого является одним из параметров.
Создание текстовых результирующих файлов обычно необходимо для оформления различных отчетов.	Для работы с текстовыми файлами чаще всего используются

Слайд 28 1. Например:
. . .
FILE *f1 = fopen(“data.txt”, “w”);
int a =

2, b = 3;
printf ( ” %d + %d =

%d \n ”, a, b, a+b);
fprintf ( f1,” %d + %d = %d\n ”, a, b, a+b);
fclose ( f1 );
. . .
Просмотрев файл f1 любым текстовым редактором, можно убедиться, что данные в нем располагаются так же, как и на экране.
1. Например:		. . .	FILE *f1 = fopen(“data.txt”, “w”);	int a = 2, b = 3;	printf ( ” %d

Слайд 29 2. Например:
. . .
FILE *f1 = fopen ( “data.dat”, “wb”

);
int a, b;
puts ( “ Input a, b” );
scanf (

“%d%d”, &a, &b );
fprintf ( f1,”%d %d”, a, b );
fclose ( f1 );
. . .
Далее по коду считать данные из файла f1 можно следующим образом
f1 = fopen ( “data.dat”, “rb” );
fscanf ( f1, “%d%d”, &a, &b );
. . .
2. Например:		. . .	FILE *f1 = fopen ( “data.dat”, “wb” );	int a, b;	puts ( “ Input a,

Слайд 30 Бинарные файлы обычно используются для обработки данных, состоящих из структур,

чтение и запись которых удобно выполнять блоками.
Функция
fwrite ( p, size,

n, f );
выполняет запись «n» блоков размером «size» байт каждый из области памяти с адресом «p» в файл «f».
Функция
fread ( p, size, n, f );
выполняет чтение «n» блоков размером «size» байт каждый из файла «f» в область памяти с адресом «p».
В случае успеха функция возвращает количество считанных блоков.
Бинарные файлы обычно используются для обработки данных, состоящих из структур, чтение и запись которых удобно выполнять блоками.	Функцияfwrite

Слайд 31Позиционирование в файле
Каждый открытый файл имеет скрытый указатель на текущую

позицию в нем.
При открытии файла этот указатель устанавливается на

позицию, определенную режимом, и все операции в файле будут выполняться с данными, начинающимися в этой позиции.
При каждом чтении (записи) указатель смещается на количество прочитанных (записанных) байт – это последовательный доступ к данным.
С помощью функции fseek можно выполнить чтение или запись данных в произвольном порядке.
Позиционирование в файле	Каждый открытый файл имеет скрытый указатель на текущую позицию в нем. 	При открытии файла этот

Слайд 32fseek ( f, size, code )
выполняет смещение указателя файла f

на size байт в направлении code :
0 – смещение от

начала;
1 – смещение от текущей позиции;
2 – смещение от конца файла.
Смещение может быть как положительным, так и отрицательным, но нельзя выходить за пределы файла.
В случае успеха функция возвращает 0, 1 –при ошибке, например, выход за пределы файла.
Доступ к файлу с использованием этой функции называют произвольным доступом.
fseek ( f, size, code )выполняет смещение указателя файла f на size байт в направлении code :	0

Слайд 33 Рассмотрим некоторые полезные функции:
1) ftell ( f ) – определяет

значение указателя на текущую позицию в файле, –1 в случае

ошибки;
2) fileno ( f ) – определяет значение дескрип-тора (fd) файла f, т.е. номер файла;
3) filelength ( fd ) – определяет длину файла в байтах, имеющего дескриптор fd;
4) chsize ( fd, pos ) – выполняет изменение размера файла, имеющего номер fd, признак конца файла устанавливается после байта с номером pos;
5) feof ( f ) – возвращает ненулевое значение при правильной записи признака конца файла.
Рассмотрим некоторые полезные функции:	1) ftell ( f ) – определяет значение указателя на текущую позицию в файле,

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика