Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 17.11.2022
Сообщений: 76
1

Последний отрицательный элемент каждого столбца прямоугольной матрицы заменить нулем

01.01.2023, 11:10. Показов 392. Ответов 6

Author24 — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста добить задачу. Условие: Последний отрицательный элемент каждого столбца прямо- угольной матрицы заменить нулем.

Сейчас программа меняет все отрицательные числа на нули. Пробовала в условие добавлять break, но в это случае меняется только первый отрицательный. Не понимаю, как взять последний.

Мой код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
#define M 7
 
int main() {
    int **a, count = 0;
 
    a = calloc(N, sizeof (int*));
    for (int i = 0; i < N; i++)
    {
        a[i] = calloc (M, sizeof (int));
        for (int j = 0; j < M; j++)
        {
            a[i][j] = rand()%100 - 10;
            printf("%d\t", a[i][j]);
        }
        printf("\n");
    }
    printf("\n");
 
    for (int j = 0; j < M; j++)
    {
        for (int i = 0; i < N; i++)
        {
            if (a[i][j] < 0)
            {
                count++;
                if (count <= M)
                {
                    a[i][j] = 0;
                }
            }
        }
    }
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            printf("%d\t", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2023, 11:10
Ответы с готовыми решениями:

Последний отрицательный элемент каждого столбца прямоугольной матрицы заменить нулем
Последний отрицательный элемент каждого столбца прямоугольной матрицы заменить нулем Проблема в...

Последний отрицательный элемент каждого столбца прямоугольной матрицы заменить нулем
Последний отрицательный элемент каждого столбца прямоугольной матрицы заменить нулем. (матрицу...

Последний отрицательный элемент каждого столбца прямоугольной матрицы заменить нулем
Задача: Последний отрицательный элемент каждого столбца прямоугольной матрицы заменить нулем ...

Заменить нулём последний отрицательный элемент каждого столбца прямоугольной матрицы
Обращение к массиву нужно делать через указатели Вот мой код: #include &lt;stdio.h&gt; #include...

Заменить минимальный элемент каждого столбца нулем
Дан двумерный массив размером n*m, заполненный случайными числами из заданного пользователем...

6
37 / 21 / 17
Регистрация: 13.04.2016
Сообщений: 106
01.01.2023, 13:45 2
Лучший ответ Сообщение было отмечено Boiycha как решение

Решение

Смотри во первых у тебя при компиляции и запуске каждый раз будет получаться одинаковый набор чисел, потому что начальное число одно и то же. Эту проблему можно обойти либо самостоятельно меняя начальное число либо использовать функцию srand() вместе с time(NULL) , которая возвращает системное время. Тогда начальное число будет инициализированно каждый раз новое и набор сгенерированных чисел будет каждый раз новый. Добавь вот эту строчку в код:
C
1
srand(time(NULL));
Во вторых что даёт тебе счётчик count? Нафиг он тебе нужен? Ну ты считаешь отрицательные числа во всей матрице окей, а потом если этих чисел меньше числа столбцов меняешь их нулями? Какой в этом смысл? У тебя же задание не в этом. Просто проверь последнюю строку (самую нижнюю) и если какие то значения в ней < 0 меняй их на нули вот и всё.
Вот так вот например:

C
1
2
3
4
5
6
7
8
9
10
 for (int i = 0; i < N; i++) // строки
       {
           for (int j = 0; j < M; j++) // столбцы
        {
            if (a[N-1][j] < 0) // последняя строка матрицы - самые нижние значения каждого из столбцов
            {
                    a[N-1][j] = 0; // заменяем их нулями
            }
        }
    }
1
0 / 0 / 0
Регистрация: 17.11.2022
Сообщений: 76
01.01.2023, 14:31  [ТС] 3
Поняла, спасибо большое!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12830 / 7567 / 1764
Регистрация: 25.07.2009
Сообщений: 13,959
01.01.2023, 23:36 4
crazykreis, зачем устраивать цикл по строкам, если нужна только последняя строка? Оно, конечно, отработает, но сделает это N раз, при чём N - 1 раз гарантированно впустую.
0
37 / 21 / 17
Регистрация: 13.04.2016
Сообщений: 106
02.01.2023, 00:30 5
easybudda, да можно и не устраивать я просто чтоб не печатать скопипастил с верхнего участка кода как оно было и не трогал)
0
2494 / 1095 / 489
Регистрация: 17.11.2018
Сообщений: 2,784
02.01.2023, 02:35 6
Цитата Сообщение от easybudda Посмотреть сообщение
зачем устраивать цикл по строкам, если нужна только последняя строка?
Если я правильно понимаю, то она тоже не нужна. Тогда цикл поиска мог бы выглядеть как-то так:
C
1
2
3
4
5
6
7
8
9
10
    for (int j = 0; j < M; j++)
    {
        int last_negative = -1;
        for (int i = 0; i < N; i++)
            if (a[i][j] < 0)
                last_negative = i;
                
        if(last_negative != -1)
            a[last_negative][j] = 0;
    }
Или, например, так:
C
1
2
3
4
5
6
7
8
9
    for( int j = 0; j < M; j++ )
    {
        int last_negative = N - 1;
        while( last_negative >= 0 && a[last_negative][j] >= 0 )
            last_negative--;
 
        if( last_negative != -1 )
            a[last_negative][j] = 0;
    }
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12830 / 7567 / 1764
Регистрация: 25.07.2009
Сообщений: 13,959
02.01.2023, 09:23 7
Цитата Сообщение от analogov net Посмотреть сообщение
Если я правильно понимаю
Да, это я по коду из 2 поста почему-то решил, что нужно проверять последний элемент в каждом столбце и, если он отрицательный, менять на 0.
0
02.01.2023, 09:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2023, 09:23
Помогаю со студенческими работами здесь

Последний отрицательный элемент каждого столбца прямоугольной матрицы замените нулем
4. Дана вещественная матрица размером н×м. Последний отрицательный элемент каждого столбца...

Последний отрицательный элемент каждого столбца матрицы заменить нулем
Дан двумерный массив. Выполнить следующее преобразование: последний отрицательный элемент каждого...

Последний отрицательный элемент каждого столбца заменить нулем
Free Pascal

Последний отрицательный элемент каждого столбца заменить нулём.
Последний отрицательный элемент каждого столбца заменить нулём.

Дан массив M(n,k). Последний отрицательный элемент каждого столбца заменить нулем
Дан массив M(n,k). Последний отрицательный элемент каждого столбца заменить нулем с#

По умолчанию последний отрицательный элемент каждого столбца массива заменить нулем
Помогите написать программу для C# Последний отрицательный элемент каждого столбца массива...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru