Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Al_pas
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 6
08.03.2012, 10:43     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0 #1
Здравтсвуйте! помогите пжл решить задачу.
Найти строку, содержащую
наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0.Матрица любая может быть,так что не судь важно ,просто не могу понять как строку найти.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2012, 10:43     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0
Посмотрите здесь:

C++ Дан двумерный массив, вычислить произведение отрицательных элементов, заменить этим числом элементы второй строки матрицы
Массивы. Заменить все отрицательные элементы массива числом 0 C++
Дана матрица А(7,4) Вывести все отрицательные элементы этой матрицы. Найти минимальный по модулю элемент C++
C++ В матрице поменять местами строку, содержащую наибольший элемент, со строкой, содержащей наименьший
C++ Найти наибольший элемент и выбросить из матрицы строку и столбец, на пересечении которых стоит этот элемент
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.03.2012, 10:57     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0 #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;
Al_pas
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 6
08.03.2012, 12:00  [ТС]     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0 #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;
 
    }
немного не допонял ваш код.у меня матрица с файла считывается,там можно любую размерность задать.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.03.2012, 12:13     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0 #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)
Al_pas
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 6
08.03.2012, 12:57  [ТС]     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0 #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)), к тому же он его тоже не видет.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.03.2012, 13:08     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0 #6
Цитата Сообщение от valeriikozlov Посмотреть сообщение
C++
1
a[i_max][i]=0;
нужно замеить на
C++
1
matrix[i_max][i]=0;
Al_pas
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 6
08.03.2012, 13:28  [ТС]     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0 #7
C++
1
 if (matrix[i_max][i]<0)
все равно подчеркивает matrix,не могу понять из-за чего
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2012, 17:10     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.03.2012, 17:10     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0 #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;
}
Yandex
Объявления
08.03.2012, 17:10     Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0
Ответ Создать тему
Опции темы

Текущее время: 04:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru