
- •1.Этапы подготовки и решения задач на эвм.
- •1. Введение
- •2. Постановка задачи
- •3. Математическое описание задачи
- •4. Выбор и обоснование метода
- •5. Алгоритмизация вычислительного процесса
- •6. Составление программы
- •7. Отладка программы
- •8. Решение задачи на эвм и анализ результатов
- •2. Понятие подпрограммы, модуля и функции.
- •Условный оператор if
- •If (условие) оператор_1; else оператор_2;
- •If (условие) { оператор_1; оператор_2; … }
- •Оператор варианта switch
- •Цикл for
- •Цикл while
- •Цикл do while
- •Структурный тип данных – массив
- •Одномерные и двумерные массивы
- •Функция
- •Комбинированный тип данных – запись.
- •Работа с файлами
- •Указатели. Динамические переменные. Их использование
- •Применение связынных списков , очередей . И.Т.Д Очереди, стеки, связанные списки и деревья
- •Итеративные алгоритмы..
- •Невычислительные задачи
- •Последовательный поиск
- •Бинарный поиск
- •Метод поиска по бинарному дереву Теория
- •Вставка и удаление
- •Метод интерполяционного поиска Интерполяционный поиск
- •Метод поиска по бору . Алгоритм и его реализация
- •Добавление новой строки в бор:
- •Поиск строки в боре:
- •Реализация:
- •Методы хранения бора:
- •Сортировка простым выбором
- •Сортировка методом простой вставки
- •Метод сортировки бинарной вставкой
- •Метод сортировки стандартным обменом Стандартный обмен
- •Шейкерная сортировка
- •Метод сортировки Шелла.
Указатели. Динамические переменные. Их использование
В программах на языке C++ широко используется переменная типа указатель. Значение, которой является адрес другой переменной или функции. В описании необходимо сообщить не только, что данная переменная является указателем, но и то что она ссылается на переменную некоторого тип, то есть компилятору необходимо определить сколько байт памяти связаны с данными указателя.
1
Тип * имя;
Наиболее важными действиями связанные с указателями является операция обращения по адресу * и операция определения адреса &. Операция * служит для присваивания и считывания значения переменной, на которую ссылается указатель, а операция & возвращает адрес памяти своего операнда. Причём размер записи зависит от применяемой модели динамической памяти. В приложениях C++ возможно использование 6 моделей памяти.
Tiny – крошечная Small – маленькая Medium – средняя Compact – компактная Large – большая Huge – огромная
Для адресации данных при первых моделей памяти используют ближние, короткие, двухбайтовые указатели. Они содержат только адресное смещение. Данные модели поддерживают доступ только к 64 кб программного кода. В независимости от модели памяти разработчик может обменять размер указателя по умолчанию и предложить свой, используя служебные слова near/far. При этом описание указателя будет следующим:
1
Тип near/far * имя;
Компилятор может преобразовать ближний указатель в дальний, но не наоборот. Использование модификатора far ограничивает размер одной относительной единицы данных с 64 кб. При работе с динамическими переменными типа указателя. Самой распространенной ошибкой является, то что в описании указатель не инициализируется, что приводит к тому, что компилятор резервирует память только под хранения адреса.
1
int *x *y;
Для динамических переменных *x *y отводится только 2 байта под хранение адреса и не отводится 2 байта переменной типа int.
1
int *z=10;
При работе с указателями следует: 1) Предварительно инициализировать указатель, то есть либо при описании присвоить ему начальное значение Int *z=10; либо присвоить указателю адрес уже инициализированной переменной. Пример.
1
int i=10, *j=&i;
2) Использовать функции распределения динамической памяти, которая описана в библиотеке alloc.h.
Виды функций: 1) Void *malloc (unsigned s) – выделяет память размером s байт. 2) Void *calloc (unsigned nel, unsigned els) – выделяют память для nel элементов для которой размер каждого элемента равен els. 3) Void *realloc (void *blok, unsigned s) – изменяет размер ранее выявленной памяти. Для * blok до величины s байт. 4) Void far *faralloc (unsigned long nel, unsigned long els) – выделяет память для дальней её модели под nel элементов размер каждого из которых равен els. 5) Void free (void *blok) – освобождает ранее выделенную память.
Поскольку все функции работают с динамической памятью, имеет тип Void, то они совместимы с указателями любого типа.
3) Для определения размера памяти необходимого под хранение какой-либо переменной используется функции sizeof (); В скобках указывается либо имя переменной, либо тип.