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

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

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

В чем ошибка? Ссртировка выбором и сортировка вставкой - C++

20.02.2015, 21:51. Просмотров 267. Ответов 7
Метки нет (Все метки)

108-ая строка. error C2372: a: переопределение; различные типы косвенного обращения
110-ая строка. error C2440: =: невозможно преобразовать "int *" в "int [20]"


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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
const int raw = 20, col = 20;
int comp, change;
 
void insertSort(int  a[raw][col], int z, int q)
{
    int tmp, pos;
    const int n = 5, k = 5;
    a[n][k]; //n - строк в массиве, k - столбцов.
 
    for (int i = 0; i < n; ++i){ // i - номер текущей строки
        for (int j = 0; j < k; ++j) // j - номер текущего шага
        {
            comp++;
            pos = j;
            tmp = a[i][j];
            //if (SumDigits(a[pos][0])>SumDigits(a[pos - 1][0]))
            for (int h = j + 1; h < z; ++h) // цикл выбора наименьшего элемента
            {
                
                if (a[i][h] > tmp)
                {change++;
                    pos = h;
                    tmp = a[i][h];
                }
            }
            a[i][pos] = a[i][j];
            a[i][j] = tmp; // меняем местами наименьший с a[i]
        }
    }
}
 
void selectSort(int  a[raw][col], int z, int q)
{
    int tmp, i, j, pos, j1;
    for (i = 0; i < z; ++i) // цикл по строкам
    {
        for (j1 = 0; j1 < q; ++j1) // j1 - номер текущего шага
    {comp++;
            pos = j1;
            tmp = a[i][pos];
            for (j = j1 + 1; j < q; ++j) // цикл выбора наименьшего элемента
            {
                
                if (a[i][j] > tmp)
                {
                    change++;
                    pos = j;
                    tmp = a[i][j];
                }
            }
 
            a[i][pos] = a[i][j1];
            a[i][j1] = tmp; // меняем местами наименьший с a[j1]
        }
    }
}
 
int main()
{
    srand((unsigned)time(0));
    setlocale(LC_ALL, "Russian");
    int a[raw][col];
    int x, y;
    //int sizeX, sizeY;
    comp = 0;
    change = 0;
    int z = 0, q = 0;
    while (z<1 || z>20 || z != int(z)){
        cout << "Введите количество строк" << endl << "(целое, неотрицательное, не более 20):";
        cin >> z;
    }
    while (q<1 || q>20 || q != int(q)){
        cout << "Введите количество столбцов:" << endl << "(целое, неотрицательное, не более 20):";
        cin >> q;
    }
 
    int** arr = new int*[q];
    for (int i = 0; i < q; i++)
        arr[i] = new int[z];
 
    ////////////////////////////////////////////////
    //////////ИСХОДНЫЙ МАССИВ///////////////////////
    ////////////////////////////////////////////////
 
    for (int i = 0; i < q; i++)
    {
        for (int j = 0; j < z; j++)
        {
            arr[i][j] = rand() % 10;
            cout << "  " << arr[i][j];
        }
        cout << "\n";
    }
 
    cout << endl << endl;
 
    //////////////////////////////////////////////////
    /////////////////СОРТИРОВКА ВСТАВКАМИ//////////////
    //////////////////////////////////////////////////
    
    //a - копия arr
    int**a = new int*[q];
    for (int i = 0; i < q; i++)
        a[i] = new int[z];
 
    for (int i = 0; i < q; i++)
    {
        for (int j = 0; j < z; j++)
        {
            a[i][j] = arr[i][j];
        }
    }
 
    cout << "Сортировка вставками " << endl;
    insertSort(a, z, q);
    for (x = 0; x<z; x++)
    {
        for (y = 0; y<q; y++)
        {
            cout << "  " << a[x][y];
        }
        cout << "\n";
    }
    
    int insert_comp = comp;
    int insert_change = change;
 
    cout << "Сравнений: " << insert_comp << " Перестановок: " << insert_change << endl;
 
    comp = 0;
    change = 0;
 
    //////////////////////////////////////////////////
    /////////СОРТИРОВКА ВЫБОРОМ///////////////////////
    //////////////////////////////////////////////////
 
    for (int i = 0; i < q; i++)
    {
        for (int j = 0; j < z; j++)
        {
            a[i][j] = arr[i][j];
        }
    }
 
    cout << "Сортировка выбором " << endl;
    selectSort(a, z, q);
    for (x = 0; x<z; x++)
    {
        for (y = 0; y<q; y++)
        {
            cout << "  " << a[x][y];
        }
        cout << "\n";
    }
    int select_comp = comp;
    int select_change = change;
 
    cout << "Сравнений: " << select_comp << " Перестановок: " << select_change << endl;
 
    comp = 0;
    change = 0;
    cout << endl;
 
    system("pause");
    return (0);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2015, 21:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В чем ошибка? Ссртировка выбором и сортировка вставкой (C++):

Сортировка одномерного массива выбором - в чем ошибка - C++
Всем привет. Пытаюсь написать алгоритм, который будет сортировать одномерный массив заданной длины: 1. находить минимум среди элементов, ...

с сортировкой выбором! в чем ошибка? - C++
я создал базу данных с консоли и проблема в том что он сортирует только года а остальное он оставляет как есть не меняя его позицию до ...

Сортировка выбором, ошибка в коде - C++
Не кидайтесь тапками, решила вспомнить си++.Код не рабочий. Ошибка в последней строке. #include &lt;iostream&gt; using namespace std; ...

Сортировка выбором (метод прямого выбора). Ошибка в задаче - C++
Привет. У меня есть программка решение на задачку &quot;Первые десять элементов массива М(30) отсортировать в порядке возрастания, а остальные в...

Реализовать сортировку несколькими методами (перестановкой, выбором, вставкой) и оценить скорость их работы. - C++
Дан массив. Реализовать сортировку несколькими методами (перестановкой, выбором, вставкой) и оценить скорость их работы.

Сортировка массива - в чем ошибка? - C++
Попытался написать код сортировки массива. Алгоритм такой: ищем самое маленькое число в массиве и помещаем в первый элемент массива, а...

7
-=ЮрА=-
Заблокирован
Автор FAQ
20.02.2015, 22:01 #2
Цитата Сообщение от Bad_Trip Посмотреть сообщение
int a[raw][col];
Цитата Сообщение от Bad_Trip Посмотреть сообщение
//////////////////////////////////////////////////
* * /////////////////СОРТИРОВКА ВСТАВКАМИ//////////////
* * //////////////////////////////////////////////////
//a - копия arr
* * int**a = new int*[q];
- у тебя в коде попітка перобїявления массива
0
_Valera_
488 / 370 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
20.02.2015, 22:01 #3
Вы ранее использовали массив а как статический, а потом вдруг решили сделать его динамическим, так нельзя, наверно, во всяком случае я изменил имя массива и у меня работает. (Вот проблема int**а = new int*[q]
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.02.2015, 22:02 #4
Цитата Сообщение от Bad_Trip Посмотреть сообщение
void insertSort(int *a[raw][col], int z, int q)
- размерность строк указывать не надо
C++
1
void insertSort(int *a[][col], int z, int q)
- это если статический массив
C++
1
void insertSort(int ***a, int z, int q)
- для динамического. для начала стоит определиться размеры массивов коснтантные или нет, в коде дикая смесь статики и динамики, так успешного проекта не построить
0
Bad_Trip
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 79
20.02.2015, 22:11  [ТС] #5
Можно ли без особых изменений сделать массив только лишь динамическим или статическим? И да кстати, какой вариант будет лучше для данного кода? А по сути, нужно разобраться, чем они отличаются..

Добавлено через 4 минуты
Как исправить сей косяк?
0
-=ЮрА=-
20.02.2015, 22:16
  #6

Не по теме:

Bad_Trip, ты сам должен знать что лучше, если в задании сказано что размерность не больше какого то значения(значние должно быть небольшим к примеру 20х20), то логичней использовать статический массив, если нет, переводи всё на динамический.

0
zss
Модератор
Эксперт С++
6689 / 6251 / 2084
Регистрация: 18.12.2011
Сообщений: 16,324
Завершенные тесты: 1
20.02.2015, 22:17 #7
C++
1
2
3
4
5
6
void insertSort(int**  a, int z, int q)
{
    int tmp, pos;
    int n = z, k = q;
    //a[n][k];  эту строку удаляем
...
C++
1
void selectSort(int**  a, int z, int q)
И 68 строку (int a[raw][col]; ) удаляем тоже
1
Bad_Trip
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 79
20.02.2015, 22:26  [ТС] #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
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
const int raw = 20, col = 20;
int comp, change;
 
void insertSort(int** a, int z, int q)
{
    int tmp, pos;
    int n = z, k = q;
 
    for (int i = 0; i < n; ++i){ // i - номер текущей строки
        for (int j = 0; j < k; ++j) // j - номер текущего шага
        {
            comp++;
            pos = j;
            tmp = a[i][j];
            for (int h = j + 1; h < z; ++h) // цикл выбора наименьшего элемента
            {
                
                if (a[i][h] > tmp)
                {change++;
                    pos = h;
                    tmp = a[i][h];
                }
            }
            a[i][pos] = a[i][j];
            a[i][j] = tmp; // меняем местами наименьший с a[i]
        }
    }
}
 
void selectSort(int** a, int z, int q)
{
    int tmp, i, j, pos, j1;
    for (i = 0; i < z; ++i) // цикл по строкам
    {
        for (j1 = 0; j1 < q; ++j1) // j1 - номер текущего шага
    {comp++;
            pos = j1;
            tmp = a[i][pos];
            for (j = j1 + 1; j < q; ++j) // цикл выбора наименьшего элемента
            {
                
                if (a[i][j] > tmp)
                {
                    change++;
                    pos = j;
                    tmp = a[i][j];
                }
            }
 
            a[i][pos] = a[i][j1];
            a[i][j1] = tmp; // меняем местами наименьший с a[j1]
        }
    }
}
 
int main()
{
    srand((unsigned)time(0));
    setlocale(LC_ALL, "Russian");
    //int a[raw][col];
    int x, y;
    //int sizeX, sizeY;
    comp = 0;
    change = 0;
    int z = 0, q = 0;
    while (z<1 || z>20 || z != int(z)){
        cout << "Введите количество строк" << endl << "(целое, неотрицательное, не более 20):";
        cin >> z;
    }
    while (q<1 || q>20 || q != int(q)){
        cout << "Введите количество столбцов:" << endl << "(целое, неотрицательное, не более 20):";
        cin >> q;
    }
 
    int** arr = new int*[q];
    for (int i = 0; i < q; i++)
        arr[i] = new int[z];
 
    ////////////////////////////////////////////////
    //////////ИСХОДНЫЙ МАССИВ///////////////////////
    ////////////////////////////////////////////////
 
    for (int i = 0; i < q; i++)
    {
        for (int j = 0; j < z; j++)
        {
            arr[i][j] = rand() % 10;
            cout << "  " << arr[i][j];
        }
        cout << "\n";
    }
 
    cout << endl << endl;
 
    //////////////////////////////////////////////////
    /////////////////СОРТВРОКА ВСТАВКАМИ//////////////
    //////////////////////////////////////////////////
    
    //a - копия arr
    int**a = new int*[q];
    for (int i = 0; i < q; i++)
        a[i] = new int[z];
 
    for (int i = 0; i < q; i++)
    {
        for (int j = 0; j < z; j++)
        {
            a[i][j] = arr[i][j];
        }
    }
 
    cout << "Сортировка вставками " << endl;
    insertSort(a, z, q);
    for (x = 0; x<z; x++)
    {
        for (y = 0; y<q; y++)
        {
            cout << "  " << a[x][y];
        }
        cout << "\n";
    }
    
    int insert_comp = comp;
    int insert_change = change;
 
    cout << "Сравнений: " << insert_comp << " Перестановок: " << insert_change << endl;
 
    comp = 0;
    change = 0;
 
    //////////////////////////////////////////////////
    /////////СОРТИРОВКА ВЫБОРОМ///////////////////////
    //////////////////////////////////////////////////
 
    for (int i = 0; i < q; i++)
    {
        for (int j = 0; j < z; j++)
        {
            a[i][j] = arr[i][j];
        }
    }
 
    cout << "Сортировка выбором " << endl;
    selectSort(a, z, q);
    for (x = 0; x<z; x++)
    {
        for (y = 0; y<q; y++)
        {
            cout << "  " << a[x][y];
        }
        cout << "\n";
    }
    int select_comp = comp;
    int select_change = change;
 
    cout << "Сравнений: " << select_comp << " Перестановок: " << select_change << endl;
 
    comp = 0;
    change = 0;
    cout << endl;
 
    system("pause");
    return (0);
}
0
20.02.2015, 22:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2015, 22:26
Привет! Вот еще темы с ответами:

Сортировка пузырьком, в чем ошибка - C++
Доброго времени суток. Язык изучаю недолго. В данном мне задании нужно, помимо прочего, применить сортировку массива. В материале,...

Сортировка вставкой - C++
В файле input.txt содержатся сведения о группе студентов в формате:номер группы, фамилия, имя, год рождения, оценки по пяти предметам. ...

Сортировка вставкой - C++
(желательно ближе к си) Определить массив из 50 вещественных чисел: x = 10*Cos( i/10), i= 1, 2, . . . 50. Отсортировать массив по...

Сортировка вставкой - C++
while(mc!=m) {nov=n; for(is=0;is&lt;n;is++){ for (i=nov;i&lt;n;i++){if (vmatr&lt;sk2){sk2=vmatr;c=i;}} nov++; if(sk2==vmatr){continue;} for...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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