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

Программа не компилируется - C++

Восстановить пароль Регистрация
 
cats2013
1 / 1 / 0
Регистрация: 14.04.2013
Сообщений: 17
05.05.2013, 20:14     Программа не компилируется #1
Доброго всем времени суток!

Не могу скомпилировать программу.

У меня задача написать программу сортировки целых чисел методом быстрой сортировки с использованием partition - разделения и setPivot функции.


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
// This program demonstrates the QuickSort Algorithm.
#include <iostream>
#include <algorithm>
using namespace std;
 
 
 
 
//**********************************************************
// partition selects the value in the middle of the        *
// array set as the pivot. The list is rearranged so       *
// all the values less than the pivot are on its left      *
// and all the values greater than pivot are on its right. *
//**********************************************************
 
template <class T1>
int partition(T1 set[], int start, int end)
{
   int pivotValue, pivotIndex, mid;
 
   mid = (start + end) / 2;
   swap(set[start], set[mid]);
   pivotIndex = start;
   pivotValue = set[start];
   for (int scan = start + 1; scan <= end; scan++)
   {
      if (set[scan] < pivotValue)
      {
         pivotIndex++;
         swap(set[pivotIndex], set[scan]);
      }
   }
   swap(set[start], set[pivotIndex]);
   return pivotIndex;
}
 
//************************************************
// quickSort uses the quicksort algorithm to     *
// sort set, from set[start] through set[end].   *
//************************************************
 
template <class T>
void quickSort(T set[], int start, int end)
{
   T pivotPoint;
 
   if (start < end)
   {
      // Get the pivot point.
      pivotPoint = partition(set, start, end);
      // Sort the first sub list.
      quickSort(set, start, pivotPoint - 1);
      // Sort the second sub list.
      quickSort(set, pivotPoint + 1, end);
   }
}
//**********************************************
// swap simply exchanges the contents of       *
// value1 and value2.                          *
//**********************************************
 
template <class T>
void swap(T &value1, T &value2)
{
   int temp = value1;
 
   value1 = value2;
   value2 = temp;
}
 
int main()
{
   const int SIZE = 10;  // Array size
   int count;            // Loop counter
 
   // need to override the [] function?
   int array[SIZE] = {7, 3, 9, 2, 0, 1, 8, 4, 6, 5};
 
   // Display the array contents.
   for (count = 0; count < SIZE; count++)
      cout << array[count] << " ";
   cout << endl;
 
   // Sort the array.
   quickSort(array, 0, SIZE - 1);
 
   // Display the array contents.
   for (count = 0; count < SIZE; count++)
      cout << array[count] << " ";
   cout << endl;
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2013, 20:14     Программа не компилируется
Посмотрите здесь:

C++ программа не компилируется
C++ не компилируется программа
Не компилируется программа! C++
Не компилируется программа C++
C++ Программа с указателями не компилируется
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 687
05.05.2013, 20:35     Программа не компилируется #2
На что указывает компилятор? На какую строку?
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
05.05.2013, 20:47     Программа не компилируется #3
cats2013, конечно у вас ничего не скомпилируется.
Здесь вы используете функцию swap из std
C++
1
swap(set[start], set[mid]);
А здесь уже функция swap которую написали вы.
C++
1
void swap(
Естественно любой вызов swap() будет неоднозначным.
cats2013
1 / 1 / 0
Регистрация: 14.04.2013
Сообщений: 17
05.05.2013, 21:35  [ТС]     Программа не компилируется #4
Все-равно не пойму.

Вот скрин ошибок которые выдаёт компилятор:
Миниатюры
Программа не компилируется  
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
05.05.2013, 22:45     Программа не компилируется #5
все компилируется и работает http://ideone.com/Ce9BEw
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.05.2013, 22:55     Программа не компилируется #6
cats2013, уберите
C++
1
using namespace std;
и добавьте в начало main():
C++
1
2
using std::cout;
using std::endl;
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
05.05.2013, 22:59     Программа не компилируется #7
Цитата Сообщение от Tulosba Посмотреть сообщение
2
using std::cout;
using std::endl;
1) там используется и cin и главная функция объявлена, почитали бы код...
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.05.2013, 23:04     Программа не компилируется #8
Цитата Сообщение от Belfegor Посмотреть сообщение
) там используется и cin и главная функция объявлена, почитали бы код...
Неужели? И где же?
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 687
05.05.2013, 23:04     Программа не компилируется #9
Цитата Сообщение от Tulosba Посмотреть сообщение
cats2013, уберите
C++
1
using namespace std;
и добавьте в начало main():
C++
1
2
using std::cout;
using std::endl;
Разница?
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
05.05.2013, 23:07     Программа не компилируется #10
Tulosba, пардон, у себя при тесте ручной ввод навоял, всравно от вашего совета ничего не изменилось бы
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.05.2013, 23:11     Программа не компилируется #11
Belfegor, почему тогда у меня изменилось? Какая у Вас среда разработки и какие ошибки появляются?

Добавлено через 1 минуту
Цитата Сообщение от Bend3r Посмотреть сообщение
Разница?
Разница в том, что при using namespace std; хватается много лишнего. В том числе стандартная функция swap. Так как в данном коде используется свой вариант swap, компилятор не может решить что использовать (по крайней мере VS2012).
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
05.05.2013, 23:14     Программа не компилируется #12
Цитата Сообщение от Tulosba Посмотреть сообщение
Какая у Вас среда разработки и какие ошибки появляются?
нетбинс, кодблокс, вс12 - никаких ошбок, + ideone , копайте в сторону своего компилятора никогда не один не будет брать стандарт если написано вручную
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.05.2013, 23:36     Программа не компилируется #13
Цитата Сообщение от Belfegor Посмотреть сообщение
вс12 - никаких ошбок
Тем не менее, на VS2010/12 наблюдаю ошибки:
'swap' : ambiguous call to overloaded function
Цитата Сообщение от Belfegor Посмотреть сообщение
всравно от вашего совета ничего не изменилось бы
В Visual Studio поведение меняется.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
06.05.2013, 00:17     Программа не компилируется #14
Tulosba,
да это какой-то баг у мастдая, прога полностью в станадрте, не раздумывайте над этой фигнёй, разрешите уже неоднозначность, раз ваш компилятор об этом мечтает - например в хорошем стиле программирования плохо писать using namespace std;

попробуйте сперва решить проблему например так:
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
#include <iostream>
#include <algorithm>
using std::cout;    using std::endl;
 
 
 
 
//**********************************************************
// partition selects the value in the middle of the *
// array set as the pivot. The list is rearranged so *
// all the values less than the pivot are on its left *
// and all the values greater than pivot are on its right. *
//**********************************************************
 
template <class T1>
int partition(T1 set[], int start, int end) {
    int pivotValue, pivotIndex, mid;
 
    mid = (start + end) / 2;
    std::swap(set[start], set[mid]);
    pivotIndex = start;
    pivotValue = set[start];
    for (int scan = start + 1; scan <= end; scan++) {
        if (set[scan] < pivotValue) {
            pivotIndex++;
            std::swap(set[pivotIndex], set[scan]);
        }
    }
    std::swap(set[start], set[pivotIndex]);
    return pivotIndex;
}
 
//************************************************
// quickSort uses the quicksort algorithm to *
// sort set, from set[start] through set[end]. *
//************************************************
 
template <class T>
void quickSort(T set[], int start, int end) {
    T pivotPoint;
 
    if (start < end) {
// Get the pivot point.
        pivotPoint = partition(set, start, end);
// Sort the first sub list.
        quickSort(set, start, pivotPoint - 1);
// Sort the second sub list.
        quickSort(set, pivotPoint + 1, end);
    }
}
//**********************************************
// swap simply exchanges the contents of *
// value1 and value2. *
//**********************************************
 
template <class T>
void swap(T &value1, T &value2) {
    int temp = value1;
 
    value1 = value2;
    value2 = temp;
}
 
int main() {
    const int SIZE = 10; // Array size
    int count; // Loop counter
 
// need to override the [] function?
    int array[SIZE] = {7, 3, 9, 2, 0, 1, 8, 4, 6, 5};
 
// Display the array contents.
    for (count = 0; count < SIZE; count++)
        cout << array[count] << " ";
    cout << endl;
 
// Sort the array.
    quickSort(array, 0, SIZE - 1);
 
// Display the array contents.
    for (count = 0; count < SIZE; count++)
        cout << array[count] << " ";
    cout << endl;
    return 0;
}
Добавлено через 2 минуты
если поможет, то можно вернуть в partition swap вместо std::swap и после
C++
1
mid = (start + end) / 2;
написать
C++
1
using std::swap;
cats2013
1 / 1 / 0
Регистрация: 14.04.2013
Сообщений: 17
06.05.2013, 07:20  [ТС]     Программа не компилируется #15
Да, ABIT - действительно помогло!!!!
Спасибо!!!

У меня траблы с компилятором Dev - C++ после того как перешел на Windows 8.

Добавлено через 3 минуты
А не подскажите, ещё как сртировать несколько массисов разной длинны.

Output должен быть примерно такой:

Sorted First Array:
-18 -1 1 9 9 33 34 45 75 100

Sorted Second Array:
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Sorted Third Array (first ten):
28 28 41 53 58 123 140 142 148 153
Sorted Third Array (last ten):
32591 32604 32609 32637 32662 32678 32685 32702 32726 32757

Press any key to continue . . .


Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.05.2013, 08:21     Программа не компилируется #16
Цитата Сообщение от cats2013 Посмотреть сообщение
А не подскажите, ещё как сртировать несколько массисов разной длинны.
Задаете несколько массивов и вызываете quickSort с соответствующими параметрами для каждого случая.

Добавлено через 56 минут
Цитата Сообщение от abit Посмотреть сообщение
прога полностью в станадрте
Номер пункта можно?
Цитата Сообщение от abit Посмотреть сообщение
разрешите уже неоднозначность, раз ваш компилятор об этом мечтает
Я в сообщении #6 для VS проблему решил уже.
cats2013
1 / 1 / 0
Регистрация: 14.04.2013
Сообщений: 17
06.05.2013, 09:13  [ТС]     Программа не компилируется #17
Цитата Сообщение от Tulosba Посмотреть сообщение
Задаете несколько массивов и вызываете quickSort с соответствующими параметрами для каждого случая.
.


Мне бы примерчик как это раелизовать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2013, 10:44     Программа не компилируется
Еще ссылки по теме:

C++ Не компилируется программа
C++ Не компилируется программа
C++ Не компилируется программа

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.05.2013, 10:44     Программа не компилируется #18
Цитата Сообщение от cats2013 Посмотреть сообщение
Мне бы примерчик как это раелизовать
Думается как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
   int array1[] = {-18, -1, 9, 1, 9, 33, 34, 45, 100, 75};
 
   int array2[] = {100, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99};
 
  // и т.п.
 
   // Sort the array1
   quickSort(array1, 0, sizeof(array1)/sizeof(*array1)-1);
 
   // Sort the array2 first 10
   quickSort(array2, 0, 9);
 
   // Sort the array2 last 10
   int end2 = sizeof(array2)/sizeof(*array2) -1;
   quickSort(array2, end2-9, end2);
 
   // Выводим 
}
По-хорошему, нужно проверки диапазонов добавить. Основная идея, я думаю, должна быть ясна.
Yandex
Объявления
06.05.2013, 10:44     Программа не компилируется
Ответ Создать тему
Опции темы

Текущее время: 10:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru