Форум программистов, компьютерный форум CyberForum.ru

Замена значения в матрице. Работает через раз. - C++

Войти
Регистрация
Восстановить пароль
 
velikoross
Сообщений: n/a
30.05.2010, 17:38     Замена значения в матрице. Работает через раз. #1
Задание: Составить программу на языке С++.В матрице размерности 10 на 6 найти номер первого из столбцов, не содержащих ни одного из отрицательных элементов. В каждой второй строке заменить минимальный элемент нулём. Определить среднее арифметическое отрицательных элементов каждого столбца.
Вот, что у меня получилось:
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <time.h>
#include <iomanip>
 
using namespace std;
 
      char* _(const char* str)
      {
      char* buffer = new char[strlen(str)];
            CharToOemA(str, buffer);
            return buffer;
      }
 
int main(int argc, char *argv[])
{srand((unsigned)time(NULL));
int M[10][6],i,j,plus,min,minn,chet,stlb;
float sarif,kotr;
for (i=0;i<10;i++)            //Заполняем массив
{for (j=0;j<6; j++)
    {M[i][j]=rand()%50-8;
    cout<<setw(4)<<M[i][j];
    }
cout<<endl;
}
 
for (j=0;j<6;j++)               //Перебираем массив по столбцам, ищем первый столбец без отрицательных элементов
    {
    for (i=0;i<10;i++)
         {plus=0;
         if (M[i][j]>=0) plus=1;
         else  break;
         }
       if (plus==1) {
                  j++;
                  cout<<endl<< _("Первый столбец без отрицательных элементов ")<<j<<endl;
                  break;
                  }
    }
if (plus==0)
{
cout<<endl;
cout<< _("Нет столбцов без отрицательных значений.")<<endl;
}
for (i=0;i<10;i++)              //Перебираем массив по строкам, в чётных строках заменяем минимальное значение на 0.
    {chet=i%2;
    min=M[i][0];
    for (j=0;j<6;j++)
        {if (chet!=0)
            {if (M[i][j]<min)
                {min=M[i][j];
                minn=j;
                }         
            }
        }
    if (chet!=0) M[i][minn]=0;  
    }
cout<<endl;
for (i=0;i<10;i++)            //Демонстрируем подмену
{for (j=0;j<6; j++)
    {cout<<setw(4)<<M[i][j];
    }
cout<<endl;
}
for (j=0;j<6;j++)              //Перебираем массив по столбцам, ищем среднее арифметическое отрицательных элементов столбца
    {
    sarif=0;
    kotr=0;
    stlb=1;
    for (i=0;i<10;i++)
         if (M[i][j]<0) 
            {
            sarif+=M[i][j]; kotr++;
            }
    if (kotr>0)
        {
        cout<<endl;
        stlb+=j;                                 // Почему не работает stlb=j++?
        sarif/=kotr;
        cout<< _("Среднее арифметическое отрицательных элементов ")<<stlb<< _(" столбца равно ")<<sarif;
        }                
    }
cout<<endl<<endl<< _("Нажмите любую клавишу..."); getch();
return 0;
}
Проблема в куске начинающемся с комментария "//Перебираем массив по строкам, в чётных строках заменяем минимальное значение на 0."
Работает не предсказуемо. То правильно заменяет, то меняет не наименьшее значение, а любое другое. Работаю в wxDev-C++. Помогите разобраться в чём дело. Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2010, 17:38     Замена значения в матрице. Работает через раз.
Посмотрите здесь:

C++ В целочисленной матрице определить элемент, который повторяется максимальное число раз
Замена в матрице элементов, меньших 5 на 111 C++
C++ Поиск максимального и минимального значения в матрице
C++ cin.getline работает через раз
Замена елементов в матрице C++
Присвоение значения элементов в матрице C++
C++ Для каждого элемента вектора определить, сколько раз он встречается в матрице
C++ Определить четные значения в матрице
В матрице 3 х 3 найти max и min значения C++
C++ Замена элементов в матрице
C++ Замена строки на столбец в матрице
C++ Замена значения в массиве

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
31.05.2010, 17:29     Замена значения в матрице. Работает через раз. #2
У вас minn присваивается какое-то значение, только если есть элемент меньше первого во данной строке, а если этот минимальный элемент 0-й... у вас значение minn остается с прошлого цикла...
там, где вы присваиваете
C++
1
2
  min=M[i][0];
minn=0;
надо так. А вообще лучше так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    for (i=1;i<10;i+=2)              //Перебираем массив по строкам, в чётных строках заменяем минимальное значение на 0.
    {
        min=M[i][0];
        minn=0;
        for (j=0;j<6;j++)
            if (M[i][j]<min)
            {
                min=M[i][j];
                minn=j;
            }         
        M[i][minn]=0;  
    }
Yandex
Объявления
31.05.2010, 17:29     Замена значения в матрице. Работает через раз.
Ответ Создать тему
Опции темы

Текущее время: 16:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru