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  Вывод о работоспособности программы

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


 

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

18985. Предмет и метод экономической теории 1.02 MB
  ТЕМА 01. Предмет и метод экономической теории Учебные цели Пять что изучает экономическая теория. Изучить методы экономического анализа. Выяснить различия между нормативной и позитивной экономикой. Уяснить чем отличается микроэкономика от макроэконо
18986. Теория потребительского поведения. Закономерности развития потребительских предпочтений 1.04 MB
  Теория потребительского поведения Учебные цели Раскрыть содержание предельной полезности товара показать ее отличие от общей полезности и сформулировать закон убывающей предельной полезности. Уяснить правило максимизации полезности...
18987. Рынок труда. Понятие предельного продукта труда в денежном выражении 630.5 KB
  А. Титков УМК ЭТ Тема 10. Рынок труда Учебные цели Выяснить особенности спроса на труд. Определить понятие предельного продукта труда в денежном выражении и предельных издержек на труд. Выявить факторы определяющие изменение спроса на труд. Усвоить правил
18988. Распределение Максвелла 326.5 KB
  Лекция I 1. Распределение Максвелла. Статистическая физика изучает свойства макроскопических тел т.е. систем состоящих из огромного числа частиц. Например для аудитории с размерами учитывая что каждый моль воздуха занимает объем 224 л и содержит число Авогадро мол
18989. Квантовомеханическое описание 288 KB
  Лекция II 1. Квантовомеханическое описание. Казалось бы каноническое распределение Гиббса I.4.5 невозможно согласовать с требованиями квантовой механики так как обобщенные координаты и импульсы в соответствии с принципом неопределенности Гейзенберга не коммутирую
18990. Микроканоническое распределение 283 KB
  Лекция III 1. Микроканоническое распределение. Рассмотрим замкнутую макроскопическую систему занимающую объем и содержащую частиц. Как это следует из рис. III.1 любая макроскопическая система является замкнутой поскольку ее энергия практически не флуктуирует т.е. о
18991. Расчет с помощью программы “Fullprof” магнитной структуры магнетика. Магнитная структура DyB4 572.5 KB
  Давайте проведем расчет нейтронограммы соединения AB, для которого мы вручную рассчитывали нейтронограммы ядерного и магнитного рассеяния”. Как мы уже знаем, нейтронограмма должна содержать, по крайней мере, две фазы – ядерную и магнитную
18992. Работа и тепло 268.5 KB
  Лекция V 1. Работа и тепло. Обсудим физический смысл основного термодинамического тождества V.1.1 Поскольку давление – это средняя сила отнесенная к единице площади а изменение объема то второе с...
18993. Температурная зависимость плотности энергии равновесного (черного) излучения 246 KB
  Лекция VI 1. Температурная зависимость плотности энергии равновесного черного излучения. Если для какойлибо системы удается найти связь между давлением объемом и энергией т.е. аналог уравнения состояния то можно вычислить все ее термодинамические величины. Для излу...