Результаты работы программы на тестовых исходных данных.
Федеральное государственное автономное
образовательное учреждение
высшего образования
«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Институт космических и информационных технологий
институт
Информатика
кафедра
ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ №7
Основы программирования
наименование дисциплины
Вариант №1 3
тема (вариант)
Преподаватель __________ В.В. Тынченко
подпись, дата инициалы, фамилия
Студент ЗКИ20-05б 032053367 __________ В.В. Ушаков
номер группы номер зачетной книжки подпись, дата инициалы, фамилия
Красноярск 2020
1. Цель практической работы:
Цель работы: освоить основные алгоритмы и языковые средства обработки двумерных массивов.
2. Условия поставленной задачи согласно варианта №13:
2.1. Дан вещественный массив A[N][N]. Вывести на экран значения тех элементов, лежащих выше главной диагонали, которые больше всех элементов, лежащих ниже главной диагонали.
|
|
Блок-схема алгоритма решения поставленной задачи согласно варианта №13.
2.1.2. Программный код поставленной задачи на С++ в Microsoft Visual Studio :
// Практическая работа №7_Упражнение 2_Ушаков В.В._группа ЗКИ20-05Б.cpp
/*Дан вещественный массив A[N][N].
Вывести на экран значения тех элементов, лежащих выше главной диагонали,
которые больше всех элементов, лежащих ниже главной диагонали.*/
#include <iostream> //директивы препроцессора
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <iomanip>
#define N 10 //ограничение количества элементов в массивах
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus"); //Распознавание и вывод на экран текста в кириллице
srand(time(NULL));
double A[N][N]; //резервирование памяти под N*N элементов массива вещественного типа
int i, j, max_down, max_i, max_j, max_iup, max_jup;
const char simvol = '^^', simvol2 = ' ';
cout << "\n\tУсловия поставленной задачи согласно варианта №13:\n\n";
cout << "\tДан вещественный массив A[N][N].\n";
cout << "\tВывести на экран значения тех элементов, лежащих выше главной диагонали,\n";
cout << "\tкоторые больше всех элементов, лежащих ниже главной диагонали.\n\n";
|
|
cout << "\tДля продолжения нажмите любую клавишу...\n\n";
_getch();
system("cls"); //очистить экран
cout << "\n\tДан вещественный массив A[N][N], заполненный случайными числами от -100 до 100:\n\n";
for (i = 0; i < N; i++) { // меняется i – индекс строки
cout << "\t";
for (j = 0; j < N; j++) { // меняется j – индекс столбца для заданной строки i
A[i][j] = rand() % 200 - 100; //заполнение массива A[N][N] случайными числами от -100 до 100
cout << setw(5) << right << A[i][j];// << "\t"; // вывод элементов массива в остальных случаях
}
cout << "\t\n\n";
}
cout << "\n\tВ котором главная диагональ массива A[N][N] равна массиву A[N]:\n\n\t";
for (i = 0, j = 0; i < N && j < N; i++, j++)
{
cout << setw(5) << right << A[i][j]; // вывод главной диагонали массива
}
cout << "\n\n\n\tДля продолжения нажмите любую клавишу...\n\n";
_getch();
system("cls"); //очистить экран
cout << "\n\tУсловия задачи согласно варианта №13:\n\n";
cout << "\tДан вещественный массив A[N][N].\n";
cout << "\tВывести на экран значения тех элементов, лежащих выше главной диагонали,\n";
cout << "\tкоторые больше всех элементов, лежащих ниже главной диагонали.\n\n";
|
|
for (i = 0; i < N; i++) { // меняется i – индекс строки
cout << "\t";
for (j = 0; j < N; j++) { // меняется j – индекс столбца для заданной строки i
if (i == j)
{
cout << setw(10) << right << simvol; // вывод элементов массива со здвигом до диагонали
}
if (i + 1 == j)
{
cout << setw(10) << right << A[i][j]; // вывод элементов массива со здвигом после диагонали
}
if (i != j && i + 1 != j)
{
cout << setw(5) << right << A[i][j];// << "\t"; // вывод элементов массива в остальных случаях
}
}
cout << "\t\n\n";
}
//ПОИСК ВСЕХ МАКСИМАЛЬНЫХ ЭЛЕМЕНТОВ И ИХ ИНДЕКСОВ В ЗАДАННОМ ДВУМЕРНОМ МАССИВЕ
max_down = A[1][0]; //присваиваем минимальному элементу массива A[N][N] значение меньшего элемента под главной диагональю
max_i = 1;
max_j = 0;
for (i = 1; i < N; i++) { // меняется i – индекс строки
for (j = 0; j < i; j++) { // меняется j – индекс столбца для заданной строки i
if (A[i][j] > max_down) //если очередной элемент под главной диагональю массива больше, чем значение max_down
|
|
{
max_down = A[i][j]; //изменяем значение max_down
max_i = i;
max_j = j;
}
}
}
cout << "\tМаксимальные элементы массива A[N][N] под главной диагональю равны:\n";
cout << "\tA[" << max_i << "][" << max_j << "]";
i = max_i;
j = max_j;
while (i < N && j < i)
{
for (i = 0; i < N; i++) { // меняется i – индекс строки
for (j = 1; j < i; j++) { // меняется j – индекс столбца для заданной строки i
if (max_down == A[i][j] && i != max_i && j != max_j) //если очередной элемент под главной диагональю массива больше, чем значение max_down
{
max_i = i;
max_j = j;
cout << " = A[" << max_i << "][" << max_j << "]";
}
}
}
}
cout << " = " << max_down << ";\n\n";
cout << "\tЭлементы массива A[N][N] над главной диагональю,\n";
cout << "\tкоторые больше всех элементов под главной диагональю равны: \n";
i = 0;
j = 1;
while (i < N-1 && j < N && j > i)
{
for (i = 0; i < N-1; i++) { // меняется i – индекс строки
for (j = 1; j < N; j++) { // меняется j – индекс столбца для заданной строки i
if (max_down < A[i][j]) //если очередной элемент над главной диагональю массива больше, чем значение max_down
{
max_i = i;
max_j = j;
cout << "\tA[" << max_i << "][" << max_j << "] = " << A[i][j] << ";\n";
}
}
}
}
cout << "\n\n\tРЕЗУЛЬТАТ ВЫПОЛНЕНИЯ УСЛОВИЙ ЗАДАЧИ:\n\n";
i = 0;
j = 0;
while (i < N && j < N)
{
for (i = 0; i < N; i++) { // меняется i – индекс строки
cout << "\t";
for (j = 0; j < N; j++) { // меняется j – индекс столбца для заданной строки i
if (i == j)
{
cout << setw(5) << right << simvol; // вывод элементов массива со здвигом до диагонали
}
if (i + 1 == j)
{
if (A[i][j] > max_down)
{
cout << setw(5) << right << A[i][j]; // вывод элементов массива со здвигом после диагонали
}
cout << setw(5) << right << simvol2; // вывод элементов массива со здвигом после диагонали
}
if (i != j && i + 1 != j)
{
if (A[i][j] > max_down)
{
cout << setw(5) << right << A[i][j]; // вывод элементов массива в остальных случаях
}
cout << setw(5) << right << simvol2; // вывод элементов массива в остальных случаях
}
}
cout << "\t\n\n";
}
cout << "\tДля продолжения нажмите любую клавишу...\n\n";
_getch();
}
}
Результаты работы программы на тестовых исходных данных.
Так как код программы выполняется линейно с использованием всех возможных ответвлений за выполнение одной программы и данные присваиваются и вводятся в процесс программы рандомно, то был определен и выведен один тестовый набор данных с очисткой и поэтапного вывода полученных дынных на экран.
4. Ответы на контрольные вопросы:
4.1. Как располагаются в памяти элементы двумерного массива?
В памяти двумерный массив занимает непрерывную область и располагается по строкам, как одномерный.
4.2. Опишите синтаксис объявления двумерного массива в программе.
тип имя [кол-во строк] [кол-во столбцов];
кол-во строк, кол-во столбцов – const, целые >0
имя – адрес начала массива (первого элемента)
4.3. Каким образом производится индексация элементов двумерного массива?
Индексация двумерных массивов — механизм доступа к данным массива с помощью двух выражений, значения которых определяют положение элемента в массиве.
Как правило, доступ к элементам двумерного массива осуществляется с помощью механизмов вложенных циклов. Во внешнем цикле перебирается индекс строки. Для каждого номера строки во вложенных циклах перебираются все номера столбцов. Индексация может выполняться и наоборот — сначала перебираются номера столбцов, затем строки.
Индексация двумерных массивов бывает двух видов:
- индексация сначала по «строке», потом по «столбцу» (во внешнем цикле перебираются номера строк, во вложенном — столбцов);
- индексация сначала по «столбцу», потом по «строке» (на оборот, во внешнем цикле перебираются номера столбцов, во вложенном — строк).
4.4. Напишите фрагменты программ для решения следующих задач:
- вычисление произведения отрицательных элементов в каждом столбце двумерного массива;
int i, j;
float A[N][N], p=1;
for (j = 0; j < N; j++)
{
for (i = 0; i < N; i++)
{
if (A[i][j] < 0)
{
p = p * A[i][j];
}
}
cout <<"Произведение всех отрицательных элементов";
cout <<"в "<<j<<"столбце двумерного массива равно p ="<<p;
}
- вычисление суммы положительных элементов в каждой строке двумерного массива.
int i, j;
float A[N][N], sum = 0;
for (i = 0; i < N; j++)
{
for (j = 0; j < N; i++)
{
if (A[i][j] > 0)
{
sum = sum + A[i][j];
}
}
cout <<"Сумма всех положительных элементов";
cout <<"в "<<i<<"строчке двумерного массива равна sum ="<<sum;
}
4.5. Как изменяются индексы элементов матрицы, лежащих:
- на главной диагонали;
for (i = 0, j = 0; i < N && j < N; i++, j++)
- на побочной диагонали;
for (i = N-1, j = 0; i >= 0 && j < N; i--, j++)
- выше главной диагонали;
for (i = 0; i < N - 1; i++)
for (j = 1; j > i, j < N; j++)
- ниже главной диагонали;
for (i = 1; i < N; i++)
for (j = 0; j < i; j++)
- выше побочной диагонали;
for (i = 0; i < N - 1; i++)
for (j = 0; j < N - 1; j++, N--)
- ниже побочной диагонали?
for (i = N - 1; i > 0; i--)
for (j = 1; j < N; j++)
5. Выводы по результатам работы:
Изучив лекционный материал и материал представленный в практической работе освоил алгоритмы и языковые средства обработки двумерных массивов.
Дата добавления: 2021-11-30; просмотров: 17; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!