- •Базовые понятия информатики. Понятие «Информатика» и «Информация»
- •Информация
- •Информационные технологии
- •Понятие алгоритма. Свойства и классы алгоритмов. Формы представления алгоритмов
- •Понятие алгоритма. Базовые алгоритмические структуры
- •Представление данных в памяти персонального компьютера.
- •Принципы обработки программных кодов
- •Компиляторы
- •Интерпретатор
- •Язык с. История развития. Основные свойства языка
- •Отличительные особенности языкаC
- •Элементы языка c
- •Константы
- •Базовые типы данных
- •Директива #include
- •Использование void
- •Инструкция return
- •Описание переменных
- •Обработка данных. Операторы
- •Арифметические операторы
- •Приоритет операторов и порядок вычислений
- •Используемые алгоритмы обработки данных
- •Аккумуляторы
- •Преобразования типов данных
- •Декларации и дефиниции функций
- •Формальные и фактические параметры. Вызов функций
- •Возврат функцией значений
- •Переменные в функциях
- •Автоматические (локальные) переменные
- •Внешние (глобальные) переменные
- •Статические переменные
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Значения параметров по умолчанию
- •Перегрузка функций
- •Рекурсия
- •Встроенные функции
- •Обработка символьных данных
- •Функция puts()
- •Функция putchar()
- •Функция printf()
- •Выбор правильных средств вывода информации
- •Функция gets()
- •Функция getchar()
- •Функция scanf()
- •Выбор соответствующих средств ввода данных
- •Управляющие структуры Структуры выбора (if / else)
- •Структуры выбора (switch/case/default)
- •Структуры повторения (циклы)
- •Использование цикла for
- •Использование цикла do...While (постусловие)
- •Использование цикла while (предусловие)
- •Операторы передачи управления Оператор безусловного перехода goto
- •Оператор break
- •Оператор continue
- •Препроцессор языка Си
- •Массивы Объявление переменной массива
- •Использование индексной переменной
- •Инициализация массива при объявлении
- •Передача массивов в функции
- •Использование констант при объявлении массивов
- •Символьные строки
- •Массивы строк
- •Алгоритмы сортировки массива
- •Поиск заданного элемента в массиве
- •Указатели
- •Объявление указателя
- •Указатели на массивы
- •Операции над указателями
- •Указатели на строку
- •Указатели на функцию
- •Функции, возвращающие указатель
- •Указатели на многомерные массивы
- •Массивы указателей
- •Динамическое распределение памяти
- •Структуры данных
- •Реализация одних структур на базе других
- •Очередь
- •Операции над очередями
- •Операции над стеками
- •Ссылочные реализации структур данных
- •Операции над списками
Поиск заданного элемента в массиве
Последовательный поиск элемента
Необходимо запустить цикл повторений, который станет просматривать все элементы один за другим до тех пор, пока нужный элемент не будет найден, либо пока не будут пройдены все его элементы.
#include <iostream.h>
#include <conio.h>
int Search(int array[], int N, int Number)
{
int i = 0;
while (i!=N)
if (array[i]==Number) return i; else i++;
return -1; }
main()
{
int i, Size, Numerals[1000], Number, P;
соut<<"Введите размерность массива! "<<endl;
cin>>Size;
cout<<" Введите элементы массива! "<<endl;
for (i=0; i<Size; i++)
cin>>Numerals[i];
cout<<"Введите число для поиска! "<<endl;
cin>>Number;
P=Search (Numerals, Size, Number);
if (P==-l)
cout<<"No"; else cout<<"Yes "<<P+l;
getch();
return 0;
}
Двоичный (бинарный) поиск
Если у нас есть массив, содержащий упорядоченную последовательность данных, то очень эффективен двоичный поиск.
Переменные Left и Right содержат, соответственно, левую и правую границы отрезка массива, где находится нужный нам элемент. Мы начинаем всегда с исследования среднего элемента отрезка. Если искомое значение меньше среднего элемента, мы переходим к поиску в верхней половине отрезка, где все элементы меньше только что проверенного. Таким образом, в результате каждой проверки мы вдвое сужаем область поиска. Так, в нашем примере, после первой итерации область поиска – всего лишь три элемента, после второй остается всего лишь один элемент. Таким образом, если длина массива равна 6, нам достаточно трех итераций, чтобы найти нужное число.
Двоичный поиск - очень мощный метод. Если, например, длина массива равна 1023, после первого сравнения область сужается до 511 элементов, а после второй - до 255. Легко посчитать, что для поиска в массиве из 1023 элементов достаточно 10 сравнений.
#include <iostream.h>
#include <conio.h>
int Binary_Search(int array[], int N, int Number)
{
int Left, Right, Middle;
Left=0;
Right=N-1;
Middle=(Left+Right)/2;
while (Left<=Right)
{
if (array[Middle]==Number) return Middle;
if (array [Middle]>Number) Right=Middle-l;
else Left=Middle+l;
Middle=(Left+Right)/2; }
return -1; }
main()
{
int i, Size, Numerals[100000], Number, Pos;
cout<<"Введите размер массива! "<<endl;
cin>>Size;
for (i=0; i<Size; i++)
Numerals[i]=i;
cout<<"Введите число для поиска! "<<endl;
cin>>Number;
Pos=Binary_Search(Numerals,Size,Number);
if (Pos==-1)
cout<<"Число в массиве отсутствует";
else cout<<"Число находится в позиции: "<<Pos;
getch();
return 0;
}
Указатели
Указатель – адрес памяти, распределяемой для размещения идентификатора (идентификатор – имя переменной, массива, структуры, строкового литерала). Если переменная объявлена как указатель, то она содержит адрес памяти, по которому может находиться скалярная величина любого типа.
При работе с указателями действуют следующие правила:
при объявлении переменной-указателя перед именем переменной указывается операция *;
если одним оператором объявляется несколько переменных-указателей, то перед каждой такой переменной следует указывать операцию *;
после объявления указателя его следует инициализировать адресом значения того же типа, что и тип указателя;
для получения адреса переменной перед ее именем указывается операция взятия адреса &;
для получения значения переменной по указателю на нее перед указателем ставится операция разыменования * (называемая иногда операцией взятия значения);
указатель строки содержит адрес первого символа строки;
при увеличении указателя на единицу значение, содержащееся в переменной-указателе, увеличивается на число байт, которое отведено под переменную данного типа.