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

Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0

08.03.2012, 10:43. Показов 1892. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравтсвуйте! помогите пжл решить задачу.
Найти строку, содержащую
наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0.Матрица любая может быть,так что не судь важно ,просто не могу понять как строку найти.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2012, 10:43
Ответы с готовыми решениями:

Заменить в матрице все отрицательные элементы на максимальный элемент этой матрицы
Заменить в массиве А все отрицательные элементы на максимальный элемент этого массива.

Найти строку, содержащую минимальный элемент матрицы, и поменять в этой строке элементы 1-го и 4-го столбца
Найти строку, содержащую минимальный элемент матрицы, и поменять в этой строке элементы 1-го и 4-го...

Найти строку, содержащую минимальный элемент матрицы, и поменять в этой строке элементы 1-го и 4-го столбца
Найти строку, содержащую min элемент матрицы, и поменять в этой строке элементы 1-го и 4-го столбца...

Найти строку, содержащую min элемент матрицы, и поменять в этой строке элементы 1-го и 4-го столбца
Найти строку, содержащую min элемент матрицы, и поменять в этой строке элементы 1-го и 4-го...

7
Эксперт С++
4726 / 2547 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
08.03.2012, 10:57 2
Если матрица a[][] размером N*M уже есть то можно так:
C++
1
2
3
4
5
6
7
8
9
10
int i, j, i_max=0, j_max=0;
for(i=0; i<N; i++)
    for(j=0; j<M; j++)
        if(a[i][j]>a[i_max][j_max])
        {
            i_max=i; j_max=j;
        }
for(i=0; i<M; i++)
    if(a[i_max][i]<0)
        a[i_max][i]=0;
0
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 6
08.03.2012, 12:00  [ТС] 3
в общем такой код
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
#include "stdafx.h"
#include <stdio.h>
#include <locale.h>
#include <malloc.h>
#include <conio.h>
#include <Windows.h>
#define matrix(i,j)(*(matriza+i*m+j))
 
 
int _tmain(int argc, _TCHAR* argv[])
{ 
 char input_file[81], output_file[81];
 int j,i,n,m,k,f,i_max=0,j_max=0,a[i];
 int*matriza;
 FILE * fp,*fp1;
 setlocale(LC_ALL,"rus");
 printf("\n введите имя файла:");
 scanf("%s",input_file);//1.dat
 if((fp=fopen(input_file,"r"))==NULL)
 { printf("\n Файл не найден");
   return -1;
 } 
  k=fscanf(fp,"%d%d",&n,&m);
  if(k!=2)
  { printf("\n Неправильный формат файла");
  fclose(fp);
  return -1;
  }
  if((matriza=(int*)malloc(n*m*sizeof(int)))==NULL)
  { printf("\n Нехватает памяти");
  fclose(fp);
  return -1;
  } printf("\n Матрица в файле:");
  printf("\n  n=%d,m=%d",n,m);
  for (i=0;i<n;i++)
   {printf("\n");
    for(j=0;j<m;j++)
    { k=fscanf(fp,"%d",&f);
     if(k!=1)
     {
      printf("\n Неправильный формат файла");
      fclose(fp);
      free((void*)matriza);
      return -1 ;
     }
     printf("%d",f);
     matrix(i,j)=f;
    }
  }  
  
fclose (fp);
printf("\n");
printf("\n Для продолжения нажмите любую клавишу");
_getch();
 for(i=0; i<n; i++)
        for(j=0; j<m; j++)
                if(matrix(i,j)>matrix(i_max,j_max))
                {
                        i_max=i; j_max=j;
                }
for(i=0; i<n; i++)
        if(matrix[i_max][i]<0)
                a[i_max][i]=0;
 
    }
немного не допонял ваш код.у меня матрица с файла считывается,там можно любую размерность задать.
0
Эксперт С++
4726 / 2547 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
08.03.2012, 12:13 4
Цитата Сообщение от Al_pas Посмотреть сообщение
немного не допонял ваш код.у меня матрица с файла считывается,там можно любую размерность задать.
по моему все поняли и даже использовали нужный момент:

Цитата Сообщение от Al_pas Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
for(i=0; i<n; i++)
 for(j=0; j<m; j++)
 if(matrix(i,j)>matrix(i_max,j_max))
 {
 i_max=i; j_max=j;
 }
for(i=0; i<n; i++)
 if(matrix[i_max][i]<0)
 a[i_max][i]=0;
}
только не совсем правильно:
C++
1
2
for(i=0; i<n; i++)
 if(matrix[i_max][i]<0)
заменить на:
C++
1
2
for(i=0; i<m; i++)
 if(matrix[i_max][i]<0)
0
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 6
08.03.2012, 12:57  [ТС] 5
C++
1
2
for(i=0; i<n; i++)
 if(matrix[i_max][i]<0)
a[i_max][i]=0;[/CPP]
почему то в последней строчке пишет что матрик не объявлений идентификатор , и не понимаю зачем здесь a[i_max][i],если у нас размерность матрицы #define matrix(i,j)(*(matriza+i*m+j)), к тому же он его тоже не видет.
0
Эксперт С++
4726 / 2547 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
08.03.2012, 13:08 6
Цитата Сообщение от valeriikozlov Посмотреть сообщение
C++
1
a[i_max][i]=0;
нужно замеить на
C++
1
matrix[i_max][i]=0;
1
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 6
08.03.2012, 13:28  [ТС] 7
C++
1
 if (matrix[i_max][i]<0)
все равно подчеркивает matrix,не могу понять из-за чего
0
Эксперт С++
4726 / 2547 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
08.03.2012, 17:10 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
65
66
67
68
69
70
71
72
73
#include <locale.h>
#include <malloc.h>
#include <conio.h>
#include <Windows.h>
#define matrix(i,j)(*(matriza+i*m+j))
 
 
int _tmain(int argc, _TCHAR* argv[])
{ 
 char input_file[81], output_file[81];
 int j,i,n,m,k,f,i_max=0,j_max=0;
 int*matriza;
 FILE * fp,*fp1;
 setlocale(LC_ALL,"rus");
 printf("\n введите имя файла:");
 scanf("%s",input_file);//1.dat
 if((fp=fopen(input_file,"r"))==NULL)
 { printf("\n Файл не найден");
   return -1;
 } 
  k=fscanf(fp,"%d%d",&n,&m);
  if(k!=2)
  { printf("\n Неправильный формат файла");
  fclose(fp);
  return -1;
  }
  if((matriza=(int*)malloc(n*m*sizeof(int)))==NULL)
  { printf("\n Нехватает памяти");
  fclose(fp);
  return -1;
  } printf("\n Матрица в файле:");
  printf("\n  n=%d,m=%d",n,m);
  for (i=0;i<n;i++)
   {
      printf("\n");
    for(j=0;j<m;j++)
        { k=fscanf(fp,"%d",&f);
         if(k!=1)
         {
          printf("\n Неправильный формат файла");
          fclose(fp);
          free((void*)matriza);
          return -1 ;
         }
         printf("%d ",f);
         matrix(i,j)=f;
        }
  }
   
  
fclose (fp);
printf("\n");
printf("\n Для продолжения нажмите любую клавишу");
 for(i=0; i<n; i++)
        for(j=0; j<m; j++)
                if(matrix(i,j)>matrix(i_max,j_max))
                {
                        i_max=i; j_max=j;
                }
for(i=0; i<m; i++)
        if(matrix(i_max,i)<0)
                matrix(i_max,i)=0;
 
printf("\n Преобразованная матрица\n");
 for(i=0; i<n; i++)
 {
        for(j=0; j<m; j++)
            printf("%d ", matrix(i, j));
        printf("\n");
 }
_getch();
return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2012, 17:10
Помогаю со студенческими работами здесь

Поделить все элементы каждой строки матрицы на наибольший по модулю элемент этой строки
массив размерностью m на n.поделить все элементы каждой строки на наибольший по модулю элемент этой...

Найти наибольший из положительных элементов матрицы и заменить этим числом все элементы матрицы
5)Найти наибольший из положительных элементов матрицы и заменить этим числом все элементы матрицы...

Найти наибольший из положительных элементов матрицы и заменить этим числом все элементы матрицы на обратной диагонали.
Найти наибольший из положительных элементов матрицы и заменить этим числом все элементы матрицы на...

Найти наибольший элемент среди элементов диагонали и заменить им все отрицательные элементы
в матрице А размерностью 5*5 найти наибольший элемент среди элементов диагонали и заменить им все...


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

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

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