🗊Презентация Организация ввода-вывода

Нажмите для полного просмотра!
Организация ввода-вывода, слайд №1Организация ввода-вывода, слайд №2Организация ввода-вывода, слайд №3Организация ввода-вывода, слайд №4Организация ввода-вывода, слайд №5Организация ввода-вывода, слайд №6Организация ввода-вывода, слайд №7Организация ввода-вывода, слайд №8Организация ввода-вывода, слайд №9Организация ввода-вывода, слайд №10Организация ввода-вывода, слайд №11Организация ввода-вывода, слайд №12Организация ввода-вывода, слайд №13Организация ввода-вывода, слайд №14Организация ввода-вывода, слайд №15Организация ввода-вывода, слайд №16Организация ввода-вывода, слайд №17Организация ввода-вывода, слайд №18Организация ввода-вывода, слайд №19Организация ввода-вывода, слайд №20Организация ввода-вывода, слайд №21Организация ввода-вывода, слайд №22Организация ввода-вывода, слайд №23Организация ввода-вывода, слайд №24Организация ввода-вывода, слайд №25Организация ввода-вывода, слайд №26Организация ввода-вывода, слайд №27Организация ввода-вывода, слайд №28Организация ввода-вывода, слайд №29Организация ввода-вывода, слайд №30Организация ввода-вывода, слайд №31Организация ввода-вывода, слайд №32

Содержание

Вы можете ознакомиться и скачать презентацию на тему Организация ввода-вывода. Доклад-сообщение содержит 32 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1





Тема 9
Организация ввода-вывода
Описание слайда:
Тема 9 Организация ввода-вывода

Слайд 2





Концепции организации ввода-вывода
В языке C++, как и в C, не предусмотрены какие-либо возможности для организации ввода-вывода. Весь ввод-вывод перенесен в специальные библиотеки. 
Это позволило добиться эффекта ”независимости от платформы”, иначе говоря, получить аппаратно независимый язык разработки программ для различных платформ.
Описание слайда:
Концепции организации ввода-вывода В языке C++, как и в C, не предусмотрены какие-либо возможности для организации ввода-вывода. Весь ввод-вывод перенесен в специальные библиотеки. Это позволило добиться эффекта ”независимости от платформы”, иначе говоря, получить аппаратно независимый язык разработки программ для различных платформ.

Слайд 3





Два механизма ввода-вывода в C++
В программах на языке С++ можно равноправно использовать две библиотеки ввода-вывода: 
стандартную библиотеку функций ввода-вывода языка С (стандарт ANSI С);
библиотеку потоковых классов, специально созданную для языка С++. 
Эти библиотеки используют два принципиально различных механизма для организации ввода-вывода: 
первый основан на концепции файлов; 
второй работает со специальными классами, ориентированными на ввод-вывод – потоковыми классами.
Описание слайда:
Два механизма ввода-вывода в C++ В программах на языке С++ можно равноправно использовать две библиотеки ввода-вывода: стандартную библиотеку функций ввода-вывода языка С (стандарт ANSI С); библиотеку потоковых классов, специально созданную для языка С++. Эти библиотеки используют два принципиально различных механизма для организации ввода-вывода: первый основан на концепции файлов; второй работает со специальными классами, ориентированными на ввод-вывод – потоковыми классами.

Слайд 4





Ввод-вывод в стиле ANSI C
Описания функций, а также определения переменных и констант задаются в файлах <stdio.h> или <cstdio>.
Некоторые переменные и константы:
NULL = 0 – пустой указатель;
EOF = -1 возвращается функциями ввода-вывода при достижении конца файла
FILE – тип, описанный оператором struct. Поля этой структуры содержат информацию, необходимую для корректной работы с файлом. Программисту не требуется знать содержание этой структуры!
Описание слайда:
Ввод-вывод в стиле ANSI C Описания функций, а также определения переменных и констант задаются в файлах <stdio.h> или <cstdio>. Некоторые переменные и константы: NULL = 0 – пустой указатель; EOF = -1 возвращается функциями ввода-вывода при достижении конца файла FILE – тип, описанный оператором struct. Поля этой структуры содержат информацию, необходимую для корректной работы с файлом. Программисту не требуется знать содержание этой структуры!

Слайд 5





Файлы
Термин «файл» включает в себя два понятия:
именованная совокупность данных, хранящаяся на внешнем носителе и обрабатываемая операционной системой, как единое целое;
конструкция языка программирования,  обеспечивающая работу механизмов ввода-вывода.
В рамках данной темы мы в основном будем рассматривать второе определение. Однако термин «имя файла» относится к первому определению!
Описание слайда:
Файлы Термин «файл» включает в себя два понятия: именованная совокупность данных, хранящаяся на внешнем носителе и обрабатываемая операционной системой, как единое целое; конструкция языка программирования, обеспечивающая работу механизмов ввода-вывода. В рамках данной темы мы в основном будем рассматривать второе определение. Однако термин «имя файла» относится к первому определению!

Слайд 6





Основные принципы работы с файлами
Файл – конечная совокупность данных на внешнем носителе. Данные из файла можно читать в память, а также можно записывать данные в файл из памяти. Перед этими операциями файл необходимо открыть, а после завершения – закрыть.
Чтение и запись файла производятся порциями.
Текущая позиция – смещение в байтах относительно начала файла той порции, которая была прочитана или записана.
Значение текущей позиции можно менять без операций чтения/записи.
Описание слайда:
Основные принципы работы с файлами Файл – конечная совокупность данных на внешнем носителе. Данные из файла можно читать в память, а также можно записывать данные в файл из памяти. Перед этими операциями файл необходимо открыть, а после завершения – закрыть. Чтение и запись файла производятся порциями. Текущая позиция – смещение в байтах относительно начала файла той порции, которая была прочитана или записана. Значение текущей позиции можно менять без операций чтения/записи.

Слайд 7





Механизм чтения данных из файла
Смещаем текущую позицию на начало читаемой порции;
Читаем очередную порцию
Описание слайда:
Механизм чтения данных из файла Смещаем текущую позицию на начало читаемой порции; Читаем очередную порцию

Слайд 8





Определение конца файла
Прочитав последнюю порцию данных, мы ещё не знаем, что она последняя!
Попытка следующего чтения вызывает ситуацию «конец файла». Это – ещё не ошибка, но результат чтения не определён!
Описание слайда:
Определение конца файла Прочитав последнюю порцию данных, мы ещё не знаем, что она последняя! Попытка следующего чтения вызывает ситуацию «конец файла». Это – ещё не ошибка, но результат чтения не определён!

Слайд 9





Типы файлов
В языке C++ файлы делятся на 2 типа:
текстовые
бинарные
Текстовые файлы – совокупность строк (порция – строка). Строки отделяются друг от друга разделителями (в Windows – '\0x0D' и ' \0x0A ' ). Последняя строка может иметь разделители, а может и не иметь.
Для текстовых файлов возможен форматированный ввод/вывод.
Бинарные файлы  - совокупность байт. Размер порции определяется в каждой операции чтения/записи. Форматированный ввод/вывод невозможен.
Описание слайда:
Типы файлов В языке C++ файлы делятся на 2 типа: текстовые бинарные Текстовые файлы – совокупность строк (порция – строка). Строки отделяются друг от друга разделителями (в Windows – '\0x0D' и ' \0x0A ' ). Последняя строка может иметь разделители, а может и не иметь. Для текстовых файлов возможен форматированный ввод/вывод. Бинарные файлы - совокупность байт. Размер порции определяется в каждой операции чтения/записи. Форматированный ввод/вывод невозможен.

Слайд 10





Описание файлов
Файлы описываются с помощью указателей на внутреннюю структуру FILE. Знание полей этой структуры не обязательно, поскольку работа с файлами обеспечивается на уровне соответствующих функций. Примеры описания файлов:
FILE *f1, *f2;
Программист имеет возможность работы с несколькими предопределенными файлами: stdin, stdout, stderr.
Описание слайда:
Описание файлов Файлы описываются с помощью указателей на внутреннюю структуру FILE. Знание полей этой структуры не обязательно, поскольку работа с файлами обеспечивается на уровне соответствующих функций. Примеры описания файлов: FILE *f1, *f2; Программист имеет возможность работы с несколькими предопределенными файлами: stdin, stdout, stderr.

Слайд 11





Открытие файлов
Функция открытия файла имеет формат
FILE *fopen (const char* имяфайла, const char* режимоткрытия)
В качестве режима открытия могут быть заданы следующие значения:
r – существующий файл открывается для чтения;
w – создается новый файл, который открывается для записи;
a – существующий файл открывается для добавления информации в его конец;
r+ – существующий файл открывается для чтения и записи;
w+ – создается новый файл, который открывается для чтения и записи;
a+ – существующий файл открывается для чтения и добавления информации в его конец.
Описание слайда:
Открытие файлов Функция открытия файла имеет формат FILE *fopen (const char* имяфайла, const char* режимоткрытия) В качестве режима открытия могут быть заданы следующие значения: r – существующий файл открывается для чтения; w – создается новый файл, который открывается для записи; a – существующий файл открывается для добавления информации в его конец; r+ – существующий файл открывается для чтения и записи; w+ – создается новый файл, который открывается для чтения и записи; a+ – существующий файл открывается для чтения и добавления информации в его конец.

Слайд 12





Открытие файлов (продолжение)
Кроме того, в режиме открытия можно указывать символы t или b, которые соответствуют текстовому или бинарному файлу
Если открытие файла выполнено неудачно, функция fopen возвращает NULL.
Однако, если мы открыли пустой файл, мы ещё не знаем, что он пустой!
Для закрытия файла используется вызов функции fclose.
Описание слайда:
Открытие файлов (продолжение) Кроме того, в режиме открытия можно указывать символы t или b, которые соответствуют текстовому или бинарному файлу Если открытие файла выполнено неудачно, функция fopen возвращает NULL. Однако, если мы открыли пустой файл, мы ещё не знаем, что он пустой! Для закрытия файла используется вызов функции fclose.

Слайд 13





Канва программы, работающей с файлом
FILE *f;
if ((f = fopen(”myfile.txt”, ”rt”)) != NULL) {
   // работа с файлом
 fclose(f);
}
Описание слайда:
Канва программы, работающей с файлом FILE *f; if ((f = fopen(”myfile.txt”, ”rt”)) != NULL) { // работа с файлом fclose(f); }

Слайд 14





Другие функции для работы с файлами
Функция 
int ferror(FILE*)
возвращает значение, не равное нулю, при возникновении ошибки ввода-вывода. 
Функция 
int feof(FILE*)
возвращает ненулевое значение, если достигнут конец файла.
Описание слайда:
Другие функции для работы с файлами Функция int ferror(FILE*) возвращает значение, не равное нулю, при возникновении ошибки ввода-вывода. Функция int feof(FILE*) возвращает ненулевое значение, если достигнут конец файла.

Слайд 15





Типы ввода/вывода
ввод/вывод строк
ввод/вывод символов
форматированный ввод/вывод (только для текстовых файлов)
Описание слайда:
Типы ввода/вывода ввод/вывод строк ввод/вывод символов форматированный ввод/вывод (только для текстовых файлов)

Слайд 16





Ввод/вывод нуль-терминированных строк
Для чтения строки из файла и записи строки в файл используются функции
char *fgets(char *буфер, int длина, FILE *файл)
Функция возвращает NULL в случае ошибки или достижения конца файла
char *gets(char *буфер)
Чтение производится из файла stdin.
int fputs(char *буфер, FILE *файл)
Функция возвращает EOF в случае ошибки ввода-вывода
int puts(char *буфер)
Запись производится в файл stdout.
Описание слайда:
Ввод/вывод нуль-терминированных строк Для чтения строки из файла и записи строки в файл используются функции char *fgets(char *буфер, int длина, FILE *файл) Функция возвращает NULL в случае ошибки или достижения конца файла char *gets(char *буфер) Чтение производится из файла stdin. int fputs(char *буфер, FILE *файл) Функция возвращает EOF в случае ошибки ввода-вывода int puts(char *буфер) Запись производится в файл stdout.

Слайд 17





Пример работы с текстовыми файлами
Задача: текстовый файл input.txt содержит строки длиной не более 100 символов. Найти число строк, начинающихся с пробела.
int main() {
 int N = 0;
 FILE *f;
 char *S = new char[101];
 if ((f = fopen(”input.txt”, ”rt”)) != NULL) {
   while (fgets(S, 101, f)!= NULL) 
    if (S[0] == ’ ’)
     N++;
   fclose(f);
   }
 cout << N;
 return 0;
}
Описание слайда:
Пример работы с текстовыми файлами Задача: текстовый файл input.txt содержит строки длиной не более 100 символов. Найти число строк, начинающихся с пробела. int main() { int N = 0; FILE *f; char *S = new char[101]; if ((f = fopen(”input.txt”, ”rt”)) != NULL) { while (fgets(S, 101, f)!= NULL) if (S[0] == ’ ’) N++; fclose(f); } cout << N; return 0; }

Слайд 18





Посимвольный ввод/вывод
При посимвольном вводе-выводе данные читаются из файла и записываются в файл блоками. За одну операцию чтения может быть прочитано несколько блоков (аналогичное правило действует для записи данных).
Как размер блока, так и их количество указывается при каждой операции ввода-вывода.
Описание слайда:
Посимвольный ввод/вывод При посимвольном вводе-выводе данные читаются из файла и записываются в файл блоками. За одну операцию чтения может быть прочитано несколько блоков (аналогичное правило действует для записи данных). Как размер блока, так и их количество указывается при каждой операции ввода-вывода.

Слайд 19





Функции посимвольного ввода/вывода
Чтение данных:
size_t fread(void *буфер, size_t длинаблока, 
            size_t числоблоков, FILE *файл)
Запись данных:
size_t fwrite(const void *буфер, size_t длинаблока, 
            size_t числоблоков, FILE *файл)
Обе функции возвращают число реально прочитанных или записанных блоков, так что результат их работы также можно использовать вместо проверки на конец файла
Целочисленный тип size_t используется для хранения информации о размере файла.
Описание слайда:
Функции посимвольного ввода/вывода Чтение данных: size_t fread(void *буфер, size_t длинаблока, size_t числоблоков, FILE *файл) Запись данных: size_t fwrite(const void *буфер, size_t длинаблока, size_t числоблоков, FILE *файл) Обе функции возвращают число реально прочитанных или записанных блоков, так что результат их работы также можно использовать вместо проверки на конец файла Целочисленный тип size_t используется для хранения информации о размере файла.

Слайд 20





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

Слайд 21





Пример работы с файлом, содержащим совокупность записей
Задача: Файл содержит несколько записей о студентах. Каждая запись имеет следующую структуру:
struct Student {
	char FIO [36];
	int kurs;
	int grup;
};
Посчитать количество записей о первокурсниках, хранящихся в файле.
Описание слайда:
Пример работы с файлом, содержащим совокупность записей Задача: Файл содержит несколько записей о студентах. Каждая запись имеет следующую структуру: struct Student { char FIO [36]; int kurs; int grup; }; Посчитать количество записей о первокурсниках, хранящихся в файле.

Слайд 22





Пример работы с файлом, содержащим совокупность записей (продолжение)
int main () {
	setlocale(LC_ALL, ".1251");
	Student *st = new Student;
	int N=0;
	FILE *f;
	if ((f=fopen("students.dat", "rb"))!=NULL) {
		while (fread(st, sizeof(Student), 1, f)) {
			if (st->kurs==1)
				N++;
		}
		fclose(f);
		cout << "Число первокурсников: " << N << endl;
	}
	else
		cout << "Ошибка открытия файла!" << endl;
	delete st;
	return 0;
}
Описание слайда:
Пример работы с файлом, содержащим совокупность записей (продолжение) int main () { setlocale(LC_ALL, ".1251"); Student *st = new Student; int N=0; FILE *f; if ((f=fopen("students.dat", "rb"))!=NULL) { while (fread(st, sizeof(Student), 1, f)) { if (st->kurs==1) N++; } fclose(f); cout << "Число первокурсников: " << N << endl; } else cout << "Ошибка открытия файла!" << endl; delete st; return 0; }

Слайд 23





Форматированный ввод/вывод
При форматированном вводе/выводе происходит преобразование данных, так что в памяти и в файле данные хранятся в различных форматах . 
Примеры преобразования:
перевод чисел в другую систему счисления:
преобразование строк
Описание слайда:
Форматированный ввод/вывод При форматированном вводе/выводе происходит преобразование данных, так что в памяти и в файле данные хранятся в различных форматах . Примеры преобразования: перевод чисел в другую систему счисления: преобразование строк

Слайд 24





Функции форматированного ввода/вывода
int scanf(const char * формат, [ адреса_переменных ] …)
int fscanf(FILE* файл, const char * формат, [ адреса_переменных ] …)
int printf(const char * формат, [ выражения ] …)
int fprintf(FILE* файл, const char * формат, 
  [ выражения ] …)
int sprintf(char * буфер, const char * формат, 
  [ выражения ] …)
Эти функции перед выводом преобразуют заданную строку формата в соответствии с содержащимися в ней спецификациями формата либо извлекают из прочитанной строки данные в переменные с указанными адресами.
Описание слайда:
Функции форматированного ввода/вывода int scanf(const char * формат, [ адреса_переменных ] …) int fscanf(FILE* файл, const char * формат, [ адреса_переменных ] …) int printf(const char * формат, [ выражения ] …) int fprintf(FILE* файл, const char * формат, [ выражения ] …) int sprintf(char * буфер, const char * формат, [ выражения ] …) Эти функции перед выводом преобразуют заданную строку формата в соответствии с содержащимися в ней спецификациями формата либо извлекают из прочитанной строки данные в переменные с указанными адресами.

Слайд 25





Примеры спецификаций формата
Описание слайда:
Примеры спецификаций формата

Слайд 26





Примеры спецификаций формата (продолжение)
Описание слайда:
Примеры спецификаций формата (продолжение)

Слайд 27





Пример работы форматированного ввода/вывода
Задача: В заданной матрице  чисел типа double определить максимальный элемент в каждой строке. Нумерация строк для пользователя начинается с единицы.
Строки матрицы заполняются случайными числами.
Описание слайда:
Пример работы форматированного ввода/вывода Задача: В заданной матрице чисел типа double определить максимальный элемент в каждой строке. Нумерация строк для пользователя начинается с единицы. Строки матрицы заполняются случайными числами.

Слайд 28





Пример работы форматированного ввода/вывода (продолжение)
int main () {
	setlocale(LC_ALL, ".1251");
	double Matr [10][10];
	double Max;
	srand((unsigned int) time(NULL));
	for (int i =0; i<10; i++)
		for (int j=0; j<10; j++)
			Matr[i][j] = (double) rand()/13;
	for (int i =0; i<10; i++) {
		Max = Matr[i][0];
		for (int j=1; j<10; j++)
			if (Max < Matr[i][j])
				Max = Matr[i][j];
printf("максимальный элемент в %d-й строке равен %f\n", i+1, Max);
	}
	return 0;
}
Описание слайда:
Пример работы форматированного ввода/вывода (продолжение) int main () { setlocale(LC_ALL, ".1251"); double Matr [10][10]; double Max; srand((unsigned int) time(NULL)); for (int i =0; i<10; i++) for (int j=0; j<10; j++) Matr[i][j] = (double) rand()/13; for (int i =0; i<10; i++) { Max = Matr[i][0]; for (int j=1; j<10; j++) if (Max < Matr[i][j]) Max = Matr[i][j]; printf("максимальный элемент в %d-й строке равен %f\n", i+1, Max); } return 0; }

Слайд 29





Прямой доступ к файлу
Для прямого доступа к содержимому файла используются функции
long ftell(FILE* файл)
int fseek(FILE* файл, long смещение, int начало)
Первая из этих функций возвращает текущую позицию файла (в байтах, счет начинается с нуля), т. е. ту позицию, с которой будет выполнена следующая операция чтения-записи. 
Вторая функция перемещает указатель текущей позиции на указанное смещение.
Описание слайда:
Прямой доступ к файлу Для прямого доступа к содержимому файла используются функции long ftell(FILE* файл) int fseek(FILE* файл, long смещение, int начало) Первая из этих функций возвращает текущую позицию файла (в байтах, счет начинается с нуля), т. е. ту позицию, с которой будет выполнена следующая операция чтения-записи. Вторая функция перемещает указатель текущей позиции на указанное смещение.

Слайд 30





Прямой доступ к файлу (продолжение)
Параметр «начало» может иметь значения следующих констант:
SEEK_CUR – относительно старой текущей позиции;
SEEK_SET – относительно начала файла;
SEEK_END – относительно конца файла.
Функция fseek возвращает 0 в случае успешного завершения, так что запись
if (!fseek(f1, 0, SEEK_END))
  filesize = ftell(f1);
позволяет получить информацию о длине файла в байтах.
Описание слайда:
Прямой доступ к файлу (продолжение) Параметр «начало» может иметь значения следующих констант: SEEK_CUR – относительно старой текущей позиции; SEEK_SET – относительно начала файла; SEEK_END – относительно конца файла. Функция fseek возвращает 0 в случае успешного завершения, так что запись if (!fseek(f1, 0, SEEK_END)) filesize = ftell(f1); позволяет получить информацию о длине файла в байтах.

Слайд 31





Переназначение файлов	
Для переназначения файлов можно использовать функцию
FILE *freopen(const char *имя_файла, const char * режим_открытия, FILE * старый_файл ); 
Пример:
freopen(”gratis.in”, ”rt”, stdin);
freopen(”gratis.out”, ”wt”, stdout);
Описание слайда:
Переназначение файлов Для переназначения файлов можно использовать функцию FILE *freopen(const char *имя_файла, const char * режим_открытия, FILE * старый_файл ); Пример: freopen(”gratis.in”, ”rt”, stdin); freopen(”gratis.out”, ”wt”, stdout);

Слайд 32






Тема «Работа с потоками» переносится на самостоятельное изучение!
Описание слайда:
Тема «Работа с потоками» переносится на самостоятельное изучение!



Похожие презентации
Mypresentation.ru
Загрузить презентацию