Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
1

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

17.06.2012, 03:16. Показов 1799. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите...
Дана последовательность действительный чисел 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");    
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2012, 03:16
Ответы с готовыми решениями:

Нужен исходник программы для нахождения кротчайшего пути алгоритмом Флойда
Всем привет. Может у кого-нибудь есть исходник программы для нахождения кротчайшего пути алгоритмом...

Шифрование алгоритмом моноалфавитной подстановки и Алгоритмом Цезаря
Здравствуйте, помогите исправить код чтобы выводилось одинаково зашифрованное сообщение, и методом...

Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования
Конвертор десятичного числа в шестнадцатиричное с алгоритмом преобразования (без простого вывода...

Перемешать массив алгоритмом Фишера - Йетса
Идея метода следующая. 1. Первый эл-т обменивается со случайно выбранным элементом из массива (им...

27
119 / 119 / 4
Регистрация: 12.06.2012
Сообщений: 130
19.06.2012, 02:27 21
Author24 — интернет-сервис помощи студентам
Леонид посмотрите мой код пожалуйста. Пишу под линуксом, возможно нужны другие библиотеки. я тоже только учусь. Буду рад в дальнейшем разбирать подобные примеры. А что за задачник?
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;
}
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
19.06.2012, 02:47 22
Alex330, в строке 36 должно быть
C++
1
arrRezault[n] = b;
1
119 / 119 / 4
Регистрация: 12.06.2012
Сообщений: 130
19.06.2012, 07:23 23
спасибо, grizlik78 - все верно, должно быть arrRezault[n] = b;
0
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
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 с лишним. На одномерные и двумерные массивы.
1
119 / 119 / 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;
Перебор массива с конца
0
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
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;
1
119 / 119 / 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.
1
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
19.06.2012, 21:32  [ТС] 28
Alex330, Спасибо более мение стало понятно
0
19.06.2012, 21:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.06.2012, 21:32
Помогаю со студенческими работами здесь

Вывести все простые числа алгоритмом Решето Эратосфена
Моя задача вывести в файл все простые числа из диапазона . Для отбора простых чисел использовать...

Отсортировать массив алгоритмом выбора, Шелла, проиллюстрировать библиотекой Граф
Люди, выручайте!!!! Ребенку задали задание по информатике, родители в шоке!!!! Задача: Дается...

Найти количество сложений для вычисления n-го числа Фибоначчи рекурсивным и обычным алгоритмом.
Найти количество сложений для вычисления n-го числа Фибоначчи рекурсивным и обычным алгоритмом. ...

Рекурсия (функция определения НОД (наибольшего общего делителя) числа алгоритмом Евклида)
Доброго времени суток. Есть определенная функция определения НОД(наибольшего общего делителя)...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru