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

Как заменить все нулевые элементы на произведение элементов строки, где находится минимум - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Fragrance
0 / 0 / 0
Регистрация: 12.01.2011
Сообщений: 14
27.01.2011, 17:47     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #1
Найти минимальный элемент в матрице и заменить все нулевые элементы, имеющиеся в матрице, на значение произведения элементов той строки, где находится минимум.Вот программа для поиска минимального элемента:
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#define S 10
using namespace std;
 
void _tmain()
{double B[S], Bmin;
int num;
int sum;
sum=0;
cout<<"vvedite "<<S<<" chisel"<<endl;
for (int i=0;i<S;i++)
{cin>>B[i];
Bmin=B[0];
num=0;}
for (int i=0; i<S;i++)
if (B[i]<Bmin)
{Bmin=B[i];
num=7;
}
cout<<"min element= "<<Bmin<<" index "<<num;
_getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2011, 17:47     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум
Посмотрите здесь:

C++ Дан двумерный массив, вычислить произведение отрицательных элементов, заменить этим числом элементы второй строки матрицы
Задана матрица целых чисел A(n,n). Все элементы столбца, с наибольшим номером, среди тех, где находится более двух простых элементов, заменить разно C++
Все отрицательные элементы массива уменьшить в двое, а все нулевые элементы заменить на... C++
В матрице A(m,n) все не нулевые элементы заменить обратными по величине и противоположными по знаку C++
В одномерном массиве B (n) заменить нулевые элементы на значение индексов этих элементов, где 0 <= n <= 80. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
27.01.2011, 19:43     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #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
#include<iostream>
#include<algorithm>
#include<iomanip>
#define N 3
#define M 4
using namespace std;
 
int main(){
    int mat[N][M]={{-1,5,3,0},{3,-5,2,3},{0,5,-4,13}};
    int imin=0, jmin=0;
    for(int i=0; i<N; i++){
        for(int j=0; j<M; j++){
            if(mat[i][j]<mat[imin][jmin]){
                imin=i;
                jmin=j;
            }
        }
    }
    int prod=accumulate(*(mat+imin), *(mat+imin)+M, 1, multiplies<int>());
    cout<<"prod= "<<prod<<"\nmin= "<<mat[imin][jmin]<<"\n\n";
    int counter=0;
    for_each(*mat, *mat+N*M, [&](int& x){
             if(x==0) x=prod;
             cout<<setw(4)<<x;
             if(!(++counter%M)) cout<<"\n\n";
             });
}
Qwerty_coder
29 / 29 / 2
Регистрация: 14.12.2009
Сообщений: 79
27.01.2011, 19:51     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #3
Fragrance,

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
#include <iostream>
 
int main()
{
    int min_elem = 0, min_ind = 0, val = 1;
 
    int arr[5][5] = {0, -5, 4, 0, 1,
                    9, 55, 0, -3, 8,
                    3, 0, 66, 12, 1,
                    -11, 2, 1, -1, 3,
                    0, 3, 7, -2, 0};
 
    for(size_t i = 0; i < 5; i++)
    {
        for(size_t j = 0; j < 5; j++)
        {
            if(arr[i][j] < min_elem)
            {
                min_elem = arr[i][j];
                min_ind = i;
            }
        }
    }
 
    std::cout << "Min. elem = " << min_elem << std::endl;
    std::cout << "String index = " << min_ind << std::endl;
 
    for(size_t j = 0; j < 5; j++)
        val *= arr[min_ind][j];
 
    std::cout << "Multiplication = " << val << std::endl;
 
    for(size_t i = 0; i < 5; i++)
    {
        for(size_t j = 0; j < 5; j++)
        {
            if(arr[i][j] == 0) arr[i][j] = val;
            std::cout << arr[i][j] << " ";
        }
        std::cout << std::endl;
    }
 
    system("pause");
    return 0;
}
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
27.01.2011, 20:04     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #4
Qwerty_coder, если в матрице ни одного отрицательного элемента, то тело условия
C++
1
2
3
4
5
if(arr[i][j] < min_elem)
                        {
                                min_elem = arr[i][j];
                                min_ind = i;
                        }
никогда не выполнится
Qwerty_coder
29 / 29 / 2
Регистрация: 14.12.2009
Сообщений: 79
27.01.2011, 20:07     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #5
igorrr37, блин, а ведь правда

st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
27.01.2011, 20:08     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #6
igorrr37,
Цитата Сообщение от igorrr37 Посмотреть сообщение
если в матрице ни одного отрицательного элемента,
то задача сводится к замени нули нулями
Fragrance
0 / 0 / 0
Регистрация: 12.01.2011
Сообщений: 14
27.01.2011, 20:12  [ТС]     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #7
А можно написать код попроще?Такую, как программа для поиска минимального элемента).С помощью таких циклов, как for,while,do-while,if.
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
27.01.2011, 20:17     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #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
#include <iostream>
int main()
{
int min_elem = 0, min_ind = 0, val = 1;
int arr[5][5] = {0, -5, 4, 0, 1, 9, 55, 0, -3, 8,3, 0, 66, 12, 1, -11, 2, 1, -1, 3,0, 3, 7, -2, 0};
for(size_t i = 0; i < 5; i++)
{for(size_t j = 0; j < 5; j++)
{if(arr[i][j] < min_elem)
 {min_elem = arr[i][j];
min_ind = i; }}}
std::cout << "Min. elem = " << min_elem << std::endl;
std::cout << "String index = " << min_ind << std::endl;
for(size_t j = 0; j < 5; j++)
val *= arr[min_ind][j];
std::cout << "Multiplication = " << val << std::endl;
for(size_t i = 0; i < 5; i++)
{{for(size_t j = 0; j < 5; j++)
{if(arr[i][j] == 0) arr[i][j] = val;
std::cout << arr[i][j] << " ";}
std::cout << std::endl;}
system("pause");
return 0;
}
Fragrance
0 / 0 / 0
Регистрация: 12.01.2011
Сообщений: 14
27.01.2011, 20:38  [ТС]     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #9
И еще, можно сделать так, чтобы элементы массива вводить после компиляции с клавиатуры, а не писать в коде программы?
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
27.01.2011, 20:44     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #10
Fragrance, код который я вам выложил, я выложил в шутку. Это тот же самый код, который выложил Qwerty_coder постом выше, и в котором просто убраны отступы.
Fragrance
0 / 0 / 0
Регистрация: 12.01.2011
Сообщений: 14
27.01.2011, 21:11  [ТС]     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #11
Программа выводит только 1-ую строку матрицы,в которой нулевые элементы заменены значением произведения элементов строки,где находится минимум, а нужно чтобы выводило всю матрицу.

Добавлено через 2 минуты
st_dent, ну у вас,программистов, и юмор!
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
27.01.2011, 21:14     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #12
Fragrance,
Замените эту строчку
C++
1
2
3
4
5
int arr[5][5] = {0, -5, 4, 0, 1,
                                        9, 55, 0, -3, 8,
                                        3, 0, 66, 12, 1,
                                        -11, 2, 1, -1, 3,
                                        0, 3, 7, -2, 0};
на эти
C++
1
2
3
4
5
6
7
8
9
int num=0;
for(size_t i = 0; i < 5; i++)
{
  for(size_t j = 0; j < 5; j++)
  {
     std::cin>>num;    
     arr[i][j]=num;
   }
}
Fragrance
0 / 0 / 0
Регистрация: 12.01.2011
Сообщений: 14
27.01.2011, 21:47  [ТС]     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #13
Заменил, не помогло...
Qwerty_coder
29 / 29 / 2
Регистрация: 14.12.2009
Сообщений: 79
28.01.2011, 13:58     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #14
Fragrance,

вот полностью рабочая программа:

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
#include <iostream>
 
int main()
{
    int val = 1;
 
    size_t i_size, j_size, i_min = 0, j_min = 0;
    std::cout << "Input i_size & j_size: ";
    std::cin >> i_size >> j_size;
 
    int **arr;
    arr = new int *[i_size];
    for(size_t k = 0; k < j_size; k++) arr[k] = new int [j_size];
 
    for(size_t i = 0; i < i_size; i++)
        for(size_t j = 0; j < j_size; j++)
            std::cin >> arr[i][j];
 
    for(size_t i = 0; i < i_size; i++)
        for(size_t j = 0; j < j_size; j++)
            if(arr[i][j] < arr[i_min][j_min])
            {
                i_min = i;
                j_min = j;
            }
 
    std::cout << "Min. elem = " << arr[i_min][j_min] << std::endl;
    std::cout << "String index = " << i_min << std::endl;
 
    for(size_t j = 0; j < j_size; j++)
        val *= arr[i_min][j];
 
    std::cout << "Multiplication = " << val << std::endl;
 
    for(size_t i = 0; i < i_size; i++)
    {
        for(size_t j = 0; j < j_size; j++)
        {
            if(arr[i][j] == 0) arr[i][j] = val;
            std::cout << arr[i][j] << " ";
        }
        std::cout << std::endl;
    }
 
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2011, 15:28     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум
Еще ссылки по теме:

Все строки матрицы, где находится более двух простых чисел, обнулить. Найти среднее арифметическое элементов до и после обнуления C++
C++ Заменить нулевые элементы массива суммой элементов
Ввести массив и заменить все нулевые элементы последним элементом массива C++

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

Или воспользуйтесь поиском по форуму:
Fragrance
0 / 0 / 0
Регистрация: 12.01.2011
Сообщений: 14
30.01.2011, 15:28  [ТС]     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум #15
Программа должна быть попроще, вот примерно такой(исправьте, пожалуйста):
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <iomanip>
#define s 4
#define x 3
using namespace std;
 
void _tmain()
{setlocale(LC_ALL, "Russian");
    double B[s][x], Bmin;
int i,j,min_ind;
min_ind=0;
int proizv;
proizv=1;
for (i=0;i<s;i++)
 
        {
                cout<<"vvedite stroku matricy "<<i<<endl;
                for (j=0;j<x;j++)
                {cin>>B[i][j];
                }
        }
for(j=0;j<x;j++)
{
    for (i=0;i<s;i++)
{
Bmin=B[0][0];
}}
for (i=0; i<s;i++)
{if (B[i][j]<Bmin)
{Bmin=B[i][j];
min_ind=i;
}}}
cout<<"min element= "<<Bmin;
cout<< "index of min element=  " << min_ind << endl;
for(j = 0; j < x; j++)
{proizv*= B[min_ind][j];
}
cout<< "    Proizvedenie elementov stroki = " << proizv << endl;
for(i = 0; i < s; i++)
{
    for(j = 0; j < x; j++)
{if(B[i][j] = 0) 
    {B[i][j] = proizv;
    }}}
cout << "Noviy massiv B: "<<B[i][j]<<endl;
return 0;
}
_getch();
}
Yandex
Объявления
30.01.2011, 15:28     Как заменить все нулевые элементы на произведение элементов строки, где находится минимум
Ответ Создать тему
Опции темы

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