Заменить в отсортированном массиве все отрицательные элементы на нулевое значение - C (СИ)
Формулировка задачи:
Всем доброго времени суток!
Есть задача: Разработать программу, которая запоминает в двумерном массиве, имеющем 6 строк и 5 столбцов, числа от –5 до 10, получаемые случайным образом, а затем располагает их в порядке возрастания в строке. Заменить в отсортированном массиве все отрицательные элементы на нулевое значение. Найти суммы исходного и обработанного массивов. Я не могу понять как сделать в моей программе сортировку по строкам по возрастанию! Пожалуйста, помогите закончить мою программу((((
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void Ran(int a[][5]);
void Output(int a[][5]);
void sortirovka(int b[][5]);
int main(void)
{
int a[6][5];
printf("Случайный массив:\n");
Ran(a);
Output(a);
printf("Массив после первой сортировки:\n");
Ran(a);
sortirovka(a);
}
void Ran(int a[][5])
{
srand(time(NULL));
int i,k;
for (i=0;i<5;i++)
for (k=0;k<5;k++)
a[k][i]=rand()%16-5;
}
void Output(int a[][5])
{
int i,k,S1=0;
for (i=0;i<5;i++)
{
for (k=0;k<5;k++)
{
if (a[k][i]<=10)
printf("%2d ",a[k][i]);
}
printf("\n");
}
for (i=0;i<5;i++)
for (k=0;k<5;k++)
S1+=a[i][k];
printf("Сумма исходного массива - %d\n",S1);
}Решение задачи: «Заменить в отсортированном массиве все отрицательные элементы на нулевое значение»
textual
Листинг программы
void sort_1(int a[][M]) {
// N - число строк
// M - число столбцов
int raw = 0, col = 0, step = 0;
for (raw = 0; raw < N; ++raw) // строки
// сортируем одномерный массви - строку
// номер прохода
for (step = 0; step < M - 1; ++step)
//внутренний цикл прохода
for (col = 0; col < M - 1 - step; ++col) {
if (a[raw][col] > a[raw][col + 1]) {
int t = a[raw][col];
a[raw][col] = a[raw][col + 1];
a[raw][col + 1] = t;
}
}
}
Объяснение кода листинга программы
В данном коде реализуется функция сортировки одномерного массива по возрастанию. Список действий:
- Входные данные: массив a[][M], где N - число строк, M - число столбцов.
- Инициализируем переменные: raw = 0, col = 0, step = 0. Переменная raw используется для прохода по строкам, col - по столбцам, step - номер прохода.
- Начинаем сортировку: for (raw = 0; raw < N; ++raw) {...}. Внутренний цикл прохода по строкам.
- Внутренний цикл прохода по столбцам: for (step = 0; step < M - 1; ++step) {...}.
- Проверяем, если текущий элемент больше следующего, то меняем их местами: if (a[raw][col] > a[raw][col + 1]) {...}.
- Обмениваем значения: int t = a[raw][col]; a[raw][col] = a[raw][col + 1]; a[raw][col + 1] = t;.
- Завершаем внутренний цикл прохода по столбцам.
- Выходим из внешнего цикла прохода по строкам. В результате выполнения данного кода, массив a[][M] будет отсортирован по возрастанию.