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

Ребят доработайте код программы (программа сортировки чисел методом Шелла) - C++

Восстановить пароль Регистрация
 
Bezumie
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 4
21.01.2013, 08:48     Ребят доработайте код программы (программа сортировки чисел методом Шелла) #1
Нужна помощь
Есть программа сортировки чисел методом шелла ее надо дописать чтоб она спрашивала
1 - введите сами
2 – рандом
Если выбирает 1: то
Введите размер массива:
Введите сам массив ( его надо сделать не в столбик а в строчку)
Если вводим не число то: опять
1 - введите число
2 – рандом число
(можно даже выводить на экран промежуточные итоги)
И в конце: чтобы тоже выдавал запрос
1 вывести массив на экран
2 вывести на экран и сохранить в файл (.тхт)
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
#include <iostream>
using namespace std;
 
int main()
{
    // razmer massiva,
    // kotoriy neobhodimo sortirovat
    int size;
    cin >> size;
 
    // dinam vid pamat
    // hranenie massiva razmera size
    int *a = new int[size];
    
    // schitivaem massiv
    for (int i = 0; i < size; i++)
    {
        cin >> a[i];
    }
    int step = size / 2;//inicial shag.
    while (step > 0)//poka shag ne 0
    {
      for (int i = 0; i < (size - step); i++)
                {
                    int j = i;
                    //budem idti nachinaya s  i-go elementa
                    while (j >= 0 && a[j] > a[j + step])
                    //poka ne prishli k nachalu massiva
                    //i poka rassmatr element bolshe
                    //chem element nahod na rasstoyanii shaga
                    {
                        //menaem ih mestami
                        int temp = a[j];
                        a[j] = a[j + step];
                        a[j + step] = temp;
                        j--; 
                    }
                }
                step = step / 2;//umenshaem shag
            }    
    // vivodim massiv
    for (int i = 0; i < size; i++)
    {
        cout << a[i] << ' ';
    }
 
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
заранее всем спасибо за помощь ))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2013, 08:48     Ребят доработайте код программы (программа сортировки чисел методом Шелла)
Посмотрите здесь:

программа сортировки методом пузырька C++
с помощью сортировки методом Шелла C++
комментарии к сортировки методом Шелла C++
C++ ребят, как переделать код программы для Borland++?
C++ Составить блок – схемы для шейкер- сортировки и сортировки Шелла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 434
21.01.2013, 17:18     Ребят доработайте код программы (программа сортировки чисел методом Шелла) #2
Вот, как то так. Только я не знаю как в массив в одной строке вводить. Так что извеняй
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
 
int main()
{
    ofstream outFile;
    int flag;
    // razmer massiva,
    // kotoriy neobhodimo sortirovat
    int size;
    
    cout <<"1: user, 2: random\nentered: ";
    cin >>flag;
    if (flag == 2)
    {
        srand(time(NULL));
        size = rand()%11;
    }
    else if (flag == 1)
    {
        cout <<"Enter a number: ";
        while(!(cin >>size))
        {
            cin.clear();cin.get();
            cout <<"Please a number: ";
        }
    }
    cout <<"\nRazmer matrici = " <<size <<"\n\n";
    // dinam vid pamat
    // hranenie massiva razmera size
    int *a = new int[size];    
    // schitivaem massiv
    for (int i = 0; i < size; i++)
    {
        cout <<'[' <<i <<']' <<" = ";
        cin >> a[i];
    }
    int step = size / 2;//inicial shag.
    while (step > 0)//poka shag ne 0
    {
      for (int i = 0; i < (size - step); i++)
                {
                    int j = i;
                    //budem idti nachinaya s  i-go elementa
                    while (j >= 0 && a[j] > a[j + step])
                    //poka ne prishli k nachalu massiva
                    //i poka rassmatr element bolshe
                    //chem element nahod na rasstoyanii shaga
                    {
                        //menaem ih mestami
                        int temp = a[j];
                        a[j] = a[j + step];
                        a[j + step] = temp;
                        j--; 
                    }
                }
                step = step / 2;//umenshaem shag
            }    
            cout <<endl;
    // vivodim massiv
    
    cout <<"1: for screen, 2: for screen and txt file\nenter: ";
    cin >>flag;
    if (flag == 1)
        for (int i = 0; i < size; i++)
            cout << a[i] << ' ';
    else if (flag == 2)
    {
        outFile.open("output.txt");
        for (int i = 0; i < size; i++)
        {
            cout << a[i] << ' ';
            outFile <<a[i] <<' ';
        }
        outFile.close();
    }
        
    return 0;
}
Добавлено через 1 час 41 минуту
Поправка
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
 
int main()
{
    ofstream outFile;
    int flag;
    // razmer massiva,
    // kotoriy neobhodimo sortirovat
    int size;
    
    cout <<"1: user, 2: random\nenter: ";
    while(!(cin >>flag))
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout <<"Please a number of 1 for user or 2 for random: ";
        }
    if (flag == 2)
    {
        srand(time(NULL));
        size = rand()%11;
    }
    else if (flag == 1)
    {
        cout <<"\nenter number: ";
        cin >>size;
    }
    cout <<"\nRazmer matrici = " <<size <<"\n\n";
    // dinam vid pamat
    // hranenie massiva razmera size
    int *a = new int[size];    
    // schitivaem massiv
    for (int i = 0; i < size; i++)
    {
        cout <<'[' <<i <<']' <<" = ";
        cin >> a[i];
    }
    int step = size / 2;//inicial shag.
    while (step > 0)//poka shag ne 0
    {
      for (int i = 0; i < (size - step); i++)
                {
                    int j = i;
                    //budem idti nachinaya s  i-go elementa
                    while (j >= 0 && a[j] > a[j + step])
                    //poka ne prishli k nachalu massiva
                    //i poka rassmatr element bolshe
                    //chem element nahod na rasstoyanii shaga
                    {
                        //menaem ih mestami
                        int temp = a[j];
                        a[j] = a[j + step];
                        a[j + step] = temp;
                        j--; 
                    }
                }
                step = step / 2;//umenshaem shag
            }    
            cout <<endl;
    // vivodim massiv
    
    cout <<"1: for screen, 2: for screen and txt file\nenter: ";
    cin >>flag;
    if (flag == 1)
    {
        for (int i = 0; i < size; i++)
            cout << a[i] << ' ';
        cout <<endl;
    }
    else if (flag == 2)
    {
        outFile.open("output.txt");
        for (int i = 0; i < size; i++)
        {
            cout << a[i] << ' ';
            outFile <<a[i] <<' ';
        }
        outFile.close();
        cout <<endl;
    }
        
    return 0;
}
Bezumie
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 4
22.01.2013, 13:43  [ТС]     Ребят доработайте код программы (программа сортировки чисел методом Шелла) #3
спасибо большое но при вводе цифры 2 он рандомно назначает массив а надо чтоб оператор назначал размер массива а он рандомно его заполнил. а при нажатии цифры 1 когда вводишь массив и если ввести букву он не выдает что это буква ((
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 434
22.01.2013, 13:49     Ребят доработайте код программы (программа сортировки чисел методом Шелла) #4
Цитата Сообщение от Bezumie Посмотреть сообщение
спасибо большое но при вводе цифры 2 он рандомно назначает массив а надо чтоб оператор назначал размер массива а он рандомно его заполнил. а при нажатии цифры 1 когда вводишь массив и если ввести букву он не выдает что это буква ((
Ок, исправить не долго. А по поводу ввода в массив, дык ты не указал, что нужно и при вводе в массив проверять. Щас сделаем.

Добавлено через 3 минуты
Цитата Сообщение от Bezumie Посмотреть сообщение
надо чтоб оператор назначал размер массива
Так, чтоб я до конца понял, что тебе нужно....каким размером его нужно задавать? Это вводит пользователь?
UserAK
70 / 70 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
22.01.2013, 13:59     Ребят доработайте код программы (программа сортировки чисел методом Шелла) #5
Цитата Сообщение от skorik-1992 Посмотреть сообщение
Только я не знаю как в массив в одной строке вводить. Так что извеняй
через пробел
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 434
22.01.2013, 14:06     Ребят доработайте код программы (программа сортировки чисел методом Шелла) #6
Вот, держи. И не забудь плюсик поставить)
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
 
int main()
{
    ofstream outFile;
    int flag;
    // razmer massiva,
    // kotoriy neobhodimo sortirovat
    int size;
    
    cout <<"1: user, 2: random\nenter: ";
    while(!(cin >>flag))
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout <<"Please a number of 1 for user or 2 for random: ";
        }
    if (flag == 2)
    {
        srand(time(NULL));
        cout <<"\nenter number: ";
        while(!(cin >>size))
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout <<"Please a number: ";
        }
 
    }
    else if (flag == 1)
    {
        cout <<"\nenter number: ";
        while(!(cin >>size))
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout <<"Please a number: ";
        }
    }
    cout <<"\nRazmer matrici = " <<size <<"\n\n";
    // dinam vid pamat
    // hranenie massiva razmera size
    int *a = new int[size];    
    // schitivaem massiv
    if (flag == 1)
    {
        for (int i = 0; i < size; i++)
        {
            cout <<'[' <<i <<']' <<" = ";
            while(!(cin >>a[i]))
            {
                cin.clear();
                while (cin.get() != '\n')
                    continue;
                cout <<"Please a number: ";
            }
        }
    }
    else if (flag == 2)
    {
        for (int i = 0; i < size; i++)
        {
            cout <<'[' <<i <<']' <<" = ";
            a[i] = rand()%10;
            cout <<a[i] <<"; ";
        }
    }
 
    int step = size / 2;//inicial shag.
    while (step > 0)//poka shag ne 0
    {
      for (int i = 0; i < (size - step); i++)
                {
                    int j = i;
                    //budem idti nachinaya s  i-go elementa
                    while (j >= 0 && a[j] > a[j + step])
                    //poka ne prishli k nachalu massiva
                    //i poka rassmatr element bolshe
                    //chem element nahod na rasstoyanii shaga
                    {
                        //menaem ih mestami
                        int temp = a[j];
                        a[j] = a[j + step];
                        a[j + step] = temp;
                        j--; 
                    }
                }
                step = step / 2;//umenshaem shag
            }    
            cout <<endl;
    // vivodim massiv
    
    cout <<"1: for screen, 2: for screen and txt file\nenter: ";
    cin >>flag;
    if (flag == 1)
    {
        for (int i = 0; i < size; i++)
            cout << a[i] << ' ';
        cout <<endl;
    }
    else if (flag == 2)
    {
        outFile.open("output.txt");
        for (int i = 0; i < size; i++)
        {
            cout << a[i] << ' ';
            outFile <<a[i] <<' ';
        }
        outFile.close();
        cout <<endl;
    }
        
    return 0;
}
Yandex
Объявления
22.01.2013, 14:06     Ребят доработайте код программы (программа сортировки чисел методом Шелла)
Ответ Создать тему
Опции темы

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