Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/30: Рейтинг темы: голосов - 30, средняя оценка - 4.73
144 / 144 / 32
Регистрация: 26.10.2008
Сообщений: 782
1

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

26.10.2008, 01:47. Показов 5811. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2008, 01:47
Ответы с готовыми решениями:

Массив: Удалить из массива элемент с номером k и вставить элемент, равный p, так, чтобы не нарушилась упорядоченность.
Дано: a:array of real;p:real;k:integer;(a&lt;=a&lt;=⋯&lt;=a,0&lt;k≤n). Удалить из a элемент с номером k (т.е....

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

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

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

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

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

Добавлено через 26 минут 22 секунды
Вообще,я на автомате написал всю твою программку. Выкладывать не буду,добей уж сам.
0
144 / 144 / 32
Регистрация: 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
Эксперт С++
2253 / 768 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
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
144 / 144 / 32
Регистрация: 26.10.2008
Сообщений: 782
27.10.2008, 15:33  [ТС] 5
Спасибо тебе большое!
Да, действительно забыл, что в C++ нумерация элементов массива с 0 начинается. Надеюсь, больше таких ошибок не будет.
Для чего нужна функция getch()?
И вопрос только из любопытства: можно ли в данном случае воспользоваться одним массивом, ведь использование 2-х не очень рациональный способ. Я первоначально и пытался использовать один, но там вообще ничего не вышло.
0
Эксперт С++
2253 / 768 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
27.10.2008, 15:36 6
getch() ждет нажатия на кнопку. Чтобы окно консоли не закрывалось.

Можно,конечно. После того,как находишь нужный индекс для элемента,сдвигаешь все,начиная с этого индекса на 1 справа(начинать с конца,чтобы данные не угробить). Потом ставишь на нужное место этот введенный элемент.Конечно, в массиве должно быть достаточно места,чтобы добавить еще один эл-т. Если нужен динамически меняющийся массив,придется использовать временный буффер.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2008, 15:36

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru