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

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

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

Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов - C++

18.11.2014, 17:16. Просмотров 369. Ответов 9
Метки нет (Все метки)

Удалить элементы главной диагонали. Добавить "K" столбцов перед столбцом с найбольшим количеством отрицательных элементов
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
#include <iostream>
using namespace std;
    
  
int main()
{int i,j,n,m,k,w,l=0;
cout<<"Input (n*m)\n";
 cin>>n>>m;
 
 int **mas=new int*[m];
int a[n][m];
int c[n][m];
 
    for(int i=0;i<m;i++){
        mas[i]=new int[n];
        
      for (j=0; j<n; j++)
 cin>>mas[i][j];    }       
 
 
 cout<<"our array\n"; //наш массив
 for (i=0; i<n; i++){
 for (j=0; j<m; j++)
 cout<<mas[i][j]<<"  ";
 cout<<"\n";} 
 
 
// переписываем в новый массив, элементы без главной диагонали 
 
for (i=0; i<n; i++){
w=0;
for (j=0; j<m; j++)
if (i!=j)
{a[i][w]=mas[i][j];
w++;
}}
 
 cout<<"our array2\n";
 for (i=0; i<n; i++){
 for (j=0; j<m-1; j++)
 cout<<a[i][j]<<"  ";
 cout<<"\n";} 
 
//поиск столбца с найбольшим кол-вом отрицательных элементов
 
 int g,max=0;
 
 for (j=0; j<m-1; j++){
      l=0;
 for (i=0; i<n; i++)
{
       if (a[i][j]<0)
       l++;
       if (l>max)
      {
            max=l;
            g=j;
      }
}}
 
 cout<<g;
 
// записываем в новый массив, новые элементы
cout<<"kol-vo stolbtsov(dlinoy v n)?\n";
 cin>>k;
 
 for (i=0; i<n; i++)
 for (j=0; j<k; j++)
 cin>>c[i][j];
 
 cout<<"our array3\n";
 for (i=0; i<n; i++){
 for (j=0; j<k; j++)
 cout<<c[i][j]<<"  ";
 cout<<"\n";} 
 // сдесь появились проблемы: как свзять эти 2 массива (a и c, и записать в q)
 int q[n+k][m+k];
  int s=0, h=0;
 for (j=0; j<n+k; j++)
 for (i=0; i<n; i++){
 if (j!=g)
 q[i][j]=a[i][j];
 else
 {
 q[i][j]=c[s][h];
 s++;
 h++;}
 q[i][j]=a[i][j];}
 cout<<"our array4\n";
 for (i=0; i<n+k; i++){
 for (j=0; j<k+n; j++)
 cout<<q[i][j]<<"  ";
 cout<<"\n";} 
 
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2014, 17:16     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов
Посмотрите здесь:
Как добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов? C++
C++ Определить строку с наибольшим количеством отрицательных элементов
C++ Для каждого массива определить номер строки с наибольшим количеством отрицательных элементов
C++ Добавить "xxx" перед последним словом строки
For(auto const& val : stime) .cpp(47) : error C2143: синтаксическая ошибка: отсутствие "," перед ":" C++
error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "fprot" C++
C++ Error C2143: синтаксическая ошибка: отсутствие ";" перед "строка"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Cookie Monster
16 / 16 / 3
Регистрация: 03.11.2014
Сообщений: 71
18.11.2014, 18:06     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов #2
Как минимум я бы поправил поиск столбца с наибольшим количеством отр чисел
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (j=0; j<m-1; j++){
      l=0;
for (i=0; i<n; i++)
{
       if (a[i][j]<0)
       l++;
}
       if (l>max)
      {
            max=l;
            g=j;
      }
}
Чтобы сравнивать количество отр элементов в текущем столбце с максимумом после того как весь столбец пройдем
Moggie
0 / 0 / 0
Регистрация: 12.11.2014
Сообщений: 31
18.11.2014, 18:09  [ТС]     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов #3
С поиском столбца, там всё нормально и работает правильно, а вот дальше я в тупике. В твоем варианте тоже работает правильно)
Cookie Monster
16 / 16 / 3
Регистрация: 03.11.2014
Сообщений: 71
18.11.2014, 18:11     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов #4
Если умеете создавать динамические двумерные массивы то почему бы массив q не сделать таковым?
Moggie
0 / 0 / 0
Регистрация: 12.11.2014
Сообщений: 31
18.11.2014, 18:16  [ТС]     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов #5
А что изменится?я только создавать их и умею, а работать - нет
Cookie Monster
16 / 16 / 3
Регистрация: 03.11.2014
Сообщений: 71
18.11.2014, 18:30     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов #6
Точно также через индексы можно обращаться к элементам динамического массива
Moggie
0 / 0 / 0
Регистрация: 12.11.2014
Сообщений: 31
18.11.2014, 18:34  [ТС]     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов #7
Так если я не пойму сам принцип обьеденения 2-х массивов в 3-й, имеет ли значение с каким массивом я работаю?

Добавлено через 45 секунд
ещё так думал, но ведь тоже не верно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int q[n+k][m+k];
 s=0; h=0; p=0; o=0;
 for (j=0; j<n+k; j++)
 for (i=0; i<n+k; i++){
 if (j!=g){
 q[i][j]=a[p][o];
 p++;
 o++;}
 else
 {
 q[i][j]=c[s][h];
 s++;
 h++;
 p++;
 o++;}
 q[i][j]=a[o][p];}
 cout<<"our array4\n";
 for (i=0; i<n+k; i++){
 for (j=0; j<k+n; j++)
 cout<<q[i][j]<<"  ";
 cout<<"\n";}
Cookie Monster
16 / 16 / 3
Регистрация: 03.11.2014
Сообщений: 71
18.11.2014, 20:16     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов #8
В Количество строк же не должно измениться.массив q будет размерности [n-1][m-1+k]
Первые k столбцов будут из одного массива ну в цикле будет for(j=0;j<k;j++) а другая часть массива будет определяться через цикл для j for (j=k;k<m-1+k;j++)
Moggie
0 / 0 / 0
Регистрация: 12.11.2014
Сообщений: 31
18.11.2014, 22:59  [ТС]     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов #9
ну сналача же мы в q переносим неизмененный массив, до того к j==g, потом должны вставлять "К", а потом продолжить, правильно ты подметил for (j=k;k<m-1+k;j++)

Добавлено через 10 минут
это и есть для меня проблема: у нас есть массив a[n][m] где находится вся наша инфа, и массив с[n][k], где мы ввели дополнительные столбцы, и мы знаем куда его вставлять. И надо в массив "q[n-1][m-1+k]" до того место куда вставлять массив "с" переписывать содержимое массива "а", потом когда дошли до нужного места (в данном случаем "g") переписываем в массив "q" содержимое массива "с", а затем дописываем в "q" всё что осталось в "а"

Добавлено через 20 секунд
проблемой является реализация
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2014, 20:41     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов
Еще ссылки по теме:
C++ Ошибка экземпляра класса: отсутствие ";" перед идентификатором "o_scenes_1"
C++ Error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
C++ error C2143: синтаксическая ошибка: отсутствие ";" перед "using"
C++ error C2143: синтаксическая ошибка: отсутствие "]" перед ";"
Error C2143: синтаксическая ошибка: отсутствие ";" перед "<<" C++

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

Или воспользуйтесь поиском по форуму:
Cookie Monster
16 / 16 / 3
Регистрация: 03.11.2014
Сообщений: 71
20.11.2014, 20:41     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов #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
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
    const int N = 5;
    const int M = 8;
    const int K = 4;
    int a[N][M],c[N][K];
    srand(time(0));
//Инициализация массива А
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < M; j++)
        {
            a[i][j] = rand()%20 - 10;
        }
    }
//Вывод массива А
    std::cout << "mass A" << std::endl;
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < M; j++)
        {
            std::cout << a[i][j] << " ";
        }
        std::cout << std::endl;
    }
//Инициализация массива С
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < K; j++)
        {
            c[i][j] = rand()%20 - 10;
        }
    }
//Вывод массива С
    std::cout << "mass C" << std::endl;
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < K; j++)
        {
            std::cout << c[i][j] << " ";
        }
        std::cout << std::endl;
    }
//Удаление главной диагонали массива А
for(int i = 0; i < N; i++)
    {
        for(int j = i; j < M-1; j++)
        {
            a[i][j] = a[i][j+1];
        }
    }
//Вывод измененного массива А
std::cout << "mass A izm" << std::endl;
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < M-1; j++)
        {
            std::cout << a[i][j] << " ";
        }
        std::cout << std::endl;
    }
    int max = 0;                //максимальное кол-во отр элементов в столбце
    int count = 0;              //счетчик отр элементов текущей строки
    int num_st = 0;             //номер столбца с максимальным кол-вом отр эл-тов
    for(int j = 0; j < M-1; j++)
    {
//обнуление счетчика отр эл-тов текущего столбца
        count = 0;
//увеличение счетчика если эл-нт столбца имеет отр значение
        for(int i = 0; i < N; i++)
        {
            if(a[i][j] < 0)
            {
                count++;
            }
        }
//когда все эл-ты столбца пройдены обновление максимального кол-ва отр эл-тов
// в столбце и номера столбца с максимальным кол-вом отр эл-тов 
        if (count > max)
        {
            max = count;
            num_st = j;
        }
    }
    std::cout << "stol6ec = " << num_st << std::endl;
    int temp;
    std::cout << "enter num st of C for move to Q but less K = " << K << std::endl;
    std::cin >> temp;
//в temp хранится кол-во столбцов из массива С которое надо скопировать в массив Q
    if (temp > K)
        temp = K;
//выделение памяти под массив Q с учетом изменения кол-ва столбцов в массиве А
// и кол-ва столбцов копируемых из массива С
    int **q = new int*[N];
    for(int i = 0; i < N; i++)
    {
        q[i] = new int[temp + M - 1];
    }
//внешний цикл относится к каждой строке массива Q
    for(int i = 0; i < N; i++)
    {
//копирование в массив Q элементов из столбцов массива А находящихся до 
//столбца под номером хранящимся в num_st
        for(int j = 0; j < num_st; j++)
        {
            q[i][j] = a[i][j];
        }
//копирование в массив Q элементов из столбцов массива С находящихся до 
//столбца под номером хранящимся в temp
//jj нужен т.к. индексы для элементов массива С находятся в пределах от 0 до temp
        int jj = 0;
        for(int j = num_st; j < temp+ num_st; j++)
        {
            q[i][j] = c[i][jj];
            jj++;
        }
//копирование в массив Q элементов из столбцов массива С находящихся после 
//столбца под номером хранящимся в temp
//jj равен num_st т.к. индексы для элементов массива А начинаются с num_st
        jj = num_st;
        for(int j = temp+ num_st; j < temp + M - 1; j++)
        {
            q[i][j] = a[i][jj];
            jj++;
        }
    }
//вывод массива Q
    std::cout << "mass Q" << std::endl;
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < temp + M - 1; j++)
        {
            std::cout << q[i][j] << " ";
        }
        std::cout << std::endl;
    }
//освобождение памяти выделенной под массив Q
    for(int i = 0; i < N; i++)
    {
        delete[] q[i];
    }
    delete[] q;
Yandex
Объявления
20.11.2014, 20:41     Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов
Ответ Создать тему
Опции темы

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