Если все элементы какой-нибудь строки матрицы равны между собой, то все элементы такой строки заменить нулями - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Если все элементы какой-нибудь строки матрицы равны между собой, то все элементы такой строки заменить нулями! Как это сделать??, помогите....

Решение задачи: «Если все элементы какой-нибудь строки матрицы равны между собой, то все элементы такой строки заменить нулями»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define ROWS 5
#define COLS 3
 
/* возвращает 1, если все элементы строки равны */
int cmpValues(const int *arr, size_t count){
    const int *p;
 
    if ( !arr || !count )
        return 0;
    for ( p = arr + count - 1; p > arr; p-- )
        if ( *p != *arr )
            return 0;
    return 1;
}
 
/*
    Если все элементы какой-нибудь строки матрицы равны между собой, то все элементы такой строки заменить нулями!
*/
 
int main(void){
    int matr[ROWS][COLS];
    size_t i, j;
    
    printf("\nEnter values for array:\n");
    for ( i = 0; i < ROWS; i++ ){
        for ( j = 0; j < COLS; j++ ){
            printf("[%d][%d] = ", i, j);
            scanf("%d", &matr[i][j]);
        }
    }
    
    printf("\nOriginal array:\n");
    for ( i = 0; i < ROWS; i++ )
        for ( j = 0; j < COLS; j++ )
            printf( ( j < COLS - 1 ) ? "%d " : "%d\n", matr[i][j]);
            
    for ( i = 0; i < ROWS; i++ )
        if ( cmpValues(&matr[i][0], COLS) )
            memset((void*)&matr[i][0], 0, COLS * sizeof(int));
    
    printf("\nProcessed array:\n");
    for ( i = 0; i < ROWS; i++ )
        for ( j = 0; j < COLS; j++ )
            printf( ( j < COLS - 1 ) ? "%d " : "%d\n", matr[i][j]);
            
    exit(0);
}

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

  1. Включаем необходимые заголовочные файлы: , ,
  2. Определяем константы ROWS и COLS, которые задают размерность матрицы.
  3. Создаем функцию cmpValues, которая принимает на вход указатель на первый элемент массива и количество элементов в массиве. Функция проверяет, все ли элементы массива равны между собой.
  4. Создаем функцию main, которая запрашивает у пользователя ввод значений для матрицы, выводит исходную матрицу, заменяет нулями все элементы строк, где все элементы равны, и выводит полученную матрицу.
  5. В функции main создаем массив типа int matr[ROWS][COLS] для хранения матрицы.
  6. Запрашиваем у пользователя ввод значений для матрицы, используя вложенные циклы, и сохраняем эти значения в переменной matr.
  7. Выводим исходную матрицу на экран.
  8. Проходим по всем строкам матрицы и, если все элементы строки равны между собой, заменяем их нулями, используя функцию memset.
  9. Выводим полученную матрицу на экран.
  10. В функции main добавляем оператор exit(0) в конце, чтобы программа завершилась без ошибок при нормальном завершении.

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

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