Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 97

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

12.05.2011, 11:07. Показов 8119. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.05.2011, 11:07
Ответы с готовыми решениями:

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

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

В отсортированный массив вставить несколько чисел так, чтобы не нарушалась упорядоченность
1.Найти третье по счёту отрицательное число в массиве 2.В отсортированный массив вставить несколько чисел так, чтобы не нарушалась...

8
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
12.05.2011, 12:28
Цитата Сообщение от 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
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 97
12.05.2011, 13:08  [ТС]
NNN777, спасибо.

Вы написали

Цитата Сообщение от NNN777 Посмотреть сообщение
//немного необычный и несовсем оптимальный способ сортировки
а какой метод сортировки лучше было бы использовать? уж извинете, но я в этом неособо разбираюсь...
0
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
12.05.2011, 13:15
Как вариант:
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
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,707
Записей в блоге: 6
12.05.2011, 13:31
Цитата Сообщение от Feytan Посмотреть сообщение
метод сортировки
алгоритмы сортировки массивов
удачи!
0
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 97
12.05.2011, 13:43  [ТС]
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
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
13.05.2011, 14:34
Цитата Сообщение от Feytan Посмотреть сообщение
NNN777,
странно, а у меня опять идет по убыванию, мож чего-то забыл?
А надо как? Если по возрастанию, то эту строчку поменяйте в цикле
C++
1
if (a[j-1] > a[j]) // по возрастанию
C++
1
if (a[j-1] < a[j]) //по убыванию
1
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 97
14.05.2011, 20:39  [ТС]
Я пытался отсортировать массив вставив туда случайное число, но что-то неладится
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
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
16.05.2011, 10:30
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2011, 10:30
Помогаю со студенческими работами здесь

Вставить в массив число так, чтобы массив остался неубывающим.
Добрый день! Помогите, пожалуйста, решить задачу Только каким-нибудь примитивным способом Дан массив целых чисел длиной n,...

Массив: Вставить в массив число b так, чтобы он остался неубывающим...
Дана последовательность действительных чисел а1&lt;=а2...&lt;=an. Вставить в нее действительное число b так, чтобы последовательность осталась...

Упорядочить массив по возрастанию,вставить в этот массив число так,чтобы он остался возрастающим.
Дан массив и какое-то число. Упорядочить массив по возрастанию,вставить в этот массив число так,чтобы он остался возрастающим.

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

Упорядочить массив по возрастанию и вставить число так, чтобы упорядоченность не нарушилась
одномерный массив, элементы которого задаются с помощью датчика случайных чисел от -50 до +50. 1) использовать сортировку простыми...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru