Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Обработка бинарных файлов




Работа с текстовыми файлами

Файлы бывают текстовые (в которых можно записывать только буквы, цифры, скобки и т.п.) и двоичные (в которых могут храниться любые символы из таблицы). В текстовых файлах не употребляются первые 31 символ кодовой таблицы ASCII (управляющие), а символы конца строки 0x13 (возврат каретки, CR) и 0x10 (перевод строки LF) преобразуются при вводе в одиночный символ перевода строки \n (при выводе выполняется обратное преобразование). Эти символы добавляются в конце каждой строки, записываемой в текстовый файл. При обнаружении в текстовом файле символа с кодом 26 (0x26), т.е. признака конца файла, чтение файла в текстовом режиме заканчивается, хотя файл может иметь продолжение.

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

#include "stdafx.h"

#include <string.h>

int main()

{ FILE *f, *r; // Указатели на файлы

char ch, pr[65];

char text[]="1,2,3,4,5 i caught a fish alive, 6,7,8,9,10 i let it go again!";

 

f=fopen("FIL1.txt","w"); // Создание нового файла FIL1.txt

fputs(text,f); // Запись в файл строки text

fclose(f); // Закрытие файла f

f=fopen("FIL1.txt","r"); // Открытие файла f для чтения

r=fopen("FIL2.txt","w"); // Создание нового файла FIL2.txt

while (!feof(f)) // Пока не конец файла

{ ch=fgetc(f); // Чтение символа ch из файла f

if (ch >='a'&&ch<='z') // Прочитанный символ - буква?

fputc(ch,r); // Запись в файл r символа ch

}

fclose(r); // Закрытие файла r

rewind(f); // Возврат указателя на начало файла f

fgets(pr,65,f); // Чтение из файла f строки в переменную pr

printf("%s\n",pr); // Вывод строки pr на дисплей

r=fopen("FIL2.txt","r"); // Открытие файла r для чтения

while (!feof(r)) // Пока не конец файла pr

{ ch=fgetc(r); // Чтение символа из файла r

putchar(ch); // Вывод символа ch на дисплей

}

printf("\n");

fclose(f); // Закрытие файлов

fclose(r);

return 0;

}

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

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

 

#include "stdafx.h"

#include <conio.h>

typedef struct city

{ int kod;

char name[10];

long c; } town;

town t;

int main()

{ char c;

FILE *f;

char ch;

f=fopen("file1.dat","wb"); //открытие бинарного файла для записи

printf("\n Ввод информации о городе ");

do

{ printf("\nКод: "); scanf("%d", &t.kod);

printf("\nназвание: "); scanf("%s", t.name);

printf("\nколичество жителей: "); scanf("%ld", &t.c);

fwrite(&t, sizeof(t), 1, f); //запись в файл одной структуры t

printf("\n END Закончить? y/n ");

ch=getch();

}

while (ch!= 'y');

fclose(f);

}

Выполнение этой программы приведет к созданию бинарного файла с информацией о городах.

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

#include "stdafx.h"

#include <conio.h>

typedef struct city

{ int kod;

char name[10];

long c; } town;

town t;

int main()

{

FILE *f;

f=fopen("file1.dat","rb"); //открытие бинарного файла для чтения

fread(&t, sizeof(t), 1, f); //чтение из файла одной структуры t

while (!feof(f))

{ if(t.c>1000000)

printf("\n%3d название: %10s количество жителей: %ld",

t.kod, t.name, t.c);

fread(&t, sizeof(t), 1, f);

}

fclose(f);

}

 

Контрольные задания

Составить программу решения задачи с использованием файла данных и выполнить ее на ПК.

Вариант     Условие задачи  
I Создать файл, содержащий массив целых чисел. Най­ти наименьшее из модулей отклонения чисел от их среднего значения.
  Создать файл, содержащий массив вещественных чи­сел. Определить количество чисел, меньших среднего арифметического значения всех чисел массива.
  Создать файл, содержащий фамилии студентов и их возраст. Вывести фамилии студентов, имеющих наи­меньший возраст.
  Создать файл, содержащий названия всех месяцев го­да. Вывести сначала летние месяцы, а затем - зимние.
  Создать файл, содержащий фамилии студентов. Вы­вести список студентов, имеющих фамилии наиболь­шей длины.
  Создать файл, содержащий произвольные текстовые строки. Подсчитать количество строк, начинающихся с буквы 'А'.
  Создать файл, содержащий текстовые строки произ­вольной длины. Дополнить все строки символом 'X' до самой длинной строки.
  Создать текстовый файл с произвольным числом строк. Подсчитать общее количество символов в каждой строке.
  Переписать в файл выходных данных таблицу значений функций: у = sinx и z = tgx, рассчитанных для всех х на отрезке [0, 3] с шагом 0.1. Значения х записать в файле с одной цифрой в дробной части, значения у - сдвумя цифрами в дробной части, значения z - в форме числа с порядком.
  Создать файл, содержащий текстовые строки произвольной длины. Вывести строки с наименьшей длиной.
  Создать файл, содержащий ФИО студентов и их экзаменационные оценки по трем дисциплинам. Вывести ФИО студентов, успешно сдавших все экзамены.
  Создать файл, содержащий ФИО студентов и их экзаменационные оценки по трем дисциплинам. Выбрать студентов, имеющих хотя бы одну задолженности. Вывести ФИО этих студентов и количество несданных экзаменов.
  Создать файл F1, содержащий ФИО студентов. Переписать его в файл F2 таким образом, чтобы перед ФИО студента стоял его порядковый номер.
  Создать файл, состоящий из девяти строк. В первой строке записать одну цифру '1', во второй строке 1 две цифры ' 2',..., в девятой строке - девять цифр ' 9'.
  Создать файл, содержащий ФИО рабочих и их среднемесячный заработок. Вывести ФИО рабочих, имеющих наибольший заработок.
  Создать файл, содержащий ФИО студентов и их экзаменационные оценки по пяти дисциплинам. Вывести ФИО студентов, сдавших сессию на «хорошо» и «отлично».
  Создать файл, содержащий ФИО абонентов и их номера телефонов. Составить программу, которая по ФИО абонента выводит его номер телефона.
  Создать файл, содержащий номер рейса самолета и количество свободных мест. Составить программу, которая по вводимому номеру рейса выводит сведе­ния о количестве свободных мест на этот рейс.
  Создать файл, содержащий названия детских игрушек и их стоимость. Вывести наименование и стоимость самой дорогой игрушки.
  Создать файл, содержащий массив целых чисел про­извольного размера. Определить количество элемен­тов массива. Переменной L присвоить значение TRUE, если в массиве нечетное число элементов, и значение FALSE - в противном случае.

Заключение

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

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

 

 


 

Оглавление

 

1. Основы алгоритмизации и программирования. 4

1.1. Этапы подготовки и решения задач на ЭВМ.. 4

1.2. Алгоритмы и способы их описания. 6

1.3. Компиляция и интерпретация программ. 13

1.4. Стили программирования. 14

2. Основы алгоритмического языка С++. 23

2.1. Пример готовой программы. 23

2.2. Структура основной программы.. 25

2.3. Алфавит языка. 27

2.4. Константы и переменные. 27

2.5. Арифметические выражения. 30

2.6. Линейные вычислительные процессы.. 37

2.7. Разветвляющиеся вычислительные процессы.. 51

2.8. Циклические вычислительные процессы.. 65

2.9. Базовые алгоритмы.. 71

2.10. Указатели и массивы.. 78

2.11. Подпрограммы.. 97

2.12. Текстовые данные. 109

2.13. Динамическое выделение памяти. 119

2.14. Структуры данных. 124

2.15. Файлы данных. 130

Заключение. 143

 


СПИСОК ДОПОЛНИТЕЛЬНОЙ ЛИТЕРАТУРЫ

1. Голицына О.Л. Основы алгоритмизации и программирования. М.: Форум. 2008.- 431с.

2. М. С. Эпштейн. Практикум по программированию на языке С. М.: Академия, 2007, -102с.

3. Г. Шилдт. Полный справочник по C++. М.: Вильямс, 2006,- 217с.

4. Стенли Липпман, Жози Лажойе, Барбара Му. Вводный курса стандартного языка C++. М.: Вильямс, 2007,- 892с.

5. http://256bit.ru/informat/index11.htm

 




Поделиться с друзьями:


Дата добавления: 2014-12-26; Просмотров: 975; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.