Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Olya_
1

Обнулить отрицательные элементы в строке матрицы, в которой находится максимальный элемент

26.12.2010, 18:14. Показов 1127. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите пожалуйста, в двумерном массиве нужно обнулить отрицательные элементы в строке, в которой находится максимальный элемент. часть сделала, а дальше не знаю как
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
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main(int argc,char *argv[])
{int n,m,i,j,max_j,max;
char buffer[20];
double matrix[20][20];
int Kol_vo_Strok,Kol_vo_Stolb;
}
if (strcmp(argv[3], "rand")==0)//заполнение через random
{    for (i=1; i<=Kol_vo_Strok; i++)
    {
     for (j=1; j<=Kol_vo_Stolb; j++)     
         matrix[i][j]=rand()%101-50; }   
 }
else 
if (strcmp(argv[3], "ruch")==0)   
 { printf("Введите элементы:");    
for (i=1; i<=Kol_vo_Strok; i++)   
{
     
for (j=1; j<=Kol_vo_Stolb; j++)
     
{ 
             
fgets(buffer,10,stdin);            
 matrix[i][j]=atoi(buffer);  
}    
 }
     
}
puts("Исходная матрица:");
for (i=1; i<=Kol_vo_Strok; i++)
{  
for (j=1; j<=Kol_vo_Stolb; j++)  
ptintf("%d ", matrix[i][j]);  
 }
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2010, 18:14
Ответы с готовыми решениями:

Обнулить все элементы строки и столбца матрицы, на пересечении которых находится максимальный элемент матрицы
Определить максимальный элемент в произвольно заданной матрице Z размером m x n и обнулить все...

Все элементы строки матрицы на пересечении которой находится максимальный элемент умножить вдвое
3)Дана матрица A(N, N), состоящая из случайных элеметов. Все элементы строки и столбцы матрицы на...

Поменять местами строку , в которой находится максимальный элемент со строкой, где находится минимальный элемент матрицы
Дана целочисленная матрица А размером N, где N вводится с клавиатуры. Поменять местами строку , в...

Обнулить элементы строки, в которой находится минимальный элемент
Дана целочисленная квадратная матрица размера n. Найти максимальный элемент, минимальный элемент из...

15
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
26.12.2010, 19:27 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
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "iostream"
#include "string"
using namespace std;
const int n=5;
void inp(int x[][n]);
void calc(int x[][n]);
void out(int x[][n]);
 
void main()
{
    int x[n][n];
    inp(x);
    cout<<"BEFORE"<<endl;
    out(x);
    calc(x);
    cout<<"AFTER"<<endl;
    out(x);
    
}
 
void inp(int x[][n])
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            x[i][j]=rand()%20-10;
}   
 
void calc(int x[][n])
{
    int max=x[0][0];
    int k=0;
    for(int i=0;i<n;i++)//max
        for(int j=0;j<n;j++)
            if(x[i][j]>max)
            {
                max=x[i][j];
                k=i;
            }
 
            for(int i=0;i<n;i++)//otricatelnie
                if(x[k][i]<0)
                    x[k][i]=0;
}
 
void out(int x[][n])
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<x[i][j]<<" ";
        cout<<endl;
    }
 
    cout<<endl<<endl;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
26.12.2010, 19:36 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int * max_element(int * arr, size_t cnt){
    return ( cnt < 2 ) ? arr : ( *arr < *(arr + cnt - 1) ) ? max_element(arr + 1, cnt - 1) : max_element(arr, cnt - 1);
}
 
void dump_array(int * arr, size_t cnt, int width){
    while ( cnt-- )
        printf("%*d%c", width, *arr++, ( cnt ) ? ' ' : '\n');
}
 
void dump_matrix(int ** matr, size_t rows, size_t columns, int width){
    while ( rows-- )
        dump_array(*matr++, columns, width);
}
 
void fill_array(int * arr, size_t cnt, int lo, int hi){
    while ( cnt-- )
        *arr++ = rand() % (hi - lo + 1) + lo;
}
 
void fill_matrix(int ** matr, size_t rows, size_t columns, int lo, int hi){
    while ( rows-- )
        fill_array(*matr++, columns, lo, hi);
}
 
#define LOW (-99)
#define HIGH 99
#define WIDTH 4
 
int main(void){
    int ** matrix, * maxInRow, * pMax;
    size_t rows, columns, i, j;
    
    printf("Rows: ");
    scanf("%u", &rows);
    printf("Columns: ");
    scanf("%u", &columns);
    
    if ( ( matrix = (int**)malloc(sizeof(int*) * rows) ) == NULL ){
        perror("Matrix rows");
        exit(1);
    }
    for ( i = 0; i < rows; ++i ){
        if ( ( matrix[i] = (int*)malloc(sizeof(int) * columns) ) == NULL ){
            perror("Matrix columns");
            free(matrix);
            exit(1);
        }
    }
    if ( ( maxInRow = (int*)malloc(sizeof(int) * rows) ) == NULL ){
        perror("Max values array");
        for ( i = 0; i < rows; ++i )
            free(matrix[i]);
        free(matrix);
        exit(1);
    }
    
    srand(time(NULL));
    fill_matrix(matrix, rows, columns, LOW, HIGH);
    printf("\nMatrix:\n");
    dump_matrix(matrix, rows, columns, WIDTH);
    
    for ( i = 0; i < rows; ++i )
        maxInRow[i] = *max_element(matrix[i], columns);
    pMax = max_element(maxInRow, rows);
    printf("\nThe maximum value (%d) placed in row #%d\n", *pMax, pMax - maxInRow + 1);
    i = pMax - maxInRow;
    for ( j = 0; j < columns; ++j )
        if ( matrix[i][j] < 0 )
            matrix[i][j] = 0;
    
    printf("\nUpdated matrix:\n");
    dump_matrix(matrix, rows, columns, WIDTH);
    
    for ( i = 0; i < rows; ++i )
        free(matrix[i]);
    free(matrix);
    free(maxInRow);
    
    exit(0);
}
0
4 / 4 / 1
Регистрация: 23.12.2010
Сообщений: 27
26.12.2010, 19:52 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <cstdlib>
#include <time.h>
#include <iostream>
#include <iomanip>
using namespace std;
 
int main(int argc, char** argv) {
    srand( time( NULL ) );
    int n, m, k, s, x = 0, y = 0, max = -101;
    cout << "Введите количество строк - "; cin >> n;
    cout << "Введите количество столбцов - "; cin >> m;
    int a[n][m];
    for ( int i = 0; i < n; i++ ) {
        cout << "\n";
        for ( int j = 0; j < m; j++ ) {
            a[i][j] = rand()%100 - rand()%100;          //создаем массив, используя случайные числа от -100 до 100
            cout << setw(4) << a[i][j] << " ";          //контрольный вывод массива
        }
    }
    for ( int i = 0; i < n; i++ ) {
        for ( int j = 0; j < m; j++ ) {
            if (a[i][j] > max) {
                max = a[i][j];                      //ищем максимальный элемент массива
                k = i;                              //записываем строку в переменную k
                s = j;                              //записываем столбец в переменную s
            }
        }
    }
    cout << "\n\nМаксимальный элемент массива = " << max << endl;
    cout << "Строка с максимальным элементом - " << k << endl;
    for ( int j = 0; j < m; j++ ) {
        if ( j != s && a[k][j] < 0 ) a[k][j] = 0;                      //обнуляем элементы строки, кроме максимального элемента
    }
    for ( int i = 0; i < n; i++ ) {
        cout << "\n";
        for ( int j = 0; j < m; j++ ) {
            cout << setw(4) << a[i][j] << " ";          //контрольный вывод массива
        }
 
    }
    cout << "\n";
    return 0;
}
более примитивный вариант
1
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
26.12.2010, 19:56 5
Цитата Сообщение от abyr Посмотреть сообщение
int n, m, k, s, x = 0, y = 0, max = -101; cout << "Введите количество строк - "; cin >> n; cout << "Введите количество столбцов - "; cin >> m; int a[n][m];
хмм....может вы забыли объявить как дин.массив?...или же размер массива объявить как const
0
4 / 4 / 1
Регистрация: 23.12.2010
Сообщений: 27
26.12.2010, 20:01 6
если вместо
C++
1
int n, m;
, написать
C++
1
const int n, m;
, решит проблему?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
26.12.2010, 20:05 7
Цитата Сообщение от abyr Посмотреть сообщение
решит проблему?
Нет, компилироваться не будет. Им тогда сразу нужно значения присваивать, а не с клавы вводить.
0
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
26.12.2010, 20:07 8
Цитата Сообщение от abyr Посмотреть сообщение
int n, m, k, s, x = 0, y = 0, max = -101; cout << "Введите количество строк - "; cin >> n; cout << "Введите количество столбцов - "; cin >> m; int a[n][m];
без ввода размера
Цитата Сообщение от abyr Посмотреть сообщение
max = -101
почему макс не присвоить первый элемент массива?
Цитата Сообщение от abyr Посмотреть сообщение
s = j; //записываем столбец в переменную s
это лишнее
Цитата Сообщение от abyr Посмотреть сообщение
j != s
?
0
4 / 4 / 1
Регистрация: 23.12.2010
Сообщений: 27
26.12.2010, 20:11 9
странно, у меня компилятор пропустил этот код без ошибок
0
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
26.12.2010, 20:12 10
Цитата Сообщение от abyr Посмотреть сообщение
странно, у меня компилятор пропустил этот код без ошибок
?????????O_O
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
26.12.2010, 20:17 11
Цитата Сообщение от abyr Посмотреть сообщение
у меня компилятор пропустил этот код без ошибок
C++
1
2
3
4
5
6
...
const int n, m;
...
cin >> n;
...
cin >>m;
Ничего не путаю? Это что за чудо-компилятор?
1
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
26.12.2010, 20:36 12
или же
C++
1
2
3
4
5
6
int n,m;
...
cin>>m;
...
cin>>n;
int x[n][m];
?
1
4 / 4 / 1
Регистрация: 23.12.2010
Сообщений: 27
26.12.2010, 20:50 13
тогда сделаем динамически. меняем
C++
1
 int a[n][m];
на
C++
1
2
    int **a = new int*[n];
    for (int i = 0; i < m; i++) a[i] = new int[m];
с этим согласны?

я пользуюсь NetBeans IDE 6.9.1 + gcc (g++)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
26.12.2010, 20:54 14
Цитата Сообщение от abyr Посмотреть сообщение
с этим согласны?
не-а!
Цитата Сообщение от abyr Посмотреть сообщение
C++
1
for (int i = 0; i < m; i++) a[i] = new int[m];
C++
1
for (int i = 0; i < n; i++) a[i] = new int[m];
0
4 / 4 / 1
Регистрация: 23.12.2010
Сообщений: 27
26.12.2010, 20:57 15
ясно. это опечатка.
0
Olya_
26.12.2010, 21:07 16
большое спасибо за помощь) помогло)
26.12.2010, 21:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2010, 21:07
Помогаю со студенческими работами здесь

Обнулить строку и столбец матрицы, на пересечении которых находится её максимальный элемент
Привет,всем) Дана матрица размером mxn. Обнулить строку и столбец матрицы, на пересечении которых...

Обнулить строку и столбец матрицы, на пересечении которых находится её максимальный элемент
Не мог бы кто-нибудь помочь переписать такой код только для VBA пожалуйста Var x: Array of...

Определить максимальный элемент в матрице и обнулить элементы строки и столбца, на пересечении которых он находится
Решите, пожалуйста. Я просто не понимаю ничего... Добавлено через 36 минут Определить...

Заменить элементы строки, в которой находится максимальный элемент, на элементы того же столбца
1.Решение на листке. 2.Составить программу в Паскаль-ABC 3.Составить блок схему к программе. ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru