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

Выводит какое-то левое число подскажите в чем ошибка? - C++

Восстановить пароль Регистрация
 
El_i_z_a_b_e_th
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 25
02.10.2016, 10:57     Выводит какое-то левое число подскажите в чем ошибка? #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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <cmath>
#include <ctime>
#include <clocale>
#include <conio.h>
 
using namespace std;
 
//функция, сливающая массивы
void Merge(int *A, int first, int last)
{
    int middle, start, final, j;
    int *mas = new int[100];
    middle = (first + last) / 2; //вычисление среднего элемента
    start = first; //начало левой части
    final = middle + 1; //начало правой части
    for (j = first; j <= last; j++) //выполнять от начала до конца
    if ((start <= middle) && ((final>last) || (A[start]<A[final])))
    {
        mas[j] = A[start];
        start++;
    }
    else
    {
        mas[j] = A[final];
        final++;
    }
    //возвращение результата в список
    for (j = first; j <= last; j++) 
        A[j] = mas[j];
    delete[]mas;
};
//рекурсивная процедура сортировки
void MergeSort(int *A, int first, int last)
{
    {
        if (first<last)
        {
            MergeSort(A, first, (first + last) / 2); //сортировка левой части
            MergeSort(A, (first + last) / 2 + 1, last); //сортировка правой части
            Merge(A, first, last); //слияние двух частей
        }
    }
};
//главная функция
int main()
{
    setlocale(LC_ALL, "Rus");
    int n;
    cout << "Размер массива: "; 
    cin >> n;
    int *A = new int[n];
 
    for (int i = 0; i < n; ++i) // заполнение массива
    {
        A[i] = rand() % 20;
        cout << A[i] << " ";
    }
 
    cout << endl;
    MergeSort(A, 0, n-1); //вызов сортирующей процедуры
    cout << "Упорядоченный массив: "; //вывод упорядоченного массива
    for (int i = 0; i <= n; i++) 
        cout << A[i] << " ";
    
    delete[]A;
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2016, 10:57     Выводит какое-то левое число подскажите в чем ошибка?
Посмотрите здесь:

C++ Подскажите в чем ошибка
C++ Подскажите в чем ошибка
Подскажите в чем ошибка C++
C++ Подскажите, в чем ошибка
подскажите в чем ошибка? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
мановар
 Аватар для мановар
253 / 82 / 19
Регистрация: 12.03.2016
Сообщений: 311
Завершенные тесты: 1
02.10.2016, 11:17     Выводит какое-то левое число подскажите в чем ошибка? #2
строка 63 i < n как в предыдущем цикле
El_i_z_a_b_e_th
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 25
02.10.2016, 16:16  [ТС]     Выводит какое-то левое число подскажите в чем ошибка? #3
а на что его поменять можно ? ведь n - это размерность моего массива

Добавлено через 2 минуты
мановар, иначе же будет не правильно
мановар
 Аватар для мановар
253 / 82 / 19
Регистрация: 12.03.2016
Сообщений: 311
Завершенные тесты: 1
02.10.2016, 16:56     Выводит какое-то левое число подскажите в чем ошибка? #4
Ничего менять не надо. Как создаете массив в 54 строке, так его и выводите в 63.
C++
1
for (int i = 0; i < n; ++i)
, а размерность ваша остается, так как массив начинается с A[0], а не с A[1]

Добавлено через 11 минут
Пусть n=3, тогда наш массив A[0],A[1],A[3] - 3 элемента (i<3), а при (i<=3) получаем A[0],A[1],A[2],A[3] - 4 элемента, переизбыток. Вот он Вам и выдает этот лишний четвертый элемент.
El_i_z_a_b_e_th
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 25
02.10.2016, 18:52  [ТС]     Выводит какое-то левое число подскажите в чем ошибка? #5
мановар, спасибо не заметила)
мановар
 Аватар для мановар
253 / 82 / 19
Регистрация: 12.03.2016
Сообщений: 311
Завершенные тесты: 1
02.10.2016, 20:16     Выводит какое-то левое число подскажите в чем ошибка? #6
El_i_z_a_b_e_th, пожалуйста, бывает.
Yandex
Объявления
02.10.2016, 20:16     Выводит какое-то левое число подскажите в чем ошибка?
Ответ Создать тему
Опции темы

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