- •Введение
- •1. Основы алгоритмизации и программирования
- •1.1. Этапы подготовки и решения задач на эвм
- •1.2. Алгоритмы и способы их описания Понятие алгоритма
- •Способы описания алгоритмов
- •Структурные схемы алгоритмов
- •1.3. Компиляция и интерпретация программ
- •1.4. Стили программирования
- •Процедурное программирование
- •Функциональное программирование
- •Логическое программирование
- •Объектно-ориентированное программирование
- •2.1. Пример готовой программы.
- •2.2. Структура основной программы
- •2.3. Алфавит языка
- •2.4. Константы и переменные Константы
- •Переменные
- •Примеры записи имен переменных
- •2.5. Арифметические выражения
- •Примеры вычисления арифметических выражений
- •Стандартные функции
- •Примеры программирования арифметических выражений
- •Контрольные задания
- •1. Составить описания для заданных переменных
- •2.6. Линейные вычислительные процессы
- •Оператор присваивания
- •Странные операторы присваивания
- •Функции ввода-вывода
- •Функции ввода исходных данных с клавиатуры
- •Потоковый ввод данных числового типа
- •Функция форматного ввода
- •Операторы вывода данных на экран Потоковый вывод
- •Форматный вывод
- •Контрольные задания
- •2.7. Разветвляющиеся вычислительные процессы
- •If (логическое выражение) p1; else p2;
- •Логические выражения
- •Порядок выполнения операций в логических выражениях
- •Условные операторы
- •Короткий условный оператор
- •Полный условный оператор
- •If (логическое выражение) { p1;} else {p2;}
- •Вложенные структуры условных операторов
- •Оператор выбора
- •Контрольные задания
- •2.8. Циклические вычислительные процессы
- •Операторы цикла с условием
- •Оператор цикла с параметром
- •2.9. Базовые алгоритмы
- •Задача 1. Алгоритм организации счетчика
- •Задача 2. Алгоритм накопления суммы
- •Задача 3. Алгоритм накопления произведения
- •Задача 4. Алгоритм поиска минимального члена последовательности
- •Задача 5. Табулирование функции (или кратные циклы)
- •Задача 6. Вычисление сумм элементов последовательностей
- •2.10. Указатели и массивы
- •2.10.1. Указатели
- •2.10.2. Понятие массива
- •Одномерные массивы
- •Описание одномерного массива
- •Индексированные переменные
- •Ввод-вывод одномерных массивов
- •Обработка одномерных массивов
- •Задача 1. Организация счетчика
- •Задача 2. Накопление суммы и произведения
- •Задача 3. Поиск минимального и максимального элементов массива
- •Двухмерные массивы
- •Описание двухмерного массива
- •Ввод-вывод двухмерного массива
- •Обработка матриц
- •2.11. Подпрограммы Структура сложной программы
- •Функции
- •Общий вид описания функции
- •Int I,j; //локальные переменные
- •Обращение к функции
- •Пример программы с функцией
- •Механизмы замены параметров
- •Параметры-массивы в функциях
- •Возвращение результатов
- •Примеры программирования задач с использованием подпрограмм Задача 1
- •Рекурсия
- •Технология сборки библиотеки
- •2.12. Текстовые данные
- •Символьный тип данных
- •Ввод-вывод символьных данных
- •Обработка символьных данных
- •Ввод-вывод строковых данных
- •Обработка строковых данных
- •Стандартные функции обработки строк
- •Сравнение строк:
- •Сцепление строк
- •Определение длины строки
- •Копирование строк
- •Поиск символа в стоке
- •Пример программы для задачи с текстовыми данными
- •Контрольные задания
- •2.13. Динамическое выделение памяти
- •Использование оператора new
- •Освобождение памяти
- •Структуры данных Понятие структуры
- •Обработка структур
- •Пример задачи с использованием структурированных данных
- •2.15. Файлы данных
- •2.15.1. Работа с файлами в стиле с
- •Объявление файловой переменной
- •Открытие файла
- •Закрытие файла
- •// Обработка открытого файла
- •Обработка открытого файла
- •Функции ввода/вывода
- •Работа с текстовыми файлами
- •Обработка бинарных файлов
- •Контрольные задания
- •Заключение
- •Оглавление
- •Литература
- •Приложение
Двухмерные массивы
Двухмерные массивы в математике представляются матрицей:
или сокращенно можно записать: А =, где т – число строк; n - число столбцов; i,j - индексы (номера) строки и столбца, на пересечении которых находится элемент aij.
Описание двухмерного массива
Описание матрицы задается структурным типом вида:
<тип элементов><имя> [m][n];
где m – количество строк;
n –количество столбцов матрицы.
По описанию матрицы во внутренней памяти компьютера выделяется область из тппоследовательных ячеек, в которые при работе программы записываются значения элементов матрицы. Например, по описанию:
float A [3][5];
В памяти компьютера для элементов матрицы выделяется область, состоящая из 35=15 последовательных ячеек вещественного типа. Из описания видно, что матрица состоит из трех строк и пяти столбцов. Нумерация строк и столбцов ведется с нуля.
Обращение к отдельным элементам матрицы осуществляется с помощью переменной с двумя индексами. Например:
А[i][j] aij;
А[2][3] a23;
А[2*n][k+1] a2n,k+1.
Ввод-вывод двухмерного массива
Для поэлементного ввода и вывода матрицы используется двойной цикл for.... Если задать индекс i как параметр внешнего цикла, а индекс j как параметр внутреннего цикла, то ввод-вывод матрицы осуществляется построчно.
Пример 1. Организовать ввод целочисленной матрицы М по строкам.
Описание матрицы вместе с текущими индексами имеет вид:
int main()
{
int М[2][3] ;
int i, j;
Ввод в программе реализуется в форме диалога, т.е. сопровождается выводом поясняющего сообщения:
printf("Введите матрицу М\n");
for( i = 0; i<2; i++)
for( j = 0; j< 3; j++)
scanf("%f",&m[i][j]);
Аналогично для ввода матрицы можно использовать функцию cin:
cout<<"Введите матрицу М\n";
for( i = 0; i<2; i++)
for( j = 0; j< 3; j++)
cin>>m[i][j];
На клавиатуре желательно для наглядности восприятия набирать элементы матрицы по строкам, отделяя числа друг от друга одним или несколькими пробелами:
1 2 3 [Enter]
4 5 6 [Enter]
Пример 2. Организовать вывод матрицы М на экран.
Вывод матрицы необходимо реализовать в удобном для чтения виде, т.е. чтобы на одной строке экрана располагалась одна строка матрицы. С этой целью в тело внешнего цикла, помимо внутреннего цикла, включается оператор printf, который переводит курсор к началу следующей строки экрана после вывода текущей строки матрицы.
for ( i = 0; i<2; i++)
{
for ( j = 0; j< 3; j++)
printf("%3d ",m[i][j]);
printf("\n");
}
Вид матрицы на экране будет следующим:
1 2 3
4 5 6
Вывод матрицы можно реализовать и с помощью функции cout:
for ( i = 0; i<2; i++)
{ for ( j = 0; j< 3; j++)
cout<<m[i][j]<<"\t";
cout<<"\n";
}
Прежде чем приступись к разбору задач обработки матриц, следует знать следующее.
Квадратная матрица – это двумерный массив, в котором количество строк равно количеству столбцов. Квадратная матрица имеет главную и побочную диагонали. Главной диагональю матрицы называется диагональ, идущая из левого верхнего угла в правый нижний угол матрицы, например,
для матрица M[3][3]:
М00 |
М01 |
М02 |
М10 |
М11 |
М12 |
М20 |
М21 |
М22 |
элементы М00 М11 М22 – элементы главной диагонали. Обращение к элементу главной диагонали выглядит как М[i][i].
Побочной диагональю матрицы называется диагональ, идущая из левого нижнего угла в правый верхний угол матрицы.
М00 |
М01 |
М02 |
М10 |
М11 |
М12 |
М20 |
М21 |
М22 |
Обращение к элементу побочной диагонали выглядит как М[i][n-1-i], где n- размерность матрицы.
Для любого элемента М[i][j] квадратной матрицы следует заметить следующее: если учесть, что индексы элементов матрицы изменяются от 0 до n-1, то
если i==j , элемент расположен на главной диагонали;
если i>j, элемент расположен ниже главной диагонали;
если i<j, элемент расположен выше главной диагонали;
если i>= j. элемент расположен на главной диагонали и ниже;
если i<= j, элемент расположен на главной диагонали и выше;
если i+j <=n-1 – элемент расположен над побочной диагональю;
если i+j>n-1 – элемент расположен под побочной диагональю;