
- •1.Этапы подготовки и решения задач на эвм.
- •1. Введение
- •2. Постановка задачи
- •3. Математическое описание задачи
- •4. Выбор и обоснование метода
- •5. Алгоритмизация вычислительного процесса
- •6. Составление программы
- •7. Отладка программы
- •8. Решение задачи на эвм и анализ результатов
- •2. Понятие подпрограммы, модуля и функции.
- •Условный оператор if
- •If (условие) оператор_1; else оператор_2;
- •If (условие) { оператор_1; оператор_2; … }
- •Оператор варианта switch
- •Цикл for
- •Цикл while
- •Цикл do while
- •Структурный тип данных – массив
- •Одномерные и двумерные массивы
- •Функция
- •Комбинированный тип данных – запись.
- •Работа с файлами
- •Указатели. Динамические переменные. Их использование
- •Применение связынных списков , очередей . И.Т.Д Очереди, стеки, связанные списки и деревья
- •Итеративные алгоритмы..
- •Невычислительные задачи
- •Последовательный поиск
- •Бинарный поиск
- •Метод поиска по бинарному дереву Теория
- •Вставка и удаление
- •Метод интерполяционного поиска Интерполяционный поиск
- •Метод поиска по бору . Алгоритм и его реализация
- •Добавление новой строки в бор:
- •Поиск строки в боре:
- •Реализация:
- •Методы хранения бора:
- •Сортировка простым выбором
- •Сортировка методом простой вставки
- •Метод сортировки бинарной вставкой
- •Метод сортировки стандартным обменом Стандартный обмен
- •Шейкерная сортировка
- •Метод сортировки Шелла.
Комбинированный тип данных – запись.
Все структурированные типы данных, с которыми мы уже познакомились, представляют собой совокупности однотипных величин. Комбинированный тип данных — это структурированный тип, состоящий из фиксированного числа компонент (полей) разного типа. Комбинированный тип имеет еще и другое название — запись.
Обычно запись содержит совокупность разнотипных атрибутов, относящихся к одному объекту. Например, анкетные сведения о студенте вуза могут быть представлены в виде информационной структуры (рис. 35).
Такая структура называется двухуровневым деревом. В Паскале эта информация может храниться в одной переменной типа Record (запись). Задать тип и описать соответствующую переменную можно следующим образом:
Type Anketa1=Record
FIO: String[50]; {поля}
Pol: Char;
Dat: String[16]; {записи}
Adres: String[50];
Curs: 1..5; (или элементы)
Grup: 1..10;
Stip: Real {записи}
End;
Var Student: Anketa1;
Такая запись, так же как и соответствующее ей дерево, называется двухуровневой.
К каждому элементу записи можно обратиться, используя составное имя, которое имеет следующую структуру:
<имя переменной>.<имя поля>
Например, student. fio; student. dat и т.п. Если, например, требуется полю курс присвоить значение 3, то это делается так:
Student.Curs:=3 ;
Поля записи могут иметь любой тип, в частности сами могут быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 2 уровней). Например, те же сведения о студентах можно отобразить трехуровневым деревом (рис.36).
Такая организация данных позволит, например, делать выборки информации по году рождения или по городу, где живут студенты. В этом случае описание соответствующей записи будет выглядеть так:
Type Anketa2=Record
FIO: String[50];
Pol: Char;
Dat: Record
God: Integer;
Mes: String[10];
Den: 1..31
End;
Adres: Record
Gorod: String[20];
UlDomKv: String[30];
End;
Curs: 1..5 ;
Grup: 1..10;
Stip: Real
End;
Var Student: Anketa2;
Поля такой записи, находящиеся на третьем уровне, идентифицируются тройным составным именем.
Например, student.Dat.God; student.Adres.Gorod.
Приведем структурограмму задания комбинированного типа (рис.37).
В программе могут использоваться массивы записей. Если на факультете 500 студентов, то все анкетные данные о них можно представить в массиве:
Работа с файлами
Для работы с файлами необходимо подключить заголовочный файл <fstream>. В <fstream> определены несколько классов и подключены заголовочные файлы <ifstream> - файловый ввод и <ofstream> - файловый вывод.
Файловый ввод/вывод аналогичен стандартному вводу/выводу, единственное отличие – это то, что ввод/вывод выполнятся не на экран, а в файл. Если ввод/вывод на стандартные устройства выполняется с помощью объектов cin и cout, то для организации файлового ввода/вывода достаточно создать собственные объекты, которые можно использовать аналогично операторам cin и cout.
Например, необходимо создать текстовый файл и записать в него строку Работа с файлами в С++. Для этого необходимо проделать следующие шаги:
создать объект класса ofstream;
cвязать объект класса с файлом, в который будет производиться запись;
записать строку в файл;
закрыть файл.
Почему необходимо создавать объект класса ofstream, а не класса ifstream? Потому, что нужно сделать запись в файл, а если бы нужно было считать данные из файла, то создавался бы объект класса ifstream.
1 2 |
// создаём объект для записи в файл ofstream /*имя объекта*/; // объект класса ofstream |
Назовём объект – fout, Вот что получится:
1 |
ofstream fout; |
Для чего нам объект? Объект необходим, чтобы можно было выполнять запись в файл. Уже объект создан, но не связан с файлом, в который нужно записать строку.
1 |
fout.open("cppstudio.txt"); // связываем объект с файлом |
Через операцию точка получаем доступ к методу класса open(), в круглых скобочках которого указываем имя файла. Указанный файл будет создан в текущей директории с программой. Если файл с таким именем существует, то существующий файл будет заменен новым. Итак, файл открыт, осталось записать в него нужную строку. Делается это так:
1 |
fout << "Работа с файлами в С++"; // запись строки в файл |
Используя операцию передачи в поток совместно с объектом fout строка Работа с файлами в С++ записывается в файл. Так как больше нет необходимости изменять содержимое файла, его нужно закрыть, то есть отделить объект от файла.
1 |
fout.close(); // закрываем файл |
Итог – создан файл со строкой Работа с файлами в С++.
Шаги 1 и 2 можно объединить, то есть в одной строке создать объект и связать его с файлом. Делается это так:
1 |
ofstream fout("cppstudio.txt"); // создаём объект класса ofstream и связываем его с файлом cppstudio.txt |
Объединим весь код и получим следующую программу.
MVS
Code::Blocks
Dev-C++
QtCreator
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// file.cpp: определяет точку входа для консольного приложения.
#include "stdafx.h" #include <fstream> using namespace std;
int main(int argc, char* argv[]) { ofstream fout("cppstudio.txt"); // создаём объект класса ofstream для записи и связываем его с файлом cppstudio.txt fout << "Работа с файлами в С++"; // запись строки в файл fout.close(); // закрываем файл system("pause"); return 0; } |
Осталось проверить правильность работы программы, а для этого открываем файл cppstudio.txt и смотрим его содержимое, должно быть - Работа с файлами в С++.
Для того чтобы прочитать файл понадобится выполнить те же шаги, что и при записи в файл с небольшими изменениями:
создать объект класса ifstream и связать его с файлом, в который будет производиться запись;
прочитать файл;
закрыть файл.