Результаты работы программы на тестовых исходных данных.

Федеральное государственное автономное

образовательное учреждение

высшего образования

«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

Институт космических и информационных технологий

институт

Информатика

кафедра

 

ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ №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; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!