Лабораторная работа №10. Файлы

 

Цель работы: приобретение навыков программирования при решении задач с использованием типа файл.

 

Отчет на лабораторную работу должен содержать:

- задание по варианту;

- листинг программы, записанного по правилам языка Си/Си++ (все значения для вычисления ввести с клавиатуры.);

- составить блок-схему данного алгоритма;

- скриншот результата программы

10.1 Варианты заданий

1. Дан файл f, компоненты которого являются дейст­вительными числами. Найти:

а) сумму компонент файла f;

б) последнюю компоненту файла.

2. Дан файл f, компоненты которого являются дейст­вительными числами. Найти:

а) наименьшее из значений компонент с четными но­мерами

б) разность первой и последней компонент файла.

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

4. Дан файл f, компоненты которого являются целыми числами. Записать в файл g все четные числа файла f, а в файл h — все нечетные. Порядок следования чисел сохраняется.

5. Дан символьный файл f. Записать в файл g ком­поненты файла f в обратном порядке.

6. Дан файл f, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько и положительных. Используя вспомогательный файл h, переписать компоненты файла f в файл g так, чтобы в файле g:

а) не было двух соседних чисел с одним знаком;

б) сначала шли положительные, потом отрицательные числа.

7. Дан файл f, компоненты которого являются целыми числами. Записать в файл g наибольшее значение первых ста компонент файла f, затем - следующих ста компонент и т. д. Если в последней группе окажется менее ста компонент, то последняя компонента файла g должна быть равной наибольшей из компонент файла f, образующих последнюю (неполную) группу.

8. Даны символьные файлы f и g. Определить, сов­падают ли компоненты файла f с компонентами файла g. Если нет, то получить номер первой компоненты, в кото­рой файлы f и g отличаются между собой. В случае, ко­гда один из файлов имеет n компонент (n ≥ 0) и повторяет начало другого (более длинного) файла, ответом должно быть число n+1.

9. Дан символьный файл f. Группы символов, раз­деленные пробелами (одним или несколькими) и не содер­жащие пробелов внутри себя, будем называть словами. Удалить из файла все однобуквенные слова и лишние пробелы. Результат записать в файл g.

10. Дан символьный файл f, содержащий сведения о сотрудниках учреждения, записанные по следующему образцу: фамилия _ имя _ отчество, фамилия _ имя _ отче­ство, . . . Записать эти сведения в файле g, используя образцы:

а) имя _ отчество _ фамилия, имя _ отчество _ фами­лия, . . .;

б) фамилия _ и.o., фамилия _ и.о., . . .

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

а) Найти число пассажиров, имеющих более двух вещей, и число пассажиров, количество вещей которых превосходит среднее число вещей.

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

12. Сведения об ученике состоят из его имени и фами­лии и названия класса (года обучения и буквы), в котором он учится. Дан файл f, содержащий сведения об учениках школы.

а) Выяснить, имеются ли однофамильцы в каком-нибудь классе.

б) Собрать в файле g сведения об учениках 9-х и 10-х классов, поместив вначале сведения об учениках класса 9а, затем 9б и т. д., затем 10а, 106 и т. д.

13. Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий сведения о нескольких автомобилях. Найти:

а) фамилии владельцев и номера автомобилей данной марки;

б) количество автомобилей каждой марки.

14. Дан файл f, содержащий сведения об игрушках: указывается название игрушки (например, кукла, кубики, мяч, конструктор и т. д.), ее стоимость в копейках и воз­растные границы детей, для которых игрушка предназна­чена (например, для детей от двух до пяти лет). Получить следующие сведения:

а) цену самого дорогого конструктора, оформленную по образцу ... тенге ... тиын.;

б) можно ли подобрать игрушку, любую, кроме мяча, подходящую ребенку 3 лет, и дополнительно мяч так чтобы суммарная стоимость игрушек не превосходил 5 тенге?

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

а) занимает не более одной строки файла f;

б) может занимать произвольное число строк файла.

 

10.2 Методические указания к выполнению лабораторной работы

Под файлом понимается либо наименованная область внешней памяти ПК, либо логическое устройство - потенциальный источник или приемник информации. Файл представляет собой совокупность компонент одного типа. Типом компонентов может быть любой тип языка Си(Си++) кроме файлов. Различают 2 вида файлов: текстовые и бинарные. Указатели на файлы необходимо объявлять. Синтаксис объявления такого указателя следующий:

FILE *указатель на файл;

Пример: FILE *f;

Для работы с файлом необходимо сделать следующие шаги:

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

- закрыть файл;

- ввод файла;

- вывод файла.

Для открытия файла используется функция f=fopen(“имя_файла”,”режим”);

Пример:

FILE *f;

f=fopen ("D:\LAB1.СPP", "w");//открытие файла для записи

//Если соответствующий физический файл

// существует,он будет перезаписан

Для закрытия файла используется функция

fclose(имя_указателя);

Пример: fclose(f);

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

fgetс()-читает и возвращает символ из открытого файла

Синтаксис: int fgets(FILE *fp);

fgets(0 -Считывает строку из файла stream до тех пор , пока не будут считаны n-1 символов, либо символ перевода строки, либо достигнут конец файла. Возвращает указатель на string, в случае ошибки или при достижении конца файла- NULL-указатель

Синтаксис: char * fgets(char *string, int n,FILE * stream);

для решения задачи по обработке файлов.

fgetchov()- Читает и возвращает символ из файла stdin

Синтаксис:

int fgetchov(void);

ungetc() -Возвращает символ ch в файл. Следующая операция чтения символа из файла вернет этот символ

Синтаксис: int ungetc(int ch, FILE *fp);

fputs() - Записывает в файл код ch символа

Синтаксис: int fputs(int ch, FILE *fp)

gets ()- Читает байты из файла stdin и записывает их в строку S до тех пор, пока не встретит символ ' \n ', который заменяется на нуль-терминатор

Синтаксис:

int gets (char *S);

fgets ()- Извлекает байты из файла, описываемого fp, и записывает их в строку S до тех пор, пока не встретит символ ' \n ' или пока не будет считано m байтов

Синтаксис:

int fgets (char *S int m, FILE *fp);

fputs ()-Записывает в файл байты из строки S до тех пор, пока не встретится нуль-терминатор, который в файл не переносится и на символ ' \n ' не заменяется

Синтаксис:

int fputs (char *S, FILE *fp);

puts ()- Записывает в файл stdout байты из строки S до тех пор, пока не встретится нуль-терминатор, который в файл переносится и заменяется на символ ' \n '

Синтаксис:

int puts (char *S);

freаd()- Считывает n блоков по size байт каждый из файла fp в область памяти, на которую указывает указатель ptv (необходимо заранее отвести память под считываемый блок)

Синтаксис:

int freаd (void *ptv, int size, int n, FILE *fp);

fwrite()- Записывает n блоков по size байт каждый из области памяти, на которую указывает ptv, в открытый файл fp

Синтаксис:

int fwrite (void *ptv, int size, int n, FILE *fp);

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

Синтаксис:

int fprintf (void *ptv, format-string [, argument ...]);

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

Синтаксис:

int fscanf (void *ptv, format-string [, argument ...]);

fseek ()-перемещает указатель, соответствующий потоку stream, на новое место расположения, отстоящее от origin на offset байтов.

Синтаксис:

int fseek (stream, offset, origin);

 

Контрольные вопросы

1. Укажите правила открытия файла в языке С.

2. Укажите правила открытия файла в языке С.

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

4. Какие четыре шага необходимы для работы с файлами?

5. Для чего используются режимы при открытии файла?

6. Какие типы файлов бывают?

7. Напишите синтаксис форматированного ввода в файл.

8. Напишите синтаксис форматированного вывода в файл.

 

 

Приложение А

 

Таблица А1 - Описание операций (операции расположены по убыванию приоритета)

 

операция описание
() вызов функции
[] выделение массива
. обращение к полям и методам через сам объект
-> обращение к полям и методам через ссылку на объект
! Логическое отрицание
~ Побитовое отрицание
- изменение знака
++ инкремент
-- декремент
& взятие адреса (&a)
* обращение по адресу (a*)
(тип) преобразование типа
sizeof() размер в байтах
* умножение
/ деление
% остаток от деления
+ сложение
- вычитание
< меньше
> больше
<= меньше равно
>= больше равно
== равно
!= не равно
& поразрядное логическое И
^ поразрядное исключающее ИЛИ
| поразрядное логическое ИЛИ
&& логическое И
|| логическое ИЛИ
?: условная операция
= операция присваивания
, операция запятая
+= -= *= /= <<= >>= &= |= ^= Бинарные операции

 

Приложение Б

Таблица Б1 - Описание математических функций

 

Функция Математическое обозначение Обозначение
Абсолютное значение |x| fabs(x)
Косинус cos x cos(x)
Синус sin x sin(x)
Тангенс tg x tan(x)
Экспонента ех exp(x)
Возведение в степень ху pow(x,y)
Степенная функция 10n pow10(n)
Логарифм натуральный ln x log(x)
Логарифм десятичный log x log10(x)
Корень квадратный sqrt(x)

Приложение В

Режим Описание
R   Файл открывается только для чтения. Если нужного файла на диске нет, то возникает ошибка
W   Файл открывается только для записи. Если файла с заданным именем нет, то он будет создан, если же такой файл существует, то перед открытием прежняя информация уничтожается
A   Файл открывается для дозаписи в его конец новой информации
r+   Файл открывается для редактирования его данных. Возможны и запись, и чтение информации
w+   Файл открывается для редактирования его данных. Возможны и запись, и чтение информации
a+   То же, что и для a, только запись можно выполнять в любое место файла. Доступно и чтение файла
T   Файл открывается в текстовом режиме. Указывается поле r, w, a, r+, w+, a+
B   Файл открывается в двоичном режиме. Указывается поле r, w, a, r+, w+, a+

Таблица В1 - Тип доступа к файлу

 

Список литературы

 

Основная литература:

1. Керниган Б., Ритчи Д. Язык программирования СиДПер. с англ., 3-е изд., испр. —СПб.: "Невский Диалект", 2001. - 352 с: ил.

2. В.В. Борисенко Основы программирования программирования http://www.intuit.ru/department/se/pbmsu/

3. Программирование на языке Си К. Поляков, 1995-2009 http://kpolyakov.narod.ru

4. В.Л Бусько, А.Г. Корбит, И.Н. Коренская, В.И. Убийконь Л12 Лабораторный практикум по программированию в 2 ч. Ч.2: Основы программирования на алгоритмическом языке - Мн.: БГУИР,2001.-62 с.

 

Дополнительная литература:

1. Жоголев Е. А. Лекции по технологии программирования. МГУ, 2000 http://sp.cmc.msu.ru/info/3/techprog.htm.

2. Е.А. Ерёмин, А.П. Шестаков. Примерные ответы на профильные билеты." //Информатика, 2006-2007http://comp-science.narod.ru/Bilet/bil6.htm

3. Павловская Т.А. C/C++. Программирование на языке высокого уровня: учебник для студентов вузов, обучающихся по направлению "Информатика и вычисл. техника" / Т.А. Павловская СПб.: Питер, 2005. 461 с.

4. Культин Н. Б.C/C++ в задачах и примерах. — СПб.: БХВ-Петербург, 2005. —288 с : ил.

5. Подбельский В.В. Язык СИ++: учебное пособие. М.: Финансы и статистика, 2003. 560 с.

 

Сводный план 2013г., поз 70

 

 

Гульнара Абуталиновна Омарова

Клара Тагаевна Сауанова