| 
				
				Задание 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 дня, до этого ставил тебе :-)
  В мире много глюков - и с ними надо жить!!!
 |  
| 
 | 
 |    |     
		
		 
 |