Заполнить матрицу с клавиатуры - 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() - главная функция программы. В этой функции происходит инициализация переменных, заполнение матрицы, вывод матрицы и массива характеристик строк, сортировка массива и матрицы. В начале программы устанавливается русская локаль для корректного отображения кириллицы в консоли. В конце программы программа ожидает ввода символа перед выходом.