Пятница, 29 Марта 2024, 04:32

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Задание Part 4 (Самых активных ждет подарок)))
Задание Part 4
WereWolfДата: Понедельник, 25 Октября 2010, 11:05 | Сообщение # 1
частый гость
Сейчас нет на сайте
Задание: Ввести матрицу размером NxM. Память под массив выделить динамически. Найти минимальный среди элементов, лежащих выше главной диагонали.

Вот тут я опух)):

Code

#include <iostream>   
#include <iomanip>
#include <conio.h>   
#include <math.h>   
using namespace std;   

int main()      
{      
      locale::global(locale("rus"));   
   double **a,tmp;
      int i,n,m,imin,jmin,imax,j,max;     
   int j;
   cout << "Введите размер: n,m" << endl;
   cin >> n >> m;
   a = new double *[n];
   for (i=0;i<n;i++)
    a[i] = new double [m];
   for (i=0;i<n;i++)
    for (j=0;j<m;j++)
    {
     cout << "Введите a["<<i<<"]["<<j<<"]: ";
     cin >> a[i][j];
    }
    cout << "Массив А: " << endl;
    for (i=0;i<n;i++)
    {
     for (j=0;j<m;j++)
       
      cout << setw (9) << a[i][j] << " ";
      cout << endl;
     }

       
           
      getch();      
      return 0;

И то пишет что:

Quote
'int j' : redefinition
Quote
see declaration of 'j'


В мире много глюков - и с ними надо жить!!!

Сообщение отредактировал WereWolf - Понедельник, 25 Октября 2010, 13:21
lvovandДата: Понедельник, 25 Октября 2010, 11:43 | Сообщение # 2
старожил
Сейчас нет на сайте
j дважды объявил

int i,n,m,imin,jmin,imax,j,max;
int j; - эту строчку удали


Разработка и продвижение сайтов. Дизайн
WereWolfДата: Понедельник, 25 Октября 2010, 12:39 | Сообщение # 3
частый гость
Сейчас нет на сайте
ок спс
Code

#include <iostream>  
#include <iomanip>
#include <conio.h>  
#include <math.h>  
using namespace std;  

int main()     
{     
     locale::global(locale("rus"));  
  double **a,tmp;
     int i,n,m,imin,jmin,imax,j,max;    
  cout << "Введите размер: n,m" << endl;
  cin >> n >> m;
  a = new double *[n];
  for (i=0;i<n;i++)
   a[i] = new double [m];
  for (i=0;i<n;i++)
   for (j=0;j<m;j++)
   {
    cout << "Введите a["<<i<<"]["<<j<<"]: ";
    cin >> a[i][j];
   }
   cout << "Массив А: " << endl;
   for (i=0;i<n;i++)
   {
    for (j=0;j<m;j++)
     
     cout << setw (9) << a[i][j] << " ";
     cout << endl;
    }

     
         
     getch();     
     return 0;  
}

Ну вот как реализовать задание - не могу...


В мире много глюков - и с ними надо жить!!!
lvovandДата: Понедельник, 25 Октября 2010, 12:54 | Сообщение # 4
старожил
Сейчас нет на сайте
после того, как массив задан, принимаешь минимальный элемент min = a[1,0]
потом пробегаешь по массиву
for (i=0;i<n;i++)
for (j=0;j<m;j++)
и смотришь элементы у которых i>j - это будут элементы выше главной диагонали,
если a[i,j] < min, то обновляешь min
вот вроде и все


Разработка и продвижение сайтов. Дизайн
MatouДата: Понедельник, 25 Октября 2010, 13:11 | Сообщение # 5
Исходный коТ
Сейчас нет на сайте
Quote (lvovand)
после того, как массив задан, принимаешь минимальный элемент min = a[1,0] потом пробегаешь по массиву for (i=0;i<n;i++) for (j=0;j<m;j++) и смотришь элементы у которых i>j - это будут элементы выше главной диагонали, если a[i,j] < min, то обновляешь min вот вроде и все

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

Code

     double min_element = a[0][1];
     int k = 1;
     for(i = 0; i < n; ++i)
     {
      for(j = k; j < m; j++)
       if(min_element > a[i][j]) min_element = a[i][j];

    ++k;
     }

     cout << "Минимальный елемент над главной диагональю:" << min_element << endl;

Но все же есть одно но, эта программа работает только для квадратных матриц, да и понятие главная диагональ вводится только для таких матриц, а в задании указана матрица MxN. Помимо этого в конце стоит что-то непонятное. "Xt" - что это означает? Есть подозрение что это транспонирование, т.е. что-то тут еще и транспонировать надо.





Сообщение отредактировал Matou - Понедельник, 25 Октября 2010, 13:15
WereWolfДата: Понедельник, 25 Октября 2010, 13:23 | Сообщение # 6
частый гость
Сейчас нет на сайте
Нет. Транспонировать ее не надо)) Это я случай ввел когда текст вводил)))

Добавлено (25.10.2010, 13:23)
---------------------------------------------
а таким способом можно:

Code

imin=jmin=imax=jmax=0;

   for (i=0;i<n;i++)
    for (j=0;j<m;j++)
    {
     if (a[i][j] < a[imin][jmin])
     {
      imin = i;
      jmin = j;
       
      cout << "Минимальное i = " << imin << endl;
      cout << "Минимальное j = " << jmin << endl;
      }
     if (a[i][j] > a[imax][jmax])
     {
      imax = i;
      jmax = j;
      cout << "Максимальное i = " << imax << endl;
      cout << "Максимальное j = " << jmax << endl;

Ну не до конца обдумал))


В мире много глюков - и с ними надо жить!!!
MatouДата: Понедельник, 25 Октября 2010, 13:27 | Сообщение # 7
Исходный коТ
Сейчас нет на сайте
WereWolf, Можно организовать что-то наподобии, но ты будешь искать координаты максимальных и минимальных елементов, а не их значения, к тому же тут поиск идет по всему массиву а не по области выше главной диагонали.


WereWolfДата: Понедельник, 25 Октября 2010, 13:33 | Сообщение # 8
частый гость
Сейчас нет на сайте
Matou, ясно, т.е. в итоге код:
Code

#include <iostream>   
#include <iomanip>
#include <conio.h>   
#include <math.h>   
using namespace std;   

int main()      
{      
      locale::global(locale("rus"));   
       int i,n,m,imin,jmin,imax,j,jmax;     
   cout << "Введите размер: n,m" << endl;
   cin >> n >> m;
   a = new double *[n];
   for (i=0;i<n;i++)
    a[i] = new double [m];
   for (i=0;i<n;i++)
    for (j=0;j<m;j++)
    {
     cout << "Введите a["<<i<<"]["<<j<<"]: ";
     cin >> a[i][j];
    }
    cout << "Массив А: " << endl;
    for (i=0;i<n;i++)
    {
     for (j=0;j<m;j++)
       
      cout << setw (9) << a[i][j] << " ";
      cout << endl;
     }

       
       double min_element = a[0][1];   
       int k = 1;   
       for(i = 0; i < n; ++i)   
       {   
        for(j = k; j < m; j++)   
         if(min_element > a[i][j]) min_element = a[i][j];   

      ++k;   
       }   

       cout << "Минимальный элемент над главной диагональю: " << min_element << endl;   
       
           
      getch();      
      return 0;   
}

Такой ?


В мире много глюков - и с ними надо жить!!!

Сообщение отредактировал WereWolf - Понедельник, 25 Октября 2010, 13:34
MatouДата: Понедельник, 25 Октября 2010, 13:36 | Сообщение # 9
Исходный коТ
Сейчас нет на сайте
Ну да, где-то так). Можно еще бибилиотеку math.h отключить за ненадобностью.


WereWolfДата: Понедельник, 25 Октября 2010, 13:49 | Сообщение # 10
частый гость
Сейчас нет на сайте
ок... поставлю плюс через 4 дня, до этого ставил тебе :-)

В мире много глюков - и с ними надо жить!!!
Форум игроделов » Программирование » C/C++ » Задание Part 4 (Самых активных ждет подарок)))
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг