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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
#1

в отсортированный массив, вставить случайное число, чтобы он оставался отсортированным - C++

12.05.2011, 11:07. Просмотров 1456. Ответов 8
Метки нет (Все метки)

Подскажите, что не так делаю:

Задание: Дан одномерный массив длиной N. Массив заполняется датчиком случайных чисел (лучше использовать любое распределение, кроме нормального).
Требуется:
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
#include <iostream>
#include<time.h>
using namespace std;
 
int main ()
{
        srand (time(NULL));
{
        int i, N;
        
        int *a = new int[N];
        
        bool t = true;
        
        cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
        
        cin>>N;
 
        cout<<"\n";
  
  
        for(i=0; i<N; i++)
        {
                        a[N]=rand()%20;
                        
                        cout<<a[N]<<" ";
        }
                cout<<"\n";
                
        while(t)
        {
                t = false;
                for (int i = 0; i < N - 1; i++)
                {
                        if (a[i] < a[i + 1])
                        {
                                swap(a[i], a[i + 1]);
                                t = true;
                        }
                }
        }
        cout << "Massiv otsortirovannii po ybivaniu: " << endl;        
 
 
 
        for (int i = 0; i < N; i++)
        {
                cout << a[i] << endl;
        }
        delete [] a;
}
    system("pause");
    
        return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2011, 11:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос в отсортированный массив, вставить случайное число, чтобы он оставался отсортированным (C++):

в отсортированный массив, вставить случайное число, чтобы он оставался отсортированным - C++
Помогите пожалуйста! Как мне сделать задачу на C++ в win32. В Dos я ее сделал, а вот как сделать ее не в Dos я не знаю. Вот сама задача: ...

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

Массив: Вставить в последовательность действительное число b так, чтобы последовательность осталась неубывающей. - C++
дана последовательность действительных чисел. вставить в нее действительное число b так, чтобы последовательность осталась неубывающей. ...

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

Упорядочить все элементы матрицы таким образом, чтобы при чтении матрицы по строкам ее элементы образовывали отсортированный по возрастанию массив - C++
Разработать программу, которая вводит целочисленную матрицу из n строк и m столбцов (1&lt;n&lt;=100, 1&lt;m&lt;=50) и Упорядочить все элементы матрицы...

Задать массив вещественных чисел и вставить в исходный массив число - C++
вот такая программка Задать массив вещественных чисел с помощью датчика случайных чисел. Вставить в исходный массив число. С...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
12.05.2011, 12:28 #2
Цитата Сообщение от Feytan Посмотреть сообщение
Подскажите, что не так делаю:
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
#include <iostream>
#include<time.h>
using namespace std;
 
int main ()
{
    srand (time(NULL));
    int i, N;
    //Сначала надо задать количество элементов
    cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
    cin>>N;
    cout<<"\n";  
    //а потом уже резервировать место на диске под это количество элементов
    int *a = new int[N];
    bool t = true;
 
    for(i=0; i<N; i++)
    {
        a[i]=rand()%20; //массив индексируется переменной i, а не количеством элементов N
        cout<<a[i]<<" ";
    }            
    cout<<"\n";
    //немного необычный и несовсем оптимальный способ сортировки
    while(t)
    {
        t = false;
        for (int i = 0; i < N - 1; i++)
        {
            if (a[i] < a[i + 1])
            {
                swap(a[i], a[i + 1]);
                t = true;
            }
        }
    }
    cout << "Massiv otsortirovannii po ybivaniu: " << endl;        
    for (int i = 0; i < N; i++)
        cout << a[i] << " ";
 
    delete [] a;
    system("pause");
    
    return 0;
}
1
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
12.05.2011, 13:08  [ТС] #3
NNN777, спасибо.

Вы написали

Цитата Сообщение от NNN777 Посмотреть сообщение
//немного необычный и несовсем оптимальный способ сортировки
а какой метод сортировки лучше было бы использовать? уж извинете, но я в этом неособо разбираюсь...
0
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
12.05.2011, 13:15 #4
Как вариант:
C++
1
2
3
4
5
6
7
8
for (int i = 0; i < N - 1; i++)
        {
            for(int j = N-1; j>i; j--)
                        if (a[j-1] < a[j])
                        {
                                swap(a[j], a[j-1]);
                        }           
        }
На порядок меньше проходов в цикле
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,645
Записей в блоге: 6
12.05.2011, 13:31 #5
Цитата Сообщение от Feytan Посмотреть сообщение
метод сортировки
алгоритмы сортировки массивов
удачи!
0
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
12.05.2011, 13:43  [ТС] #6
NNN777,
странно, а у меня опять идет по убыванию, мож чего-то забыл?

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
#include <iostream>
#include<time.h>
using namespace std;
 
int main ()
{
        srand (time(NULL));
        int i, N;
        //Сначала надо задать количество элементов
        cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
        cin>>N;
        cout<<"\n";  
        //а потом уже резервировать место на диске под это количество элементов
        int *a = new int[N];
        bool t = true;
 
    for(i=0; i<N; i++)
        {
                a[i]=rand()%20; //массив индексируется переменной i, а не количеством элементов N
                cout<<a[i]<<" ";
        }            
        cout<<"\n";
        //немного необычный и несовсем оптимальный способ сортировки
        while(t)
        {
                t = false;
                for (int i = 0; i < N - 1; i++)
                {
                        for(int j = N-1; j>i; j--)
                        if (a[j-1] < a[j])
                        {
                                swap(a[j], a[j-1]);
                        } 
                }
        }
        cout << "Massiv otsortirovannii po vozrastaniu: " << endl;        
        for (int i = 0; i < N; i++)
                cout << a[i] << " ";
 
        delete [] a;
    system("pause");
    
        return 0;
}
0
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
13.05.2011, 14:34 #7
Цитата Сообщение от Feytan Посмотреть сообщение
NNN777,
странно, а у меня опять идет по убыванию, мож чего-то забыл?
А надо как? Если по возрастанию, то эту строчку поменяйте в цикле
C++
1
if (a[j-1] > a[j]) // по возрастанию
C++
1
if (a[j-1] < a[j]) //по убыванию
1
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
14.05.2011, 20:39  [ТС] #8
Я пытался отсортировать массив вставив туда случайное число, но что-то неладится
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
#include <iostream>
#include<time.h>
using namespace std;
 
int main ()
{
        srand (time(NULL));
        int i, N, k;
        //Сначала задаем количество элементов массива
        cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
        cin>>N;
        //Задаем случайное число
        cout<<endl<<"k: "; //k - случайное число
        cin>>k;
        cout<<endl;
        //а потом уже резервировать место на диске под это количество элементов
        int *a = new int[N];
        bool t = true;
 
    for(i=0; i<N; i++)
        {
                a[i]=rand()%20;
                cout<<a[i]<<"  ";
        }            
        cout<<endl;
        while(t)
        {
                t = false;
                for (int i = 0; i < N - 1; i++)
                {
                        for(int j = N-1; j>i; j--)
                        if (a[j-1] > a[j])
                        {
                                swap(a[j], a[j-1]);
                        } 
                }
        }
        cout<<endl;
        cout << "Massiv otsortirovannii po vozrastaniu: " << endl;        
        for (int i = 0; i < N; i++)
        {
                cout << a[i] << "  ";
                cout<<endl;
                }
        
        for(i=0;i<N;i++)
    {      
        if(k>a[i]) cout<<"  "<<a[i]; 
                   cout<<"  "<<k;
        if(k<a[i]) cout<<"  "<<a[i];
    }
         cout <<"Otsortirovanii massiv posle vsavki sluchainogo chisla: "<<endl;
         for (int i = 0; i < N; i++)
        {
                cout << a[i] << "  ";
                cout<<endl;
                }
        delete [] a;
    system("pause");
    
        return 0;
}
Ктому же у меня почему-то массивы отсортированные и со случайным число стали по вертикали. Подскажите, в чем на этот раз у меня ошибка
0
Миниатюры
в отсортированный массив, вставить случайное число, чтобы он оставался отсортированным  
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
16.05.2011, 10:30 #9
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
#include <iostream>
#include<time.h>
using namespace std;
 
int main ()
{
        srand (time(NULL));
        int i, N, j, k;
        //Сначала надо задать количество элементов
        cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
        cin>>N;
        cout<<"\n";  
        //а потом уже резервировать место на диске под это количество элементов
        int *a = new int[N+1];// резервируем память под массив на 1 элемент больше
        
 
 
        for(i=0; i<N; i++)
        {
                a[i]=rand()%20; //массив индексируется переменной i, а не количеством элементов N
                cout<<a[i]<<" ";
        }            
        cout<<"\n";
        //немного необычный и несовсем оптимальный способ сортировки
        for (int 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]);
                        }           
        }
        cout << "Massiv otsortirovannii po vozrastaniu: " << endl;        
        for (int i = 0; i < N; i++)
                cout << a[i] << " ";
 
        cout<<endl<<"k: "; //k - случайное число
        cin>>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 << "Massiv: " << endl;        
        for (int i = 0; i < N+1; i++)
                cout << a[i] << " ";
 
        delete [] a;
    system("pause");
    
        return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2011, 10:30
Привет! Вот еще темы с ответами:

В отсортированный список вещественных чисел после каждого максимального числа вставить номер в списке - C++
Нужно в не рассортированный список вещественных чисел после каждого максимального числа вставить номер в списке и номер среди максимальных...

вставить число в массив - C++
Вставить число k в позицию l в заданный массив

Подскажите как в массив вставить число - C++
Вставить в массив число 10 после 2 элемента.

Вставить число а в массив целых чисел - C++
Вставить число а в массив целых чисел, после всех элементов в которых есть число 5. Какой должен быть рамер массива? #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.05.2011, 10:30
Ответ Создать тему
Опции темы

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