Заполнить матрицу с клавиатуры - C (СИ)
Формулировка задачи:
Поменяйте пожалуйста рандомный ввод на ручной ,и если не сложно напишите комментарии к программе ,а то я че то вообще не шарю.
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <locale> #include<time.h> using namespace std; const int size = 3; int mat[size][size]; int charact[size]; void fill_mat(){ srand(time(NULL)); for(int i = 0; i < size; i++) for (int j = 0; j < size; j++) { mat[i][j] = -3 + rand() % 20; } } void display_mat(){ for(int i = 0; i < size; i++){ for (int j = 0; j < size; j++) printf("%i\t",mat[i][j]); printf("\n"); } } int search_zero (){ for (int j = 0; j < size; j++) for (int i = 0; i < size; i++) if (mat[i][j] == 0) return j + 1; return -1; } int ret_charact(int inx){ int sum = 0; for (int i = 0; i < size; i++) if((mat[inx][i] % 2 == 0) && (mat[inx][i] < 0)) sum += mat[inx][i]; return sum; } void xchng_rows(int inx1, int inx2){ int bubble; for (int i = 0; i < size; i++){ bubble = mat[inx2][i]; mat[inx2][i] = mat[inx1][i]; mat[inx1][i] = bubble; } } void calc_charact(){ for (int i = 0; i < size; i++) charact[i] = ret_charact(i); } void display_charact(){ for (int i = 0; i < size; i++) printf("%i\t",charact[i]); printf("\n"); } void xchng(){ int bubble; for (int i = 0; i < size - 1; i++) for (int j = i + 1; j < size; j++) if (charact[i] > charact[j]) { bubble = charact[i]; charact[i] = charact[j]; charact[j] = bubble; xchng_rows(i,j); } } int main(){ setlocale(LC_ALL, "rus"); fill_mat(); printf("Исходная матрица:\n\n"); display_mat(); int col = search_zero(); if (col > -1) { printf("Первый столбец с нулевым элементом столбец № %i\n\n",col); } else { printf("Нулевых элементов не найдено.\n\n"); } calc_charact(); printf("Массив характеристик строк:\n\n"); display_charact(); xchng(); printf("Отсортированный массив характеристик строк:\n\n"); display_charact(); printf("Отсортированная матрица:\n\n"); display_mat(); getch(); }
Решение задачи: «Заполнить матрицу с клавиатуры»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <locale> #include<time.h> // использование стандартного пространства имен using namespace std; // глобальные переменные // объявление константы, определяющей порядок квадратной матрицы mat const int size = 3; // квадратная матрица int mat[size][size]; // массив int charact[size]; // заполнение матрицы случайными числами void fill_mat(){ srand(time(NULL)); for(int i = 0; i < size; i++) for (int j = 0; j < size; j++) { //mat[i][j] = -3 + rand() % 20; // ручной ввод scanf("%d", &mat[i][j]); } } // вывод матрицы void display_mat(){ for(int i = 0; i < size; i++){ for (int j = 0; j < size; j++) printf("%i\t",mat[i][j]); printf("\n"); } } // поиск индекса первого нулевого элемента // возвращает -1 если нулевых элементов не найдено int search_zero (){ for (int j = 0; j < size; j++) for (int i = 0; i < size; i++) if (mat[i][j] == 0) return j + 1; return -1; } // найти сумму четных отрицательных элементов по каждой строке (для занесения в массив) int ret_charact(int inx){ int sum = 0; for (int i = 0; i < size; i++) if((mat[inx][i] % 2 == 0) && (mat[inx][i] < 0)) sum += mat[inx][i]; return sum; } // обменять две строки матрицы void xchng_rows(int inx1, int inx2){ int bubble; for (int i = 0; i < size; i++){ bubble = mat[inx2][i]; mat[inx2][i] = mat[inx1][i]; mat[inx1][i] = bubble; } } // найти массив характеристик строк void calc_charact(){ for (int i = 0; i < size; i++) charact[i] = ret_charact(i); } // вывод массива void display_charact(){ for (int i = 0; i < size; i++) printf("%i\t",charact[i]); printf("\n"); } // пузырьковая сортировка массива и сортировка матрицы по возрастанию массива характеристик строк void xchng(){ int bubble; for (int i = 0; i < size - 1; i++) for (int j = i + 1; j < size; j++) if (charact[i] > charact[j]) { // обмен элементов массива bubble = charact[i]; charact[i] = charact[j]; charact[j] = bubble; xchng_rows(i,j); // обмен строк матрицы } } int main(){ // сделать так, чтобы кириллица отображалась в консоли ( установить русскую локаль) setlocale(LC_ALL, "rus"); // заполнить матрицу случайными числами fill_mat(); // вывод матрицы printf("Исходная матрица:\n\n"); display_mat(); // найти индекс первого найденного нуля int col = search_zero(); if (col > -1) { printf("Первый столбец с нулевым элементом столбец № %i\n\n",col); } else { printf("Нулевых элементов не найдено.\n\n"); } calc_charact(); printf("Массив характеристик строк:\n\n"); display_charact(); // пузырьковая сортировка массива xchng(); printf("Отсортированный массив характеристик строк:\n\n"); display_charact(); printf("Отсортированная матрица:\n\n"); display_mat(); // дождаться ввода символа перед выходом из программы getch(); }
Объяснение кода листинга программы
В данном коде реализованы следующие функции и процедуры:
- fill_mat() - функция для заполнения матрицы случайными числами. В этой функции используется генератор случайных чисел, и каждое поле матрицы заполняется случайным числом в диапазоне от -3 до 20. Однако, в данном коде реализована ручная ввод данных, поэтому используется функция scanf().
- display_mat() - функция для вывода матрицы на экран. В этой функции происходит обход каждого элемента матрицы и его вывод на экран через функцию printf().
- search_zero() - функция для поиска индекса первого нулевого элемента в матрице. В этой функции происходит обход каждого элемента матрицы. Если элемент равен нулю, функция возвращает его индекс. Если нулевых элементов не найдено, функция возвращает -1.
- ret_charact(int inx) - функция для нахождения суммы четных отрицательных элементов по каждой строке матрицы. В этой функции происходит обход каждого элемента строки, если элемент четный и отрицательный, он добавляется к сумме. Функция возвращает полученную сумму.
- xchng_rows(int inx1, int inx2) - функция для обмена двух строк матрицы. В этой функции происходит обмен элементов двух строк, начиная с указанных индексов.
- calc_charact() - функция для нахождения массива характеристик строк. В этой функции происходит обход каждой строки матрицы, и для каждой строки вызывается функция ret_charact(), результат сохраняется в соответствующем элементе массива.
- display_charact() - функция для вывода массива характеристик строк на экран. В этой функции происходит обход каждого элемента массива и его вывод на экран через функцию printf().
- xchng() - функция для сортировки массива и сортировки матрицы по возрастанию массива характеристик строк. В этой функции используется алгоритм пузырьковой сортировки. Он сравнивает пары соседних элементов массива и, если они находятся в неправильном порядке, меняет их местами. После завершения сортировки, вызывается функция xchng_rows() для обмена строк матрицы.
- main() - главная функция программы. В этой функции происходит инициализация переменных, заполнение матрицы, вывод матрицы и массива характеристик строк, сортировка массива и матрицы. В начале программы устанавливается русская локаль для корректного отображения кириллицы в консоли. В конце программы программа ожидает ввода символа перед выходом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д