- •Подготовка программы к исполнению
- •Директива препроцессора #include
- •Математические функции из библиотеки cmath
- •Заголовок функции main
- •Объявление переменных.
- •Объявление переменных простого типа
- •Объявление констант простого типа
- •Перечисляемые переменные.
- •Логические операции
- •Операторы
- •Операторы сложные
- •Составной оператор
- •Структурированные операторы
- •Условный оператор.
- •Блок-схема оператора разветвления
- •Условная операция.
- •Операция «запятая» в операторе if.
- •Преобразование и привидение типов.
- •Оператор выбора варианта.
- •Блок-схема оператора варианта
- •Цикл по счётчику
- •Цикл c предусловием.
- •Цикл c постусловием.
- •Операторы передачи управления
- •1) Спецификации формата, которые определяются символом % - для выделения, контроля и преобразования соответствующих им введенных значений;
- •2) Любые символы, которые могут быть во входном потоке и которые надо игнорировать:
- •2) Первого символа, который не соответствует формату (например, буква или пробел после выделения числа); .
- •3) Заданной длины поля вводимого значения, если она определена в формате.
- •4.2.2. Форматы вывода данных
- •1) Спецификации формата, которые определяются символом % - для вывода .Значений, определенных списком аргументов, если они есть;
- •2) Любые символы, которые должны быть выведены в выходной поток;
- •2 Позиции отводятся для знака числа и точки.
- •Составные типы данных
- •Обработка двумерного массива
- •Указатели
- •Порядок выполнения операций над указателями
- •Арифметические операции над адресами
- •Операторы распределения памяти new и delete
- •Указатели и динамические массивы
- •Указатели и спецификатор const
- •Массивы указателей
- •Организация динамического двумерного массива
- •Функции работы со строками
- •Действия, производимые над строками и их правила Присвоение
- •Конкатенация строк
- •Копирование строк
- •Определяет длину строки
- •Указатели и строки
- •Введение в класс string
- •Структуры
- •Ссылочные переменные
- •Функции
- •Функции, имеющие возвращаемый параметр с помощью оператора return.
- •Объявление формальных параметров
- •Ввод - вывод записей
- •Дополнительные возможности работы с файлами
- •Работы с файлами и стандартный класс mfc cFileDialog.
- •Работа с файлами с помощью mfc( классы cFile, cStdioFile, ... ) и стандартный класс mfc cFileDialog.
- •Класс cFile
- •Класс cMemFile
- •Класс cStdioFile
- •Примеры записи и чтения из файла
Обработка двумерного массива
Двумерный массив - структурированный тип данных, где каждый элемент представляет собой массив из элементов простого типа.
Формат объявления многомерного массива:
Тип идентификатор [размер1] [размер2] … [размер №];
Где размер1…№ - это целое положительное число или выражение, определяющее максимальное значение индекса массива. Количество элементов двумерного (многомерного) массива определяется произведением максимальных значений индексов. Например:
int mas [3][4]; объявляет массив из трех элементов, каждый из которых является массивом из четырех элементов целого типа. Размер массива равен 12 элементов, каждый из которых по 4 байта.
Количество элементов вычисляется по формуле:
число_элементов = sizeof (идентификатор) / sizeof (идентификатор[0]);
Пример: int a1[5][5];
int к = sizeof(a1) / sizeof(a1[0]);
Для определения количества байтов, которое занимает массив в оперативной памяти, принимается формула:
число_байтов = sizeof(тип_элемента_массива) * число_элементов ;
Обращение к элементу многомерного массива производится точно так же, как и к элементу одномерного массива, с помощью индексации. В двумерном массиве первый индекс определяет номер строки, а второй индекс – номер столбца. Все индексы первого элемента равны нулю, т.е. а1[0][0] – ‘элемент находится на пересечении нулевой строки и нулевого столбца и называется нулевым элементом матрицы.
Пример: int a1[4][4];
a1[0][0] a1[0][1] a1[0][2] a1[0][3]
a1[1][0] a1[1][1] a1[1][2] a1[1][3]
a1[2][0] a1[2][1] a1[2][2] a1[2][3]
a1[3][0] a1[3][1] a1[3][2] a1[3][3]
Элементы, у которых номер строки равен номеру столбца - расположены на главной диагонали. Обращение к нему – а1[i][i].
Элемент, у которого номер строки больше чем номер столбца, находится под главной диагональю.
Пример заполнения матрицы ниже главной диагонали:
for ( int i = 1; i < fkstrok ; i++) //цикл по строкам
for ( int j = 0; j < i+1 ; j++) //цикл по столбцам
scanf(“%d”,&a1[i][j]);
Элемент, у которого номер строки меньше чем номер столбца, находится над главной диагональю.
Пример заполнения матрицы выше главной диагонали:
for ( int i = 0; i < fkstrok-1 ; i++) //цикл по строкам
for ( int j = i+1; j < fkstolb ; j++) //цикл по столбцам
scanf(“%d”,&a1[i][j]);
Матрица – это двумерный массив, поэтому для последовательной обработки каждого элемента по строкам, необходимо организовать два цикла (вложенные), внешний цикл формирует номер строки, а внутренний номер столбца. Т.к. на каждый шаг внешнего цикла, внутренний отрабатывает нужное число раз, мы переберем все элементы в нулевой строке, затем в первой строке и так до тех пор, пока строки не закончатся. Если необходимо перебрать элементы матрицы по столбцам, то внешний цикл формирует номер столбца, а внутренний – номер строки.
Пример обработка матрицы по строкам:
for ( int i = 0; i < fkstrok ; i++) //цикл по строкам
for ( int j = 0; j < fkstolb ; j++) //цикл по столбцам
scanf(“%d”,&a1[i][j]);
Пример обработка матрицы по столбцам:
for ( int j = 0; j < fkstolb ; j++) //цикл по столбцам
for ( int i = 0; i < fkstrok ; i++) //цикл по строкам
cin>>a1[i][j]);
Пример 3:
for ( int i = 0; i < fkstrok ; i++) //цикл по строкам
{
for ( int j = 0; j < fkstolb ; j++) //цикл по столбцам
{
a1[i][j] = rand(); //присваиваем случайное число
cout<<a1[i][j]<<’\t’;
}
cout<<endl; //переходим на новую строку
}
Для генерации последовательности псевдослучайных чисел используются функции rand(), srand(), time().
Функция time() возвращает текущее календарное время, установленное операционной системой. Если системное время не установлено, функция возвращает число -1.
Функция srand() используется для вычисления стартовой точки при генерации при генерации последовательности псевдослучайных чисел, возвращаемых функцией rand().
Функция rand() возвращает целое число из диапазона от нуля до 0х7fff (величина RAND_MAX).
Применение данных функций требует включения заголовочного файла <cstdlib> , где определены rand() и srand() , а также файла <ctime> ,в котором определена функция time(). Заголовочные файлы включаются в программу с помощью директивы препроцессора #include .
Пример:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespase std
void main ()
{
const int s = 5;
int ar [s][s]; //массив из 5 строк и 5 столбцов
srand((unsigned) time(NULL)); //вычисление стартовой точки при генерации случайных чисел, возвращаемые функцией rand().
for ( int i=0; I < s; i++) // цикл по строкам
{
For ( int j=0; j < s; j++) //цикл по столбцам
{
ar[i][j] = rand()%7+2; //присвоение случайного числа от 2 до 8
cout << ar[i][j]<<’\t’; //распечатка строки матрицы по столбцам
}
cout << endl; //переход на распечатку новой строки
}
}