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

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


 

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

60039. ГУЦУЛЬСЬКІ ЗАБАВИ 44 KB
  Перший етап змагань 1. Вітання пояснення завдань свята Під звуки гуцульських мелодій учасники змагань входять у спортивний зал і шикуються. Представлення команд журі ознайомлення з правилами Другий етап змагань Кінь і гуцул нероздільне поняття...
60040. Дитячі забави 39 KB
  Вивчення нового матеріалу: Лексична сторона мовлення: Вправа на формування різних рівнів лексичних узагальнень. Вправа на формування активного словникового запасу. Вправа на розвиток лексичнох системності.
60041. Free time 69.5 KB
  Look at the blackboard. What date is it today? What day is it today? Today is the 16th of October and Thuesday. Today we continue to speak about Free Time and today we’ll take part in a detective story. Today I’m a detective and you are my Watsons.
60042. Генетика пола, Половой диморфизм 80 KB
  Сегодня на занятии мы рассмотрим генетику пола. В конце урока мы с вами будем иметь представление о хромосомном определении пола так же других вариантах определения пола и каким образом происходит наследование признаков сцепленных с полом.
60044. Роль государства в экономике 73 KB
  Цель урока: объяснить учащимся какую роль играет государство в рыночной экономике. Зачем экономике государство. Какие функции в обществе выполняет предпринимательство От чего зависит успех предпринимательской деятельности.
60047. Складання та розв’язання задач на матеріалі навколишнього світу, як засіб розвитку пізнавальних інтересів учнів 51 KB
  Дитина з малих років повинна розуміти що все досягається працею і що працювати непросто. Як правило всі діти 67 років з великим бажанням йдуть до школу їм все цікаво вони завжди хочуть відповідати руки їх постійно тягнуться вгору вони навіть...