Чем отличается файл от массива
Вопрос 6.1. Какое объявление функции является Неправильным?
1. float step(int n, float os)
2. void step(int n,float os, float *s)
3. float *step(int n,float os)
ν 4. float step(int n, float os);
Вопрос 6.2. Как можно передать результат (тип float) выполнения функции типа void?
1. Через имя функции.
2. Через формальный параметр типа float.
ν 3. Через формальный параметр типа указатель на float.
Вопрос 6.3. Как отличить глобальную переменную от локальной?
ν 1. Глобальная переменная объявляется в главной программе и не объявляется в вызываемой функции.
2. Глобальная переменная объявляется в главной программе и в вызываемой функции.
3. При завершении функции глобальная переменная уничтожается.
4. Глобальная переменная объявляется в функции и не объявляется в главной программе.
Глава 7. Рекурсии.
Вопрос 7.1. Какая функция является рекурсивной?
1. Результат передаётся через имя функции.
2. Результат передаётся через формальный параметр-указатель.
ν 3. В теле функции имеется оператор вызова этой же функции.
4. В теле функции присутствует оператор return.
Вопрос 7.2. Какой оператор должен обязательно присутствовать в рекурсивной функции?
1. Оператор передачи управления.
2. Оператор цикла.
3. Оператор return;
ν 4. Оператор проверки окончания рекурсии.
Вопрос 7.3. Как изменяются локальные и глобальные объекты в рекурсиях?
1. Глобальные объекты не сохраняют свои значения после окончания рекурсии.
ν 2. При повторных вызовах рекурсивной функции создаётся новое множество локальных объектов.
3. Локальные объекты сохраняют свои значения после окончания рекурсии.
Глава 8. Структуры.
Вопрос 8.1. Какого типа могут быть элементы (поля) структуры?
1. Поля структуры должны быть одного и того же типа.
2. Полями структуры не могут быть массивы.
3. Полями структуры могут быть файлы.
ν 4. Полями структуры могут быть другие структуры.
Вопрос 8.2. В состав каких типов данных не может входить структура как компонент?
Вопрос 8.3. Как можно обратиться к полю Year объекта Student типа структуры Person?
ν 1. Student.Year.
Глава 9. Программные средства для работы с файлами.
Вопрос 9.1. В каких случаях целесообразно использовать файл?
1. Для математических вычислений.
2. Для сортировки данных.
3. Для быстрого поиска по заданным критериям.
ν 4. Для длительного хранения больших объёмов данных.
Вопрос 9.2. Как открыть бинарный файл для изменения в нём информации?
ν 3. f=fopen(“file1.dat”,”rb+”);
Вопрос 9.3. Как считать из файла строку str , состоящую из слов, разделённых пробелами?
ν 1. fgets(str,80,f);
Вопрос 9.4. Чем отличается файл от массива?
ν 1. Файл может храниться на диске, а массив – только в оперативной памяти.
2. К элементам массива возможен прямой доступ по индексу, а к компонентам файла – только последовательный.
3. Компонентом массива может быть файл, а компонентом файла не может быть массив.
Глава 10. Обработка бинарных файлов.
Вопрос 10.1. Как записать в бинарный файл file *f массив из 10-ти чисел
ν 4. f=fopen(“array.dat”,”wb”);
Вопрос 10.2. В бинарном файле записан массив из 10-ти целых чисел int ar[10]. Как считать 5-й элемент массива в переменную n?
28. Из компонентов исходного файла сформировать массив, записав в него числа, расположенные в файле до минимального элемента и после максимального.
- Массив создать из компонентов исходного файла. Внести в него числа, расположенные в файле между минимальным и максимальным элементами.
- Из компонентов исходного файла сформировать массив, в котором вначале расположить четные, а затем нечетные числа. Определить номера наибольшего нечетного и наименьшего четного компонентов.
- Из файла целых чисел удалить минимальное среди совершенных чисел и наибольшее простое число.
- Из файла вещественных чисел удалить элементы, большие среднего арифметического.
33. Из файла целых чисел удалить второе, третье и пятое простое число.
- В файле целых чисел поменять местами максимальное среди отрицательных и наибольшее среди простых.
- Из файла целых чисел переписать все простые, больше среднего арифметического в новый файл.
- Дан файл , компоненты которого являются действительными числами. Найти:
а) сумму компонент файла ;
б) наибольшее из значений модулей компонентов с нечетными номерами;
в) модуль суммы и квадрат произведения компонент файла f;
г) последнюю компоненту файла.
- Дан файл , компоненты которого являются действительными числами. Найти:
а) наименьшее из значений компонент с четными номерами;
б)сумму квадратов компонент файла f;
в) сумму наибольшего и наименьшего из значений компонент;
г) разность первой и последней компонент файла.
- Дан файл f, компоненты которого являются целыми числами. Найти:
а) количество четных чисел среди компонент;
б) количество удвоенных нечетных чисел среди компонент;
в) количество квадратов нечетных чисел среди компонент.
- Дан файл f, компоненты которого являются целыми числами. Получить в файле g все компоненты файла f:
а) являющиеся четными числами;
б) делящиеся на 3 и не делящиеся на 7;
в) являющиеся точными квадратами.
- Дан файл , компоненты которого являются действительными числами. Найти:
а) произведение компонент файла f;
б) последнюю компоненту файла.
в) наибольшее из значений компонент;
г) разность первой и последней компонент файла.
- Дан файл f, компоненты которого являются целыми числами. Записать в файл g все четные числа файла f, а в файл h — все нечетные. Порядок следования чисел сохраняется.
- Дан символьный файл f, Записать в файл g компоненты файла f в обратном порядке.
- Даны символьные файлы f и g. Записать в файл h сначала компоненты файла f, затем — компоненты файла g с сохранением порядка.
- Дан файл f, компоненты которого являются целыми числами. Получить файл g, образованный из файла f исключением повторных вхождений одного и того же числа.
- Дан файл f, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько и положительных. Используя вспомогательный файл h, переписать компоненты файла f в файл g так, чтобы в файле g не было двух соседних чисел с одним знаком.
- Дан файл f, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько и положительных. Используя вспомогательный файл h, переписать компоненты файла f в файл g так, чтобы в файле g сначала шли положительные, потом отрицательные числа.
- Дан файл f, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько и положительных. Используя вспомогательный файл h, переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: два положительных, два отрицательных, два положительных, два отрицательных и т. д.
- Дан файл f, компоненты которого являются целыми числами. Никакая из компонент файла f не равна нулю. Числа в файле идут в следующем порядке: десять положительных, десять отрицательных, десять положительных, десять отрицательных и т. д. Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке пять положительных, пять отрицательных, пять положительных, пять отрицательных и т. д.
- Дан файл f, компоненты которого являются целыми числами. Число компонент файла делится на 10. Записать в файл g наибольшее значение первых десяти компонент файла f, затем—следующую десятку компонент и т. д
- Дан символьный файл f. Добавить в его конец символы е, п, d (если это необходимо, использовать дополнительный файл g).
- Дан файл f, содержащий различные даты. Каждая дата—это число, месяц и год. Найти:
а) год с наименьшим номером;
б) все весенние даты;
в) самую позднюю дату.
- Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий сведения о нескольких автомобилях. Найти:
а) фамилии владельцев и номера автомобилей данной марки;
б) количество автомобилей каждой марки.
- Дан файл f, содержащий сведения о книгах. Сведения о каждой из книг — это фамилия автора, название и год издания.
а) Найти названия книг данного автора, изданных с 1960 г.
б) Определить, имеется ли книга с названием «Информатика». Если да, то сообщить фамилию автора и год издания. Если таких книг несколько, то сообщить имеющиеся сведения обо всех этих книгах.
- Дан файл f1,который содержит номера телефонов сотрудников учреждения: указывается фамилия сотрудника, его инициалы и номер телефона. Найти телефон сотрудника по его фамилии и инициалам.
- Дан файл f, содержащий сведения о кубиках: размер каждого кубика (длина ребра в сантиметрах), его цвет (красный, желтый, зеленый или синий) и материал (деревянный, металлический, картонный). Найти:
а) количество кубиков каждого из перечисленных цветов и их суммарный объем;
б) количество деревянных кубиков с ребром 3 см и количество металлических кубиков с ребром, большим 5 см.
- Дан файл f, содержащий сведения о веществах: указывается название вещества, его удельный вес и проводимость (проводник, полупроводник, изолятор).
а) Найти удельные веса и названия всех полупроводников.
б) Выбрать данные о проводниках и упорядочить их по убыванию удельных весов.
а) названия игрушек, цена которых не превышает 40 руб. и которые подходят детям 5 лет;
б) названия наиболее дорогих игрушек (цена которых отличается от цены самой дорогой игрушки не более чем на 1 руб.);
в) названия игрушек, которые подходят как детям 4лет, так и детям 10 лет;
- Дан файл f, содержащий сведения об игрушках: указывается название игрушки (например, кукла, кубики, мяч, конструктор и т. д.), ее стоимость в копейках и возрастные границы детей, для которых игрушка предназначена (например, для детей от двух до пяти лет). Получить следующие сведения:
а) название самой дорогой игрушки
б) можно ли подобрать игрушку, любую, кроме мяча, подходящую ребенку 3 лет, и дополнительно мяч так, чтобы суммарная стоимость игрушек не превосходила 50 руб.?;
в) имеется ли мяч ценой 20 руб. 50 коп.. предназначенный детям от 3 до 8 лет?; если нет, занести сведения об этой игрушке в файл f.
Ход выполнения лабораторной работы должен быть отражен в отчете. Отчет должен содержать титульный лист, номера задания, коды программ, картинку с результатом выполнения программы и ответы на контрольные вопросы.
Теоретическая часть
Файл – это именованный объект, хранящий данные (программа или любая другая информация) на каком-либо носителе. Файл, как и массив, – это совокупность данных.
Отличия файла от массива:
1. Файлы в отличие от массивов располагаются не в оперативной памяти, а на жестких дисках или на внешних носителях, хотя файл может располагаться на так называемом электронном диске (в оперативной памяти).
2. Файл не имеет фиксированной длины, т.е. может увеличиваться и уменьшаться.
3. Перед работой с файлом его необходимо открыть, а после работы – закрыть.
Файловая система– это совокупность файлов и управляющей информации на диске для доступа к файлам. Или по-другому – это совокупность программных средств для доступа к файлам. Существует довольно много файловых систем и правила именования файлов в них могут незначительно отличаться.
Имена файлов состоят из двух частей, разделенных точкой: имя файла и расширение. Файлы хранятся вкаталогах (директориях). Каталоги могут иметь такие же имена, что и файлы. Допускаются вложенные каталоги (подкаталоги).
Различают два вида файлов: текстовые и бинарные.
Текстовыефайлы могут быть просмотрены и отредактированы с клавиатуры любым текстовым редактором и имеют очень простую структуру: последовательность ASCII-символов. Эта последовательность символов разбивается на строки, каждая из которых заканчивается двумя кодами: 13, 10 (0xD, 0xA). Примеры известных текстовых фалов: *.bat, *.c, *.asm, *.срр.
Бинарныефайлы – это файлы, которые не имеют структуры текстовых файлов. Каждая программа для своих бинарных файлов определяет собственную структуру.
Библиотека языка C/С++ содержит функции для работы как с текстовыми, так и с бинарными файлами.
Функции открытия и закрытия файла.Перед работой с файлом, его необходимо открыть.
Функция открытия файла fopen():
FILE *fopen(char *filename, char *mode);
где FILE – структурный тип, который связан с физическим файлом и содержит всю необходимую информацию для работы с ним (указатель на текущую позицию в файле, тип доступа и др.).
char*filename- задает физическое местонахождение (путь) иимяоткрываемого файла;
char*mode- тип доступа к файлу, который может принимать значения, указанные в таблице.
Функция fopen() при успешном открытии файла возвращает указатель на структуру типаFILE, называемыйуказателемна файл. Эта структура связана с физическим файлом и содержит всю необходимую информацию для работы с ним (указатель на текущую позицию в файле, тип доступа и др.). Возвращаемое функцией значение нужно сохранить и использовать для ссылки на открытый файл. Если произошла ошибка при открытии файла, то возвращаетсяNULL.
Таблица:Тип доступа к файлам.
Открыть файл для чтения.
Открыть файл для записи. Если файл существует, то его содержимое теряется.
Открыть файл для записи в конец файла. Если файл не существует, то он создается.
Открыть файл для чтения и записи. Файл должен существовать.
Открыть файл для чтения и записи. Если файл существует, то его содержимое теряется.
Открыть файл для чтения и записи в конец файла. Если файл не существует, то он создается.
К комбинациям вышеперечисленных литералов могут быть добавлены также “t” либо “b”:
Открыть файл в текстовом режиме.
Открыть файл в бинарном режиме.
Возможны следующие режимы доступа: “w+b”, “wb+”, “rw+”, “w+t”, “rt+” и др. Если режим не указан, то файл открывается в текстовом режиме.
После работы с файлом он должен быть закрытфункциейfclose().
Для этого необходимо в указанную функцию передать указатель на FILE, который был получен при открытии функциейfopen(). При завершении программы незакрытые файлы автоматически закрываются системой.
Стандартная последовательность операторов, необходимая для открытия и закрытия файла:
if(!(f = fopen(“readme.txt”, ”r+t”)))
printf(“Невозможно открыть файл \n”); return;
. . . // Работа с файлом
fclose(f); // Закрытие файла
Функции чтения/записи в файл. Функции для работы с текстовым файлом:fprintf(), fscanf(), fgets(), fputs(). Формат параметров этих функций очень похож на формат функцийprintf(), scanf(), gets()иputs(). Схожи не только параметры, но и действия. Отличие лишь в том, чтоprintf(), scanf()и другие работают по умолчанию с консолью (экран, клавиатура), аfprintf(), fscanf()– с файлами (в том числе и со стандартными потокамиstdin,stdoutи др.), поэтому у них добавлен параметр, являющийся указателем на структуруFILE, которая была рассмотрена выше.
. Используя подпрограммы, создать внешний файл из 7 записей, прочитать созданный файл и, применяя режим прямого доступа, выполнить задания по своему варианту.
Варианты заданий
1. Запись имеет вид: фамилия, пол, год рождения и рост. Вывести данные о самом высоком спортсмене.
2. Запись имеет вид: название вуза, число студентов, количество факультетов. Добавить в конец файла информацию о трех новых вузах.
3. Запись имеет вид: название издания, газеты или журнала, стоимость одного экземпляра, количество экземпляров в год . Вывести на печать информацию о самом дешевом издании.
4. Запись имеет вид: фамилия студента, номер зачетной книжки, 4 оценки за экзамен. Выводить информацию о всех двоечниках и корректировать ее.
5. Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Поменять местами в файле записи о первых двух спортсменах. *
6. Запись имеет вид: фамилия, номер телефона, дата рождения. Внести в начало списка информацию о четырех новых знакомых.
7. Запись имеет вид: название инструмента, число, месяц и год изготовления. Вывести на печать информацию об инструменте с самым большим сроком использования и выполнить корректировку этой записи.
8. Запись имеет вид: номер читательского билета, автор книги, название, дата заказа. Вывести на экран содержимое файла. Поменять местами первую и последнюю записи в файле.*
* При обмене введите промежуточную переменную типа запись.
Лабораторная работа №9 динамическая память
1. ЦЕЛЬ РАБОТЫ: изучение динамических структур данных на примере
односвязных списков, процедур для выделения и освобождения памяти.
2. Основные сведения
Рассмотренные ранее структуры данных являлись статическими.
Это означает, что память под эти данные выделялась на этапе компиляции. Такое выделение памяти не всегда удобно, т.к. заранее трудно предвидеть, например, размер массива для сортировки или число уравнений в системе. Поэтому в Турбо Паскале существует возможность выделения памяти не на этапе компиляции, а на этапе исполнения программы - динамическая память.
Процедура выделения памяти связана с процедурой ее освобождения после использования. В Турбо Паскале имеется три пары процедур выделения-освобождения памяти: New - Dispose, GetMem - FreeMem, Mark - Release. Чаще всего используется пара New для выделения памяти и Dispose для ее освобождения. Подчеркнем, что использование Dispose для освобождения выделенной динамической памяти не является обязательным, после выхода из программы динамическая память освобождается автоматически, но частое использование процедуры выделения памяти без ее освобождения может привести к состоянию невозможности дальнейшего выделения памяти и к остановке программы.
Рассмотрим работу с динамической памятью на примере односвязного списка. Такой список содержит записи с информационной частью (например, фамилия, имя, отчество, адрес, номер телефона и т.д.) и ссылочной частью (например, адрес следующей или предыдущей записи). Такой список принципиально отличается от массива тем, что в массиве записи упорядочены, удаление одной записи приводит к необходимости переписывать остальные записи на место предыдущих, в то время как в связном списке следует лишь переставить указатель. Число записей в массиве фиксировано, в связном списке - нет.
первую, рабочую записи>
write ('введите фамилию пациента: '); readln (tek^.fio);
write ('введите давление: '); readln (tek^.davl);
write ('введите фамилию пациента: '); readln (tek^.fio);
write ('введите давление: '); readln (tek^.davl);
while tek<>nil do
if tek^.davl>140 then
if tek<>perv then pred^.v:=tek^.v
if tek^.v=nil then
if tek<>perv then
writeln ('Оставшиеся записи в односвязном списке');
if perv<>nil then begin
while tek<>nil do
writeln('ФИО ',tek^.fio,' давление ', tek^.davl);
В данной программе rec - запись, содержащая сведения о пациенте: fio - фамилия, имя, отчество (15 символов), davl - давление (целое число), v - указатель на следующую запись. Тип указатель занимает в памяти 4 байта (2 байта сегментный регистр, 2 байта смещение), независимо от размера переменной, на которую он указывает. При описании типа указателя uk : ^rec; допускается употреблять неописанный тип rec (тип rec описан позже). Перед типом rec ставится символ ^ (карат), что означает: uk является указателем на тип rec. Когда речь идет о конкретной переменной, на которую указывает указатель, знак карата переносится в конец имени указателя, например, tek^.davl означает поле "давление" записи, на которую указывает указатель tek.
Для выделения памяти используется процедура new(). В данном случае new(tek) означает выделение памяти для записи, на которую указывает tek. Таким образом, tek - это адрес в оперативной памяти, с которой начинается вновь образованная переменная tek^ , имеющая тип записи rec. Конечно, заранее знать этот адрес невозможно, поэтому выделение динамической памяти производится на этапе исполнения (RunTime).
Тип uk (указатель на rec) имеют переменные tek, pred, perv, rab для текущей, предыдущей, первой, рабочей записей. Односвязный список всегда проходится в одном направлении, в данном случае от начала к концу, для установки на начало служит указатель на первую запись perv. В записи имеется ссылочная (адресная) часть v - указатель на следующую запись. Для последней записи списка, это - указатель в никуда, имеющий имя nil.
В начале программы вводится 5 записей пациентов. Ввод первой записи описан отдельно от остальных для инициализации указателей (в частности, указателя pred на предыдущую запись, которая ранее не существовала и определяется только после ввода первой записи).
Для каждой записи вначале ссылочному полю v присваиваем nil, что означает отсутствие следующей записи. В дальнейшем, при выделении памяти следующей записи процедурой new в это поле записывается текущий указатель, но не для текущей, а для предыдущей записи. В последней же записи на месте v остается nil.
Затем в программе описано удаление записей пациентов с давлением, большим 140. Односвязный список просматривается с начала, для чего текущему указателю tek присваивается значение perv указателя на первую запись. Просматривается поле давление tek^.davl для текущей записи и если оно больше 140, запись подлежит удалению. При этом действия различны, является ли удаляемая запись первой или нет.
Если удаляемая запись первая, то указатель на первую запись perv нужно передвинуть на следующую запись perv:=tek^.v. Если требуется удалить и следующую запись, она вновь будет первой, и вновь указатель первой записи будет изменен, как и следует.
Если же удаляемая запись не первая, то указатель предыдущей записи устанавливаем на адрес, на который указывает ссылка в текущей записи, таким образом, текущая запись будет пропущена в списке.
Если удаляемая запись последняя (tek^.v=nil), то следует в ссылочной части предыдущей записи установить признак конца списка pred^.v:=nil, если эта предыдущая запись существует (список не пуст, т.е. удалены не все записи). Если же удалены все записи, следует установить perv:=nil.
Далее в программе следует печать оставшихся записей, если список не пуст. Устанавливаем текущий указатель на первую запись и выводим на экран информационные поля fio и davl, затем переходим к следующей записи tek:=tek^.v.
Чем отличается List от массива?
Прошу разъяснить мне, что лучше использовать для хранения Ников: List или массив? Чет не понял как.
Чем отличается коллекция от массива?
если можно, приведите две группы факторов: плюсовую и минусовую
Найти сумму элементов массива, абсолютная величина которых отличается от 5 не более, чем на 1.2
Найти сумму и общее количество тех элементов массива X(n,m), абсолютная величина которых отличается.
Элементы массива располагаются в памяти друг за другом, элементы списка в произвольных местах. Список меняет размер динамически при добавлении/удалении элементов, массив - нет
The List
Если эта фраза находится в документации, то наличие внутреннего массива — это уже не деталь реализации, а публичный контракт.
То есть разработчик, использующий этот класс, может смело рассчитывать на то, что внутри список будет реализован именно так, а не иначе и строить логику своей программы соответствующим образом.
Если бы так было, то мы бы имели получение элемента по индексу за O(n), что полностью лишает смысла использовать List<> как динамический массив.
Это скорее недосмотр в спецификации языка, по которому потом писалась документация и компилятор.
Ну а когда хватились, видать сочли, что весь головняк с коррекцией спека, документации и компилятора не стоит того, чтобы имелась возможность писать enum Foo : System.Int32.
ViterAlex, ну что же Вы. List<> в шарпе это динамический массив. А список в классическом понимании это LinkedList<>
Если так интересно, ставьте Windows 7 на виртуальной машине, без обновлений, VS2010. VS2013, и пробуйте.
Напечатать номера элементов массива, значение которых менее чем на 3 отличается от значения наименьшего
Ввести непомерный массив А,вывести его.Напечатать номера элементов,значение которых менее чем на 3.
Найти сумму и количество тех элементов массива, абсолютная величина которых отличается от P не более, чем на T
Найти сумму и общее количество тех элементов заданного массива X1,X2, … ,Xn, абсолютная величина.
Найти сумму элементов массива, абсолютная величина которых отличается от заданного числа не более, чем на 5
Вот есть заданьице такое: В массиве, содержащем не более 30 элементов ( формат числа цц ).
Чем отличается =- от -=
Только подробно опишите пожалуйста,у меня из-за этого программа в циклах не правильно считает
4. Контрольные вопросы
4.1. Чем отличается файл от массива?
4.2. Особенности организации текстовых файлов.
4.3. Что понимается под чтением, и что под записью в файл ?
4.4. Типы доступа к файлам.
4.5. Назначение процедуры SEEK.
4.6. Привести пример корректировки К-той записи.
4.7. Как определить размер файла?
Читайте также: