Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32

Сформировать матрицу из произведений элементов четных столбцов исходной матрицы находящихся в заданных пределах

25.11.2019, 18:37. Показов 4739. Ответов 34

Студворк — интернет-сервис помощи студентам
Добрый день. Помогите пожалуйста решить задачу по программированию, сам не очень разбираюсь в нем.
Задать A и B как параметры функции:
а) сформировать двумерный массив из:
- произведений элементов четных столбцов исходной матрицы a,
находящихся в пределах: A < a [i] [j] <=B - (первая строка нового массива);
- количества таких элементов в каждом столбце - (вторая строка нового
массива);

б) определить сумму произведений сформированного массива и общее
количество таких элементов столбцов;

в) определить максимальное и минимальное значения произведений и
поменять местами столбцы исходной матрицы, в которых они найдены, если
номера столбцов разные.

 Комментарий модератора 
П.5.16.Правил
Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос - одна тема.


Помогите найти ошибки и исправить код.Буду благодарен тому, кто возьмется за эту задачку)
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
void obr(float a[m][n], float b[2][(m + 1) / 2], int A, int B)
{
    double pr = 1, min, max, r;
    int kol = 0, pmin = 0, pmax = 0;
    int i, j, k; //k -переменная для подсчета количества нужных элементов
    float proiz; //переменная для подсчета произведения
    for (i = 0; i < m; i ++) 
    {
        proiz=1; 
        k = 0; 
        for (j = 1; j < n; j+=2) 
            if ((A <= a[i][j]) && (a[i][j] < B)) 
            {
                proiz *= a[i][j]; 
                k++; 
            }
        if (k == 0)
        {
            b[0][i / 2] = 0; 
            b[1][i / 2] = 0;
        } 
        else { 
            b[0][i / 2] = proiz;
        b[1][i / 2] = k; } 
    }
    min = b[0][0];
    max = b[0][0];
    for (i = 0; i < (m + 1) / 2; i++) 
    { if (b[0][i] < min) 
    { 
        pmax = i; 
        min = b[0][i]; 
    } 
    if (b[0][i] > max) 
    {
        pmin = i; 
        max = b[0][i]; 
    } 
    if (b[1][i] != 0) 
        pr *= b[0][i];
    }
    for (i = 0; i < (m + 1) / 2; i++)
    { 
        kol += b[1][i];
    }
    if (pmax != pmin) 
        for (i = 0; i < n;i++) {
        r = a[pmin * 2][i]; 
        a[pmin * 2][i] = a[pmax * 2][i]; 
        a[pmax * 2][i] = r;
    }
    fout << "Maks proizvedenie" << max << endl << "Min proizvedenie=" << min << endl << "Summa proizvedeniya=" << pr << endl << "Общее количество=" << kol << endl;
}
Добавлено через 7 минут
Пункт а) у меня сделать, в приоритете сделать б и в
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2019, 18:37
Ответы с готовыми решениями:

Сформировать матрицу-строку из максимальных элементов столбцов исходной матрицы
Дана матрица К размера n*m, где n,m&lt;=15. Элементы матрицы- случайные числа из диапозона . Написать процедуру, которая формирует матрицу-...

Вернуть матрицу из элементов матрицы М, находящихся одновременно в чётных строках и чётных столбцах
Помогите плз с заданием Напишите функцию func, которая принимает на вход матрицу M и возвращает матрицу из элементов матрицы М,...

Сформировать массив из произведений положительных элементов соответствующих столбцов матрицы
Дан целочисленный массив А. Сформировать одномерный массив В из произведений положительных элементов соответствующих столбцов массива А. ...

34
фрилансер
 Аватар для Алексей1153
6486 / 5714 / 1133
Регистрация: 11.10.2019
Сообщений: 15,233
30.11.2019, 11:59
Студворк — интернет-сервис помощи студентам
overmouseee, внимание на строки 20...22

Эти три строки размести ПЕРЕД main

Добавлено через 3 минуты
ну и экранирование исправь
fin.open("D:\\ish.txt");
fout.open("D:\\pes.txt");

Добавлено через 6 минут
ещё - судя по скрину - у меня такое подозрение, что дело в настройках проекта. Создай новый проект, чисто консольный. Туда свой код закинь
0
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32
30.11.2019, 14:43  [ТС]
Закинуть в новый проект не помогло
0
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32
13.12.2019, 21:32  [ТС]
Дана матрица 5 на 6. Нужно в КАЖДОЙ строке найти 2 наименьших элемента вывести в другой массив, размерность которого 3 на 10: 1 строка 10 этих чисел, т.е пары элементов( первая пара из первой строки и т.д), а вторая и третья строки это их индексы.
0
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32
14.12.2019, 10:09  [ТС]
Дана матрица 5 на 6. Нужно в КАЖДОЙ строке найти 2 наименьших элемента вывести в другой массив, размерность которого 3 на 10: 1 строка 10 этих чисел, т.е пары элементов( первая пара из первой строки и т.д), а вторая и третья строки это их индексы. Но что-то не получается, вот код. Прошу помощи
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
void obr(float a[m][n], float b[3][m*2])
{
    int i, j,k;
    double temp;
    float firstmin,secondmin,i1,i2;
    for (i = 0; i < m; i++) {
        k = 0;
        firstmin = a[i][0];
        secondmin = a[i][0];
        for (j = 0; j < n; j++) {
            if ((a[i][j] < firstmin)&&(k<1))
            {
                firstmin = a[i][j];
                i1 = i;
                i2 = j;
                k++;
            }
            else if ((a[i][j] < secondmin) && (k < 1))
            {
                secondmin = a[i][j];
                i1 = i;
                i2 = j;
                k++;
            }
        }
    }
        for (j = 0; j < m * 2; j +=2)
        {
            b[0][j] = firstmin;
            b[1][j] = i1+1;
            b[2][j] = i2+1;
        }
        for (j = 1; j < m * 2; j += 2)
        {
            b[0][j] = secondmin;
            b[1][j] = i1+1;
            b[2][j] = i2+1;
        }
    fout << endl << "=================Old array after change:================" << endl << endl;
    p(a);
}
0
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32
14.12.2019, 15:01  [ТС]
Как в двумерном массиве найти в КАЖДОЙ строке два минимальных элемента и вывести их??? Подскажите пожалуйста
0
 Аватар для FFPowerMan
2161 / 1239 / 511
Регистрация: 11.10.2018
Сообщений: 6,330
14.12.2019, 15:06
Просто подсказать или программу написать?

Добавлено через 1 минуту
Ищешь первый минимальный элемент, запоминаешь его номер в переменной, ищешь 2-ой раз только по этому номеру не смотришь. Понятно?
1
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32
14.12.2019, 15:27  [ТС]
Лучше код программы написать

Добавлено через 20 минут
FFPowerMan, Если ,конечно, не сложно тебе. Смысл более-менее понятен, но пока не догадываюсь как реализовать на языке программирования
0
 Аватар для FFPowerMan
2161 / 1239 / 511
Регистрация: 11.10.2018
Сообщений: 6,330
14.12.2019, 15:40
На Вы надо разговаривать с незнакомым человеком.
0
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32
14.12.2019, 16:08  [ТС]
FFPowerMan, Прошу прощения,Молодой человек. А также прошу помощи реализовать на C++ задачку, если Вам не сложно
0
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32
14.12.2019, 16:43  [ТС]
В двумерном массиве в каждой строке нужно найти два наименьших элемента и вывести их с индексами.Довольно легкая задача, но не могу додуматься, как написать это на языке программирования.Заранее спасибо
0
30 / 21 / 9
Регистрация: 29.10.2019
Сообщений: 79
14.12.2019, 20:12
Повторения учитывать? Т.е если в строке 1 1 2 3,
То два наименьших это 1 1 или 1 2 ? И индекс повторяющихся любой из них?
0
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32
14.12.2019, 20:17  [ТС]
Zashiki, Да,учитывать. А индекс , например, у первого будет 1, а у второго 2 . Вот так и вывести нужно
0
30 / 21 / 9
Регистрация: 29.10.2019
Сообщений: 79
15.12.2019, 01:12
Из другой вашей темы, где массив 5*6 и 3*10
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
#include <iostream>
#include<ctime>
int main()
{srand(static_cast<unsigned int>(time(0)));
    int arr[5][6];
        for(auto &ref:arr)//заполнение массива
        {
            for(auto &el:ref)
            {el=rand()%9+1;std::cout<<el<<' ';}
            std::cout<<'\n';}
            std::cout<<'\n';
        int less[3][10];
        int ind{0};//поиск и заполнение
        for(int i=0;i<5;++i)
        {
            less[0][ind]=arr[i][0];
            less[0][ind+1]=arr[i][1];
            less[2][ind]=0;less[2][ind+1]=1;
            for(int j=1;j<6;++j)
            {
                if(less[0][ind]>arr[i][j])
                {less[0][ind+1]=less[0][ind];
                    less[2][ind+1]=less[2][ind];
                    less[0][ind]=arr[i][j];
                    less[2][ind]=j;}
                else if(less[0][ind+1]>arr[i][j])
                {less[0][ind+1]=arr[i][j];
                    less[2][ind+1]=j;}}
                less[1][ind]=i;less[1][ind+1]=i;
                ind+=2;
            }
            for(int i=0;i<3;++i)//вывод минимума
            {if(i==0)
                std::cout<<"mins: ";
                else
                {std::cout<<((i==1)?"cols: ":"rows: ");}
                for(auto &ref:less[i])
                std::cout<<ref<<' ';
                std::cout<<"\n";}
    
    return 0;}
Хотя наверное лучше с sort и swap

Или среднюю часть лучше так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int less[3][10];
        int m{0};//поиск и заполнение
        for(int i=0;i<5;++i)
        {
            int ind=0,ind2=1;
            for(int j=1;j<6;++j)
            {
                if(arr[i][ind]>arr[i][j])
                {ind2=ind;ind=j;}
                else if(arr[i][ind2]>arr[i][j])
                ind2=j;}
                less[0][m]=arr[i][ind];less[0][m+1]=arr[i][ind2];
                less[1][m]=i;less[1][m+1]=i;
                less[2][m]=ind;less[2][m+1]=ind2;
                m+=2;
            }
0
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32
15.12.2019, 09:36  [ТС]
Доброго времени суток.Помогите найти ошибку: в двух столбцах матрицы выводит число -107374176. Вот условие задачи:. а) сформировать двумерный массив из:
- двух наименьших элементов каждой строки исходной матрицы
(первая строка нового массива);
- их индексов (вторая и третья строки нового массива);
Прикладываю код соотвественно:
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <iostream>
#include <fstream>
#include <iomanip>
#include<conio.h>
#include<windows.h>
using namespace std;
const int m = 5, n = 6;
ifstream fin;
ofstream fout;
char c[6][256];
int main()
{
    fin.open("D:\ish.txt");
    if (!fin) { cout << "Ошибка при открытии файла данных"; exit(0); }
    fout.open("D:\pes.txt");
    if (!fout) { cout << "Ошибка при открытии файла результатов"; exit(0); }
    float a[m][n];
    float b[3][m * 2];
    int i, j;
    void vvod(float a[m][n]);
    void p(float a[m][n]);
    void obr(float a[m][n], float b[3][m * 2]);
    vvod(a);
    p(a);
    obr(a, b);
    fout << "\n\n\nNew array:";
    for (i = 0; i < 3; i++)
    {
        fout << '\n';
        for (j = 0; j < m * 2; j++)
            fout << setw(12) << b[i][j];
 
    }
    fout.close();
}
 
void vvod(float a[m][n])
{
    int i, j;
    for (i = 0; i < 6; i++)
    {
        fin.getline(c[i], 182, '\n');
        if (i < 4) fout << c[i] << endl;
    }
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
            fin >> *(*(a + i) + j);
    fin.close();
}
void p(float a[m][n])
{
    int i, j;
    for (i = 0; i < m; i++)
    {
        fout << '|';
        for (j = 0; j < n; j++)
            switch (j)
            {
            case 0: case 1: case 3:case 4:
                fout.unsetf(ios::scientific);
                fout.width(10);
                fout.setf(ios::left | ios::fixed);
                fout.precision(5);
                fout << a[i][j] << '|';
                break;
            case 2:
                fout.width(10);
                fout.unsetf(ios::fixed);
                fout.setf(ios::scientific);
                fout.precision(3);
                fout << a[i][j] << '|';
                break;
            case 5:
                fout.width(8);
                fout.precision(4);
                fout << a[i][j] << "|\n";
                break;
            }
        if (i == m - 1) fout << c[5] << endl;
        else fout << c[4] << endl;
    }
}
void obr(float a[m][n], float b[3][m * 2])
{
    int i, j, ifr, jfr, isc, jsc;
    double temp;
    double fr, sc;
    float tmp;
    for (i = 0; i < m; i++) {
        fr = a[i][0];
        sc = a[i][0];
        if (fr >= sc) {
            tmp = fr;
            fr = sc;
            sc = tmp;
        }
        for (j = 0; j < n; j++)
            if (a[i][j] <= fr) {
                sc = fr;
                fr = a[i][j];
                ifr = i;
                jfr = j;
                b[0][i] = fr;
                b[1][i] = ifr + 1;
                b[2][i] = jfr + 1;
            }
            else if (a[i][j] <= sc) {
                sc = a[i][j];
                isc = i;
                jsc = j;
                b[0][m + i] = sc;
                b[1][m + i] = isc + 1;
                b[2][m + i] = jsc + 1;
            }
        fout << fr << " " << sc << endl;
    }
    fout << "Произведение отрицательных элементов: " << pr << endl << "Сумма положительных элементов: " << sum << endl;
    fout << endl << "=================Old array after change:================" << endl << endl;
    p(a);
}
И скриншот проблемы соответственно
Миниатюры
Сформировать матрицу из произведений элементов четных столбцов исходной матрицы находящихся в заданных пределах  
0
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 32
15.12.2019, 11:16  [ТС]
Доброго времени суток.Помогите найти ошибку: в двух столбцах матрицы выводит число -107374176. Вот условие задачи:. а) сформировать двумерный массив из:
- двух наименьших элементов каждой строки исходной матрицы
(первая строка нового массива);
- их индексов (вторая и третья строки нового массива);
Прикладываю код соотвественно:
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <fstream>
#include <iomanip>
#include<conio.h>
#include<windows.h>
using namespace std;
const int m = 5, n = 6;
ifstream fin;
ofstream fout;
char c[6][256];
int main()
{
    fin.open("D:\ish.txt");
    if (!fin) { cout << "Ошибка при открытии файла данных"; exit(0); }
    fout.open("D:\pes.txt");
    if (!fout) { cout << "Ошибка при открытии файла результатов"; exit(0); }
    float a[m][n];
    float b[3][m * 2];
    int i, j;
    void vvod(float a[m][n]);
    void p(float a[m][n]);
    void obr(float a[m][n], float b[3][m * 2]);
    vvod(a);
    p(a);
    obr(a, b);
    fout << "\n\n\nNew array:";
    for (i = 0; i < 3; i++)
    {
        fout << '\n';
        for (j = 0; j < m * 2; j++)
            fout << setw(12) << b[i][j];
 
    }
    fout.close();
}
 
void vvod(float a[m][n])
{
    int i, j;
    for (i = 0; i < 6; i++)
    {
        fin.getline(c[i], 182, '\n');
        if (i < 4) fout << c[i] << endl;
    }
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
            fin >> *(*(a + i) + j);
    fin.close();
}
void p(float a[m][n])
{
    int i, j;
    for (i = 0; i < m; i++)
    {
        fout << '|';
        for (j = 0; j < n; j++)
            switch (j)
            {
            case 0: case 1: case 3:case 4:
                fout.unsetf(ios::scientific);
                fout.width(10);
                fout.setf(ios::left | ios::fixed);
                fout.precision(5);
                fout << a[i][j] << '|';
                break;
            case 2:
                fout.width(10);
                fout.unsetf(ios::fixed);
                fout.setf(ios::scientific);
                fout.precision(3);
                fout << a[i][j] << '|';
                break;
            case 5:
                fout.width(8);
                fout.precision(4);
                fout << a[i][j] << "|\n";
                break;
            }
        if (i == m - 1) fout << c[5] << endl;
        else fout << c[4] << endl;
    }
}
void obr(float a[m][n], float b[3][m * 2])
{
    int i, j, ifr, jfr, isc, jsc;
    double temp;
    double fr, sc;
    float tmp;
    for (i = 0; i < m; i++) {
        fr = a[i][0];
        sc = a[i][0];
        if (fr >= sc) {
            tmp = fr;
            fr = sc;
            sc = tmp;
        }
        for (j = 0; j < n; j++)
            if (a[i][j] <= fr) {
                sc = fr;
                fr = a[i][j];
                ifr = i;
                jfr = j;
                b[0][i] = fr;
                b[1][i] = ifr + 1;
                b[2][i] = jfr + 1;
            }
            else if (a[i][j] <= sc) {
                sc = a[i][j];
                isc = i;
                jsc = j;
                b[0][m + i] = sc;
                b[1][m + i] = isc + 1;
                b[2][m + i] = jsc + 1;
            }
        fout << fr << " " << sc << endl;
    }
    fout << endl << "=================Old array after change:================" << endl << endl;
    p(a);
}
Через fout выводится все хорошо, но если присваивать, то не получается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2019, 11:16
Помогаю со студенческими работами здесь

Сформировать одномерный массив из произведений положительных элементов столбцов матрицы
Помогите решить задачу на файлы Дан двумерный массив размерностью 5*6. Сформировать одномерный массив,каждый элемент которого равен...

Сформировать одномерный массив из произведений четных положительных элементов соответствующего столбца матрицы
1) Дан двумерный массив размерностью 5х6, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент...

Сформировать одномерный массив, состоящий из произведений отрицательных элементов четных строк матрицы
Помогите, я сделала программу на делфи - работает, переделала на си не работает, помогите что бы выводилось.. ЗАДАНИЕ: Сформировать...

Сформировать матрицу из максимальных элементов области исходной матрицы
Из данной A составьте B матрицу (2 ≤ n ≤100) . B элемент равен  максимальному элементу матрицы A , который справа ограничен диагональю...

Сформировать матрицу C (), элементы которой равны квадратам соответствующих элементов исходной матрицы
Ввести значение переменной n. Ввести значение m. Ввести матрицу А (),в которой количество строк, а m -столбцов Сформировать матрицу...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru