
- •Понятие алгоритма. Свойства алгоритмов. Основные этапы решения задач
- •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
- •Вложенные циклы.
- •Указатели и адреса: описание, инициализация и операции с указателями. Применение указателей при программировании.
- •Статические строки
- •Динамические строки
- •Стандартный цикл обработки строки
- •Одномерные числовые массивы
- •Статические массивы
- •Динамические массивы
- •Динамические матрицы
- •Циклы перебора матрицы
- •Программирование с использованием функций пользователя. Принципы построения функций.
- •Механизм вывода функции
- •Передача значения простого аргумента в функцию. Способы передачи простых данных в функцию
- •Передача в функцию значения аргумента
- •Рекурсивная функция
- •Передача функции в другую функцию через указатель. Параметр функции. Указатель на функцию.
- •Перегрузка функций.
- •Функции с параметрами по умолчанию
- •Шаблоны функций.
- •Формат функции шаблона
- •Механизм шаблона
- •Особенности проекта с функциями-шаблонами
Динамические матрицы
Работаем как с одномерным массивом.
1) Как объявить матрицу?
Размер – константное данное или переменная
int STR, STLB;
cin>>STR>>STLB;
int *p;
p=new int[STR*STLB]
…
delete []p;
2) Адрес элемента массива
p+i*STLB – количество в полных строках
p+i*STLB+j – смещение по неполной строке
3) Значение элемента массива
*(p+i*STR+j) или p[i*STR+j]
Циклы перебора матрицы
Пусть есть матрица A, STR=3 и STLB=4
a00 a01 a02 a03
a10 a11 a12 a13
a20 a21 a22 a23
1 способ: перебор конкретной строки с номером N
N--; // номер превратился в индекс строки
for (j=0; j<STLB; j++)
{
алгоритм обработки
}
2 способ: перебор всей матрицы построчно
for (i=0; i<STR;i++)
{
for(j=0;j<STLB;j++)
{
алгоритм обработки
}
//конец i-ой строки
}
3 способ: перебор конкретного столбца с номером M
M--; // номер превратился в индекс столбца
for (i=0;i<STR;i++)
{
алгоритм обработки
}
4 способ: перебор всей матрицы по столбцам
for(j=0;j<STLB;j++)
{
for(i=0;i<STR;i++)
{
алгоритм обработки
}
// конец j-го столбца
}
Задача: дана статическая матрица, заполнить её с клавиатуры, вывести на экран как матрицу (manip)
вычислить сумму в каждой строке отдельно и во всей матрице в целом +
#include <iomanip>
#define STR 3
#define STLB 4
int main(void)
{
int A[STR][STLB]
int i, j, sum, sumSTR;
for(i=0;i<STR;i++) // ввод матрицы
{
for(j=0;j<STLB;j++)
cin>>A[i][j];
}
for(i=0;i<STR;i++)
{
for(j=0;j<STLB;j++)
cout<<setw(5)<<A[i][j];
cout<<endl;
}
sum=0;
sumSTR=0;
for(i=0;i<STR;i++)
{
sumSTR=0;
for(j=0;j<STLB;j++)
sumSTR+=A[i][j];
cout<<endl<<sumSTR;
sum+=sumSTR;
}
cout<<sum<<endl;
return 0;
}
Динамическое выделение памяти под данные в программах на С++ (переменная любого типа, строка, одномерный и двумерный числовые массивы). Освобождение памяти.
Взаимосвязь массивов и указателей в языке С++: определение адреса и значения по адресу для любого элемента одномерного и двумерного массива, объявленные статически или динамически.
+++
Программирование с использованием функций пользователя. Принципы построения функций.
Объявление (прототип) функции и оператор вызова функции языка С++. Параметры и аргументы функции.
Определение функций языка С++. Результат функций.
Функции языка С++
Любая нетривиальная задача требует разбиения ее на несколько логически завершенных частей, каждая из которых реализуется определенной функцией. Выполнение программы начинается с функции main, а она вызывает другие функции.
Наличие функций избавляет от повторного программирования. Программа, написанная с помощью функций, имеет более четкую структуру. Небольшую функцию легче написать, отладить и модифицировать.
Функция – это самостоятельная независимая единица программы, спроектированная для решения одной подзадачи. Функция - алгоритм, указывающий, как из набора исходных данных получить результат.
Каждая функция может находиться в отдельном файле или несколько функций в одном файле, в любом порядке, но при этом каждая функция пишется от начала до конца.
Каждая функция состоит из заголовка и тела.
Заголовок функции – это директивы препроцессора и имя функции. (//Если все функции помещены в одном файле, директивы препроцессора пишутся в самом начале файла один раз.) Имя функции состоит из типа функции, названия функции и в круглых скобках параметры вместе с их типом, разделенные запятой.
Тип функции определяется типом результата функции, передаваемого через оператор return. Если функция не передает результат, тип функции void. Если тип функции не указан, то по умолчанию она типа int.
Параметры функции – это переменные для исходных данных функции. Если параметров нет – пишем void.
Тело функции пишется аналогично телу main. После { скобки объявляется внутренняя переменная под результат функции или для построения алгоритма функции. Затем следуют операторы, реализующие алгоритм. При этом параметры используем как известные величины(исходные данные). Оператор return обычно завершает функцию. Хотя он может быть написан в любом месте функции.
Return; //при этом тип функции void.
Return res; //при этом тип функции как у переменной res
return a*b; //при этом тип выражения совпадает с типом функции
return 1; //если результат выражен константой
Сама по себе функция не выполняется, необходимо, чтобы в теле другой функции, обычно main, появился оператор вызова этой функции. При вызове функции используются аргументы функции (//в том же порядке и количестве, что и параметры), ими могут быть константы, переменные(заранее объявленные и определенные) или выражения.
//Аргументы функции – это конкретные значения исходных данных, передаваемых параметрам в процессе выполнения функции. Функции, кроме типа void, могут вызываться внутри выражения.
Компилятор контролирует правильность написания каждого оператора, в том числе и оператора вызова функции: он сравнивает вызов с прототипом – вызов должен соответствовать прототипу.
Прототип – перечень характеристик функции и фактически повторяет имя функции и завершается ; .
Прототип функции помещается перед именем вызывающей функции, (//содержит тип функции, название функции и в круглых скобках список типов параметров. Завершается ; ).
Чаще прототип помещают в правильно оформленный заголовочный файл, а заголовочный файл подключают #include
//Если тип аргумента в операторе вызова функции не соответствует прототипу, он автоматически (если это возможно) приводятся к нужному типу и функция вызывается правильно; в противном случае возникает ошибка компиляции.