Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Листинг 6.6






 

#include " stdafx.h"

#include < conio.h>

#include < windows.h>

#include < math.h>

#include < iostream>

#include < time.h>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, " Russian");

srand((unsigned)time(NULL));

int m, n, h, c, i, j, ch;

 

cout < < " Лабораторная работа № 6\n";

cout < < " \nЗадание\nДана целочисленная прямоугольная матрица. Определить: \ количество отрицательных элементов в тех строках, \nкоторые содержат хотя бы один нулевой элемент.";

cout < < " \n Введите размерность массива\n";

cin > > n;

cin > > m;

 

int **a = new int *[n];

for(i = 0; i < n; i++) a[i] = new int [m];

cout < < " \nВыберите способ ввода массива";

cout < < " \n1. Ввести массив с клавиатуры.\n2. Заполнить массив случайным образом.\n";

cin> > ch;

if (ch==1)

{

cout < < " \n Введите элементы массива\n" < < endl;

for(i = 0; i < n; i++)

for(j = 0; j < m; j++) cin > > a[i][j];

for(i = 0; i < n; i++)

{

for(j = 0; j < m; j++)

cout < < a[i][j] < < ' ';

cout < < endl;

}

}

if (ch == 2)

{

for(i = 0; i < n; i++)

for(j = 0; j < m; j++) a[i][j]=rand()%20;

for(i = 0; i < n; i++)

{

for(j = 0; j < m; j++)

cout < < a[i][j] < < ' ';

cout < < endl;

}

}

h = 0;

for(i = 0; i < n; i++)

{

for (j = 0; j < m; j++)

if (a[i][j] < 0)

h++;

for (j = 0; j < m; j++)

if (a[i][j] == 0)

{

cout < < " \nНомер строки\n" < < i;

cout < < " \nЧисло отрицательных элементов\n" < < h;

h = 0;

}

else

cout < < " \nНет нулевых элементов\n";

}

getch();

return 0;

}

Аппаратура и материалы. Для выполнения лабораторной работы необходим персональный компьютер со следующими характеристиками: процессор Intel Pentium-совместимый с тактовой частотой 800 МГц и выше, оперативная память - не менее 64 Мбайт, свободное дисковое пространство - не менее 500 Мбайт, устройство для чтения компакт-дисков, монитор типа Super VGA (число цветов от 256) с диагональю не менее 15². Программное обеспечение - операционная система Windows2000/XP и выше, среда разработки приложений Microsoft Visual Studio.

Указания по технике безопасности. Техника безопасности при выполнении лабораторной работы совпадает с общепринятой для пользователей персональных компьютеров, самостоятельно не производить ремонт персонального компьютера, установку и удаление программного обеспечения; в случае неисправности персонального компьютера сообщить об этом обслуживающему персоналу лаборатории (оператору, администратору); соблюдать правила техники безопасности при работе с электрооборудованием; не касаться электрических розеток металлическими предметами; рабочее место пользователя персонального компьютера должно содержаться в чистоте; не разрешается возле персонального компьютера принимать пищу, напитки.

Методика и порядок выполнения работы. Перед выполнением лабораторной работы каждый студент получает индивидуальное задание. Защита лабораторной работы происходит только после его выполнения (индивидуального задания). При защите лабораторной работы студент отвечает на контрольные вопросы, приведенные в конце, и поясняет выполненное индивидуальное задание. Ход защиты лабораторной работы контролируется преподавателем.Порядок выполнения работы:

1.Проработать примеры, приведенные в лабораторной работе.

2. Составить программу с использованием двумерных локальных массивов для решения задачи. Размерности локальных массивов задавать именованны­ми константами, значения элементов массива - в списке инициализации. Номер варианта определяется по формуле , где - номер студента по списку преподавателя.

Индивидуальное задание №1. Вариант:

1. Дана целочисленная прямоугольная матрица. Определить:

1) количество строк, не содержащих ни одного нулевого элемента;

2) максимальное из чисел, встречающихся в заданной матрице более одного раза.

 

2. Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента.

Характеристикой строки целочисленной матрицы назовем сумму ее положитель­ных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик.

 

3. Дана целочисленная прямоугольная матрица. Определить:

1) количество столбцов, содержащих хотя бы один нулевой элемент;

2) номер строки, в которой находится самая длинная серия одинаковых элементов.

 

4. Дана целочисленная квадратная матрица. Определить:

1) произведение элементов в тех строках, которые не содержат отрицательных элементов;

2) максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.

 

5. Дана целочисленная квадратная матрица. Определить:

1) сумму элементов в тех столбцах, которые не содержат отрицательных эле­ментов;

2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.

 

6. Для заданной матрицы размером 8 на 8 найти такие k, что k -я строка матрицы совпадает с k-м столбцом.

Найти сумму элементов в тех строках, которые содержат хотя бы один отрица­тельный элемент.

 

7. Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, рас­положить их в соответствий с ростом характеристик.

Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрица­тельный элемент.

 

8. Соседями элемента Aj в матрице назовем элементы Аk с i - 1 < k < i+1, j-1 < 1 < j + 1, (k, 1) / (i, j). Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имею­щихся соседей соответствующего элемента исходной матрицы. Построить резуль­тат сглаживания заданной вещественной матрицы размером 7 на 7. В сглаженной матрице найти сумму модулей элементов, расположенных ниже глав­ной диагонали.

 

9. Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов задан­ной матрицы размером 10 на 10.
Найти сумму модулей элементов, расположенных выше главной диагонали.

 

10. Коэффициенты системы линейных уравнений заданы в виде прямоугольной матри­цы. С помощью допустимых преобразований привести систему к треугольному виду. Найти количество строк, среднее арифметическое элементов которых меньше за­данной величины.

 

11. Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти номер первой из строк, содержащих хотя бы один положительный элемент.

 

12. Осуществить циклический сдвиг элементов прямоугольной матрицы на п элемен­тов вправо или вниз (в зависимости от введенного режима), п может быть больше количества элементов в строке или столбце.

 

13. Осуществить циклический сдвиг элементов квадратной матрицы размерности М х N вправо на к элементов таким образом: элементы 1-й строки сдвигаются в последний столбец сверху вниз, из него - в последнюю строку справа налево, из нее - в первый столбец снизу вверх, из него - в первую строку; для остальных элементов - аналогично.

 

14. Дана целочисленная прямоугольная матрица. Определить номер первого из столб­цов, содержащих хотя бы один нулевой элемент.

Характеристикой строки целочисленной матрицы назовем сумму ее отрицатель­ных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик.

 

15. Упорядочить строки целочисленной прямоугольной матрицы по возрастанию ко­личества одинаковых элементов в каждой строке.

Найти номер первого из столбцов, не содержащих ни одного отрицательного эле­мента.

 

16. Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине - в позиции (2, 2), следующий по величине - в позиции (3, 3) и т. д., за­полнив таким образом всю главную диагональ. Найти номер первой из строк, не содержащих ни одного положительного эле­мента.

 

17. Дана целочисленная прямоугольная матрица. Определить:

1) количество строк, содержащих хотя бы один нулевой элемент;

2) номер столбца, в котором находится самая длинная серия одинаковых элементов.

 

18. Дана целочисленная квадратная матрица. Определить:

1) сумму элементов в тех строках, которые не содержат отрицательных элементов;

2) минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.

 

19. Дана целочисленная прямоугольная матрица. Определить:

1) количество положительных элементов в тех строках, которые не содержат нулевых элементов;

2) номера строк и столбцов всех седловых точек матрицы.

Примечание. Матрица А имеет седловую точку АР если АР является минималь­ным элементом в i-й строке и максимальным в j-м столбце.

 

3. Составить программу с использованием двумерных динамических массивов для решения задачи согласно варианту индивидуального задания №1.

Содержание отчета и его форма. Отчет по лабораторной работе должен состоять из:

1. Названия лабораторной работы.

2. Цели и содержания лабораторной работы.

3. Ответов на контрольные вопросы лабораторной работы.

4. Формулировки индивидуальных заданий и порядка их выполнения.

Отчет о выполнении лабораторной работы в письменном виде сдается преподавателю.

Вопросы для защиты работы

1. Как представляется в C++ двумерный массив?

2. Где и каким образом хранится двумерный массив?

3. В каких пределах изменяются индексы двумерного массива?

4. Какими способами можно описать двумерный массив?

5. Какие действия вы­полняются для каждой строки при вычислении количества положительных элементов?

6. В каком месте программы следует записывать операторы инициализации накапливаемых в цикле величин?

7. Каким образом в динамической области памяти можно создавать двумерные массивы?

8. Способы создания динамического массива.

9. Каким образом производится обращение к элементам динамических массивов?

 

Пример выполнения лабораторной работы №6:

1. Индивидуальное задание №1:

1.1. Постановка задачи:

Составить программу с использованием двумерных локальных массивов для решения задачи. Размерности локальных массивов задавать именованны­ми константами, значения элементов массива - в списке инициализации.

Задача: дана целочисленная прямоугольная матрица. Определить:

1) сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент;

2) номера строк и столбцов всех седловых точек матрицы.

Примечание. Матрица А имеет седловую точку As, если As является минималь­ным элементом в i-й строке и максимальным в j-м столбце.

1.2. UML-диаграмма:

1.3. Листинг программы:

// Лабораторная работа №6

// Индивидуальное задание №1

 

#include " stdafx.h"

#include < iostream>

#include " conio.h"

#include " math.h"

#include " windows.h"

 

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, " Russian");

const int nrow = 3, ncol = 5;

int A[nrow][ncol];

int i, j, summ;

 

cout< < " Лабораторная работа № 6\n"

< < " \nГорошко А.А., БАС-051\n"

< < " \nВариант № 6\n"

 

< < " \n\nИндивидуальное задание № 1: \n"

< < " \nСоставить программу с использованием двумерных локальных массивов для\n"

< < " \nрешения задачи. Размерности локальных массивов задавать именованными\n"

< < " \nконстантами, значения элементов массива - в списке инициализации.\n"

< < " \n\nЗадача: дана целочисленная прямоугольная матрица. Определить: \n"

< < " сумму элементов в тех строках, которые содержат хотя бы один\n"

< < " \nотрицательный элемент; \n"

< < " \n2) номера строк и столбцов всех седловых точек матрицы.\n"

< < " \n\nПримечание: матрица А имеет седловую точку As, если Аs является\n"

< < " \nминимальным элементом в i-й строке и максимальным в j-м столбце.\n"

< < " \n\nРабота программы: \n"

 

< < " \nВведите элементы массива: \n\n";

 

for (i = 0; i < nrow; i++)

{

for (j = 0; j < ncol; j++)

{

cout < < " A[" < < i < < " ][" < < j < < " ] = ";

cin > > A[i][j];

}

}

 

cout < < " \n1) ";

for (i = 0; i < nrow; i++)

{

bool flag = false;

summ = 0;

for (j = 0; j < ncol; j++)

{

summ += A[i][j];

if(A[i][j] < 0)

flag = true;

}

if(flag == true)

{

cout< < " Сумма элементов строки " < < i;

cout< < " с отрицательным элементом" < < " = " < < summ < < " \n\n";

}

}

cout< < " \n2) ";

for (i = 0; i < nrow; i++)

{

int min, max;

int tempValue; // временная переменная

min = 0;

tempValue = A[i][0];

// поиск минимального в строке элемента

for (j = 0; j < ncol; j++)

{

if(A[i][j] < tempValue)

{

min = j;

tempValue = A[i][j];

}

}

// поиск максимального в столбце элемента

max = 0;

tempValue = A[0][min];

for(j = 0; j < nrow; j++)

{

if(A[j][min] > tempValue)

{

max = j;

tempValue = A[j][min];

}

}

if(i == max)

{

cout< < " Седловая точка: " < < " As[" < < max < < " ][" < < min < < " ]";

}

}

 

getch();

return 0;

}

1.4. Результаты работы программы:

2. Индивидуальное задание №2:

2.1. Постановка задачи:

Составить программу с использованием двумерных динамических массивов для решения задачи индивидуального задания №1.

2.2. UML-диаграмма:

2.3. Листинг программы:

// Лабораторная работа №6

// Индивидуальное задание №2

 

#include " stdafx.h"

#include < iostream>

#include " conio.h"

#include " math.h"

#include " windows.h"

 

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, " Russian");

int nrow, ncol, i, j, summ;

 

cout< < " Лабораторная работа № 6\n";

cout< < " \nГорошко А.А., БАС-051\n";

cout< < " \nВариант № 6\n";

 

cout< < " \n\nИндивидуальное задание № 2: \n";

cout< < " \nСоставить программу с использованием двумерных динамических\n";

cout< < " \nмассивов для решения задачи индивидуального задания №1.\n";

cout< < " \n\nРабота программы: \n";

 

cout< < " \nВведите количество строк и столбцов: \n\n" < < " i = ";

cin > > nrow;

cout< < " j = ";

cin > > ncol;

 

int **A = new int *[nrow];

cout< < " \nВведите элементы массива: \n\n";

for (i = 0; i < nrow; i++)

{

A[i] = new int[ncol];

for (j = 0; j < ncol; j++)

{

cout < < " A[" < < i < < " ][" < < j < < " ] = ";

cin > > A[i][j];

}

}

cout< < " \n1) ";

for (i = 0; i < nrow; i++)

{

bool flag = false;

summ = 0;

for (j = 0; j < ncol; j++)

{

summ += A[i][j];

if(A[i][j] < 0)

flag = true;

}

if(flag == true)

{

cout< < " Сумма элементов строки " < < i;

cout< < " с отрицательным элементом" < < " = " < < summ < < " \n\n";

}

}

 

cout< < " \n2) ";

for (i = 0; i < nrow; i++)

{

int min, max;

int tempValue; // временная переменная

min = 0;

tempValue = A[i][0];

// поиск минимального в строке элемента

for (j = 0; j < ncol; j++)

{

if(A[i][j] < tempValue)

{

min = j;

tempValue = A[i][j];

}

}

// поиск максимального в столбце элемента

max = 0;

tempValue = A[0][min];

for(j = 0; j < nrow; j++)

{

if(A[j][min] > tempValue)

{

max = j;

tempValue = A[j][min];

}

}

if(i == max)

{

cout< < " Седловая точка: " < < " As[" < < max < < " ][" < < min < < " ]";

}

}

 

getch();

return 0;

}

2.4. Результаты работы программы:

 

 

 

Лабораторная работа №7.
Функции и перегрузка в языке C++

 

Цель работы и содержание: закрепление знаний о функциях и перегрузке, составление программ с функциями и перегрузкой.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.