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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
#1

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

26.10.2008, 01:47. Просмотров 2226. Ответов 5
Метки нет (Все метки)

Ребята, есть задача, условие такое: в упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность. Вот с этим алгоритмом даже если число подходит в первое условие, то оно игнорируется и выполняется условие e>a[n], если же это условие убрать то работает первое условие, но не выполняется случай, когда число больше последнего элемента.
Пробовал переписывать первое условие, совмещать, переставлять – результат тот же.
Код
# include <iostream>
using namespace std;
int main ()
{
    int i,n,e,j;
    int const m=100;
    int a[m],b[m];
    setlocale (LC_ALL,".1251");
    cout<<"Введите размер массива\n";
    cin>>n;
    cout<<"Введите элементы упорядоченного массива\n";
    for (i=0;i<n;i++)
        cin>>a[i];
    cout<<"Введите включаемый в массив элемент\n";
    cin>>e;
    for (i=0;i<n;i++)
    {
        if ((e>a[i])&&(e<=a[i+1]))
        {
            j=i+1;
            for (i=0;i<j;i++)
                b[i]=a[i];                        
            for (i=j;i<n;i++)
                b[i+1]=a[i];
            b[j]=e;
            n++;
        }
        else
        {
            if (e<a[0])
            {
                b[0]=e;
                n++;        
                for (i=0;i<n;i++)
                    b[i+1]=a[i];
            }
            else
                if (e>a[n])
                {
                    for (i=0;i<n;i++)
                        b[i]=a[i];
                    b[n]=e;
                    n++;
                }
        }
    }
    cout<<"Массив:\n";
    for (i=0;i<n;i++)
        cout<<b[i]<<endl;
    return 0;
}
Кто-нибудь может помочь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2008, 01:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность (C++):

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

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

Вставить в одномерный массив А, упорядоченный по возрастанию, новый элемент Б, сохраняя упорядоченность. - C++
Прошу помочь решить задачки!:(очень нужно (Билет №19) Вставить в одномерный массив А, упорядоченный по возрастанию, новый элемент Б,...

В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность - C++
Имеется задача. В массив Х(N), N≤20, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить...

Включить новый элемент в массив, упорядоченный по возрастанию, с сохранением упорядоченности. (рандомный массив) - C++
1) Включить новый элемент в массив, упорядоченный по возрастанию, с сохранением упорядоченности. (рандомный массив)

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

5
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
26.10.2008, 02:24 #2
Первое,что меня удивило - почему проверка крайних случаев выполняется в цикле?сто раз?
Второе - почему после включения цикл не останавливается,а ищет чего-то дальше?

Я бы вообще сделал так.
Код
i=0;
while( (i<n) && (a[i]<e) ) i++;
Теперь у тебя i хранит индекс,который должен быть у нового элемента в новом массиве. Дальше ясно.

Добавлено через 26 минут 22 секунды
Вообще,я на автомате написал всю твою программку. Выкладывать не буду,добей уж сам.
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
27.10.2008, 14:49  [ТС] #3
Всё равно так не получается. Результат тот же: без условия if (e>a[n]) работает, а с ним нет. Я не знаю, почему всё равно идёт в условие, когда e больше последнего элемента, хотя оно не подходит.
Код
…
for (i=0;i<n;i++)
	cin>>a[i];
cout<<"Введите включаемый в массив элемент\n";
cin>>e;
if (e>a[0])
	{	
			if (e>a[n])
			{
				for (i=0;i<n;i++)
					b[i]=a[i];
				b[n]=e;
				n++;
			}
			else
			{	
				i=0;
				while ((i<n)&&(a[i]<e))
					i++;
					j=i;
					for (i=0;i<j;i++)
						b[i]=a[i];
					for (i=j;i<n;i++)
						b[i+1]=a[i];
					b[j]=e;
					n++;
			}
	}
else
{
		if (e<a[0])
		{
			b[0]=e;
			for (i=0;i<n;i++)
				b[i+1]=a[i];
			n++;
		}
}
…
0
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
27.10.2008, 15:04 #4
Копаться в твоем коде лень.Вот нормальный.
Код
# include <iostream>
using namespace std;
#include <conio.h>
int main ()      {
    int i=0,n,e,j;
    int const m=100;
    int a[m],b[m];
    cout<<"size :\n";
    cin>>n;
    cout<<"array :\n";
    for (i=0;i<n;i++)    cin>>a[i];
    cout<<"included : \n";
    cin>>e;
    i=0;
    while( (i<n) && (a[i]<e) )    i++;
    for(j=0;j<i;j++)    b[j]=a[j];
    b[j]=e;
    for(j++;j<n+1;j++)    b[j]=a[j-1];
    n++;
    cout<<"new array:\n";
    for (i=0;i<n;i++)                 cout<<b[i]<<" ";
    getch();
    return 0;
}
p.s if(e > a[n] ) - ошибка. последний элемент массива : a[n-1].
И вообще,нафига эти иф-елсы нужны не понятно. Без них проще и работает.см мой код.
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
27.10.2008, 15:33  [ТС] #5
Спасибо тебе большое!
Да, действительно забыл, что в C++ нумерация элементов массива с 0 начинается. Надеюсь, больше таких ошибок не будет.
Для чего нужна функция getch()?
И вопрос только из любопытства: можно ли в данном случае воспользоваться одним массивом, ведь использование 2-х не очень рациональный способ. Я первоначально и пытался использовать один, но там вообще ничего не вышло.
0
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
27.10.2008, 15:36 #6
getch() ждет нажатия на кнопку. Чтобы окно консоли не закрывалось.

Можно,конечно. После того,как находишь нужный индекс для элемента,сдвигаешь все,начиная с этого индекса на 1 справа(начинать с конца,чтобы данные не угробить). Потом ставишь на нужное место этот введенный элемент.Конечно, в массиве должно быть достаточно места,чтобы добавить еще один эл-т. Если нужен динамически меняющийся массив,придется использовать временный буффер.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2008, 15:36
Привет! Вот еще темы с ответами:

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

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

Слить вектора в один вектор {z},i=1,...20 так, чтобы сохранилась упорядоченность - C++
даны два вектора {x}, {y}, i=1,...10, упорядоченные по возрастанию. слить их в один вектор {z},i=1,...20 так, чтобы сохранилась...

новый массив, упорядоченный по неубывнию - C++
.........Функция, формирующая новый массив, упорядоченный по неубывнию, из двух массивов-параметров, уже упорядоченных по неубыванию.


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

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

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