Главная страница

Лабораторная работа №6 Основы алгоритмизации и программирования. Лабораторная работа 6 действия над двумерными массивами Варианты заданий


Скачать 33.61 Kb.
НазваниеЛабораторная работа 6 действия над двумерными массивами Варианты заданий
АнкорЛабораторная работа №6 Основы алгоритмизации и программирования
Дата10.04.2022
Размер33.61 Kb.
Формат файлаdocx
Имя файлаlab6.docx
ТипЛабораторная работа
#458947

Лабораторная работа №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


написать администратору сайта