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

В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность

24.06.2013, 22:20. Показов 7497. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется задача. В массив Х(N), N≤20, упорядоченный по убыванию значений элементов,
добавить новое число так, чтобы не нарушить упорядоченность.
Пожалуйста помогите решить!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2013, 22:20
Ответы с готовыми решениями:

Вставить в упорядоченный по неубыванию список элемент с заданным значением так, чтобы не нарушить упорядоченность
Кто сможет помочь с программкой. Вставить в упорядоченный по неубыванию список элемент с заданным...

В упорядоченный по неубыванию числовой массив вставить в заданное число так, чтобы упорядоченность сохранилась
В упорядоченный по неубыванию числовой массив вставить в заданное число так, чтобы упорядоченность...

Вставить в массив 2 числа так, что бы не нарушить упорядоченность элементов
Как это решить? "Данный, отсортированный по убыванию значений, массив целых чисел. Вставить в...

Добавить элемент в упорядоченный список так, чтобы его упорядоченность не нарушалась
Здравствуйте уважаемые! очень нужна помощь. Написать программу, которая осуществляет обработку...

14
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
24.06.2013, 22:53 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
#include <iostream>
using namespace std;
const int  n=5;
int main()
{
    int massiv [20];
    int pos; // позиция, на которую надо добавить
    pos=n;
    for (int i=0; i<n;i++)
        cin>> massiv[i];
    int a;//добавляемое число
    cin>>a;
    for (int i=0;i<n;i++)
    {
        if (massiv[i]<a)
            {
                pos=i;
                break;
        }
    }
    for (int i=n;i>=pos;i--)
    massiv[i+1]=massiv[i];
    massiv[pos]=a;
    for (int i=0;i<n+1;i++)
        cout<<massiv[i]<<" ";
    return 0;
}
Код кривой, но вроде, всё же, работает
0
БНТУ ФИТР
215 / 155 / 42
Регистрация: 26.12.2012
Сообщений: 382
24.06.2013, 23:20 3
@Denis123456789, Не совсем понял вашу идею. Если массив статический - то он как ни крути был и будет N элементов. И N + 1 из него не сделать. А вообще как-то так. Не проверял, мысли вслух:
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
int *massiv = new int [SIZE];
 
for (int i = 1;i < n - 1;i++)
{
     if (massiv[i - 1] < a && massiv[i + 1] >= a)
     {
           int *newArr = new int [SIZE + 1];
 
           for (int j = 0; j < i - 1; j++)
       {
                 newArr[j] = massiv[j];
           }
         
           newArr[i] = a;         
 
           for (int j = i  + 1; j < n; j++)
       {
        newArr[j] = mass[j - 1];
           }
           delete [] massiv;
       massiv = newArray;   
           break;
     }
    
}
0
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
24.06.2013, 23:39 4
@kventin_zhuk, Я думал, что объявляем массив в n элементов, а заполняем не все. Я видел, так много где делается

Добавлено через 7 минут
точнее объявляем в 20 элементов массив, а заполняем только n<20
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
25.06.2013, 00:31 5
@Denis123456789, Это можно считать условно верно для демонстрации фрагментов кода.Для программ это не верно так как память выделена под ваш указанный размер.Указывая меньше память будет расходоваться впустую.К тому же в этих ячейках лежит "мусор" и если вы выйдите за пределы то и получите "мусор".
0
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 9
25.06.2013, 15:00  [ТС] 6
Спасибо вам большое за помощь))
0
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
18.09.2013, 16:38 7
Если в качестве массива используешь вектор - то все просто :

C++
1
x.push_back(x[x.size()-1]-1);
Вывод массива :

C++
1
2
3
4
for(int i = 0; i<x.size(); i++)
{
  std::cout << x[i] << " ";
};
0
Почетный модератор
Эксперт С++
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
18.09.2013, 16:46 8
Цитата Сообщение от Euro3030 Посмотреть сообщение
В массив Х(N), N≤20, упорядоченный по убыванию значений элементов,
добавить новое число так, чтобы не нарушить упорядоченность.
Суть задачи сводится к тому, что надо пройтись по массиву, найти два элемента, один из которых больше, второй меньше вводимого и... Тут дальше непонятно: если массив вставить в середину массива значение, то куда денется крайнее? Выкинуть его? Или размер массива надо будет увеличивать?
0
5 / 5 / 5
Регистрация: 15.08.2013
Сообщений: 90
18.09.2013, 16:58 9
// найдем индекс места вставки
C++
1
2
3
4
5
6
7
8
9
for(int i = 0; i<x.size(); i++)
{
   if(x[i]>a && x[i+1]<a)
   {  
      index=i;// индекс элемента после которого нужно  вставить
      break;
    }
 
}
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
18.09.2013, 17:04 10
Цитата Сообщение от Sue405090 Посмотреть сообщение
if(x[i]>a && x[i+1]<a)
зачем 2 условия, он уже сортированный
0
5 / 5 / 5
Регистрация: 15.08.2013
Сообщений: 90
18.09.2013, 17:08 11
чтоб определить что это последний элемент который больше, если поставить условие больше то и первый элемент будет больше.... можно
C++
1
2
if(x[i]<a)
index= i-1;
0
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 9
18.09.2013, 22:47  [ТС] 12
Ещё есть какие либо варианты?
0
18 / 18 / 13
Регистрация: 14.09.2013
Сообщений: 37
19.09.2013, 00:43 13
вот например, чуть быстрее работает,чем проверка всех элементов, но для массива с количеством элементов не более 20 это не существенно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int GetIndex(vector<int> &ver,int size,int x)
{
    int start=0,end=size-1;
    while((end-start)!=1)
    {
        int i=(start+end)/2;
        if(ver[i]<x)
        {
            end=i;
        }
        else
        {
            start=i;
        }
    }
    return(start+1);
}
0
Почетный модератор
Эксперт С++
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
19.09.2013, 09:13 14
Цитата Сообщение от Sue405090 Посмотреть сообщение
найдем индекс места вставки
Цитата Сообщение от D3fend0r Посмотреть сообщение
вот например
Это все хорошо, но
Цитата Сообщение от Euro3030 Посмотреть сообщение
добавить новое число
0
5 / 5 / 5
Регистрация: 15.08.2013
Сообщений: 90
19.09.2013, 10:10 15
вставка зависит от условий... если у тебя массив 20 эл. и тебе нужно вставить 21 тут или увеличивать размер массива или удалить последний элемент... но в любом случаи нужно использовать 2 массива. логика примерна такая копируешь во второй массив числа после нужного индекса, вставляешь нужное число, и копируешь оставшиеся обратно в этом случаи размер массива не изменится... если нужно увеличить массив то новый больше на 1 чем имеющийся и туда копируешь сначала числа до нужного индекса, потом вставляешь новый эл. и копируешь остальные....

с кодом уж сам разберешься/// там только циклы с присвоением...
1
19.09.2013, 10:10
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2013, 10:10
Помогаю со студенческими работами здесь

В упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность
Ребята, есть задача, условие такое: в упорядоченный массив включить новый элемент так, чтобы не...

Дан массив А из N упорядоченных по убыванию элементов . Добавить в массив, сохраняя его упорядоченность, среднее арифмет
Программа почти готова только вот почему-то не работает строки Sr = S / k; i = n; Вот вся...

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

Списки. Вставить в упорядоченный список новый элемент так, чтобы сохранилась упорядоченность
Вставить в непустой список L, элементы которого упорядочены по неубыванию, новый элемент E так,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Как работать с ветками (branch) в Git
InfoMaster 17.01.2025
Система контроля версий Git произвела революцию в процессе разработки программного обеспечения, предоставив разработчикам мощный инструмент для управления изменениями в коде. Одной из наиболее важных. . .
Как откатить последние коммиты в Git
InfoMaster 17.01.2025
Система контроля версий Git стала неотъемлемой частью современной разработки программного обеспечения, предоставляя разработчикам мощные инструменты для управления изменениями в коде. Одним из. . .
Что такое boilerplate и scaffold, чем они отличаются
InfoMaster 17.01.2025
В современном мире разработки программного обеспечения эффективность и скорость создания качественного кода играют crucial роль в успехе проектов. Разработчики постоянно ищут способы оптимизировать. . .
Чем отличаются ссылки и указатели в С++
InfoMaster 17.01.2025
В современном программировании на C++ эффективная работа с памятью является ключевым аспектом разработки качественного программного обеспечения. Указатели и ссылки представляют собой два. . .
В чем разница между PUT и POST
InfoMaster 17.01.2025
В современной веб-разработке правильное использование HTTP-методов играет ключевую роль в создании надежных и эффективных API-интерфейсов. Протокол HTTP прошел долгий путь развития с момента своего. . .
DTO, POCO и Value Object: что это такое, когда и как использовать
InfoMaster 17.01.2025
Введение в паттерны передачи данных В современной разработке программного обеспечения эффективное управление данными и их передача между различными слоями приложения являются ключевыми аспектами. . .
Что такое pull request в Git
InfoMaster 17.01.2025
В современной разработке программного обеспечения pull request в Git представляет собой ключевой механизм для эффективного взаимодействия между разработчиками при работе над общим кодом проекта. По. . .
Как вернуться к предыдущему коммиту в Git
InfoMaster 17.01.2025
Система контроля версий Git представляет собой мощный инструмент для управления изменениями в программном коде, который позволяет разработчикам эффективно отслеживать и контролировать историю. . .
Что такое паттерны программировани­я и проектирования
InfoMaster 17.01.2025
Роль паттернов в современной разработке программного обеспечения В современном мире разработки программного обеспечения паттерны проектирования стали неотъемлемой частью профессионального подхода. . .
Как добавить конструктор Яндекс Карт на сайт
InfoMaster 17.01.2025
Введение в API Яндекс Карт В современной веб-разработке интеграция картографических сервисов стала неотъемлемой частью многих проектов. API Яндекс Карт представляет собой мощный инструмент для. . .
Что такое javascript:void­­(0) и зачем это нужно
InfoMaster 17.01.2025
Когда вы сталкиваетесь с веб-разработкой, особенно с использованием JavaScript, одной из директив, которая часто встречается, является javascript:void(0). Это выражение вызывает интерес из-за своей. . .
Что такое оркестрация и хореография микросервисов
InfoMaster 17.01.2025
Введение в оркестрацию и хореографию микросервисов В современном мире разработки программного обеспечения микросервисная архитектура стала ключевым подходом к созданию масштабируемых и гибких. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru