Лабораторная работа №6 Основы алгоритмизации и программирования. Лабораторная работа 6 действия над двумерными массивами Варианты заданий
Скачать 33.61 Kb.
|
Лабораторная работа №6 «действия над двумерными массивами» Варианты заданий. 13.Среди строк целочисленной матрицы A(nxm), содержащих только четные элементы, найти строку с максимальной суммой модулей элементов. Будем искать сумму для каждой строки, присваивая сумму равную минус единице всякий раз когда нашли в строке нечетный элемент. Тогда искомая величина будет хранится в массиве этих сумм, в котором и найдем максимальную. А строки с нечетными эл-тами будут иметь значение сумм модулей равную -1, и «выиграть» соревнование на максимум заведомо не смогут. Пример выполнения программы: Текст программы (на языке СИ): // lab6.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "math.h" #include "conio.h" #include "time.h" #include "locale.h" #include "string.h" /*среди строк целочисленной матрицы A[n*m] содержащей только четные элементы, найти строку с максимальной суммой модулей элементов*/ void print_matrix(int **a, int xsize, int ysize){ //печать матрицы for (int i = 0; i < ysize; i++){ for (int j = 0; j < xsize; j++) printf("%6d ",a[i][j]); printf("\n"); } } void print_vector(int *a, int size){ //печать массива for (int i = 0 ; i < size; i++) if (a[i]>=0) printf("%6d ", i ); printf("\n"); } void random_matrix(int **a, int xsize, int ysize, int min_v , int max_v){ //генерация случайной матрицы заданного размера и диапазонов for (int i = 0; i < ysize; i++) for (int j = 0; j < xsize; j++) a[i][j] = min_v + rand() % (max_v - min_v + 1); } int **new_matrix(int xsize, int ysize){ //выделение памяти под матрицу как массив дин массивов int **a = new int *[ysize]; for (int i = 0; i < ysize; i++) a[i] = new int [xsize]; return a; } int *summes(int **a , int xsize, int ysize){ //возвращает сумму модулей строк, если строка только из четных, если есть хоть 1 нечетный то вернет -1 int *b = new int [ysize]; //выделяем память под массив сумм for (int i= 0; i < ysize; i++){ //пройдем по каждой строке b[i] = 0; // изначально сумма равна нулю for (int j= 0; j< xsize; j++) if (a[i][j] % 2 == 0) //суммируем каждый четный эл-т в соотв строке b[i] += abs(a[i][j]); else{ b[i] = -1; break; //если встретился нечетный то для этой строки сумму присвоим -1 и прервем текущую итерацию цикла обрабатывающий эту строку } } return b; } int max_arr(int *a , int size , int &index){ //поиск макс эл-та в массиве с запоминанием найденного индекса index = -1; int mm = -1; for (int i=0; i < size; i++) //проход по массиву if (a[i] > mm) { ///если текущий эл-т больше ранее найденного mm = a[i]; index = i; //то заменим его и запомним новый индекс } return mm; //вернем рез-тат } int main() { setlocale(0, "rus"); srand(int(time(NULL))); printf("Лаб 6. действия над двумерными массивами\n"); int n , m , **A; printf("Ввести размеры матрицы n = "); scanf("%d", &n); printf("Ввести размеры матрицы m = "); scanf("%d", &m); printf("Исходная матрица : \n"); A = new_matrix(m , n); random_matrix(A, m ,n, 0 , 9); print_matrix(A, m , n); int *s = summes(A, m, n); printf("Нумерация начинается с 0\n"); printf("Номера строк имеющие только четные эл-ты :\n"); print_vector(s, n); int ind , max = max_arr(s , n , ind); printf("Максимальная сумма модулей из них = %d\n", max); printf("Максимальная сумма модулей у строки с номером = %d\n", ind); _getch(); return 0; } Б На входе a[][], xsize. ysize лок схема функции summes: Для i:=0; i < ysize; шаг 1 b[i] := 0 A На выходе b[] Для j:=0; j < xsize; шаг 1 b[i] += abs(a[i][j]) b[i] := -1 a[i][j] % 2 == 0 A |