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

Проверить, все ли строки матрицы содержат хотя бы один нулевой элемент (найти ошибку)

18.11.2017, 18:31. Показов 2888. Ответов 5
Метки нет (Все метки)

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

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "stdafx.h"
 
void main()
{
    float mass[50][50];
    int i, j, n, m;
    do {
        printf("Vvedite koli4estvo strok <50\n");
        scanf_s("%d", &n);
    } while (n >= 50);
    do {
        printf("Vvedite koli4estvo stolbcov <50\n");
        scanf_s("%d", &m);
    } while (n >= 50);
    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            printf("Vvedite chislo mass[%d][%d] ", i, j);
            scanf_s("%f", &mass[i][j]);
        }
    }
    printf("\nNa4alnaya matrica:");
    for (i = 0; i < n; i++) {
        printf("\n");
        for (j = 0; j < m; j++) {
            printf("%f ", mass[i][j]);
        }
    }
    printf("\n");
 
 
 
 
    int nomer, k;
    int nom[50];
    for (i = 0, k=0; i < n, k < n; i++, k++) {
        nomer = 0;
        for (j = 0; j < m; j++) {
            if (mass[i][j] = 0) {
                nomer++;
            }
        }
        nom[k] = nomer;
    }
    for (k = 0; k < n; k++) {
        printf("\n");
        printf("%d ", nom[k]);
    }
    for (k = 0; k < n; k++) {
        if (nom[k] = 0) {
                for (i = 0; i < n; i++) {
                    for (j = 0; j < m; j++) {
                        if (mass[i][j] < 0) {
                            mass[i][j] = 0;
                        }
                    }
                }
        }
    }
    for (i = 0; i < n; i++) {
        printf("\n");
        for (j = 0; j < m; j++) {
            printf("%f ", mass[i][j]);
        }
    }
}

Вроде всё написал правильно и всё должно работать, но когда выводится итоговая матрица, то там везде стоят нули, хочу понять в чём проблема.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2017, 18:31
Ответы с готовыми решениями:

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

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

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

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

5
2487 / 1145 / 707
Регистрация: 25.04.2016
Сообщений: 3,287
18.11.2017, 19:01 2
Лучший ответ Сообщение было отмечено Little Crag как решение

Решение

Строка 38:
C
1
if (mass[i][j] = 0)
должно быть if (mass[i][j] == 0)

строка 49 то же самое...
1
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 17
18.11.2017, 19:05  [ТС] 3
stake-k26, Спасибо огромное, а можно узнать почему это так?
0
2487 / 1145 / 707
Регистрация: 25.04.2016
Сообщений: 3,287
18.11.2017, 19:09 4
потому что в строке происходит не сравнение значений, а присваивание.

Т.е. происходит следующее:

mass[i][j] = 0;
if (mass[i][j]) { ; }

т.е. ячейка получает нулевое значение и только потом происходит сравнение. 0 - это всегда false, поэтому само условие никогда не выоплняется, но на каждом шаге цикла происходит перезапись значений массива нулями.
1
7 / 7 / 1
Регистрация: 07.11.2017
Сообщений: 86
18.11.2017, 19:09 5
Цитата Сообщение от Little Crag Посмотреть сообщение
stake-k26, Спасибо огромное, а можно узнать почему это так?
запись в ячейку памяти это =. Сравнение на равенство с ячейкой памяти это ==.
1
2487 / 1145 / 707
Регистрация: 25.04.2016
Сообщений: 3,287
18.11.2017, 19:18 6
Попробуйте разобраться как работает этот код:

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main ()
{
    int i = 5;
    while (i)
    {
        printf("%i\n", i);
        i--;
    }
    return 0;
}
При этом не забывайте, что в си 0 - это всегда false, а любое другое значение - это всегда true.
0
18.11.2017, 19:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2017, 19:18
Помогаю со студенческими работами здесь

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

В с++ такая задача: проверить, все ли столбцы матрицы содержат хотя бы один положительный элемент.
Увожаемые люди помагите пожалуйста. Нужно решить вот такую непростую загадку: Дана матрица NxM....

Проверить, все ли столбцы матрицы содержат хотя бы один положительный элемент. Нужна блок-схема
Дана матрица MxN. Проверить, все ли столбцы матрицы содержат хотя бы один положительный элемент....

Удалить все строки матрицы, в которых есть хотя бы один нулевой элемент
Очень сильно нужна помощь,епрогу вроде бы и написал но все равно не хочет работать ошибка где-то в...


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

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