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

Показать процесс сортировки массива - C++

Восстановить пароль Регистрация
 
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
14.06.2011, 00:51     Показать процесс сортировки массива #1
Подскажите, какой код нужно добавить, чтобы в программе:
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
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<time.h>
#include<windows.h>
 
using namespace std;
 
int main ()
{
        DWORD t1, t2, d_time;
        
        srand (time(NULL));
        
        int i, N, j, k;
        
        //Задаем количество элементов
        
        cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
        
        cin>>N;
        
        cout<<"\n"; 
        
        t1 = GetTickCount();
        
    if(N > 0)
    {
 
        //Резервируем место на диске под количество элементов
        
        int *a = new int[N+1];// резервируем память под массив на 1 элемент больше
 
         cout << "Vremennii massiv: " << endl;
         for(i=0; i<N; i++)
        {
                a[i]=rand()%100;
                cout<<a[i]<<" ";
        }            
        cout<<"\n";
        cout<< endl;
              
        int count=0;
        for (i = 0; i < N - 1; i++)
                {
                        for(j = N-1; j>i; j--)
                        if (a[j-1] > a[j])
                        {
                                swap(a[j], a[j-1]); count++;
                        }           
        }
        cout << "Otsortirovannii massiv: " << endl;        
        for (i = 0; i < N; i++)
                cout << a[i] << " ";
                cout<< endl;
                
        cout<<"\nKolichestvo sravnenii: "<<count;   
        cout<< endl;
        
        k=rand()%100;
        cout<< endl << "Sluchainoe chislo - k: " << k <<endl; //k - случайное число
        cout<< endl;
 
                i=0;
                while ((a[i]<k) && (i<N)) //ищем место, куда поставить случайное число
                        i++;
                for (j=N; j>i; j--) //сдвигаем все элементы массива на 1 в конец, чтобы вставить случайный элемент
                        a[j]=a[j-1];
 
                a[i]=k; //вставляем на найденное место случайный элемент
 
                cout << "Konechnii massiv: " << endl;        
        for (i = 0; i < N+1; i++)
                cout << a[i] << " ";
                cout <<"\n";
                
        delete [] a;
        }
        
        else cout<<"Chislo elementov ne mozhet byt <=0" << endl;
 
                 t2 = GetTickCount();
                d_time = t2 - t1;
                        
                cout<<"\nVremia raboti: "<<d_time<<" milisek\n";
 
    system("pause");
    
        return 0;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.06.2011, 01:24     Показать процесс сортировки массива #2
Цитата Сообщение от Feytan Посмотреть сообщение
показывался процесс сортировки масиива (как происходит перестановка).
печатайте весь массив сразу после перестановки

Добавлено через 40 секунд
Цитата Сообщение от Feytan Посмотреть сообщение
1) каждое случайное число было в кружочке;
каком еще кружочке?
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
14.06.2011, 05:11     Показать процесс сортировки массива #3
ТС используй скобки при выводе (5) (5)

cout<< "(" << a[i]<<") ";
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
14.06.2011, 09:47  [ТС]     Показать процесс сортировки массива #4
Maxwe11,

Так это в коде есть и так... Мне нужно чтобы показывался сам процесс сортировки, т.е. чтобы показывалось как происходит переставление

tylix,

Не совсем так, мне говорили, что должно быть подключение графической библиотеки
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
14.06.2011, 10:09     Показать процесс сортировки массива #5
дык, вы хотя бы конкретизируйте что хотите получить в результате.

по поводу отображения сортировки, вставьте что-ли код в сортировку
C++
1
2
3
4
5
                        if (a[j-1] > a[j])
                        {
                                swap(a[j], a[j-1]); count++;
                                cout << a[j] << "->" << a[j-1]<< endl; // <-- вот этот 
                        }
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
14.06.2011, 11:33  [ТС]     Показать процесс сортировки массива #6
co6ak,
Спасибо.

А как быть с 1 пунктом, кто нибудь знает?
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
14.06.2011, 11:40     Показать процесс сортировки массива #7
вот не ответил на мой вопрос ведь

как ты себе представляешь этот кружок? у тебя сугубо консольное приложение, я не представляю как залупить туда "кружок". тем более не понятно кто сказал подключить графическую либу
сделай как посоветовали выше
C++
1
2
3
4
5
         for(i=0; i<N; i++)
        {
                a[i]=rand()%100;
                cout<< "(" << a[i]<<") " ;
        }
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
14.06.2011, 12:00  [ТС]     Показать процесс сортировки массива #8
co6ak,
Извени. Препод сказал, что как-то это можно сделать в досе, но для этого надо подключать графическую библиотеку.

Я потому и спрашивал, потому что сам слабо это себе представлял...

Вот измененный код (я добавил туда немного текста и сделал как было сказано выше):

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
#include <iostream>
#include<time.h>
#include<windows.h>
 
using namespace std;
 
int main ()
{
        DWORD t1, t2, d_time;
        
        srand (time(NULL));
        
        int i, N, j, k;
        
        //Задаем количество элементов
        
        cout<<"===V otsortirovannii massiv vstavit sluchainoe==="<<endl;
        cout<<"===chislo, chtobi on ostavalsya otsortirovannim==="<<endl;
        
        cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
        
        cin>>N;
        
        cout<<"\n"; 
        
        t1 = GetTickCount();
        
    if(N > 0)
    {
 
        //Резервируем место на диске под количество элементов
        
        int *a = new int[N+1];// резервируем память под массив на 1 элемент больше
 
         cout << "Vremennii massiv: " << endl;
         for(i=0; i<N; i++)
        {
                a[i]=rand()%100;
                cout<<"("<<a[i]<<")"<<" ";
        }            
        cout<<"\n";
        cout<< endl;
              
        int count=0;
        for (i = 0; i < N - 1; i++)
                {
                        for(j = N-1; j>i; j--)
                        if (a[j-1] > a[j])
                        {
                                swap(a[j], a[j-1]); count++; //сортировка + ее подсчет
                                cout<<"("<<a[j]<<")"<<"->"<<"("<<a[j-1]<<")"<<endl;  //показывает процесс сортировки
                                cout<<endl;
                        }           
        }
        cout << "Otsortirovannii massiv: " << endl;        
        for (i = 0; i < N; i++)
                cout<<"(" << a[i]<<")" << " ";
                cout<< endl;
                
        cout<<"\nKolichestvo sravnenii: "<<count;   
        cout<< endl;
        
        k=rand()%100;
        cout<< endl << "Sluchainoe chislo - k: "<<"(" << k <<")"<<endl; //k - случайное число
        cout<< endl;
 
                i=0;
                while ((a[i]<k) && (i<N)) //ищем место, куда поставить случайное число
                        i++;
                for (j=N; j>i; j--) //сдвигаем все элементы массива на 1 в конец, чтобы вставить случайный элемент
                        a[j]=a[j-1];
 
                a[i]=k; //вставляем на найденное место случайный элемент
 
                cout << "Konechnii massiv: " << endl;        
        for (i = 0; i < N+1; i++)
                cout<<"(" << a[i]<<")" << " ";
                cout <<"\n";
                cout<<"\nSovsem drugoe delo!!!"<<endl;
                
        delete [] a;
        }
        
        else cout<<"Chislo elementov ne mozhet byt <=0" << endl;
 
                 t2 = GetTickCount();
                d_time = t2 - t1;
                        
                cout<<"\nVremia raboti: "<<d_time<<" milisek\n";
                cout<<"\nDumaem pregde chem pisat!!!\n"<<endl;
    system("pause");
    
        return 0;
}
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
14.06.2011, 12:00     Показать процесс сортировки массива #9
Feytan поищи на форуме как менять цвет выводимого текста в консоле,
на каждой итерации перестановки, выводи текущ. положение эл.массива, а перем-й эл. др. цветом

и будет тебе счастье, хоть и не в кружкЕ )
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
14.06.2011, 12:27  [ТС]     Показать процесс сортировки массива #10
tylix,

Я вот попытался сделать только случайное число K красным цветом, но что-то идет не так. Вот код:

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
#include <iostream>
#include<time.h>
#include<windows.h>
 
using namespace std;
 
int main ()
{
        DWORD t1, t2, d_time;
        
        srand (time(NULL));
        
        int i, N, j, k;
        
        //Задаем количество элементов
        
        cout<<"===V otsortirovannii massiv vstavit sluchainoe==="<<endl;
        cout<<"===chislo, chtobi on ostavalsya otsortirovannim==="<<endl;
        
        cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
        
        cin>>N;
        
        cout<<"\n"; 
        
        t1 = GetTickCount();
        
    if(N > 0)
    {
 
        //Резервируем место на диске под количество элементов
        
        int *a = new int[N+1];// резервируем память под массив на 1 элемент больше
 
         cout << "Vremennii massiv: " << endl;
         for(i=0; i<N; i++)
        {
                a[i]=rand()%100;
                cout<<"("<<a[i]<<")"<<" ";
        }            
        cout<<"\n";
        cout<< endl;
              
        int count=0;
        for (i = 0; i < N - 1; i++)
                {
                        for(j = N-1; j>i; j--)
                        if (a[j-1] > a[j])
                        {
                                swap(a[j], a[j-1]); count++; //сортировка по возрастанию + ее подсчет
                                cout<<"("<<a[j]<<")"<<"->"<<"("<<a[j-1]<<")"<<endl;  //показывает процесс сортировки
                                cout<<endl;
                        }           
        }
        cout << "Otsortirovannii massiv: " << endl;        
        for (i = 0; i < N; i++)
                cout<<"(" << a[i]<<")" << " ";
                cout<< endl;
                
        cout<<"\nKolichestvo sravnenii: "<<count;   
        cout<< endl;
        
 
        k=rand()%100;
        system("color 0C");
        cout<< endl << "Sluchainoe chislo - k: "<<"(" << k <<")"<<endl; //k - случайное число
        cout<< endl;
 
                i=0;
                while ((a[i]<k) && (i<N)) //ищем место, куда поставить случайное число
                        i++;
                for (j=N; j>i; j--) //сдвигаем все элементы массива на 1 в конец, чтобы вставить случайный элемент
                        a[j]=a[j-1];
 
                a[i]=k; //вставляем на найденное место случайный элемент
 
                cout << "Konechnii massiv: " << endl;        
        for (i = 0; i < N+1; i++)
                cout<<"(" << a[i]<<")" << " ";
                cout <<"\n";
                cout<<"\n===Sovsem drugoe delo!!!==="<<endl;
                
        delete [] a;
        }
        
        else cout<<"Chislo elementov ne mozhet byt <=0" << endl;
 
                 t2 = GetTickCount();
                d_time = t2 - t1;
                        
                cout<<"\nVremia raboti: "<<d_time<<" milisek\n";
                cout<<"\n===Dumaem pregde chem pisat!!!===\n"<<endl;
    system("pause");
    
        return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2011, 13:41     Показать процесс сортировки массива
Еще ссылки по теме:

C++ Циклический вычислительный процесс (без массива)
C++ Функция сортировки массива
Функция сортировки массива C++

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

Или воспользуйтесь поиском по форуму:
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
14.06.2011, 13:41     Показать процесс сортировки массива #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я и рад бы .. да вот не приходилось мне радугу в консоле на Си рисовать )

На форуме где то видел эту тему, но где не знаю.. ща взгляну

Цвет фона консоли с++

Добавлено через 18 минут
надыбал рабочий примерчик
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
#include <iostream>
 
#include <windows.h> // WinApi header
 
using namespace std; //std::cout, std::cin
 
int main()
 
{
 
    HANDLE hConsole;
 
    int k;
 
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);     // you can loop k higher to see more color choices
 
    for(k = 1; k < 255; k++)     {
 
        // pick the colorattribute k you want
 
        SetConsoleTextAttribute(hConsole, k);
 
        cout << k << " I want to be nice today!" << endl;     }
 
    cin.get(); // wait
 
    return 0;
 
}
C++
1
2
SetConsoleTextAttribute(hConsole, 0x0F); // черный фон белый текст 
SetConsoleTextAttribute(hConsole, 0xF0); // белый фон черный текст
Добавлено через 22 минуты
думаю, эта функция тебе тоже пригодится, можно огранизовать вывод массива с каждым проходом в одном месте экрана... все остальное есть в MSDN

C++
1
2
3
4
5
COORD pos;
 
pos.X = 0; pos.Y = 0;
 
SetConsoleCursorPosition(hConsole, pos); // перемещаем курсор в лев. верх. угол
Yandex
Объявления
14.06.2011, 13:41     Показать процесс сортировки массива
Ответ Создать тему
Опции темы

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