- •Понятие алгоритма. Свойства алгоритмов. Основные этапы решения задач
- •1. Формулировка задачи
- •2. Математическая постановка задачи
- •3. Разработка алгоритма
- •4. Написание текста и ввод программы
- •5. Выполнение программы. Поиск и устранение синтаксических ошибок
- •6. Тестирование программы. Поиск и устранение логических ошибок в программе
- •Этапы создания исполняемой программы (загрузочного модуля).
- •Структуры и формы написания программы
- •Внутреннее представление данных
- •Классы памяти
- •Обмен данными через внешние переменные
- •Статические переменные
- •Стандартный ввод/вывод данных через потоки
- •Ввод данных
- •Вывод данных
- •Специфические операции
- •Операции присваивания
- •Некоторые нетрадиционные (унарные) операции
- •Условные выражения
- •Операция условия ?:
- •Выражения (в том числе и условные). Порядок выполнения операций в выражении. Таблица приоритетов.
- •Условный оператор if и его применение при программировании. Сокращенная форма оператора if
- •Полная форма оператора if
- •Множественный выбор else-if
- •Оператор выбора switch и его применение при программировании.
- •Циклические вычислительные процессы
- •Оператор цикла while и его применение при программировании. Цикл while – цикл с предусловием.
- •Оператор цикла do while и его применение при программировании. Цикл do while – цикл с постусловием
- •Оператор цикла for и его применение при программировании. Цикл for – цикл с предусловием
- •Операторы break, goto, continue их применение при программировании. Операторы передачи управления
- •Оператор break
- •Оператор continue
- •Оператор goto
- •Вложенные циклы.
- •Указатели и адреса: описание, инициализация и операции с указателями. Применение указателей при программировании.
- •Статические строки
- •Динамические строки
- •Стандартный цикл обработки строки
- •Одномерные числовые массивы
- •Статические массивы
- •Динамические массивы
- •Динамические матрицы
- •Циклы перебора матрицы
- •Программирование с использованием функций пользователя. Принципы построения функций.
- •Механизм вывода функции
- •Передача значения простого аргумента в функцию. Способы передачи простых данных в функцию
- •Передача в функцию значения аргумента
- •Рекурсивная функция
- •Передача функции в другую функцию через указатель. Параметр функции. Указатель на функцию.
- •Перегрузка функций.
- •Функции с параметрами по умолчанию
- •Шаблоны функций.
- •Формат функции шаблона
- •Механизм шаблона
- •Особенности проекта с функциями-шаблонами
Статические строки
#define SIZE 80 // Размер строки только константное данное
или
const int SIZE=80;
char str[SIZE];
char str[SIZE]=”Hello!”; // с инициализацией
Особенность строки: объем выделенной памяти отличается от реального размера введенной строки.
Реальный размер вычисляется.
Как определить адрес символа строки?
Имя строки является константным адресом строки.
str+i – адрес символа с индексом i (i=0, с шагом 1)
Как определить значение символа строки?
*(str+i) или str[i]
Динамические строки
Размерность может быть константой или переменной.
#define SIZE 80
или
const int SIZE=80
или
int SIZE=80;
или
cin>>SIZE;
char *p;
p=new char[SIZE];
…
delete []p;
Особенность – без инициализации
Как определить адрес символа строки?
p+i – адрес элемента с индексом i
*(p+i) – значение элемента с индексом i
p[i]
Стандартный цикл обработки строки
1) char str[80];
for (i=0; str[i]!=0; i=0)
{
алгоритм обработки str[i]/*(str+i)
}
2) перебор строки, когда переменная цикла – адрес текущего символа
char *pBegin=new char[80];
char *p; // адрес текущего символа
for (p=pBegin;*p!=0;p++)
{
алгоритм обработки текущего символа *p
}
Задача: дана строка, вычислить её размер
СТАТИЧЕСКИ
int main(void)
{
char str[80];
int i, kol;
cin.getline(str,80);
for(kol=0,i=0;str[i]!=0;i++)
kol++;
cout<<kol<<endl;
return 0;
}
ДИНАМИЧЕСКИ
int main(void)
{
char *p=new char[80];
int n=0;
cout << "\n Введите строку:";
cin.getline(p,80);
// цикл построен таким образом, что p содержит адрес текущего символа
while(*p!=0)
{
n++;
p++; // Увеличиваем адрес для перехода к следующему символу
}
cout << "\n Кол-во=" << n << endl;
return 0;
}
+
Одномерные числовые массивы в языке С++: объявление (статически), инициализация, доступ к элементам массива, стандартный цикл обработки.
Одномерные числовые массивы
Особенность – любая обработка численного массива – цикл.
Под числовой массив выделяем памяти столько, сколько необходимо.
Статические массивы
1) Как объявить?
Размерность задается только константным данным(или целым)
#define SIZE 7
или
const int SIZE=7;
int mas[SIZE];
или
int mas1[SIZE]={1,2,3,4,5,6,7}; // с инициализацией
После выделения памяти в элементах массива находится «мусор». При объявлении массива возможна инициализация.
Если количество инициализирующих меньше, чем необходимо, остальные обнуляются. Если больше – ошибка компиляции.
2) Как определить адрес и значение элемента массива?
Имя массива – константный адрес первого элемента массива.
mas+i – адрес элемента с индексом i : от 0 для SIZE-1 шагом 1
*(mas+i) – значение элемента с индексом i : от 0 для SIZE-1 шагом 1
Динамические массивы
Размер может задаваться константным или переменной, значение которой должно быть определено присваиванием или вводом. Память выделяется в процессе выполнения программы.
const int SIZE=7; // или #define SIZE 7
int *p=new int[SIZE];
Указатель инициализируется адресом первого байта
p - содержит адрес начала массива
p+i – адрес элемента с индексом i : от 0 до SIZE-1 с шагом.
*(p+i) или p[i] – значение элемента с индексом i
Перебор элементов for (i=0;i<n;i++)
//Обращение к элементам массива по имени осуществляется по индексу, значение которого начинается с нуля.
mas[0]=1
mas[1]=2;
mas[2]=3;
for(i=0;i<SIZE;i++)
{
алгоритм обработки i-го элемента; cin>>* (a+i) или cin>>a[i];
}
+
Двумерные числовые массивы в языке С++: объявление (статически), инициализация, доступ к элементам массива, стандартные циклы обработки.
Многомерные массивы
на примере матриц
#define RAZ1 2
#define RAZ2 4
…
#define RAZN 7 // объявление многомерного массива
int MAS[RAZ1][RAZ2]…RAZ[N];
Элементы массива лежат в памяти последовательно – друг за другом, так, что быстрее всего изменяется самый правый индекс.
// Двумерный массив располагается построчно.
a [0] [0], a [0] [1], a [0] [2]
a [1][0], a [1] [1], a [1] [2]
Матрицы
Матрицы имеют два набора.
Элементы матрицы лежат в памяти по одному, друг за другом, построчно.
Статические матрицы
1) Как объявить матрицу?
Размер – константное данное
#define STR 3
#define STLB 4
или
const int STR=3, STLB=4;
int A[STR][STLB];
int
B[STR][STLB]={
,5,6,7,8,9,10,11,12};
// с инициализацией, где 1,2,3,4 – первая
строка, 5,6,7,8 – вторая строка, 9,10,11,12 –
третья строка.
int C[STR][STLB]={{1,2,3},{5,6,7,8},{9,10,11,12};
2)
Адрес элемента матрицы
A[i] – адрес i-ой строки, т.е. адрес 1-го элемента в i-ой строке
0<=i<STR
A[i]+j
– адрес элемента матрицы
0<=i<STR 0<=j<STLB
3)
Значение элемента матрицы
*(A[i]+j) или A[i][j]
