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 


Под вводом-выводом в программировании понимается
процесс обмена информацией между оперативной памятью и внешними устройствами:
клавиатурой, дисплеем, магнитными накопителями и т. п. Ввод — это занесение
информации с внешних устройств в оперативную память, а вывод — вынос информации
из оперативной памяти на внешние устройства. Такие устройства, как дисплей и
принтер, предназначены только для вывода; клавиатура — устройство ввода.
Магнитные накопители (диски, ленты) используются как для ввода, так и для
вывода.
Основным понятием, связанным с информацией на внешних
устройствах ЭВМ, является понятие файла. Всякая операция ввода-вывода
трактуется как операция обмена с файлами: ввод — это чтение из файла в
оперативную память; вывод — запись информации из оперативной памяти в файл.
Поэтому вопрос об организации в языке программирования ввода-вывода сводится к
вопросу об организации работы с файлами.
Внутренний файл — это переменная файлового типа,
являющаяся структурированной величиной. Элементы файловой переменной могут
иметь разный тип и, соответственно, разную длину и форму внутреннего
представления. Внутренний файл связывается с внешним (физическим) файлом с
помощью стандартной процедуры 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);
}
Открытие и закрытие потока
Прежде, чем начать работать
с потоком, его надо инициировать, т. е. открыть. При этом поток связывается со
структурой предопределенного типа FILE, определение которой находится в файле
<stdio.h>. В структуре находится указатель на буфер, указатель на текущую
позицию и т. п. При открытии потока возвращается указатель на поток, т. е. на
объект типа FILE. Указатель на поток должен быть объявлен следующим образом:
#include <stdio.h>
. . . . . . . .
FILE*f;//указатель на поток
Указатель на поток
приобретает значение в результате выполнения функции открытия потока:
FILE* fopen(const
char*filename,const char*mode);
где const char*filename –
строка, которая содержит имя файла, связанного с потоком,
const char*mode – строка
режимов открытия файла.
Например:
f=fopen(“t.txt”,”r”);
где t.txt – имя файла, r –
режим открытия файла.
Файл связанный с потоком
можно открыть в одном из 6 режимов
|
Режим |
Описание режима открытия файла |
|
r |
Файл |
|
w |
Файл |
|
a |
Файл |
|
r+ |
Файл |
|
w+ |
Файл |
|
a+ |
Файл |
Поток можно открывать в
текстовом (t) или двоичном режиме(b). В текстовом режиме поток рассматривается
как совокупность строк, в конце каждой строки находится управляющий символ ‘n’.
В двоичном режиме поток рассматривается как набор двоичной информации.
Текстовый режим устанавливается по умолчанию.
В файле stdio.h определена
константа EOF, которая сообщает об окончании файла (отрицательное целое число).
При открытии потока могут возникать
следующие ошибки:
— файл, связанный с потоком
не найден (при чтении из файла);
— диск заполнен (при
записи);
— диск защищен от записи
(при записи) и т. п.
В этих случаях указатель на
поток приобретет значение NULL (0). Указатель на поток, отличный от аварийного
не равен 0.
Для вывода об ошибке при
открытии потока используется стандартная библиотечная функция из файла
<stdio.h>
void perror (const char*s);
Эта функция выводит строку
символов, не которую указывает указатель s, за этой строкой размещается
двоеточие пробел и сообщение об ошибке. Текст сообщения выбирается на основании
номера ошибки. Номер ошибки заносится в переменную int errno(определена в
заголовочном файле errno.h).
После того как файл открыт,
в него можно записывать информацию или считывать информацию, в зависимости от
режима.
Открытые файлы после
окончания работы рекомендуется закрыть явно. Для этого используется функция:
int fclose(FILE*f);
Изменить режим работы с
файлом можно только после закрытия файла.
Пример:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
FILE *f;
char filename[20];
cout<<”nEnter the name of
file:”; cin>>filename;
if(f=fopen(filename,”rb”)==0)//открываем
для чтения в бинарном режиме и проверяем
// возникает ли ошибка при открытии
файла
{
perror(strcat“error in file
:”,filename);//strcat складывает две строки
exit(0);//выход из программы
}
. . . . .
fclose(f);
}
Для текстового файла:
if(f=fopen(filename,”rt”)==0)//открываем
для чтения и проверяем возникает ли ошибка при //открытии файла
if(f=fopen(filename,”r”)==0)//открываем
для чтения и проверяем возникает ли ошибка при //открытии файла
Аннотация: В лекции рассматриваются понятия и определения файлов и потоков, классификация файлов, стандартные функции по работе с файлами, основные алгоритмы работы с файлами, приводятся примеры решения задач на организацию ввода-вывода и обработку данных в файлах.
Цель лекции: изучить понятия, характеристику и классификацию файлов и стандартных функций по работе с файлами, научиться решать задачи с использованием стандартных функций по работе с файлами на языке 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() выполнилась успешно.
- … – это массив, элементами которого служат массивы
- … есть процесс записи значений переменных на каждом шаге работы программы
- … массив – это одномерный массив, каждым элементом которого является свой одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца
- … параметры – это локальные переменные, необходимые для описания алгоритма функции, они описываются в ее заголовке и используются в ее определении
- В С++ все файлы … последовательность байтов
- В С++ класс памяти определяет … переменной
- В С++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …
- В С++ тип данных категории void …
- В С++ циклическая алгоритмическая управляющая структура с параметром записывается как …
- В С++ циклическая алгоритмическая управляющая структура с постусловием записывается как …
- В языке С++ …
- В языке С++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …
- В языке С++ рекомендуется первоначально использовать при написании программ …
- В C++ циклическая алгоритмическая управляющая структура с предусловием записывается как …
- Выходные параметры – это …
- Говоря о порядке обращения к элементам двумерного массива, можно утверждать, что …
- Говоря об одномерных массивах, можно утверждать, что …
- Диапазон типа данных float — …
- Для доступа к компонентам файла …
- Для использования способа передачи входных данных, являющихся сложными структурированными переменными, в списке формальных параметров перед параметром-константой ставится префикс …
- Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …
- Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …
- Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …
- Если возникает потребность в обращении к переменной при коллизии имен, то следует вначале указать название модуля (модуль основной программы), а далее через … – имя переменной (или иной идентификатор, к которому нужно обратиться)
- Если нужно скопировать элементы массива B в массив A, …
- Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …
- Если при открытии потока возникла ошибка – диск заполнен (при записи), то указатель на поток приобретет …
- Если произвести единичный циклический сдвиг элементов массива вправо, то …
- Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …
- Если элементами одномерного массива является простой числовой тип данных, то такие массивы называют …
- Идентификаторы – это …
- Изменить режим работы с файлом …
- Имена переменных констант, процедур, функций и т. д. называются …
- Имена формальных и фактических параметров …
- К основным типам данных языка в С++ относится … – тип с плавающей запятой наименьшего размера
- К основным типам языка в С++ относится … – тип с плавающей запятой, повышенной точности
- К унарным операциям относят …
- Локальные данные записываются в область памяти, называемую …
- Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …
- Начало однострочного комментария в С++ обозначается комбинацией …
- Операции new и delete …, так как выделяемая память после ее использования должна высвобождаться
- Описание переменной может быть выполнено …
- Параметры-константы – это параметры, …
- Параметры-переменные используются для передачи … значений функций
- Переменные класса памяти register аналогичны …, но память под них выделяется в регистрах процессора
- Перемещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f – это …
- Под произвольным доступом к компонентам файла понимается работа с файлом с возможностью произвольного перемещения …
- Разреженные матрицы – это такие матрицы, у которых …
- Согласно правилам описания перегруженных функций, …
- Сопоставьте знаки унарных операций в С++ и описания операций:
- Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …
- Файл – это …
- Функция обработки строковых данных strcat (s1, s2) …
- Чтобы текст программы в С++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято …
![Описание
Ответы на 54 вопроса
Оглавление
… – это массив, элементами которого служат массивы … есть процесс записи значений переменных на каждом шаге работы программы… массив – это одномерный массив, каждым элементом которого является свой одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца… параметры – это локальные переменные, необходимые для описания алгоритма функции, они описываются в ее заголовке и используются в ее определенииВ С++ все файлы … последовательность байтовВ С++ класс памяти определяет … переменнойВ С++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …В С++ тип данных категории void …В С++ циклическая алгоритмическая управляющая структура с параметром записывается как …В С++ циклическая алгоритмическая управляющая структура с постусловием записывается как …В языке С++ …В языке С++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …В языке С++ рекомендуется первоначально использовать при написании программ …В C++ циклическая алгоритмическая управляющая структура с предусловием записывается как …Выходные параметры – это …Говоря о порядке обращения к элементам двумерного массива, можно утверждать, что …Говоря об одномерных массивах, можно утверждать, что …Диапазон типа данных float - …Для доступа к компонентам файла …Для использования способа передачи входных данных, являющихся сложными структурированными переменными, в списке формальных параметров перед параметром-константой ставится префикс …Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …Если возникает потребность в обращении к переменной при коллизии имен, то следует вначале указать название модуля (модуль основной программы), а далее через … – имя переменной (или иной идентификатор, к которому нужно обратиться)Если нужно скопировать элементы массива B в массив A, …Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …Если при открытии потока возникла ошибка – диск заполнен (при записи), то указатель на поток приобретет …Если произвести единичный циклический сдвиг элементов массива вправо, то …Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …Если элементами одномерного массива является простой числовой тип данных, то такие массивы называют …Идентификаторы – это …Изменить режим работы с файлом …Имена переменных констант, процедур, функций и т. д. называются …Имена формальных и фактических параметров …К основным типам данных языка в С++ относится … – тип с плавающей запятой наименьшего размераК основным типам языка в С++ относится … – тип с плавающей запятой, повышенной точностиК унарным операциям относят …Локальные данные записываются в область памяти, называемую …Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …Начало однострочного комментария в С++ обозначается комбинацией …Операции new и delete …, так как выделяемая память после ее использования должна высвобождатьсяОписание переменной может быть выполнено …Параметры-константы – это параметры, …Параметры-переменные используются для передачи … значений функцийПеременные класса памяти register аналогичны …, но память под них выделяется в регистрах процессораПеремещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f – это …Под произвольным доступом к компонентам файла понимается работа с файлом с возможностью произвольного перемещения …Разреженные матрицы – это такие матрицы, у которых …Согласно правилам описания перегруженных функций, …Сопоставьте знаки унарных операций в С++ и описания операций:Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …Файл – это …Функция обработки строковых данных strcat (s1, s2) …Чтобы текст программы в С++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято …
✅ Основы программирования на С++ 54 вопроса СИНЕРГИЯ МТИ 2022Основы программирования на С++ ответы синергия 2022Основы программирования на языке Python.ти (тест с ответами МОИ/ МТИ)Основы программирования (практические задания, вариант 4)Основы программирования РОСДИСТАНТ двумерные массивы С++Основы программирования РОСДИСТАНТ массивы с++ ОСНОВЫ ПРОГРАММИРОВАНИЯ СИНЕРГИЯ 2022 ОТВЕТЫ ВСЕ ВОПРОСЫОсновы предпринимательской деятельностиОсновы предпринимательской деятельности 4к2с. Итоговый тест. (КСУ)Основы предпринимательской деятельности - Контрольная работа №2.- Вариант №2 Основы предпринимательства✅ Основы предпринимательства 34 вопроса СИНЕРГИЯ МТИ 2022💯 Основы предпринимательства [4 темы] (все ответы на тест Синергия / МТИ / МосАП, сентябрь 2022)ОСновы предпринимательства синергия](https://student-files.ru/assets/img/1.png)
- ✅ Основы программирования на С++ 54 вопроса СИНЕРГИЯ МТИ 2022
- Основы программирования на С++ ответы синергия 2022
- Основы программирования на языке Python.ти (тест с ответами МОИ/ МТИ)
- Основы программирования (практические задания, вариант 4)
- Основы программирования РОСДИСТАНТ двумерные массивы С++
- Основы программирования РОСДИСТАНТ массивы с++
- ОСНОВЫ ПРОГРАММИРОВАНИЯ СИНЕРГИЯ 2022 ОТВЕТЫ ВСЕ ВОПРОСЫ
- Основы предпринимательской деятельности
- Основы предпринимательской деятельности 4к2с. Итоговый тест. (КСУ)
- Основы предпринимательской деятельности — Контрольная работа №2.- Вариант №2
- Основы предпринимательства
- ✅ Основы предпринимательства 34 вопроса СИНЕРГИЯ МТИ 2022
- 💯 Основы предпринимательства [4 темы] (все ответы на тест Синергия / МТИ / МосАП, сентябрь 2022)
- ОСновы предпринимательства синергия
![Описание
Ответы на 54 вопроса
Оглавление
… – это массив, элементами которого служат массивы … есть процесс записи значений переменных на каждом шаге работы программы… массив – это одномерный массив, каждым элементом которого является свой одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца… параметры – это локальные переменные, необходимые для описания алгоритма функции, они описываются в ее заголовке и используются в ее определенииВ С++ все файлы … последовательность байтовВ С++ класс памяти определяет … переменнойВ С++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …В С++ тип данных категории void …В С++ циклическая алгоритмическая управляющая структура с параметром записывается как …В С++ циклическая алгоритмическая управляющая структура с постусловием записывается как …В языке С++ …В языке С++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …В языке С++ рекомендуется первоначально использовать при написании программ …В C++ циклическая алгоритмическая управляющая структура с предусловием записывается как …Выходные параметры – это …Говоря о порядке обращения к элементам двумерного массива, можно утверждать, что …Говоря об одномерных массивах, можно утверждать, что …Диапазон типа данных float - …Для доступа к компонентам файла …Для использования способа передачи входных данных, являющихся сложными структурированными переменными, в списке формальных параметров перед параметром-константой ставится префикс …Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …Если возникает потребность в обращении к переменной при коллизии имен, то следует вначале указать название модуля (модуль основной программы), а далее через … – имя переменной (или иной идентификатор, к которому нужно обратиться)Если нужно скопировать элементы массива B в массив A, …Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …Если при открытии потока возникла ошибка – диск заполнен (при записи), то указатель на поток приобретет …Если произвести единичный циклический сдвиг элементов массива вправо, то …Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …Если элементами одномерного массива является простой числовой тип данных, то такие массивы называют …Идентификаторы – это …Изменить режим работы с файлом …Имена переменных констант, процедур, функций и т. д. называются …Имена формальных и фактических параметров …К основным типам данных языка в С++ относится … – тип с плавающей запятой наименьшего размераК основным типам языка в С++ относится … – тип с плавающей запятой, повышенной точностиК унарным операциям относят …Локальные данные записываются в область памяти, называемую …Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …Начало однострочного комментария в С++ обозначается комбинацией …Операции new и delete …, так как выделяемая память после ее использования должна высвобождатьсяОписание переменной может быть выполнено …Параметры-константы – это параметры, …Параметры-переменные используются для передачи … значений функцийПеременные класса памяти register аналогичны …, но память под них выделяется в регистрах процессораПеремещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f – это …Под произвольным доступом к компонентам файла понимается работа с файлом с возможностью произвольного перемещения …Разреженные матрицы – это такие матрицы, у которых …Согласно правилам описания перегруженных функций, …Сопоставьте знаки унарных операций в С++ и описания операций:Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …Файл – это …Функция обработки строковых данных strcat (s1, s2) …Чтобы текст программы в С++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято …
✅ Основы программирования на С++ 54 вопроса СИНЕРГИЯ МТИ 2022Основы программирования на С++ ответы синергия 2022Основы программирования на языке Python.ти (тест с ответами МОИ/ МТИ)Основы программирования (практические задания, вариант 4)Основы программирования РОСДИСТАНТ двумерные массивы С++Основы программирования РОСДИСТАНТ массивы с++ ОСНОВЫ ПРОГРАММИРОВАНИЯ СИНЕРГИЯ 2022 ОТВЕТЫ ВСЕ ВОПРОСЫОсновы предпринимательской деятельностиОсновы предпринимательской деятельности 4к2с. Итоговый тест. (КСУ)Основы предпринимательской деятельности - Контрольная работа №2.- Вариант №2 Основы предпринимательства✅ Основы предпринимательства 34 вопроса СИНЕРГИЯ МТИ 2022💯 Основы предпринимательства [4 темы] (все ответы на тест Синергия / МТИ / МосАП, сентябрь 2022)ОСновы предпринимательства синергия](https://student-files.ru/media/screenshot/-osnovyi-programmirovaniya-na-s-54-voprosa-sinergiya-mti-2022.jpg)