Заменить повторяющиеся в матрице элементы нулями - C (СИ)
Формулировка задачи:
Известно, что в матрице A(n×m) нет нулей. Заменить повторяющиеся в матрице элементы нулями. Помогите пожалуйста. Спасибо.
Решение задачи: «Заменить повторяющиеся в матрице элементы нулями»
textual
Листинг программы
#include <stdio.h>
#define S 5
#define B 5
int main(void)
{
int i,j=0,v,s;
int A[S][B]={{2,7,67,45,2},{5,5,5,5,654}, {34,45,22,11,22}, {3,4,5,6,654}, {4,78,65,1,1}};
int *pt;
int *pp;
pt=A[0];
v=B*S;
for(i=1;i<=v;i++)
{
pp=pt+1;
s=*pt;
for(j=i+1;j<=v;j++)
{
if(s==*pp){*pp=0;*pt=0;}
pp++;
}
pt++;
}
for(i=0;i<S;i++)
{
printf("\n");
for(j=0;j<B;j++)
{
printf("%-3d ",A[i][j]);
}
}
return(0);
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и математическими операциями.
- Определение размеров матрицы S и B.
- Создание двумерного массива A размером S x B, заполненного случайными значениями.
- Указание на то, что первая строка матрицы будет использоваться как указатель на первый элемент.
- Создание указателей pt и pp для работы с элементами матрицы.
- Инициализация указателя pt на первый элемент первой строки матрицы A.
- Вычисление общего количества элементов в матрице и сохранение этого значения в переменной v.
- Внешний цикл for, который проходит по всем элементам матрицы от первого до последнего.
- Внутренний цикл for, который проверяет все элементы, начиная с текущего индекса, на равенство текущего элемента с предыдущим.
- Если элементы равны, то текущий элемент и предыдущий элемент заменяются на ноль.
- Указатель pp увеличивается на 1, чтобы перейти к следующему элементу.
- Указатель pt увеличивается на 1, чтобы перейти к следующему элементу.
- Внутренний цикл завершается, когда он достигает конца матрицы.
- Указатель pt возвращается к началу первой строки матрицы.
- Внутренний цикл for, который проходит по всем строкам матрицы.
- Внешний цикл for, который проходит по всем элементам строки.
- Внутренний цикл for, который выводит каждый элемент матрицы, отцентрировав его и добавив пробелы.
- Внутренний цикл завершается, когда он достигает конца строки.
- Внешний цикл for завершается, когда он достигает конца матрицы.
- Программа возвращает 0, что означает успешное выполнение.