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

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

Читайте также:
  1. cl_slist Устанавливает количество серверов, которые видно при исп. команды slist
  2. E - Ученики, которые не изучают ничего, кроме одного языка программирования
  3. Figure 6. Ежедневная оценка числа сотрудников в зависимости от времени обработки запросов и количества инцидентов
  4. I. 1.1. Пример разработки модели задачи технического контроля.
  5. I. Определение терминов.
  6. I. Определение экономической эффективности
  7. I.1.1. Определение границ системы.

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

Рисунок 6.8 - UML-диаграмма деятельности для примера 6.5

Листинг 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++

 

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

 

Ход работы

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

Функции нужны для упрощения структуры программы. Передача в функцию раз­личных аргументов позволяет, записав ее один раз, использовать многократно для разных данных. Чтобы использовать функцию, не требуется знать, как она работа­ет - достаточно знать, как ее вызвать.

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

Формат простейшего заголовка (прототипа) функции:

 

тип имя ([список параметров]);

 

В квадратных скобках записано то, что может быть опущено. Например, заголовок функции main обычно имеет вид:

 

int mainO;

 

Это означает, что никаких параметров этой функции извне не передается, а воз­вращает она одно значение типа int (код завершения). Функция может и не воз­вращать никакого значения, в этом случае должен быть указан тип void. Вот, к при­меру, заголовок стандартной библиотечной функции, вычисляющей синус угла:

 

double sin (double);

 

Здесь записано, что функция имеет имя sin, вычисляет значение синуса типа double, и для этого нужно передать ей аргумент типа double. А вот заголовок функции memcpy, копирующей блок памяти длиной n байтов, начиная с адреса src, по адресу dest:

 

void *memcpy (void *dest,const void *src,size t n);

 

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

 

void *memcpy(void *, const void *. size t);

 

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

Все, что передается в функцию и обратно, должно отражаться в ее заголовке. Это требова­ние не синтаксиса, а хорошего стиля.

Заголовок задает объявление функции. Определение функции, кроме заголовка, включает ее тело, то есть те операторы, которые выполняются при вызове функ­ции, например:

 

int sum(int a,int b) /* функция находит сумму двух значений */

{
return a + b; // тело функции

}

 

В тексте программы может содержаться произвольное количество объявлений одной и той же функции и только одно определение (в этом функции не отлича­ются от других программных объектов). Тело функции представляет собой блок, заключенный в фигурные скобки. Для возврата результата, вычисленного в функ­ции, служит оператор return. После него указывается выражение, результат вычисления которого и передается в точку вызова функции. Результат при необ­ходимости преобразуется по общим правилам к типу, указанному в заголовке. Функция может иметь несколько операторов возврата, это определяется алгорит­мом.

Для того чтобы вызвать функцию, надо указать ее имя, а так­же передать ей набор аргументов в соответствии с указанным в ее заголовке.

Вызов функции, возвращающей значение определенного типа (то есть не имею­щей тип void), может быть записан в любом месте, где по синтаксису допустимо вы­ражение - в правой части оператора присваивания, в составе выражения, в цепочке вывода и так далее. Вот, например, как можно вызвать функции, приведенные выше:

 

double y, x1 = 0.34, x2 = 2;

y = sin (x1);

cout << y << ‘ ‘ << sin (x2) << endl;

y = sin (x1 + 0.5) - sin(x1 - 0.5);

char *cite = “ Never say never ”;

char b [100];

memcpy (b, cite, strlen(cite) + 1);

int summa, a = 2;

summa = sum(a, 4);

 

В определении, в объявлении и при вызове одной и той же функции типы и порядок следо­вания параметров должны совпадать. Для имен параметров никакого соответствия не тре­буется.


Дата добавления: 2015-10-26; просмотров: 1121 | Нарушение авторских прав


Читайте в этой же книге: Операнд_1 ? операнд_2 : операнд_3 1 страница | Операнд_1 ? операнд_2 : операнд_3 2 страница | Операнд_1 ? операнд_2 : операнд_3 3 страница | Операнд_1 ? операнд_2 : операнд_3 4 страница | Операнд_1 ? операнд_2 : операнд_3 5 страница | Операнд_1 ? операнд_2 : операнд_3 6 страница | Операнд_1 ? операнд_2 : операнд_3 7 страница | Операнд_1 ? операнд_2 : операнд_3 8 страница | Пример 6.1. Среднее арифметическое и количество положительных элементов | Пример 6.2. Номер столбца из положительных элементов |
<== предыдущая страница | следующая страница ==>
Пример 6.4. Сглаживание заданной вещественной матрицы, работа с файлами| Пример 7.1. Передача в функцию параметров стандартных типов

mybiblioteka.su - 2015-2024 год. (0.055 сек.)