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

Нужен алгоритмом по вставлению числа в массив - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
17.06.2012, 03:16     Нужен алгоритмом по вставлению числа в массив #1
Помогите...
Дана последовательность действительный чисел A1 <= A2, <= ... An. Вставить действительно число b в неё так, чтобы последовательность осталась неубывающей.
Есть код. Нужен сам алгоритм по вставлению числа в массив. Уже несколько дней пытаюсь найти ответ.

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
#include <iostream>
using namespace std;
 
int main()
{
   int n, a[n], b; 
    cout << "Введите количество элементов в массиве" << endl;
   cin >> n;
    cout << "Введите b" << endl;
   cin >> b;
    cout << "Введите значение элементов" << endl;
   for (int i = 0; i < n; i++)
    cin >> a[i]; 
   for (int i = 0; i < n; i++)  
    cout << a[i] << " ";
   for (int i = 0; i < n; i++)
    for (int j = i; j < n; j++) 
     while (a[i] > a[j])
     { 
       cout << "Введите значения последовательно" << endl;
       for (int i = 0; i < n; i++)
       cin >> a[i];
     }
    cout << endl;
    // алгоритм вставки
    
system("PAUSE >> null");    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2012, 03:16     Нужен алгоритмом по вставлению числа в массив
Посмотрите здесь:

Дан массив В[0:n-1] целых чисел и числа x и y , где x<y. на основе элементов массива В сформировать массив D[0:m-1] C++
Двумерные массив(с++).практически получилась.нужен совет. C++
C++ нужен тип целого числа для числа 19!= 121 645 100 408 832 000
C++ Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования
C++ Рекурсия (функция определения НОД (наибольшего общего делителя) числа алгоритмом Евклида)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex330
118 / 118 / 4
Регистрация: 12.06.2012
Сообщений: 130
19.06.2012, 02:27     Нужен алгоритмом по вставлению числа в массив #21
Леонид посмотрите мой код пожалуйста. Пишу под линуксом, возможно нужны другие библиотеки. я тоже только учусь. Буду рад в дальнейшем разбирать подобные примеры. А что за задачник?
C++ (Qt)
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
#include <iostream>
using namespace std;
int main()
{
    const int n = 10;
    int arr[n], b;
    //формируем последовательность
    for (int i= 1; i<n+1; i ++) 
        arr[i-1]= i;
 
    //вводим число
    cout <<"Введите число от 1 до "<<n <<" ";
    cin >> b;
 
    //создаем итоговый массив для последовательности + введенное число
    int arrRezault[n+1]; 
 
    // заполняем итоговый массив
    bool valueInserted = false;
    for (int i= 0; i<n; i ++)
    {
        if (valueInserted)
          arrRezault[i+1] = arr[i];
       else
         if (arr[i] >= b)
           {
              valueInserted=true;
              arrRezault[i] = b; 
              arrRezault[i+1] = arr[i];
           }
           else
             arrRezault[i] = arr[i];
    }
         
    if (!valueInserted)
        arrRezault[n+1]=b;      
    
    //Выводим последовательность
    for (int i= 0; i<n+1; i ++) 
        cout <<"arrRezault["<<i <<"]="<< arrRezault[i]<<"\n";
    
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
19.06.2012, 02:47     Нужен алгоритмом по вставлению числа в массив #22
Alex330, в строке 36 должно быть
C++
1
arrRezault[n] = b;
Alex330
118 / 118 / 4
Регистрация: 12.06.2012
Сообщений: 130
19.06.2012, 07:23     Нужен алгоритмом по вставлению числа в массив #23
спасибо, grizlik78 - все верно, должно быть arrRezault[n] = b;
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
19.06.2012, 10:34  [ТС]     Нужен алгоритмом по вставлению числа в массив #24
Alex330, Поскольку массив заполняется уже изначально 10 значениями
C++
1
2
for (int i= 1; i<n+1; i ++) 
 arr[i-1]= i;
То получается что когда я хочу вставить 5 в эту последовательность от 1 до 10, он её просто дублирует так, как она уже есть и на выходе у нас массив {1,2,3,4,5,5,6,7,8,9,10}. Если вставляю 11 в последовательность, то на выходе у нас {1,2,3,4,5,6,7,8,9,10,0}, а не {1,2,3,4,5,6,7,8,9,10,11}. Единственное что правильно вставляет так это 0 в начало последовательность, на выходе {0,1,2,3,4,5,6,7,8,9,10}
Что касается задач, они у меня не из сборника, они у меня просто распечатаны на А4, их тут где-то 200 с лишним. На одномерные и двумерные массивы.
Alex330
118 / 118 / 4
Регистрация: 12.06.2012
Сообщений: 130
19.06.2012, 13:18     Нужен алгоритмом по вставлению числа в массив #25
Цитата Сообщение от Leonman Посмотреть сообщение
Alex330 Если вставляю 11 в последовательность, то на выходе у нас {1,2,3,4,5,6,7,8,9,10,0}, а не {1,2,3,4,5,6,7,8,9,10,11}
А это с учетом замечания что, в 36 строке кода должно быть arrRezault[n] = b вместо arrRezault[n+1] = b ?
Именно этот фрагмент кода отвечает за указанный случай.
Вечером проверю еще раз и выложу исправленный вариант.

Хотя по красоте мой алгоритм далек от этого:

C++ (Qt)
1
2
3
4
5
// алгоритм вставки
    unsigned idx = n;
    for (; idx > 0 && a[idx-1] > b; --idx)
        a[idx] = a[idx-1];
    a[idx] = b;
Перебор массива с конца
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
19.06.2012, 14:05  [ТС]     Нужен алгоритмом по вставлению числа в массив #26
Alex330, С учётом arrRezault[n] = b вместо arrRezault[n+1] = b 11 вставляется правильно, на выходе {1,2,3,4,5,6,7,8,9,10,11}.
Я хотел ещё спросить что означает unsigned перед idx = n;
Alex330
118 / 118 / 4
Регистрация: 12.06.2012
Сообщений: 130
19.06.2012, 14:15     Нужен алгоритмом по вставлению числа в массив #27
Для указания типа unsigned int достаточно привести только ключевое слово unsigned , в общем случае unsigned - модификатор типа, указывает на то, что число беззнаковое.
Например:
переменная типа short может применять значения от -32768 до 32767,
а переменная типа unsigned short может применять значения от 0 до 65535
и та и другая переменная используют 16 бит для хранения чисел.

В данном примере unsigned idx = n; - создание переменной idx типа unsigned int - беззнаковое целое с начальным значением n.
Могу ошибаться, но по-моему "величина" int (т.е. сколько разрядов она использует) зависит от параметров ОС, на 32 битных это наверное 32, у меня наверное 64.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 21:32     Нужен алгоритмом по вставлению числа в массив
Еще ссылки по теме:

C++ Нужен совет !На что заменить гиганский массив
Переписать числа в массив Z по условию. Удалить все нечетные числа C++
C++ Массив A содержит только два одинаковых числа. Найти эти числа и указать их индексы ошибка

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

Или воспользуйтесь поиском по форуму:
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
19.06.2012, 21:32  [ТС]     Нужен алгоритмом по вставлению числа в массив #28
Alex330, Спасибо более мение стало понятно
Yandex
Объявления
19.06.2012, 21:32     Нужен алгоритмом по вставлению числа в массив
Ответ Создать тему
Опции темы

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