Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.docx
Скачиваний:
12
Добавлен:
15.03.2015
Размер:
5.82 Mб
Скачать

8.2. Формирование контрольной суммы

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

  1. Суммируются все 16-и битовые поля заголовка, за исключением поля Header Checksum. В нашем случае получим (шестнадцатеричный код)

4500 + 00c8 + 987e + 0000 + 7f11 + 0000 + a3f2 + cb32 + c0a8 + 01ca =38eed.

  1. Вычисляется сумма с учетом переноса

8eed + 3 = 8ef0.

  1. Вновь полученная сумма побитно инвертируется ~8ef0=710f c выделением последних 2-х байтов.

Задание. Выполнить лабораторную работу 8 (Вычисление контрольной суммы).

Лекция 9

9.1. Операции с файлами

Большие объемы данных хранятся на диске в виде файлов. Существуют два основных типа файлов: текстовые и двоичные.

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

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

В программах на C++ при работе с текстовыми файлами необходимо подключить библиотеку fstream.

При работе с файлами используются специальные типы данных, называемые потоками. Переменная для записи символов в файл имеет вид с ofstream <переменная_потока>, а переменная для чтения символов из файла имеет вид с ifstream <переменная_потока>.

Файл может быть открыт в одном из следующих режимов:

  • ios::in — открыть файл в режиме чтения данных;

  • ios::out — открыть файл в режиме записи данных (при этом информация о существующем файле уничтожается);

  • ios::app — открыть файл в режиме записи данных в конец файла;

  • ios::ate — передвинуться в конец уже открытого файла;

  • ios::trunc — очистить файл, это же происходит в режиме ios::out;

  • ios::nocreate — не выполнять операцию открытия файла, если он не существует;

  • ios::noreplace — не открывать существующий файл.

9.2. Открытие текстового файла для записи

Для открытия и записи в файл используются переменнаяfstream <имя_переменной>; оператор<переменная_потока>.open(путь_к_файлу, режим);

Для закрытия файла используется оператор <переменная_потока>.close();

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

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <cstdio> //для функции gets()

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{

CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str());

return text;

}

int main()

{

int i, n=5;

float a;

ofstream file2; //объявляет имя потока для записи данных в файл

file1.open("D:\\SOURCE\\qwerty.dot", ios::out);

cout<<Rus("Введите данные: ")<<endl;

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

{

cin>>a;

file2<<a<<endl; //запись переменной а в файл

}

file2.close(); //закрытие потока

return 0;

}

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

Пример: открытие файла для записи одной строчной переменной (3 строки на экране)

y1=3 – первая цифра зачетки

y2=7 – вторая цифра зачетки

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <cstdio> //для функции gets()

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{

CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str());

return text;

}

int main()

{

int i,n=3; //объявляется число строк для отображения на экране

char str[80]; // объявляется длина строки

fstream file1; //объявляется имя потока для записи данных в файл

file1.open("D:\\SOURCE\\qwerty.txt", ios::out);

cout<<Rus("Введите данные: ")<<endl;

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

{

gets(str);

file1<<str<<endl;

}

file1.close(); //закрытие потока

return 0;

}

Созданный файл D:\\CodeBlocks\\SOURCE\\qwerty.txt можно прочитать любым текстовым редактором с установкой кодировки CP866. При использовании MS Word следует: Open with/Microsoft Office Word/MS-DOS, а при использовании Notepad – Open with/Notepad (Format/Font/Terminal).