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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Al_pas
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 6
#1

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

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

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

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

Дана матрица А(7,4) Вывести все отрицательные элементы этой матрицы. Найти минимальный по модулю элемент - C++
Привет славные форумчани.. Тема программы потоковые файлы... Задача состоит в написание текста на c++ с классами. Дана матрица А(7,4)...

Все отрицательные элементы матрицы заменить числом 1 - C++
Что делать не пойму, помогите пожалуйста. На самом начальном изучении мы, так что код самый начальный и простой. Учим только строки начали....

Заменить в матрице все отрицательные элементы первой строки числом 0 - C++
прошу,помогите!!! написать следующую программу,используя указатели: дана целочисленная матрица размера 5 на 5.заменить в данной матрице все...

Найти сумму всех элементов матрицы и заменить ею все диагональные элементы этой матрицы - C++
Найти сумму всех ее элементов и заменить ею все диагональные элементы этой матрицы.

Массивы. Заменить все отрицательные элементы массива числом 0 - C++
Создайте массив А с помощью генератора случайных чисел с элементами от -20 до 10 и выведите его на экран. Замените все отрицательные...

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

В массиве заменить все отрицательные элементы на минимальный элемент, а все положительные – на максимальный - C++
В массиве из 10 целых чисел заменить все отрицательные элементы на минимальный элемент, а все положительные – на максимальный.

Заменить все четные элементы матрицы числом 0 - C++
Ввести двумерный массив целых чисел размерностью 2 на 4. Заменить все четные элементы числом 0. Буду благодарен за помощь.

Заменить все отрицательные элементы матрицы на ноль - C++
Из произвольной матрицы (3х4) составить новую матрицу ,где все отрицательные элементы будут равны 0. Не могу додуматься как написать...

Найти наибольший элемент и выбросить из матрицы строку и столбец, на пересечении которых стоит этот элемент - C++
Дан массив mxn. Найти наибольший элемент и выбросить из массива строку и столбец на пересечении которых стоит этот элемент.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.03.2012, 17:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru