Меню

Если при открытии потока возникла ошибка диск заполнен при записи то указатель на поток приобретет

Disynergy.ru Сдача тестов без предоплаты +7(924) 305-23-08 help@disynergy.ru

Disynergy.ru – Сдача тестов без предоплаты

Email: help@disynergy.ru

Whatsapp/Telegram/Viber: +7(924) 305-23-08

1.… – это массив, элементами которого служат массивы

2.… есть процесс записи значений переменных на каждом шаге работы программы

3.… массив – это одномерный массив, каждым элементом которого является свой одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца

4.… параметры – это локальные переменные, необходимые для описания алгоритма функции, они описываются в ее заголовке и используются в ее определении

5.В C++ циклическая алгоритмическая управляющая структура с предусловием записывается как …

6.В С++ все файлы … последовательность байтов

7.В С++ класс памяти определяет … переменной

8.В С++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …

9.В С++ тип данных категории void …

10.В С++ циклическая алгоритмическая управляющая структура с параметром записывается как …

11.В С++ циклическая алгоритмическая управляющая структура с постусловием записывается как …

12.В языке С++ …

13.В языке С++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …

14.В языке С++ рекомендуется первоначально использовать при написании программ …

15.Выходные параметры – это …

16.Говоря о порядке обращения к элементам двумерного массива, можно утверждать, что …

17.Говоря об одномерных массивах, можно утверждать, что …

18.Диапазон типа данных float ̶…

19.Для доступа к компонентам файла …

20.Для использования способа передачи входных данных, являющихся сложными структурированными переменными, в списке формальных параметров перед параметром-константой ставится префикс …

21.Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …

22.Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …

23.Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …

24.Если возникает потребность в обращении к переменной при коллизии имен, то следует вначале указать название модуля (модуль основной программы), а далее через … – имя переменной (или иной идентификатор, к которому нужно обратиться)

Disynergy.ru Сдача тестов без предоплаты +7(924) 305-23-08

Disynergy.ru Сдача тестов без предоплаты +7(924) 305-23-08 help@disynergy.ru

25.Если нужно скопировать элементы массива B в массив A, …

26.Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …

27.Если при открытии потока возникла ошибка – диск заполнен (при записи), то указатель на поток приобретет …

28.Если произвести единичный циклический сдвиг элементов массива вправо, то …

29.Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …

30.Если элементами одномерного массива является простой числовой тип данных, то такие массивы называют …

31.Идентификаторы – это …

32.Изменить режим работы с файлом …

33.Имена переменных констант, процедур, функций и т. д. называются …

34.Имена формальных и фактических параметров …

35.К основным типам данных языка в С++ относится … – тип с плавающей запятой наименьшего размера

36.К основным типам языка в С++ относится … – тип с плавающей запятой, повышенной точности

37.К унарным операциям относят …

38.Локальные данные записываются в область памяти, называемую …

39.Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …

40.Начало однострочного комментария в С++ обозначается комбинацией …

41.Операции new и delete …, так как выделяемая память после ее использования должна высвобождаться

42.Описание переменной может быть выполнено …

43.Параметры-константы – это параметры, …

44.Параметры-переменные используются для передачи … значений функций

45.Переменные класса памяти register аналогичны …, но память под них выделяется в регистрах процессора

46.Перемещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f – это …

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

48.Разреженные матрицы – это такие матрицы, у которых …

49.Согласно правилам описания перегруженных функций, …

50.Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …

51.Файл – это …

52.Функция обработки строковых данных strcat (s1, s2) …

53.Чтобы текст программы в С++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято …

Тесты синергия

Disynergy.ru Сдача тестов без предоплаты +7(924) 305-23-08

В C++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …

произойдет неявное преобразование типов данных

произойдет явное преобразование типов данных

произойдет явное или неявное преобразование типов данных

преобразования типов данных не произойдет

Согласно правилам описания перегруженных функций,…

Тип ответа: Множественный выбор

в разных вариантах перегруженных функций может быть разное количество умалчиваемых параметров

перегруженные функции должны находиться в одной области видимости

перегруженные функции могут иметь параметры по умолчанию, при этом значения одного и того же параметра в разных функциях должны совпадать

перегруженные функции должны находиться в разных областях видимости

в разных вариантах перегруженных функций может быть только одинаковое количество умалчиваемых параметров

перегруженные функции могут иметь параметры по умолчанию, при этом значения одного и того же параметра в разных функциях не должны совпадать

В C++ имя функции, возвращающей не-void,… от операции присваивания

Тип ответа: Одиночный выбор

ставится справа

ставится слева

может ставиться как справа, так и слева

Если при открытии потока возникла ошибка — диск заполнен (при записи), то указатель на поток приобретет …

Тип ответа: Одиночный выбор

любое значение ниже О

значение NULL (0)

любое значение выше 0

… есть процесс записи значений переменных на каждом шаге работы программы

Тип ответа: Текстовый ответ

В C+ + оператор … выделяет память из области свободной памяти

Тип ответа: Одиночный выбор

Delete

&

New

Процесс задания некоторой переменной первичного значения называется …

Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …

Тип ответа: Одиночный выбор

//

#

Const

&

В языке C++ …

Тип ответа: Одиночный выбор

счет индексам всегда начинается с О

счет индексам всегда начинается с 1

счет может начинаться с любого числа после 1

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

счет может начинаться как с 0, так и с 1

Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …

Тип ответа: Одиночный выбор

элемент

элемент либо индекс строки (в зависимости от условия задачи)

индекс строки или столбца (в зависимости от условия задачи)

Если нужно скопировать элементы массива В в массив А,…

Тип ответа: Одиночный выбор

предпочтительней всего просто присвоить один массив другому, т.е. А = В

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

одинаково эффективно или присвоить один массив другому, или использовать поэлементное копирование

… массив — это одномерный массив, каждым элементом которого является свои одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца

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

указателя

К основным типам данных языка в C++ относится … — тип с плавающей запятой наименьшего размера

char

bool

double

wchar_t

float

int

Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …

вся информация из него стирается

выдается ошибка при исполнении программы

информация из него не стирается, можно выполнять запись в конец файла

…-это процесс уменьшения значения переменной

итерация

декрементация

инкрементация

В языке C++ рекомендуется первоначально использовать при написании программ …

О только строчные буквы

О только прописные буквы

О строчные и прописные буквы

О цифры и буквы (строчные и прописные)

Перемещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f- это …

О позиция смещения

О указатель на файл

О начало отсчета

Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …

сегментом данных (статический сегмент) и доступны постоянно на протяжении всей работы программы

стеком и доступны только во время работы функции, в которой они описаны

сегментом данных (статический сегмент) и доступны только во время работы функции, в которой они описаны

стеком и доступны постоянно на протяжении всей работы программы

Идентификаторы — это …

О высказывания, относительно которых можно сказать истинно оно или ложно

О имена переменной константы, процедур, функций и т. д.

О атомарная часть C++ программы, которой можно поставить в соответствие предложение естественного языка

B C++ тип данных bool — это …

Тип ответа: Одиночный выбор

О тип с плавающей запятой, повышенной точности

О целочисленный тип, обычно содержащий члены кодировки ASCII

О целочисленный тип, который может иметь одно из двух значений: true или false

О тип с плавающей запятой наименьшего размера

B C++ циклическая алгоритмическая управляющая структура с параметром записывается как …

while

for

О do while

Говоря о порядке обращения к элементам двумерного массива, можно утверждать, что …

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

массив можно подвергать изменению целиком, в зависимости от условия задачи

нельзя подвергать изменению целиком весь массив сразу

Директива #include включает в программу содержимое указанного файла, имя которого может быть указано двумя способами, в частности:…

#include //my_file.h>>//

#include#my_file.h

#include

#include «my_file.h»

Описание формальных параметров алгоритма функции происходит …

только два раза

неограниченное количество раз

только один раз

Квадратные матрицы — это такие матрицы, у которых …

О все элементы матрицы равны нулю

О число элементов в строке равно числу элементов в столбце, т. е. M = N

О число элементов в строке/столбце зависит от того, в каком столбце/строке оно содержится

О не все ячейки заполнены элементами

Чтобы текст программы в C++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято …

Тип ответа: Множественный выбор

разделять слова символом подчеркивания (first index)

писать каждое следующее слово с большой буквы (FirstIndex)

писать через пробел (first index)

писать слитно строчными буквами (first index)

Имена формальных и фактических параметров …

Тип ответа: Одиночный выбор

О не могут совпадать

О могут совпадать, но это отразится на выполнении программы

О могут совпадать и это не отразится на выполнении программы, но может привести к проблемам при понимании алгоритма работы

В C++ оператор … высвобождает выделенную память

delete

&

new

К основным типам языка в C++ относится … — тип с плавающей запятой, повышенной точности

О char

О bool

О double

О _wchar_t

О float

О int

Если произвести единичный циклический сдвиг элементов массива вправо, то …

О будет происходить перемещение содержимого последней ячейки в первую

О будет происходить перемещение содержимого первой ячейки в последнюю

О будет создана дополнительная ячейка

Файл — это …

О именованная область на внешнем информационном носителе (диске), содержащая данные

О перенос данных

О специальное место на компьютерном носителе информации

Идентификаторы, описанные в функции, являются локальными для нее, если …

Тип ответа: Одиночный выбор

О работа с ними возможна только внутри этой функции и внутри вложенных в нее блоков

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

О они могут быть использованы в исполнительной части самого модуля

Файл, связанный с потоком, в режиме открытия а открывается для …

Тип ответа: Одиночный выбор

О чтения

О записи

О добавления

О чтения и записи

Параметры-переменные используются для передачи … значений функций

О выходных

О входных

О входных и выходных

Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …

Тип ответа: Одиночный выбор

О инкрементацией

О конкатенацией

О инициализацией

О итерацией

Для того чтобы в программе описать переменную типа одномерный массив, нужно записать:…

Тип ответа: Одиночный выбор

О <тип> <имя_массива>[<инициализатор>]

О массива

О <индекс> <имя_массива>

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

Тип ответа: Одиночный выбор

О «амперсанд» (&)

О «правый слеш» («/»)

О «диез» (#)

О «плюс» (+)

Функция обработки строковых данных islower(c) возвращает значение true, если с является и false в других случаях

Тип ответа: Одиночный выбор

О буквой нижнего регистра

О буквой верхнего регистра

О буквой или цифрой

О цифрой

О пробелом

Начало однострочного комментария в C++ обозначается комбинацией …

Тип ответа: Одиночный выбор

«//»

«#»

«*/»

«?»

«&»

Функция обработки строковых данных strcat (s1, s2)…

Тип ответа: Одиночный выбор

О выполняет побайтное копирование п символов из строки s2 в строку s1. возвращает значения s1

О сравнивает строку s1 со строкой s2 и возвращает результат типа ɪnt: 0 — если строки эквивалентны, >0 — если s1 < s2, <0 — если s1 > s2

О определяет длину указанной строки, без учета нуль-символа

О объединяет строку s2 со строкой s1, результат сохраняется в s1

Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …

О числа

О латинские буквы

О символы

Идентификаторы могут состоять …

Тип ответа: Одиночный выбор

О только из арифметических знаков +, *, /

О как из цифр, так и из специальных символов #, $, Л, &

О только из букв латиницы, цифр и символа «_»

B C++ все файлы … последовательность байтов

О могут рассматриваться или как структурированная, или как неструктурированная

О рассматриваются как структурированная

О рассматриваются как неструктурированная

Диапазон типа данных float-…

О 1 байт

О 2 байта

О 4 байта

О 8 батов

B C++ циклическая алгоритмическая управляющая структура с постусловием записывается как …

О while

О for

О do

Говоря об одномерных массивах, можно утверждать, что …

массив — переменная сложной структуры и потому не может быть подвергнута обработке целиком

массив может быть подвергнут обработке целиком

все действия с массивами следует проводить поэлементно, т.е. обращаясь непосредственно к каждой его ячейке

Прямым проходом следует пользоваться при реализации …

О циклического сдвига вправо

О циклического сдвига влево

О как циклического сдвига вправо, так и циклического сдвига влево

Говоря об алгоритмах подсчета суммы и произведения элементов массива, можно утверждать, что накопление суммы начинают с…

О нуля, а произведения — с единицы

О единицы, а произведения — с нуля

О нуля, как и произведения

О единицы, как и произведения

В языке C++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …

О «/*» — начало комментария и «*/» — конец комментария

О «*/»- начало комментария и «/*» — конец комментария

О «//»- начало комментария и «//» — конец комментария

О «#»- начало комментария и «/*» — конец комментария

Если доступ к элементам многомерных массивов осуществляется с помощью индексированных переменных а[1] [1], то доступ к этому же элементу с помощью указателей будет …

*(*(a+1)+1)

a[1,1]

a|1||1|

*(a+1)+1

a[1::1]

Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …

О auto

О extern

О static

О register

Локальные данные записываются в область памяти, называемую …

О сегментом данных (статический сегмент) и доступны постоянно на протяжении всей работы программы

О стеком и доступны только во время работы функции, в которой они описаны

О сегментом данных (статический сегмент) и доступны только во время работы функции, в которой они описаны

О стеком и доступны постоянно на протяжении всей работы программы

Выходные параметры — это …

О текущие данные для функции

О результат работы функции

О исходные данные для функции

О набор данных, в обработке которых и заключается предназначение алгоритма

О параметры, переданные по ссылке без права их изменения

Изменить режим работы с файлом …

О можно только после закрытия файла

О невозможно

О можно только во время работы с файлом

Разреженные матрицы — это такие матрицы, у которых …

все элементы матрицы равны нулю

число элементов в строке равно числу элементов в столбце, т. е. M = N

число элементов в строке/столбце зависит от того, в каком столбце/строке оно содержится

не все ячейки заполнены элементами

Под вводом-выводом в программировании понимается
процесс обмена информацией между оперативной памятью и внешними устройствами:
клавиатурой, дисплеем, магнитными накопителя­ми и т. п. Ввод — это занесение
информации с внешних устройств в оперативную память, а вывод — вынос информации
из опера­тивной памяти на внешние устройства. Такие устройства, как дис­плей и
принтер, предназначены только для вывода; клавиатура — устройство ввода.
Магнитные накопители (диски, ленты) исполь­зуются как для ввода, так и для
вывода.

Основным понятием, связанным с информацией на внешних
устройствах ЭВМ, является понятие файла. Всякая операция вво­да-вывода
трактуется как операция обмена с файлами: ввод — это чтение из файла в
оперативную память; вывод — запись инфор­мации из оперативной памяти в файл.
Поэтому вопрос об органи­зации в языке программирования ввода-вывода сводится к
вопро­су об организации работы с файлами.

Внутренний файл — это переменная файлового типа,
являющаяся структурированной величиной. Элементы файловой переменной могут
иметь разный тип и, со­ответственно, разную длину и форму внутреннего
представле­ния. Внутренний файл связывается с внешним (физическим) файлом с
помощью стандартной процедуры Assign. Один эле­мент файловой переменной
становится отдельной записью во внешнем файле и может быть прочитан или записан
с помощью одной команды. Попытка записать в файл или прочитать из него
величину, не совпадающую по типу с типом элементов файла, приводит к ошибке.

Аналогом понятия внутреннего файла в языках Си/Си++ яв­ляется
понятие потока. Поток — это байтовая
последовательность, передаваемая в про­цессе ввода-вывода.

Поток должен быть связан с каким-либо внешним
устройством или файлом на диске. В терминологии Си это звучит так; поток должен быть направлен на какое-то
устройство или файл.

Основные отличия файлов в Си состоят в следующем:
здесь отсутствует понятие типа файла и, следовательно, фиксирован­ной структуры
записи файла. Любой файл рассматривается как байтовая последовательность:

Стрелочкой обозначен указатель файла, определяющий
теку­щий байт файла. EOF является стандартной константой — призна­ком конца
файла.

Существуют стандартные потоки и потоки, объявляемые в
про­грамме. Последние обычно связываются с файлами на диске, со­здаваемыми
программистом. Стандартные потоки назначаются и открываются системой
автоматически. С началом работы любой программы открываются 5 стандартных
потоков, из которых ос­новными являются следующие:

o  
stdin — поток
стандартного ввода (обычно связан с клавиатурой);

o  
stdout — поток
стандартного вывода (обычно связан с дисплеем);

o  
stderr — вывод
сообщений об ошибках (связан с диспле­ем).

Кроме этого, открывается поток для стандартной печати
и до­полнительный поток для последовательного порта.

Работая ранее с программами на Си, используя функции
вво­да с клавиатуры и вывода на экран, мы уже неявно имели дело с первыми двумя
потоками. А сообщения об ошибках, которые система выводила на экран, относились
к третьему стандартному потоку. Поток для работы с дисковым файлом должен быть
от­крыт в программе.

Работа с
файлами на диске.
Работа с дисковым
файлом начи­нается с объявления указателя на поток. Формат такого объяв­ления:

FILE   *имя_указателя;

Например:

FILE   *fp;

Слово file является стандартным именем структурного
типа, объявленного в заголовочном файле stdio.h. В структуре file содержится
информация, с помощью которой ведется работа с потоком, в частности: указатель
на буфер, указатель (индикатор) текущей позиции в потоке и т.д.

Следующий шаг — открытие потока, которое производится с
помощью стандартной функции fopen (). Эта функция возвраща­ет конкретное
значение для указателя на поток и поэтому ее зна­чение присваивается
объявленному ранее указателю. Соответству­ющий оператор имеет формат:

Имя_указателя=fореn
(“имя_файла”, “режим_открытия”) ;

Параметры функции fopen () являются строками, которые
мо­гут быть как константами, так и указателями на символьные мас­сивы.
Например:

fp=fopen(«test.dat»,»r»);

Здесь test .dat — это имя физического файла в текущем
ката­логе диска, с которым теперь будет связан поток с указателем fр. Параметр
режима
r означает, что файл открыт для чтения. Что касается
терминологии, то допустимо употреблять как выражение «открытие потока», так и
выражение «открытие файла».

Существуют следующие режимы открытия потока и соответ­ствующие
им параметры:

Параметр              Режим

r                      открыть для чтения

w                     создать для записи

а                      открыть для добавления

r+                    открыть для чтения и записи

w+                  создать для чтения и записи

а+                    открыть для добавления или

                       
создать для чтения и записи

Поток может быть открыт либо для текстового, либо для
дво­ичного (бинарного) режима обмена.

Понятие текстового файла: это последовательность символов,
которая делится на строки специальными кодами — возврат ка­ретки (код 13) и
перевод строки (код 10). Если файл открыт в текстовом режиме, то при чтении из
такого файла комбинация символов «возврат каретки — перевод строки»
преобразуется в один символ n — переход к новой строке.

При записи в файл осуществляется обратное
преобразование. При работе с двоичным файлом никаких преобразований симво­лов
не происходит, т.е. информация переносится без всяких из­менений.

Указанные выше параметры режимов открывают текстовые
файлы. Если требуется указать на двоичный файл, то к параметру добавляется
буква b. Например: rb, или «
b», или r+b. В некоторых компиляторах текстовый режим обмена
обозначается буквой t, т.е. записывается a+t или rt.

Если при открытии потока по какой-либо причине
возникла ошибка, то функция fopen() возвращает значение константы null. Эта
константа также определена в файле stdio.h. Ошибка может возникнуть из-за
отсутствия открываемого файла на диске, нехватки места в динамической памяти и
т.п. Поэтому желатель­но контролировать правильность прохождения процедуры
откры­тия файла. Рекомендуется следующий способ открытия:

FILE *fp;

if
(fp=fopen(«test.dat», «r»)==NULL)

{puts («He могу открыть файлn»);

return;

}

В случае ошибки программа завершит выполнение с
закрыти­ем всех ранее открытых файлов.

Закрытие потока (файла) осуществляет функция fclose(),
прототип которой имеет вид:

int   fclose(FILE  
*fptr);

Здесь fptr обозначает формальное имя указателя на
закрыва­емый поток. Функция возвращает ноль, если операция закрытия прошла
успешно. Другая величина означает ошибку.

Запись и
чтение символов.
Запись символов в
поток произво­дится функцией putc()  с
прототипом

int  putc (int  
ch,   FILE   *fptr);

Если операция прошла успешно, то возвращается записанный
символ. В случае ошибки возвращается константа EOF.

Считывание символа из потока, открытого для чтения,
произ­водится функцией gets ()  с
прототипом

int  gets (FILE 
*fptr);

Функция возвращает значение считываемого из файла сим­вола.
Если достигнут конец файла, то возвращается значение EOF. Заметим, что это
происходит лишь в результате чтения кода EOF.

Исторически сложилось так, что gets() возвращает
значение типа int. To же можно сказать и про аргумент ch в описании функции
puts(). Используется же в обоих случаях только млад­ший байт. Поэтому обмен при
обращении может происходить и с переменными типа char.

Пример 1.
Составим программу записи в файл символьной пос­ледовательности, вводимой с
клавиатуры. Пусть признаком завер­шения ввода будет символ *.

//Запись  
символов   в   файл

#include   <stcdio.h>

void main ()

{   FILE   *fp;

char  c;

if((fp=fopen(«test.dat»,»w»)}==NULL)

{puts(«He 
могу  открыть  файл!n»}; 

 return;}

puts(«Вводите символы. Признак конца — *»);

while((c=getchar())!=’*’)

putc(c,fp);

fclose(fp);

}

В результате на диске (в каталоге, определяемом
системой) будет создан файл с именем test.dat, который заполнится вводимы­ми
символами. Символ * в файл не запишется.

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

//Чтение символов из файла

#include
<stdio.h>

#include
<conio.h>

void main ()

{ FILE *fp;

char c;

clrscr () ;

if((fp=fopen(«test.dat»,»r»))==NULL)

{puts(‘He удалось открыть файл!n»);

return;}

while((c=getc(fp)) !=EOF)

putchar (c);

 fclose(fp);

}

Связь между результатом работы предыдущей программы и
данной программой осуществляется через имя физического фай­ла, которое в обоих
случаях должно быть одним и тем же.

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

int  putw(int,  
FILE   *fptr);

Если операция прошла успешно, то возвращается
записанное число. В случае ошибки возвращается константа EOF.

Считывание целого числа из потока, открытого для
чтения, производится функцией getw () с прототипом

int  getw(FILE  
*fptr);

Функция возвращает значение считываемого из файла
числа. Если прочитан конец файла, то возвращается значение EOF.

Пример 3.
Составим программу, по которой в файл запишется последовательность целых чисел,
вводимых с клавиатуры, а затем эта последовательность будет прочитана и
выведена на экран. Пусть признаком конца ввода будет число 9999.

//Запись и чтение целых чисел

#include <stdio.h>

#include
<conio.h>

void main()

{FILE *fp;

int x;

clrscr () ;

//Открытие потока для записи

if((fp=fopen(«test.dat»,»w»))==NULL)

{puts(«Ошибка открытия файла для
записи!n»);

return;

}

puts(«Вводите числа. Признак конца — 9999»);

scanf(«%d»,&x);

while(x!=9999)

tputw(x,fp);

scanf («%d», &x) ;

}

fclose(fp);//Закрытие потока в режиме записи

//Открытие потока для чтения

if((fp=fopen(«test.dat»,»r»))==NULL)

{puts(«Ошибка
открытия файла для чтения!
n«);

return;

while((x=getw<fp))!=EOF)

printf
(«n%d»,x);

fclose (fp);

}

После завершения ввода чисел в файл его необходимо
закрыть. При этом происходит сброс накопленных в буфере значений на диск.
Только после этого можно открывать файл для чтения. Ука­затель устанавливается
на начало потока, и дальнейшее чтение будет происходить от начала до конца
файла.

Запись и
чтение блоков данных
. Специальные
функции обмена с файлами имеются только для символьного и целого типов дан­ных.
В общем случае используются функции чтения и записи бло­ков данных. С их
помощью можно записывать в файл и читать из файла вещественные числа, массивы,
строки, структуры. При этом, как и для ранее рассмотренных функций, сохраняется
форма внут­реннего представления данных.

Функция записи блока данных имеет прототип

int   fread(void*buf,   int 
bytes,   int  n,  
FILE*fptr);

Здесь

buf — указатель на адрес данных, записываемых в файл;

bytes — длина в байтах одной единицы записи (блока дан­ных);

n — число блоков, передаваемых в файл;

fptr — указатель на поток.

Если запись выполнилась благополучно, то функция
возвра­щает число записанных блоков (значение
n).

Функция чтения блока данных из файла имеет прототип

int
fwrite(void*buf, int bytes, int n, FILE*fptr);

По аналогии с предыдущим описанием легко понять смысл
параметров.

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

#include <string.h>

#include
<stdio.h>

void main()

{  FILE *stream;

char msg[]=»this  
is   a  test»;

char buf[20];

if {<stream=fopen{«DUMMY.FIL»,
«w+»))= =NULL)

{ puts{«Ошибка открытия файлаn»);

return;

}

//Запись строки в файл

fwrite(msg, strlen(msg)+1, 1, stream);

//Установка указателя на начало файла

fseek(stream, О, SEEK__SET) ;

//Чтение строки из файла

fread(buf, strlen(msg)+1,
1, stream);

printf
(«%sn», buf);

fclose(stream);

}

В этой программе поток открывается в режиме w+
(создание для записи с последующим чтением). Поэтому закрывать файл после
записи не потребовалось. Новым элементом данной программы по сравнению с предыдущими
является использование функции уста­новки указателя потока в заданную позицию.
Ее формат:

int
fseek(указатель_на поток, смещение, начало_отсчета);

Начало
отсчета
задается одной из констант,
определенных в файле stdio.h:

seek_set (имеет значение 0) — начало файла;

seek_cur (имеет значение 1) — текущая позиция;

SEEK_end (имеет значение 2) — конец файла.

Смещение определяет число байт, на которое надо сместить
указатель относительно заданного начала отсчета. Смещение мо­жет быть как
положительным, так и отрицательным числом. Оба параметра имеют тип long.

Форматный
обмен с файлами
. С помощью функции
форматного вывода можно формировать на диске текстовый файл с результа­тами
вычислений, представленными в символьном виде. В даль­нейшем этот файл может быть
просмотрен на экране, распечатан на принтере, отредактирован с помощью
текстового редактора. Общий вид функции форматного вывода:

int
fprintf(указатель_на_поток, форматная_строка, список__переменных);

Использовавшаяся нами ранее функция printf () для орга­низации
вывода на экран является частным вариантом функции fprintf (). Функция printf
() работает лишь со стандартным потоком stdin, который всегда связывается
системой с диспле­ем. Не будет ошибкой, если в программе вместо printf () напи­сать
fprintf (stdin,…).

Пример 5.
Составим программу, по которой будет рассчитана и записана в файл таблица
квадратных корней для целых чисел от 1 до 10. Для контроля эта же таблица
выводится на экран.

//Таблица квадратных корней

#include
<stdio.h>

#include <iostream.h>

#include
<math.h>

void main()

{ FILE *fp;

int x;

fp=fopen («test.dat11, «w»);

//Вывод на экран и в файл шапки таблицы

printf(«t Таблица квадратных корнейn»);

fprintf(fp,»t Таблица квадратных
корнейn»);

printf(«t xttsqrt(x)n»);

fprintf(fp,»t xttsqrt(x)n»);

//Вычисление и вывод таблицы квадратных корней

//на экран и в файл

for(x=l; x<=10; х++)

{
printf(«t%ft%fn»,float(x),sqrt(float(x)));

fprintf(fp,»t%ft%fn»,float(x)
, sqrt(float(x)));

}

fclose(fp);

}

Если теперь с помощью текстового редактора (например,
вхо­дящего в систему программирования) открыть файл test.dat, то на экране
увидим:

Таблица квадратных корней

Теперь эти результаты можно распечатать, включить в
текст отчета и т.п.

Форматный ввод из текстового файла осуществляется с
помо­щью функции fscanf (), общий формат которой выглядит сле­дующим образом:

int   fscanf(указатель_на_поток,   форматная_строка,  cписок_адресов_переменных)
;

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

В следующем примере числовые данные из файла test.dat,
полученного в результате выполнения предыдущей программы, вво­дятся в числовые
массивы х и
y. Для контроля значения элементов
массивов выводятся на экран. Предварительно с помощью текстового редактора в
файле test .dat удаляются две первые строки с заго­ловками. В результате в
файле останутся только числа.

Пример 6.

//Ввод чисел из файла

#include
<stdio.h>

#include
<iostream.h>

#include
<math.h>

 void main()

{ FILE *fp;

int i ;

float x[10], у[10];

fp=fopen(«test.dat»,»r»);

for(i=0; i<10; i++)

{ fscanf(fp,»%f%f»,&x[i],&y[i]);

printf(«%f  %fn»,x[i],y[i]);

} fclose(fp);

}

Аннотация: В лекции рассматриваются понятия и определения файлов и потоков, классификация файлов, стандартные функции по работе с файлами, основные алгоритмы работы с файлами, приводятся примеры решения задач на организацию ввода-вывода и обработку данных в файлах.

Цель лекции: изучить понятия, характеристику и классификацию файлов и стандартных функций по работе с файлами, научиться решать задачи с использованием стандартных функций по работе с файлами на языке C++.

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

  • имеет имя на диске, что дает возможность программам идентифицировать и работать с несколькими файлами;
  • длина файла ограничивается только емкостью диска.

Часто бывает необходимо ввести некоторые данные из файла или вывести результаты в файл. Например, бывает необходимо обрабатывать массивы, которые слишком велики, чтобы полностью разместиться в памяти.

Файлы делятся на текстовые и двоичные.

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

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

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

В С++ существуют специальные средства ввода-вывода данных. Все операции ввода-вывода реализуются с помощью функций, которые находятся в библиотеке С++. Библиотека С++ поддерживает три уровня ввода-вывода:

  • потоковый ввод-вывод;
  • ввод-вывод нижнего уровня;
  • ввод-вывод для консоли и портов (зависит от ОС).

Поток – это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику.

Функции библиотеки ввода-вывода языка С++, поддерживающие обмен данными с файлами на уровне потока, позволяют обрабатывать данные различных размеров и форматов, обеспечивая при этом буферизованный ввод и вывод. Таким образом, поток представляет собой этот файл вместе с предоставленными средствами буферизации.

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

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

Буферизация данных при работе с потоками

Рис.
19.1.
Буферизация данных при работе с потоками

При работе с потоком можно:

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

Когда программа начинает выполняться, автоматически открываются пять потоков, из которых основными являются:

  • стандартный поток ввода (на него ссылаются, используя предопределенный указатель на поток stdin );
  • стандартный поток вывода ( stdout );
  • стандартный поток вывода сообщений об ошибках ( stderr ).

По умолчанию стандартному потоку ввода stdin ставится в соответствие клавиатура, а потокам stdout и stderr соответствует экран монитора.

В С++ операции с файлами можно осуществлять в двух режимах: форматированном и потоковом.

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

Функция открытия файла

Для работы с файлом в языке C++ необходима ссылка на файл. Для определения такой ссылки существует структура FILE, описанная в файле stdio.h. Данная структура содержит все необходимые поля для управления файлами, например: текущий указатель буфера, текущий счетчик байтов, базовый адрес буфера ввода-вывода, номер файла.

При открытии файла (потока) в программу возвращается указатель на поток (файловый указатель), являющийся указателем на объект структурного типа FILE. Этот указатель идентифицирует поток во всех последующих операциях.

Например:

#include<stdio.h>
..............
FILE *fp;

Для открытия файла существует функция fopen, которая инициализирует файл.

Синтаксис:

fp=fopen(ИмяФайла, РежимОткрытия);

где fpуказатель на поток (файловый указатель);

ИмяФайлауказатель на строку символов, представляющую собой допустимое имя файла, в которое может входить спецификация файла (включает обозначение логического устройства, путь к файлу и собственно имя файла);

РежимОткрытияуказатель на строку режима открытия файла.

Например:

Существуют несколько режимов открытия файлов.

Режимы открытия файлов

Режим Описание Начинается с…
r Открывает текстовый файл для чтения. Если файл не существует, то выдается ошибка при исполнении программы. начала
w Открывает текстовый файл для записи. Если файл не существует, то он создается. Если файл уже существует, то удаляется его содержимое, файл перезаписывается начала
a Открывает текстовый файл для добавления. Если файл не существует, то он создается. Если существует, то содержимое из него не удаляется. конца
r+ Открывает текстовый файл для чтения и записи. Изменить размер файла нельзя. Если файл не существует, то выдается ошибка при исполнении программы. начала
w+ Открывает текстовый файл для чтения и записи. Если файл не существует, то он создается. Если файл уже существует, то удаляется его содержимое, файл перезаписывается. начала
a+ Открывает текстовый файл для чтения и записи. Если файл не существует, то он создается. Если существует, то содержимое из него не удаляется. конца
rb Открывает двоичный файл для чтения. Если файл не существует, то выдается ошибка при исполнении программы. начала
wb Открывает двоичный файл для записи. Если файл не существует, то он создается. Если файл уже существует, то удаляется его содержимое, файл перезаписывается. начала
ab Открывает двоичный файл для добавления. Если файл не существует, то он создается. Если существует, то содержимое из него не удаляется. конца
r+b Открывает двоичный файл для чтения и записи. Изменить размер файла нельзя. Если файл не существует, то выдается ошибка при исполнении программы. начала
rb+
w+b Открывает двоичный файл для чтения и записи. Если файл не существует, то он создается. Если файл уже существует, то удаляется его содержимое, файл перезаписывается. начала
wb+
a+b Открывает двоичный файл для чтения и записи. Если файл не существует, то он создается. Если существует, то содержимое из него не удаляется. конца
ab+

Поток можно открыть в текстовом ( t ) или двоичном ( b ) режиме. По умолчанию используется текстовый режим. В явном виде режим указывается следующим образом:

«r+b» или «rb» – двоичный (бинарный) режим;

«r+t» или «rt»текстовый режим.

В файле stdio.h определена константа EOF, которая сообщает об окончании файла (отрицательное целое число).

При открытии файла могут возникать следующие ошибки:

  • файл, связанный с потоком не найден (при чтении из файла);
  • диск заполнен (при записи);
  • диск защищен от записи (при записи) и т. п.

В этих случаях указатель на поток приобретет значение NULL (0). Указатель на поток, отличный от аварийного, не бывает равен NULL.

Для вывода сообщения об ошибке при открытии файла используется стандартная библиотечная функция из файла <stdio.h>:

void perror (const char*s);

Функция perror() выводит строку символов, адресуемую указателем s, за которой размещаются: двоеточие, пробел и сообщение об ошибке. Содержимое и формат сообщения определяются реализацией системы программирования.

Пример 1. Обнаружение и вывод ошибки при открытии файла.

#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
  FILE *fp;
  if ((fp=fopen("t.txt", "r"))==NULL)
    // выводит строку символов с сообщением об ошибке
    perror("ошибка при открытии файла"); 
  system("pause");
  return 0;
}

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

СИНЕРГИЯ Ответы Основы программирования на С++

СИНЕРГИЯ Ответы Основы программирования на С++ Тест 2021г. Сдан на 97-100 баллов. Все ответы выделены в файле.

1.Для того чтобы в программе описать переменную типа одномерный массив, нужно записать:…
2.Директивы препроцессора начинаются со знака который должен быть самым первым символом строки
3.Функция обработки строковых данных islower(c) возвращает значение true, если с является и false в других случаях
4.В C++ имя функции, возвращающей не-void,… от операции присваивания
5.Если при открытии потока возникла ошибка — диск заполнен (при записи), то указатель на поток приобретет …
6…. есть процесс записи значений переменных на каждом шаге работы программы
7.В C+ + оператор … выделяет память из области свободной памяти
8.Процесс задания некоторой переменной первичного значения называется …
9.Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …
10.В языке C++ …
11.Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …
12.Если нужно скопировать элементы массива В в массив А,…
13…. массив — это одномерный массив, каждым элементом которого является свои одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца
14.Под произвольным доступом к компонентам файла понимается работа с файлом с возможностью произвольного перемещения …
15.К основным типам данных языка в C++ относится … — тип с плавающей запятой наименьшего размера
16.Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …
17….-это процесс уменьшения значения переменной
18.В языке C++ рекомендуется первоначально использовать при написании программ
19.Перемещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f- это …
20.Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …
21.Идентификаторы — это …
22.B C++ тип данных bool — это …
23.B C++ циклическая алгоритмическая управляющая структура с параметром записывается как …
24.Говоря о порядке обращения к элементам двумерного массива, можно утверждать, что …
25.Директива #include включает в программу содержимое указанного файла, имя которого может быть указано двумя способами, в частности:…
26.Описание формальных параметров алгоритма функции происходит …
27.Квадратные матрицы — это такие матрицы, у которых …
28.Чтобы текст программы в C++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято …
29.Имена формальных и фактических параметров …
30.В C++ оператор … высвобождает выделенную память
31.К основным типам языка в C++ относится … — тип с плавающей запятой, повышенной точности
32.Если произвести единичный циклический сдвиг элементов массива вправо, то …
33.Файл — это …
34.Идентификаторы, описанные в функции, являются локальными для нее, если …
35.Файл, связанный с потоком, в режиме открытия а открывается для …
36.Параметры-переменные используются для передачи … значений функций
37.Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …
38.В C++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …
39.Согласно правилам описания перегруженных функций,…

40.Начало однострочного комментария в C++ обозначается комбинацией …
41.Функция обработки строковых данных strcat (s1, s2)…
42.Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …
43.Идентификаторы могут состоять …
44.B C++ все файлы … последовательность байтов
45.Диапазон типа данных float-…
46.B C++ циклическая алгоритмическая управляющая структура с постусловием записывается как …
47.Говоря об одномерных массивах, можно утверждать, что …
48.Прямым проходом следует пользоваться при реализации …
49.Говоря об алгоритмах подсчета суммы и произведения элементов массива, можно утверждать, что накопление суммы начинают с…
50.В языке C++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …
51.Если доступ к элементам многомерных массивов осуществляется с помощью индексированных переменных а[1] [1], то доступ к этому же элементу с помощью указателей будет …
52.Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …
53.Локальные данные записываются в область памяти, называемую …
54.Выходные параметры — это …
55.Изменить режим работы с файлом …
56.Разреженные матрицы — это такие матрицы, у которых …

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Если при межевании земельного участка допущены ошибки
  • Если при заполнении трудовой книжки сделана ошибка