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

Ошибки в программе - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Jack33
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 11
11.07.2012, 16:10     Ошибки в программе #1
Мне необходимо реализовать алгоритм сортировки каскадным слиянием со специальным распределением.

Я написал программу:
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
#include <stdio.h>
#include <conio.h>
 
int main()
{
    int a[10]={12,4,0,47,-32,200,14,7890,-1,33};
    
    for (int i=0; i<10; i++) {printf("a[%d]=%d", i,a[i]);}
 
    int Sort(int* a, int start=1, int end=10)
    {
        int i,j,current,temp;
    
        if (start < end)
        {
            current = a[start];
            i = start - 1;
            j = end + 1;
            while (i < j)
            {
                do
                {
                    i = i + 1;
                }while(a[i] < current); //Если в этом и следующем while одновременно 
                do                      //поменять знаки сравнения на противоположные,
                {                       //т.е. < на >=,  > на <=, то
                    j = j - 1;          //сортировка будет происходить в обратном направлении.
                }while(a[i] > current);
                if (i < j)
                {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = a[i];
                }
            }
        }
        Sort(start,j);
        Sort(j + 1,current);
 
        return 0;
    }
 
    for (int i=0; i<10; i++) {printf("a[%d]=%d", i,a[i]);}
 
    _getch();
    return 0;
}
Компилятор выдает:

4 IntelliSense: требуется точка с запятой ";" 11 2
5 IntelliSense: идентификатор "j" не определен 33 8
6 IntelliSense: идентификатор "i" не определен 33 15
Ошибка 2 error C3861: Sort: идентификатор не найден 37 1
Ошибка 3 error C3861: Sort: идентификатор не найден 38 1
Ошибка 1 error C2601: Sort: недопустимые локальные определения функций 11 1

Что не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2012, 16:10     Ошибки в программе
Посмотрите здесь:

Ошибки в программе C++
Ошибки в программе C++
Ошибки в программе C++
Ошибки в программе С++ C++
Ошибки в программе C++
C++ Ошибки в программе
ошибки в программе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
11.07.2012, 16:14     Ошибки в программе #2
Вынесите определение ф-ции Sort из main. И ещё при рекурсивном вызове Sort неправильные аргументы передаются, первым должен быть указатель на int.
Jack33
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 11
11.07.2012, 16:46  [ТС]     Ошибки в программе #3
Цитата Сообщение от Schizorb Посмотреть сообщение
И ещё при рекурсивном вызове Sort неправильные аргументы передаются, первым должен быть указатель на int.
Не могу разобраться, как это написать.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2012, 17:22     Ошибки в программе #4
Удалил.
Jack33
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 11
11.07.2012, 18:28  [ТС]     Ошибки в программе #5
Это все исправил, теперь проблема в сортировке — она идет бесконечно, где не так?
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
#include <stdio.h>
#include <clocale>
#include <conio.h>
 
int Sort(int* a, int start, int end)
    {
        int i,j,current,temp;
    
        if (start < end)
        {
            current = a[start];
            i = start - 1;
            j = end + 1;
            while (i < j)
            {
                do
                {
                    i = i + 1;
                }while(a[i] < current); //Если в этом и следующем while одновременно 
                do                      //поменять знаки сравнения на противоположные,
                {                       //т.е. < на >=,  > на <=, то
                    j = j - 1;          //сортировка будет происходить в обратном направлении.
                }while(a[i] > current);
                if (i < j)
                {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = a[i];
                }
            }
        }
        Sort(a,start,j);
        Sort(a,j + 1,current);
 
        return 0;
    }
 
int main()
{
    setlocale(LC_CTYPE, "");
    printf("Введите значения элементов массива\n");
 
    int a[10];
 
    for (int i=0; i<10; i++) {scanf("%d",&a[i]);}
    
    for (int i=0; i<10; i++) {printf("\na[%d]=%d", i,a[i]);}
 
    Sort(a,0,9);
 
    {printf("\n\nМассив отсортирован");}
    for (int i=0; i<10; i++) {printf("\na[%d]=%d", i,a[i]);}
 
    _getch();
    return 0;
}
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2012, 20:05     Ошибки в программе #6
Цитата Сообщение от Jack33 Посмотреть сообщение
где не так?
В 20 - 23 строке виснет.

Добавлено через 7 минут
Цитата Сообщение от Jack33 Посмотреть сообщение
}while(a[i] > current);
В 23 строке. Наверное, нужно }while(a[j] > current); Если исправить, то проходит дальше и ошибка в строке 32 : "неинициализированная переменная j".

Добавлено через 11 минут
На какой-то из рекурсий происходит переход от 9 строки к 23 и тогда j неинициализированна.
На какой по очереди рекурсии, зависит от данных в массиве.

Добавлено через 40 минут
После 31,наверное, нужно поставить:
C++
1
else return 0;
Jack33
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 11
11.07.2012, 21:44  [ТС]     Ошибки в программе #7
alsav22, так работает, но отсортированном массиве почему-то другие значения о_О
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 01:45     Ошибки в программе
Еще ссылки по теме:

C++ Ошибки в программе
Ошибки в программе C++
C++ Ошибки в программе
C++ Ошибки в программе
Ошибки в программе C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2012, 01:45     Ошибки в программе #8
Цитата Сообщение от Jack33 Посмотреть сообщение
alsav22, так работает, но отсортированном массиве почему-то другие значения о_О
Тут я ничем помочь не смогу. В таком алгоритме сортировки я ничего не понимаю.
Yandex
Объявления
12.07.2012, 01:45     Ошибки в программе
Ответ Создать тему
Опции темы

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