- •Алгоритмитизация и программирование Лекция 1
- •Общие сведения
- •Модель osi. Понятие об интерфейсах и протоколах. Рекомендация itu-t X.200
- •1.3. Системы счисления
- •Лекция 2
- •2.1. Способы описания алгоритмов функционирования узла коммутации
- •2.2. Описание алгоритмов с помощью диаграммы состояний
- •Variable
- •Input port
- •Input signal
- •2.3. Описание алгоритмов с помощью временной диаграммы
- •Описание алгоритмов с помощью текстового описания
- •Лекция 3
- •3.2. Типы данных
- •3.3. Арифметические операторы
- •3.4. Операторы сравнения
- •3.5. Побитовые операторы
- •3.6. Кодовые таблицы
- •Int main()
- •Лекция 4
- •4.2. Переменные
- •4.3. Ввод/вывод
- •4.4. Арифметические операции
- •4.5. Взаимосвязь чисел и литер
- •Лекция 5
- •5.1. Базовые конструкции
- •5.2. Операторы базовых конструкций
- •If (условие) {операторы 1}
- •Лекция 6
- •6.1. Указатели
- •6.2. Функции
- •6.3. Массивы
- •Лекция 7
- •7.1. Создание и инициализация строк
- •7.2. Функции для работы со строками
- •Лекция 8
- •8.1. Структуры
- •8.2. Формирование контрольной суммы
- •Лекция 9
- •9.1. Операции с файлами
- •9.2. Открытие текстового файла для записи
- •9.3. Открытие текстового файла для чтения
8.2. Формирование контрольной суммы
Вычисление контрольной суммы (Header Checksum) производится следующим образом.
Суммируются все 16-и битовые поля заголовка, за исключением поля Header Checksum. В нашем случае получим (шестнадцатеричный код)
4500 + 00c8 + 987e + 0000 + 7f11 + 0000 + a3f2 + cb32 + c0a8 + 01ca =38eed.
Вычисляется сумма с учетом переноса
8eed + 3 = 8ef0.
Вновь полученная сумма побитно инвертируется ~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).