- •Н. А. Аленский основы программирования
- •§ 1. Структура простой программы. Ввод, вывод
- •1.1. Пример первой программы
- •1.2. Директива препроцессора #include
- •1.3. Структура программы
- •1.4. Комментарии
- •1.5. Ключевые слова и идентификаторы
- •2.1. Полная форма
- •1.6. Простой ввод, вывод
- •§ 2. Оператор if
- •2.2. Сокращённая форма
- •2.3. Особенности оператора
- •Задачи и упражнения
- •§ 3. Выражения
- •3.1. Константы
- •Непосредственно записать в выражении;
- •3.2. Операции и их приоритет
- •3.3. Операции отношения и логические операции
- •3.4. Особенности операции присваивания
- •3.5. Тернарная операция (?)
- •Задачи и упражнения
- •§ 4. Оператор выбора switch
- •Задачи и упражнения
- •§ 5. Операторы цикла
- •5.1. Оператор while c предусловием
- •Правила использования и особенности оператора while
- •5.2. Оператор цикла do … while c постусловием
- •5.3. Оператор for
- •5.4. Операторы continue и break
- •Задачи и упражнения
- •§ 6. Введение в одномерные массивы
- •6.1. Что такое массив. Объявление одномерного массива
- •6.2. Способы определения массивов
- •6.3. Вывод одномерного массива. Функции printf и сprintf
- •6.4. Некоторые типы простых задач при работе с массивами
- •Задачи и упражнения
- •§ 1. Функции без результатов. Передача параметров по значению
- •1.1. Примеры. Правила оформления и вызова функций
- •Void line2(int Len, y, char ch) // ошибка,
- •1.2. Формальные и фактические параметры
- •1.3. Передача параметров по значению
- •§ 2. Функции типа void с несколькими результатами
- •2.1. Пример
- •2.2. Что такое ссылочный тип
- •2.3. Возврат значений из функции с помощью ссылочного типа
- •Задачи и упражнения
- •§ 3. Функции с одним результатом. Оператор return
- •Задачи и упражнения
- •§ 4. Одномерные массивы в функциях. Сортировка массива
- •Задачи и упражнения.
- •§ 5. Область действия имён. Локальные и глобальные имена
- •§ 6. Дополнительные возможности функций
- •Встраиваемые функции (inlineфункции)
- •6.2. Параметры по умолчанию
- •6.3. Перегрузка функций
- •§ 1. Примеры
- •§ 2. Класс. Поля и методы класса
- •§ 3. Создание объектов. Конструктор
- •Задачи и упражнения.
- •Глава 4 простые типы данных § 1. Целый тип
- •1.1. Битовые операции
- •1.2. Использование битовых операций
- •1.3. Упаковка и распаковка информации
- •Задачи и упражнения.
- •§ 2. Логический тип
- •§ 3. Символьный тип
- •Глава 5 матрицы (двухмерные массивы) § 1. Объявление, способы определения
- •§ 2. Вывод матриц
- •§ 3. Типы алгоритмов на обработку матриц
- •3.1. Построчная обработка
- •3.2. Обработка матрицы по столбцам
- •3.3. Обработка всей матрицы
- •3.4. Обработка части матрицы
- •3.5. Преобразование матрицы
- •Упражнения.
- •3.6. Построение матриц
- •§ 4. Передача матрицы в качестве параметра функции
- •Задачи и упражнения.
- •Б. Обработка матрицы по столбцам.
- •Даны две матрицы a и b одинаковой размерности. Построить матрицу с, каждый элемент которой определяется по правилу:
- •Список рекомендуемой литературы
- •Сборники задач по программированию
- •Оглавление
- •Задачи и упражнения …….……………………………………...12
- •3.1. Константы ………………………………………………...…14
3.6. Построение матриц
Выделим некоторые подтипы таких задач.
-
Элементы новой матрицы зависят от своих же индексов, т. е. от номера строки и (или) столбца (см. § 1 гл. 5).
-
При построении матрицы используется одно число. Например, для заданных значений x и n построить матрицу A:
1 x x2 x3 … xn-1
x 0 0 0 … xn-2
x2 0 0 0 … xn-3
… … … … … …
xn-1 xn-2 xn-3 … 1
Предлагается следующий алгоритм. Очередной элемент “периметра” матрицы получаем так: умножаем предыдущий элемент на x и помещаем его в первую и последнюю строки, в первый и последний столбцы. Для этого достаточно одного цикла. Все “центральные” элементы обнуляем.
const n=5; float x, A[n][n], T;
cin>> x; // Вводим только одно число
A[0][0]= A[n-1][n-1]=1;
T=1;
for (int i=1; i<n; i++)
{ T*=x;
A[0][i]= // Элементы 0–й строки
A[i][0]= // Элементы 0–го столбца
A[n-1][n-1-i]= // Элементы (n-1) –й строки
A[n-1-i][n-1]= T; // Элементы (n-1) –го столбца
}
for (int i=1; i<n-1; i++)
for (int j=1; j<n-1; j++)
A[i][j]=0;
3. Матрицу можно построить, используя один или несколько одномерных массивов. Например, задано b[n]. Cформировать двумерный массив по следующему правилу:
b0 b0+1 b0+2 … b0 +(n-1)
b1 b1+1 b1+2 … b1 +(n-1)
… … … …
bn-1 bn-1 +1 bn-1 +2 bn-1 +(n-1).
В таких задачах необходимо установить, от чего и как зависят индексы элементов матрицы и, возможно, значения её элементов. У нас такая зависимость простая, поэтому получаем
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
A[i][j]=b[i]+j;
4. Новая матрица строится на основе одной или нескольких определённых к этому времени матриц.
Например, задана С[n][m]. Получим новую матрицу A[n][m] такой же размерности по следующему простому правилу: положительные числа исходной матрицы увеличим в 10 раз, а отрицательные уменьшим во столько же раз:
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
{ t= C[i][j];
A[i][j] = t>0 ? t*10 : t/10;
}
Заметим, что старая матрица С сохранилась без изменения, а построенная разместилась на новом месте.
Следует отличать такую задачу от подобной, в которой исходная матрица преобразуется, а изменённые её значения сохраняются на том же месте. Для решения в такой постановке достаточно с помощью тех же циклов записать
t= C[i][j]; С[i][j] = t>0 ? t*10 : t/10;
В таком варианте матрица С задана, она же в результате преобразований изменяется, но остаётся на том же месте.
Замечание.
Этот параграф, безусловно, не претендует на абсолютно полное исследование всех типов задач по теме “Матрицы”. Здесь приведены только наиболее простые из них, которые можно использовать при начальном изучении программирования. Многие, более сложные, задачи состоят, как правило, из рассмотренных выше и других типов задач как из отдельных “кирпичиков”, подсоединяемых один к одному последовательно. В реальных задачах такие блоки могут представлять собой также “матрёшки”, вложенные одна в другую в ветвях if, switch, внутри циклов и т. д. Такие рассмотренные выше фрагменты желательно оформлять в виде функций. Этому посвящён следующий параграф.
