Заполнить матрицу с клавиатуры - 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();
}

Объяснение кода листинга программы

В данном коде реализованы следующие функции и процедуры:

  1. fill_mat() - функция для заполнения матрицы случайными числами. В этой функции используется генератор случайных чисел, и каждое поле матрицы заполняется случайным числом в диапазоне от -3 до 20. Однако, в данном коде реализована ручная ввод данных, поэтому используется функция scanf().
  2. display_mat() - функция для вывода матрицы на экран. В этой функции происходит обход каждого элемента матрицы и его вывод на экран через функцию printf().
  3. search_zero() - функция для поиска индекса первого нулевого элемента в матрице. В этой функции происходит обход каждого элемента матрицы. Если элемент равен нулю, функция возвращает его индекс. Если нулевых элементов не найдено, функция возвращает -1.
  4. ret_charact(int inx) - функция для нахождения суммы четных отрицательных элементов по каждой строке матрицы. В этой функции происходит обход каждого элемента строки, если элемент четный и отрицательный, он добавляется к сумме. Функция возвращает полученную сумму.
  5. xchng_rows(int inx1, int inx2) - функция для обмена двух строк матрицы. В этой функции происходит обмен элементов двух строк, начиная с указанных индексов.
  6. calc_charact() - функция для нахождения массива характеристик строк. В этой функции происходит обход каждой строки матрицы, и для каждой строки вызывается функция ret_charact(), результат сохраняется в соответствующем элементе массива.
  7. display_charact() - функция для вывода массива характеристик строк на экран. В этой функции происходит обход каждого элемента массива и его вывод на экран через функцию printf().
  8. xchng() - функция для сортировки массива и сортировки матрицы по возрастанию массива характеристик строк. В этой функции используется алгоритм пузырьковой сортировки. Он сравнивает пары соседних элементов массива и, если они находятся в неправильном порядке, меняет их местами. После завершения сортировки, вызывается функция xchng_rows() для обмена строк матрицы.
  9. main() - главная функция программы. В этой функции происходит инициализация переменных, заполнение матрицы, вывод матрицы и массива характеристик строк, сортировка массива и матрицы. В начале программы устанавливается русская локаль для корректного отображения кириллицы в консоли. В конце программы программа ожидает ввода символа перед выходом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5
Похожие ответы