Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2011, 23:03   #1
svim
 
Регистрация: 08.03.2011
Сообщений: 8
По умолчанию Двумерный массив(матрица)

Вообщем задание таково.
Есть матрица
Код:
    
               A1                 A2              A3
E1            240                -20             30

E2            500                -1                0

E3             22                 20               46
Реализую двумерный массив
mas[3][3]

Заполняю его значениями. Получаю матрицу с числами. Затем задание, вычислить из строки E1 наименьшее число.
Вот пример того как реализовал.
Код:
#include <iostream>
using namespace std;

int main()
{
	
  const int N = 3;
  int mas[N][N], min_value = 0;
 
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      cin >> mas[i][j]; 
    }
 cout << "\n";
}

  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      cout << mas[i][j] << " "; 
    }
 cout << "\n";

}
  for(int i = 0; i < N; i++) 
	if(min_value < mas[0][i]) min_value = mas[0][i];
	cout << min_value;
  
  	return 0;
}
Но, последний цикл выполняет работу не правильно. Неполучаеться подсчитать наименьшее значение. Могли-бы пожалуйста подсказать, в чём ошибка.

Последний раз редактировалось svim; 08.03.2011 в 23:06.
svim вне форума Ответить с цитированием
Старый 08.03.2011, 23:24   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
последний цикл выполняет работу не правильно
Можно подробнее?

ЗЫ Кстати, вот это
Код:
cout << mas[i][j] << " ";
можно заменить на
Код:
cout << mas[i][j] << "\t";
Выравнивание по табуляторам выглядит аккуратнее... Или, если не нравится, задай ширину поля при помощи setw().
Хотя, конечно, на правильность работы это не повлияет -)
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062

Последний раз редактировалось Mandrivnyk; 08.03.2011 в 23:32.
Mandrivnyk вне форума Ответить с цитированием
Старый 08.03.2011, 23:43   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

в принципе вот код:
Код:
int main(int argc, char* argv[])
{
        int Matrix[3][3];
        int Min_Element=0;
                for(int i=0;i<3;i++)
                {
                        for(int j=0;j<3;j++)
                        {
                                cout<<"Enter matrix["<<i<<"]["<<j<<"]= ";
                                cin>>Matrix[i][j];
                        }
                }
        for(int i=0;i<3;i++)
        {
                for(int j=0;j<3;j++)
                {
                        cout<<Matrix[i][j]<<"\t";
                }
                cout<<"\n";
        }
        Min_Element=Matrix[0][0];
                for(int i=0;i<3;i++)
                {
                        if(Matrix[0][i] < Min_Element) Min_Element=Matrix[0][i];
                }
        cout<<"Min elem: "<<Min_Element<<endl;
        system("pause>>void");
        return 0;
}
а ошибка у тебя в следующем:
Код:
for(int i = 0; i < N; i++) 
	if(min_value < mas[0][i]) min_value = mas[0][i];
Не экономь на операторских скобках, так как у тебя прошел цикл, но условие не выполнилось, либо сделай тогда так:
Код:
for(int i = 0; i < N; i++) if(min_value < mas[0][i]) min_value = mas[0][i];
CodeNOT вне форума Ответить с цитированием
Старый 09.03.2011, 01:26   #4
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Цитата:
Сообщение от CodeNOT Посмотреть сообщение
а ошибка у тебя в следующем:
Код:
for(int i = 0; i < N; i++) 
	if(min_value < mas[0][i]) min_value = mas[0][i];
Не экономь на операторских скобках, так как у тебя прошел цикл, но условие не выполнилось, либо сделай тогда так:
Код:
for(int i = 0; i < N; i++) if(min_value < mas[0][i]) min_value = mas[0][i];
простите это что?

ps: проверил код - работает, автор отпишись?!
onewho вне форума Ответить с цитированием
Старый 09.03.2011, 06:03   #5
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Цитата:
Сообщение от svim Посмотреть сообщение
Но, последний цикл выполняет работу не правильно.
да верно не правильно...,
Код:
min_value = 0
это ошибка номер 1, так надобно...
Код:
min_value = a[0][0]
Код:
if(min_value < mas[0][i]) min_value = mas[0][i];
а мне казалось вам наименьший элемент нужен заменяем условие поиска на:
Код:
if(min_value > mas[0][i]) min_value = mas[0][i];

Последний раз редактировалось Летучий_СкилетиК; 09.03.2011 в 06:05.
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 09.03.2011, 06:25   #6
svim
 
Регистрация: 08.03.2011
Сообщений: 8
По умолчанию

Разобрался, большое спасибо за помощь.
ps: модератора прошу не закрывать тему, т.к. в ближайшее время могут возникнуть еще вопросы по данной теме.
svim вне форума Ответить с цитированием
Старый 09.03.2011, 21:21   #7
svim
 
Регистрация: 08.03.2011
Сообщений: 8
По умолчанию

Так, теперь подвис вот с чем. Нужно сделать, чтобы выводилось минимальное значение каждой строки, а не только первой. Представляю себя это так, что после for и просмотра всех элементов массива, и выборки наименьшего из первой строки, индекс первого, увеличивается на еденицу. Т.е. mas[N+1][i]. Затем выполняеться проверка, как и в первом случае, пока не найдеться минимальной значение в строке 2 и т.д.
Как пытаюсь реализовать.
Код:
int c = 0;
for(int i = 0; i < N; i++) {
      for(int a = 0; a < N; a++)
         if(min_value > mas[c][a]) min_value = mas[c][a];
	        cout << " Мин. значение строки " << ++b << " : "<< min_value << "\n";
	        c = c + 1; 
 }
В результате:
заполняю массив 1,2,3...9
На выходе получаю
Мин. знач. строки 1 : 1
Мин. знач. строки 2 : 1
Мин. знач. строки 3 : 1
В итоге, массив продолжает прогонять первую строку.
Смотрю хоть в правильную сторону?
Могли бы пожалуйста, подсказать сам "механизм перехода" который мне необходим.

Последний раз редактировалось svim; 09.03.2011 в 21:28.
svim вне форума Ответить с цитированием
Старый 09.03.2011, 21:44   #8
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Допустим вот пример быдло кода(извини если что):
Код:
int main(int argc, char* argv[])
{
        int Matrix[3][3];
        int Min_Element=0,n=0;
                for(int i=0;i<3;i++)
                {
                        for(int j=0;j<3;j++)
                        {
                                cout<<"Matrix["<<i<<"]["<<j<<"]= ";
                                cin>>Matrix[i][j];
                        }
                }
                for(int i=0;i<3;i++)
                {
                        for(int j=0;j<3;j++)
                        {
                                cout<<Matrix[i][j]<<"\t";
                        }
                        cout<<endl;
                }

                        for(int i=0;i<3;i++)
                        {
                               Min_Element=Matrix[i][n];
                                for(int j=0;j<3;j++)
                                {
                                        if(Min_Element>Matrix[i][j])
                                        {
                                                Min_Element=Matrix[i][j];
                                        }
                                }
                                cout<<"Min element in "<<n<<" line = "<<Min_Element<<endl;
                                        if(n<3)
                                        {
                                                n++;
                                        }
                        }
                system("pause");
        return 0;
}
И что касается механизма, я завел новую переменную n которая как раз таки отвечает за переход на следующую строку, если ты строишь сложные циклы(т.е. цикл в цикле), которые в основном используются для работы с матрицами, то рассуждай так, что у тебя сначала полностью пройдет цикл который внутри, потом у тебя измениться значение счетчика i на единицу, и снова повториться цикл с счетчиком j)
извините, но плохо я объясняю)!
CodeNOT вне форума Ответить с цитированием
Старый 10.03.2011, 13:15   #9
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

deleted...
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный массив! Snowwa Паскаль, Turbo Pascal, PascalABC.NET 3 18.12.2010 14:11
Двумерный массив! Henkel Помощь студентам 1 14.12.2010 19:49
Двумерный массив (матрица) Mizantrop Помощь студентам 7 21.03.2010 10:38
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
Двумерный массив Wi1D Помощь студентам 12 10.12.2008 00:55