
- •1. Лабораторная работа №1
- •1.1. Теоретическая часть
- •1.1.1. Системы счисления
- •1.1.2. Двоичная система счисления.
- •1.1.3. Восьмеричная система счисления.
- •1.1.4. Шестнадцатеричная система счисления.
- •1.2. Практическая часть
- •1.3 Контрольные вопросы и практические задания:
- •2. Лабораторная работа №2
- •2.1. Теоретическая часть
- •2.2. Практическая часть
- •2.2.1 Требования к выполнению работы:
- •2.2.2 Варианты индивидуальных заданий.
- •2.3 Контрольные вопросы и практические задания:
- •3. Лабораторная работа №3
- •3.1. Теоретическая часть
- •3.1.1. Условный оператор.
- •3.2. Практическая часть
- •3.2.1 Требования к выполнению работы:
- •3.2.2 Варианты индивидуальных заданий.
- •3.3 Контрольные вопросы и практические задания:
- •4.Лабораторная работа №4
- •4.1. Теоретическая часть
- •4.1.1. Циклические алгоритмы.
- •1. Цикл со счетчиком.
- •4.2. Практическая часть
- •4.2.1 Требования к выполнению работы:
- •4.2.2 Варианты индивидуальных заданий.
- •4.3 Контрольные вопросы и практические задания:
- •5. Лабораторная работа №5
- •5.1. Теоретическая часть
- •5.2. Практическая часть
- •5.2.1 Требования к выполнению работы:
- •5.2.2 Варианты индивидуальных заданий.
- •5.3 Контрольные вопросы и практические задания:
- •6. Лабораторная работа №6
- •6.1. Теоретическая часть
- •6.1.1 Основные алгоритмы преобразования одномерных массивов.
- •6.2. Практическая часть
- •6.2.1 Требования к выполнению работы:
- •6.2.2 Варианты индивидуальных заданий.
- •6.3 Контрольные вопросы и практические задания:
- •7. Лабораторная работа №7
- •7.1. Теоретическая часть
- •7.1.3. Основные алгоритмы обработки двумерных массивов.
- •7.2. Практическая часть
- •7.2.1 Требования к выполнению работы:
- •7.2.2 Варианты индивидуальных заданий.
- •7.3 Контрольные вопросы и практические задания:
- •8.Лабораторная работа №8
- •8.1. Теоретическая часть
- •8.2. Практическая часть
- •8.2.1 Требования к выполнению работы:
- •8.2.2 Варианты индивидуальных заданий.
7.1.3. Основные алгоритмы обработки двумерных массивов.
Обработка двумерных массивов (т.е. поиск максимального, минимального элементов массива, суммы, произведения, среднего арифметического значения элементов массива) осуществляется аналогично обработке элементов одномерного массива, за исключением того, что вместо одного цикла необходимо организовать два.
При обработке элементов матриц, которые находятся на главной диагонали, необходимо учитывать, что в их индексах номер строки равен номеру столбца. Например, в следующем фрагменте программы выполняется нахождение суммы элементов матрицы, которые находятся на главной диагонали:
S=0;
for (i=0;i<N;i++)
S=S+A[i][i];
Если необходимо выполнить обработку матрицы по столбцам, тогда во внешнем цикле организовывается перебор столбцов, а во внутреннем – перебор строк:
for (j=0;j<M;i++)
for (i=0;i<N;i++)
…
7.1.4 Пример составления алгоритма и программы на языке C++ для обработки и преобразования двумерного массива.
Задание:
Дана матрица действительных чисел А(5х5). Найти Amin – минимальный элемент среди элементов, расположенных ниже главной диагонали, и Amax – максимальный элемент среди элементов, расположенных выше главной диагонали, Разделить элементы, расположенных ниже главной диагонали, на Amin, а выше главной диагонали – на Amax.
Решение.
Постановка задачи.
Для обработки матрицы A сначала необходимо ввести ее элементы. Выполним ввод элементов матрицы с помощью генератора случайных чисел rand(). Для обозначения размерности массива A введем константу n. После формирования элементов матрицы выведем их на экран.
Далее выполним поиск максимального элемента Amax среди элементов, расположенных выше главной диагонали. Поскольку у элементов, расположенных выше главной диагонали, номер столбца больше номера строки, для поиска максимального элемента среди этих элементов внутренний цикл организуем по переменной j, начиная с i+1: for (j=i+1;j<n;j++). Аналогично при поиске минимального элемента среди элементов, расположенных ниже главной диагонали, будем использовать внутренний цикл по переменной j, начиная с 0 до i–1: for (j=0;j<i;j++).
Затем, используя аналогичные вложенные циклы, выполним деление элементов матрицы на Amax или Amin в соответствии с заданием.
Блок-схема алгоритма решения данной задачи:
Текст программы на языке C++:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define n 5
int main()
{
int i,j;
float A[5][5],Amin=1000,Amax=-1000;
clrscr();
randomize();
printf(" Matrix A:\n");
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
A[i][j]=20.0*rand()/RAND_MAX-10;
printf("%7.2f",A[i][j]);
}
printf("\n");
}
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (A[i][j]>Amax)
Amax=A[i][j];
for(i=1;i<n;i++)
for (j=0;j<i;j++)
if (A[i][j]<Amin)
Amin=A[i][j];
printf("\nMaximum vishe glavnoi diagonali: %.2f",Amax);
printf("\nMimimum nije glavnoi diagonali: %.2f",Amin);
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
A[i][j]=A[i][j]/Amax;
for(i=1;i<n;i++)
for (j=0;j<i;j++)
A[i][j]=A[i][j]/Amin;
printf("\n\n New matrix A:\n");
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf("%7.2f",A[i][j]);
printf("\n");
}
getch();
return 0;
}
Результаты работы программы:
Matrix A:
-2.21 -5.59 1.34 -3.15 -7.76
9.17 -8.43 2.54 -5.78 -7.21
-3.46 4.10 -8.32 -9.45 -5.84
9.66 -0.89 -9.07 4.14 8.87
-5.12 -4.09 -7.72 -1.38 -7.78
Maximum vishe glavnoi diagonali: 8.87
Mimimum nije glavnoi diagonali: -9.07
New matrix A:
-2.21 -0.63 0.15 -0.35 -0.87
-1.01 -8.43 0.29 -0.65 -0.81
0.38 -0.45 -8.32 -1.06 -0.66
-1.07 0.10 1.00 4.14 1.00
0.56 0.45 0.85 0.15 -7.78