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

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

25.11.2019, 18:37. Показов 4794. Ответов 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
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,294
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
2163 / 1241 / 511
Регистрация: 11.10.2018
Сообщений: 6,355
14.12.2019, 15:06
Просто подсказать или программу написать?

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

Добавлено через 20 минут
FFPowerMan, Если ,конечно, не сложно тебе. Смысл более-менее понятен, но пока не догадываюсь как реализовать на языке программирования
0
2163 / 1241 / 511
Регистрация: 11.10.2018
Сообщений: 6,355
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
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru