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

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

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

Author24 — интернет-сервис помощи студентам
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2015, 21:51
Ответы с готовыми решениями:

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

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

Сортировка выбором, ошибка в коде
Не кидайтесь тапками, решила вспомнить си++.Код не рабочий. Ошибка в последней строке. #include...

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

7
Заблокирован
Автор FAQ
20.02.2015, 22:01 2
Цитата Сообщение от Bad_Trip Посмотреть сообщение
int a[raw][col];
Цитата Сообщение от Bad_Trip Посмотреть сообщение
//////////////////////////////////////////////////
* * /////////////////СОРТИРОВКА ВСТАВКАМИ//////////////
* * //////////////////////////////////////////////////
//a - копия arr
* * int**a = new int*[q];
- у тебя в коде попітка перобїявления массива
0
495 / 377 / 136
Регистрация: 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
1 / 1 / 1
Регистрация: 09.10.2014
Сообщений: 79
20.02.2015, 22:11  [ТС] 5
Можно ли без особых изменений сделать массив только лишь динамическим или статическим? И да кстати, какой вариант будет лучше для данного кода? А по сути, нужно разобраться, чем они отличаются..

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

Не по теме:

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

0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,719
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
1 / 1 / 1
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2015, 22:26
Помогаю со студенческими работами здесь

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

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

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

Сортировка вставкой
1)Дан массив состоящий из n элементов (n&lt;=100) Отсортировать методом вставки и вывести пятый...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru