40050

Робота з багатомірними масивами в мові С

Лабораторная работа

Информатика, кибернетика и программирование

Получить новую матрицу путем вычитания всех элементов данной матрицы из ее наибольшего по модулю элемента.

Украинкский

2014-11-23

512.5 KB

3 чел.

Лабораторна робота № 4

з дисципліни “Обчислювальна техніка та програмування”

 Робота з багатомірними масивами в мові С

Вариант 11

Задание №1

Получить новую матрицу путем вычитания всех элементов данной матрицы из ее наибольшего по модулю элемента.

1.2  Алгоритм программы

1.3  Тестовые наборы

№ теста

Ввод элементов матрицы

Ожидаемый результат

1

1 2 3; 4 5 6; 7 8 9

8 7 6; 5 4 3; 2 1 0

2

2 2 2; 3 3 3; 4 4 4

2 2 2; 1 1 1; 0 0 0

3

1 1 1; 1 1 1; 2 2 2

1 1 1; 1 1 1; 0 0 0

4

3 3 3; 5 5 5; 7 7 7

4 4 4; 2 2 2; 0 0 0

1.4  Код программы

#include <stdio.h>

#include <stdlib.h>

#include <locale.h>

#include <windows.h>

#include <time.h>

#include <math.h>

#define MAX 100

void enter_array (int [][MAX], int, int);

void rand_array (int [][MAX], int, int);

void output (int [][MAX], int, int);

void menu (int [][MAX], int, int);

void record (int [][MAX], int, int);

int main()

{

setlocale(LC_CTYPE, "rus");

 int mas[MAX][MAX];

 int nr, nc;

printf("Введите количество строк матрицы: ");

 while(scanf("%i", &nr) != 1 || nr > 100)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

}

printf("Введите количество столбцов матрицы: ");

 while(scanf("%i", &nc) != 1 || nc > 100)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

}

menu (mas, nr, nc);

record (mas, nr, nc);

printf("\n");

system("pause");

 return 0;

}

void enter_array (int mas[][MAX], int nr, int nc)

{

printf("Введите элементы матрицы: ");

 for (int i = 0; i < nr; i++)

 for (int j = 0; j < nc; j++)

  while(scanf("%i", &mas[i][j]) != 1)

  {

   printf("Ошибка! Введите корректные данные: ");

   fflush stdin;

  } printf("\n");

 return;

}

void rand_array (int mas[][MAX], int nr, int nc)

{

srand(time (NULL));

 int a, b;

printf("Ввод начала диапазона: ");

 while(scanf("%i", &a) != 1 || a == 0)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

}

printf("Ввод конца диапазона: ");

 while(scanf("%i", &b) != 1 || b == 0)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

}

 for (int i = 0; i < nr; i++)

 for (int j = 0; j <nc; j++)

  mas[i][j] = rand()%(b - a + 1) + a;

 return;

}

void output (int mas[][MAX], int nr, int nc)

{

printf("Элементы матрицы: ");

printf("\n");

 for (int i = 0; i < nr; i++)

{

 for (int j = 0; j < nc; j++)

 {

  printf("%6i", mas[i][j]);

 }

 printf("\n");

}

printf("\n");

 return;

}

void menu (int mas[][MAX], int nr, int nc)

{

 int menu;

printf("Меню\n1 - Для ручного ввода массива\n2 - Для рандомного ввода массива\nПоле ввода: ");

 while(scanf("%i", &menu) != 1 || menu >= 3 || menu <= 0)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

}

 switch(menu)

{

 case 1: enter_array (mas, nr, nc);

   break;

 case 2: rand_array (mas, nr, nc);

   output (mas, nr, nc);

   break;

}

printf("\n");

 return;

}

void record (int mas[][MAX], int nr, int nc)

{

 int max = mas[0][0];          

 for (int i = 0; i<nr; i++)

 for(int j = 0; j<nc; j++)

 {

  if (abs(mas[i][j]) > max)

   max = abs(mas[i][j]);

 }

printf("Максимальный по модулю элемент: %i\n", max);

 int record[MAX][MAX];

printf("Новая матрица:\n");

 for (int i = 0; i<nr; i++)

{

 for (int j = 0; j<nc; j++)

 {

  record[i][j] = max - mas[i][j];

  printf("%6i", record[i][j]);

 }  

 printf("\n");

}

printf("\n");

 return;

}

1.5 Результат работы программы

№ теста

Ввод элементов массива

Результат

Вывод

1

1 2 3; 4 5 6; 7 8 9

8 7 6; 5 4 3; 2 1 0

Тест пройден

2

2 2 2; 3 3 3; 4 4 4

2 2 2; 1 1 1; 0 0 0

Тест пройден

3

1 1 1; 1 1 1; 2 2 2

1 1 1; 1 1 1; 0 0 0

Тест пройден

4

3 3 3; 5 5 5; 7 7 7

4 4 4; 2 2 2; 0 0 0

Тест пройден

1.6  Вывод о работоспособности программы

 Программа прошла тестирование: в результате выполнения тестов программа выдала ожидаемые результаты. Программа – работоспособна.

2.1  Задание №2

Дана матрица размера M × N и целое число K (1 ≤ K ≤ M). Найти сумму и произведение элементов K-й строки данной матрицы.

 2.2 Алгоритм программы

2.3  Тестовые наборы

№ теста

Ввод элементов матрицы

Ввод К

Ожидаемый результат

1

1 2 3; 4 5 6; 7 8 9

1

СУММА = 6; ПРОИЗВЕДЕНИЕ = 6

2

2 2 2; 3 3 3; 4 4 4

2

СУММА = 9; ПРОИЗВЕДЕНИЕ = 27

3

1 1 1; 1 1 1; 2 2 2

3

СУММА = 6; ПРОИЗВЕДЕНИЕ = 8

4

3 3 3; 5 5 5; 7 7 7

3

СУММА = 21; ПРОИЗВЕДЕНИЕ = 343

2.4  Код программы

#include <stdio.h>

#include <stdlib.h>

#include <locale.h>

#include <windows.h>

#include <time.h>

#include <math.h>

#define MAX 100

void enter_array (int [][MAX], int, int);

void rand_array (int [][MAX], int, int);

void output (int [][MAX], int, int);

void menu (int [][MAX], int, int);

void record (int [][MAX], int, int);

int main()

{

setlocale(LC_CTYPE, "rus");

 int mas[MAX][MAX];

 int nr, nc;

printf("Введите количество строк матрицы: ");

 while(scanf("%i", &nr) != 1 || nr > 100)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

}

printf("Введите количество столбцов матрицы: ");

 while(scanf("%i", &nc) != 1 || nc > 100)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

} menu (mas, nr, nc);

record (mas, nr, nc);

printf("\n");

system("pause");

 return 0;

}

void enter_array (int mas[][MAX], int nr, int nc)

{

printf("Введите элементы матрицы: ");

 for (int i = 0; i < nr; i++)

 for (int j = 0; j < nc; j++)

  while(scanf("%i", &mas[i][j]) != 1)

  {

   printf("Ошибка! Введите корректные данные: ");

   fflush stdin;

  }

printf("\n");

 return;

}

void rand_array (int mas[][MAX], int nr, int nc)

{

srand(time (NULL));

 int a, b;

printf("Ввод начала диапазона: ");

 while(scanf("%i", &a) != 1 || a == 0)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

}

printf("Ввод конца диапазона: ");

 while(scanf("%i", &b) != 1 || b == 0)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

}

 for (int i = 0; i < nr; i++)

 for (int j = 0; j <nc; j++)

  mas[i][j] = rand()%(b - a + 1) + a;

 return;

}

void output (int mas[][MAX], int nr, int nc)

{

printf("Элементы матрицы: ");

printf("\n");

 for (int i = 0; i < nr; i++)

{

 for (int j = 0; j < nc; j++)

 {

  printf("%6i", mas[i][j]);

 }

 printf("\n");

}

 return;

}

void menu (int mas[][MAX], int nr, int nc)

{

 int menu;

printf("Меню\n1 - Для ручного ввода массива\n2 - Для рандомного ввода массива\nПоле ввода: ");

 while(scanf("%i", &menu) != 1 || menu >= 3 || menu <= 0)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

}

 switch(menu)

{

 case 1: enter_array (mas, nr, nc);

   break;

 case 2: rand_array (mas, nr, nc);

   output (mas, nr, nc);

   break;

}

 return;

}

void record (int mas[][MAX], int nr, int nc)

{

 int k;

 int sum, prod;

printf("Введите К: ");

 while(scanf("%i", &k) > nc||k < 1)

{

 printf("Ошибка! Введите корректные данные: ");

 fflush stdin;

}

sum = 0;

prod = 1;

 for(int j = 0; j < nc; j++)

{

 sum = sum + mas[k-1][j];

 prod = prod * mas[k-1][j];

}

printf("Сумма К-й строки: %i\nПроизведение К-й стоки: %i", sum, prod);

 return;

}

2.5 Результат работы программы

№ теста

Ввод элементов массива

Ввод К

Ожидаемый результат

Вывод

1

1 2 3; 4 5 6; 7 8 9

1

СУММА = 6; ПРОИЗВЕДЕНИЕ = 6

Тест пройден

2

2 2 2; 3 3 3; 4 4 4

2

СУММА = 9; ПРОИЗВЕДЕНИЕ = 27

Тест пройден

3

1 1 1; 1 1 1; 2 2 2

3

СУММА = 6; ПРОИЗВЕДЕНИЕ = 8

Тест пройден

4

3 3 3; 5 5 5; 7 7 7

3

СУММА = 21; ПРОИЗВЕДЕНИЕ = 343

Тест пройден

2.6  Вывод о работоспособности программы

Программа прошла тестирование: в результате выполнения тестов программа выдала ожидаемые результаты. Программа – работоспособна.


 

А также другие работы, которые могут Вас заинтересовать

66671. История и методология почвоведения 67.89 KB
  Таковы прежде всего Гесиод и его последователи а затем помимо них первые натурфилософы. Уже скоро состоится состязание рапсодов и скоро царь Панед заслушает двух великих людей Гесиода и Гомера. Пожалуй при таком раскладе событий немало людей пожелали бы оказаться...
66676. АЛЕКСАНДР НИКОЛАЕВИЧ ЭНГЕЛЬГАРДТ 94.68 KB
  Годы жизни Александра Николаевича Энгельгардта (1832-1893) практически совпали с годами жизни его тезки, императора Александра II Николаевича Романова (1818-1881). Это время отмечено многими преобразованиями как во внешней политике страны, так и в ее внутренней общественной жизни...
66677. Объекты медицинского предназначения: необходимо совершенствовать охрану 83 KB
  Возможности, продемонстрированные в свое время молекулярной биологией, привели к рождению нового направления в медицине – медицинской химии. В настоящее время медицинскую химию можно считать уже сложившейся областью. Основой для нее стала, как известно, комбинаторная химия.
66678. Александр II. Предпосылки либеральных реформ. Отмена крепостного права 36.5 KB
  Преобразования охватили три основные сферы социально-экономическую освобождение крестьян и попытку решения аграрного вопроса политическую введение местного самоуправления реформу суда и армии культурно-образовательную реформу школ университетов и цензуры.
66679. Задания муниципального этапа всероссийской олимпиады школьников по математике, решения задач 503.5 KB
  Почти у всех задач критерии написаны на основании «приведенного» к задаче решения. В случае «другого» решения нужно выработать другие критерии в соответствии с общими требованиями к критериям, которые помещены в конце брошюры.