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

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

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

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

18.11.2014, 17:16. Просмотров 375. Ответов 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2014, 17:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов (C++):

Как добавить "K" столбцов перед столбцом с наибольшим количеством отрицательных элементов? - C++
добавить &quot;K&quot; столбцов перед столбцом с найбольшим количеством отрицательных элементов Правильно ли осуществлен поиск столбца с...

Определить строку с наибольшим количеством отрицательных элементов - C++
Здравствуйте! Помогите найти ошибку, пожалуйста =) Есть матрица, нужно определить строку с наибольшим количеством отрицательных...

Для каждого массива определить номер строки с наибольшим количеством отрицательных элементов - C++
Доброго времени суток. Помогите пожалуйста, буду очень признательна. Использование функций в языке СИ, возвpащающих одно значение ...

Добавить "xxx" перед последним словом строки - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main(void) { char s; char sr; printf(&quot;BBeduTe...

Добавить к возрасту человека указание "год", "года", "лет" - C++
Дано натуральное число n (n&lt;=100), определяющее возраст человека (в годах). Дать для этого числа наименования год, года, лет: например, 1...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Cookie Monster
16 / 16 / 3
Регистрация: 03.11.2014
Сообщений: 71
18.11.2014, 18:06 #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;
      }
}
Чтобы сравнивать количество отр элементов в текущем столбце с максимумом после того как весь столбец пройдем
0
Moggie
0 / 0 / 0
Регистрация: 12.11.2014
Сообщений: 31
18.11.2014, 18:09  [ТС] #3
С поиском столбца, там всё нормально и работает правильно, а вот дальше я в тупике. В твоем варианте тоже работает правильно)
0
Cookie Monster
16 / 16 / 3
Регистрация: 03.11.2014
Сообщений: 71
18.11.2014, 18:11 #4
Если умеете создавать динамические двумерные массивы то почему бы массив q не сделать таковым?
0
Moggie
0 / 0 / 0
Регистрация: 12.11.2014
Сообщений: 31
18.11.2014, 18:16  [ТС] #5
А что изменится?я только создавать их и умею, а работать - нет
0
Cookie Monster
16 / 16 / 3
Регистрация: 03.11.2014
Сообщений: 71
18.11.2014, 18:30 #6
Точно также через индексы можно обращаться к элементам динамического массива
0
Moggie
0 / 0 / 0
Регистрация: 12.11.2014
Сообщений: 31
18.11.2014, 18:34  [ТС] #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";}
0
Cookie Monster
16 / 16 / 3
Регистрация: 03.11.2014
Сообщений: 71
18.11.2014, 20:16 #8
В Количество строк же не должно измениться.массив q будет размерности [n-1][m-1+k]
Первые k столбцов будут из одного массива ну в цикле будет for(j=0;j<k;j++) а другая часть массива будет определяться через цикл для j for (j=k;k<m-1+k;j++)
0
Moggie
0 / 0 / 0
Регистрация: 12.11.2014
Сообщений: 31
18.11.2014, 22:59  [ТС] #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 секунд
проблемой является реализация
0
Cookie Monster
16 / 16 / 3
Регистрация: 03.11.2014
Сообщений: 71
20.11.2014, 20:41 #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;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2014, 20:41
Привет! Вот еще темы с ответами:

For(auto const& val : stime) .cpp(47) : error C2143: синтаксическая ошибка: отсутствие "," перед ":" - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdexcept&gt; #include &lt;locale&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; #include...

error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "fprot" - C++
помогите, пожалуйсти исправить ошибки!!! #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; ...

Error C2143: синтаксическая ошибка: отсутствие ";" перед "строка" - C++
#include &lt;stdafx.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale(...

Ошибка экземпляра класса: отсутствие ";" перед идентификатором "o_scenes_1" - C++
В программе есть два класса, для каждого создано по одному экземпляру. Почему-то в месте создания каждого из экземпляров выдает ошибку: ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.11.2014, 20:41
Ответ Создать тему
Опции темы

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