0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 49
1

Определить элементы матрицы, расположенные выше главной диагонали

23.04.2011, 18:23. Показов 2008. Ответов 8
Метки нет (Все метки)

Всем доброго времени суток!
Задача: Определить те элементы, расположенные выше главной диагонали, которые больше каждого(!) из элементов, расположенных ниже главной диагонали.

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
#include <stdio.h>
#define n 5
void main(void)
{
  int x[n][n], i, j, k, t, p, u;
 
  printf ("ishodnaja matrica:\n");
  for(i=0; i<n; i++)
      for (j=0; j<n; j++)
      scanf ("%d", &x[i][j]);
 {
  FILE *fiLe_matr;
  fiLe_matr=fopen("in1.txt", "w");
  printf ("ishodnaja matrica:\n");
  fprintf (fiLe_matr, "ishodnaja matrica:\n");
  for(i=0; i<n; i++)
      {
      for (j=0; j<n; j++)
       {
       fprintf ( fiLe_matr, "%3d", x[i][j]);
       printf ("%3d  ", x[i][j]);
       }
     printf ("\n");
     fprintf (fiLe_matr, "\n");
     }
 // fclose (fiLe_matr);
 
         fprintf (fiLe_matr, "resultat: \n");
         printf ("resultat: \n");
  p=0;
  for (i=0; i<n-1; i++)
      for (j=i+1; j<n; j++)
          {
          k=1;
          u=0;
          t=0;
          while ( (k<n)&&(t==0))
                {
                while ((u<k-1)&&(t==0))
                      {
                      if (x[i][j]<=x[k][u]) t=1;
                      u++;
                      }
 
                k++;
                }
           if (t!=1)
                   {
                    fprintf (fiLe_matr, "%3d ", x[i][j]);
                    printf ("%3d ", x[i][j]);
                    p=1;
                    }
                 }
 
  if (p!=1)
          {
          printf ("net elementov udovletvor. usloviju!\n");
          fprintf (fiLe_matr, "net elementov udovletvor. usloviju!\n");
          }
     printf ("\n");
     fclose (fiLe_matr);
 
   }
}
Результат: как видно, элементы "9, 8 и 7"> каждого элемента ниже диагонали, а вот "4,5 и 6" не удовлетворяют условию... В чем косяк?
Миниатюры
Определить элементы матрицы, расположенные выше главной диагонали  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2011, 18:23
Ответы с готовыми решениями:

Матрица: Заменить нулями все элементы, расположенные на главной диагонали и выше её
Сформировать матрицу S(12,12).Вывести матрицу.Заменить нулями все элементы, расположенные на...

В квадратной матрице замените нулями все ее элементы, расположенные на главной диагонали и выше нее
Есть задание : В квадратной матрице замените нулями все ее элементы, расположенные на главной...

Заменить нулями все элементы матрицы, расположенные на главной диагонали
В файле F1 задано матрицу чисел А (12,12) заменить нулями все элементы, расположенные на главной...

Получить все нулевые элементы выше главной диагонали матрицы
Дана матрица целых чисел. Собрать все нулевые элементы выше главной диагонали (заполнение...

8
42 / 42 / 13
Регистрация: 04.01.2011
Сообщений: 125
23.04.2011, 20:44 2
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
#include<iostream>
#include<iomanip>
#define N 5
using namespace std;
int main()
{setlocale(LC_ALL,"Russian");
int a[N][N],i,j,max;
bool flag=false;
 
 
for(i=0;i<N;i++)
{cout<<"\n";
   for(j=0;j<N;j++)
   cin>>a[i][j];
}
cout<<"Вы ввели такую матрицу\n"<<endl;;
for(i=0;i<N;i++)
{cout<<"\n";
   for(j=0;j<N;j++)
       cout<<setw(3)<<a[i][j];
}
 
cout<<"\n\n";
 
max=a[1][0];
for(i=1;i<N;i++)
   for(j=0;j<i;j++)
       if(a[i][j]>max)
           max=a[i][j];
 
 
for(i=0;i<N;i++)
    for(j=i+1;j<N;j++)
        if(a[i][j]>max)
        {  cout<<a[i][j]<<" ";
                          flag=true;
                       } 
cout<<"\n\n";
if(flag==false)
cout<<"\nНет таких элементов"<<endl;
return 0;
}
1
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 49
24.04.2011, 13:01  [ТС] 3
эта прога работает только в том случае, если элементы на главной диагонали меньше максимального ниже ее. А max сравнивается с элементами главной диагонали...
0
42 / 42 / 13
Регистрация: 04.01.2011
Сообщений: 125
24.04.2011, 17:57 4
raganrok, В Вашем примере 10 лежит на главной диагонали и она больше максимального элемента, находящегося ниже главной диагонали(6)
и max(6) сравнивается с элементами выше главной диагонали
по-моему все правильно
0
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 49
24.04.2011, 18:05  [ТС] 5
Да, при этих тестовых данных, все работает правильно. Однако, если на главной диагонали есть элемент больший тех (кроме элемента [0][0]), что лежат на нижней, то программа выдаст сообщение "нет элементов удов. условию"
0
42 / 42 / 13
Регистрация: 04.01.2011
Сообщений: 125
24.04.2011, 18:16 6
raganrok,максимальный элемент 10 на главной диагонали не [0][0]
Определить элементы матрицы, расположенные выше главной диагонали
0
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 49
24.04.2011, 18:42  [ТС] 7
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
#include <stdio.h>
#include <conio.h>
#define n 5
void main(void)
{
  clrscr();
  int x[n][n], i, j, t, max;
 
  printf ("ishodnaja matrica:\n");
  for(i=0; i<n; i++)
      for (j=0; j<n; j++)
      scanf ("%d", &x[i][j]);
 {
  FILE *fiLe_matr;
  fiLe_matr=fopen("in1.txt", "w");
  printf ("ishodnaja matrica:\n");
  fprintf (fiLe_matr, "ishodnaja matrica:\n");
  for(i=0; i<n; i++)
      {
      for (j=0; j<n; j++)
       {
       fprintf ( fiLe_matr, "%3d", x[i][j]);
       printf ("%3d  ", x[i][j]);
       }
     printf ("\n");
     fprintf (fiLe_matr, "\n");
     }
 // fclose (fiLe_matr);
 
     fprintf (fiLe_matr, "resultat: \n");
     printf ("resultat: \n");
  t=0;
  max=x[1][0];
  for (i=1; i<n; i++)
      for (j=0; j<n; j++)
      if(x[i][j]>max)
         max=x[i][j];
 
      for(i=0;i<n;i++)
        for(j=i+1;j<n;j++)
              if (x[i][j]>max)
              {
              fprintf(fiLe_matr, "%3d", x[i][j]);
              printf("%3d",x[i][j]);
              t=1;
              }
 
 
  if (t==0)
      {
      printf ("net elementov udovletvor. usloviju!\n");
      fprintf (fiLe_matr, "net elementov udovletvor. usloviju!\n");
      }
     printf ("\n");
     fclose (fiLe_matr);
   }
   getch();
}
Результат: Главная диагональ состоит из элементов, которые больше максимального, т.е. они сравниваются с максимальным, а мне нужно чтобы, максимальный сравнивался только с элементами выше главной диагонали.
Миниатюры
Определить элементы матрицы, расположенные выше главной диагонали  
0
42 / 42 / 13
Регистрация: 04.01.2011
Сообщений: 125
24.04.2011, 18:49 8
По-моему у Вас вот тут ошибка:
Цитата Сообщение от raganrok Посмотреть сообщение
C++
1
2
3
max=x[1][0];
 for (i=1; i<n; i++)
 for (j=0; j<n; j++)
Должно быть так:
C++
1
for (j=0; j<i; j++)
1
0 / 0 / 0
Регистрация: 12.12.2010
Сообщений: 49
24.04.2011, 19:05  [ТС] 9
Да, и вправду(
Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2011, 19:05
Помогаю со студенческими работами здесь

Собрать все нулевые элементы матрицы выше главной диагонали
Дана матрица целых чисел. Собрать все нулевые элементы выше главной диагонали. 2 13 8 22 0 32 9...

Собрать все положительные элементы матрицы выше главной диагонали
Помогите пожалуйста с задачей: Дана матрица целых чисел. Собрать все положительные элементы масси-...

Все нулевые элементы расположены ниже главной диагонали на нечетных строках и выше главной диагонали - на четных
Добрый день. Компилирую в dev c++, язык СИ, комплируется, но после ввода размерности массива,...

Определить сумму элементов матрицы, расположенных выше главной диагонали
Определить сумму элементов матрицы размером 10 на 10, расположенных выше главной диагонали Срочно...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru