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

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

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

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

11.07.2012, 16:10. Просмотров 2673. Ответов 7
Метки нет (Все метки)

Мне необходимо реализовать алгоритм сортировки каскадным слиянием со специальным распределением.

Я написал программу:
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++
Задан текст. Напечатать слова этого текста отличные от последнего слова и удалить в каждом из них первую букву. #include &lt;iostream&gt; ...

ошибки в программе - C++
include &quot;stdafx.h&quot; #include &lt;cstdlib&gt; int _tmain(int argc, _TCHAR* argv) { int i,n,j,temp; char ch,a; a='a'; ...

Ошибки в программе - C++
Пкод не работает #include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; unsigned long factfunc(unsigned long);//прототип ...

Ошибки в программе С++ - C++
Помогите их исправить в выделенном фрагменте пишет не объявленный индификатор #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Ошибки в программе - C++
Помогите составить программу. За даними, що містяться в таблиці Результати тесту, створіть програму визначення кількості правильних...

Ошибки в программе - C++
// laba3.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot;// указывает на подключение к проекту файла...

Ошибки в программе - C++
Вот сама программа. Дан целочисленный массив В. Заменить все его элементы их квадратами. #include &lt;iostream&gt; #include &lt;ctime&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
509 / 461 / 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
5416 / 4812 / 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
5416 / 4812 / 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++
rational.h #define _Rational_h_ #include &lt;iostream&gt; using namespace std; int nod(int p, int q) { if (p &lt; 0) p = -p; ...

Ошибки в программе - C++
Подскажите пожалуйста как сделать так чтобы после ошибочного ввода пользователем символа вместо числа программа бы не завершалась а...

ошибки в программе - C++
Помогите разобраться что не так в программе... #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;math.h&gt; #define PI 3.141592654...

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

Ошибки в программе - C++
Подскажите пожалуйста почему у меня в коде при сложении сантиметров если их сумма превышает 100 то не добавляется 1 метр. ...


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

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

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