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

Удаление элементов массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
06.05.2010, 21:58     Удаление элементов массива #1
Добрго времени суток!
Задача : Дан целочисленный массив Х размера Н. Удалить из массива все элементы,встречающиеся более двух раз.
Вот собственно что у меня получилось. Трабла с самим удалением. помогите пожалуйста!!

Код
#include <stdio.h>
#include <conio.h>
#define p 10
void main()
{
clrscr();
int i,j,x[p]={1,2,1,2,1,2,3,4,5,6},buf[p],k,n,t;
n=p;
k=0;
for (i=0;i<n;i++)
{
	for (j=0;j<n;j++)
	if (x[i]==x[j])
	k=k+1;
	buf[i]=k;
	k=0;
}
for (i=0;i<n-1;i++)
{
	for (j=i+1;j<n;j++)
	if(buf[i]>2)
	x[i]=x[j];
	n=n-1;
	}
for (i=0;i<n;i++)
printf("%d",x[i]);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
06.05.2010, 22:00     Удаление элементов массива #2
Удаление.. полное, или просто замена значения на ноль?
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
06.05.2010, 22:04     Удаление элементов массива #3
мне кажется у вас одна проблема, смотрите в коде
k=k+1;
buf[i]=k;
k=0;

..........

if(buf[i]>2)

как buf[i] может быть больше 2х если вы только единицу или 0 ему передаете? А потом после if обнуляете
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
06.05.2010, 22:08  [ТС]     Удаление элементов массива #4
Цитата Сообщение от neske Посмотреть сообщение
Удаление.. полное, или просто замена значения на ноль?
в массиве нужно оставить только элементы, которые повторяются 2 или меньше раз. остальные удалить
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
06.05.2010, 22:08     Удаление элементов массива #5
Гамбит, решение зависит от того, что подразумевается под удалением элементов.
Можно удаляемые элементы перенести в конец массива и рассматривать его как массив меньшего размера, можно скопировать неудаляемые элементы во второй массив и удалить первый. Что конкретно нужно?
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
06.05.2010, 22:09  [ТС]     Удаление элементов массива #6
Цитата Сообщение от Crudelis Посмотреть сообщение
мне кажется у вас одна проблема, смотрите в коде
k=k+1;
buf[i]=k;
k=0;

..........

if(buf[i]>2)

как buf[i] может быть больше 2х если вы только единицу или 0 ему передаете? А потом после if обнуляете
после ифа выполняется одна операция, с массивом buf всё в порядке, он какой надо. проблема в самой перестановке
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
06.05.2010, 22:14     Удаление элементов массива #7
Гамбит, еще раз... Из массива ничего физически удалить нельзя, можно лишь удалить весь массив. Есть 2 варианта:
1. Удаляемые элементы перенести в конец массива и рассматривать его как массив меньшего размера.
2. Скопировать неудаляемые элементы во второй массив и удалить первый.
Какой из вариантов тебя интересует?
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
06.05.2010, 22:16  [ТС]     Удаление элементов массива #8
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Гамбит, еще раз... Из массива ничего физически удалить нельзя, можно лишь удалить весь массив. Есть 2 варианта:
1. Удаляемые элементы перенести в конец массива и рассматривать его как массив меньшего размера.
2. Скопировать неудаляемые элементы во второй массив и удалить первый.
Какой из вариантов тебя интересует?
наверное первый, так как в задании про второй ничего не сказано.
Я пытался сделать первый способ, переприсваивая соседние элементы, но у меня получается всё в обратном порядке=(
как видно из текста программы должно получится 3 4 5 6, а получается 6 5 4 3 2. О_о я хз почему
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
06.05.2010, 22:23     Удаление элементов массива #9
Цитата Сообщение от Гамбит Посмотреть сообщение
наверное первый, так как в задании про второй ничего не сказано.
так а а взадании и не должны говорить про то что должен быть второй массив, или тритей, главное как вы его решите, скажу что второй вариант более проще

Добавлено через 1 минуту
Цитата Сообщение от Гамбит Посмотреть сообщение
но у меня получается всё в обратном порядке=(
сделайте вывод значений не с начала, а с конца)
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
06.05.2010, 23:06  [ТС]     Удаление элементов массива #10
блин, а можете мне код нацарапать со вторым массивом? а то у меня вообще какуюто ахинею выводит
Код
}
for (i=0;i<n-1;i++)
for (j=0;j<n;j++)
if(buf[j]<=2)
t[j]=x[i];
for (i=0;i<n;i++)
printf("%d\n",t[i]);
}
вот что у меня получилось...
Darky
Быдлокодер
 Аватар для Darky
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
07.05.2010, 12:13     Удаление элементов массива #11
neske,
Что значит "полное удаление"? Удалить элемент из массива невозможно.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
07.05.2010, 13:31     Удаление элементов массива #12
Если все-таки не использовать новый массив:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
using namespace std;
const int SIZE =20;
 
void main()
{
    setlocale (LC_ALL, "Russian");
    int n=20, i, k=0, t, j, p, z, a[SIZE]={1, 2,3,1,4,5,1,7,2,3,1,8, 1,1, 2, 4, 6, 2,3, 4}, buf;
    
    //печать
    for (i=0; i<n; i++)
        cout<<a[i]<<" ";
    cout<<endl;
 
    for (i=0; i<n; i++)
    {
        k=0;
        for(j=0; j<n; j++)
            if (a[i]==a[j])
            {
                k+=1;
                buf=a[i];
            }
                if (k>2)
                {
                    for (p=i; p<n; p++)
                        if (a[p]==buf)
                        {
                            for (z=p; z<n; z++)
                                a[z]=a[z+1];
                            n--;
                            p--;
                        }
                    i--;
                }
    }
 
    cout<<"\nМассив: \n";
    for (i=0; i<n; i++)
        cout<<a[i]<<" ";
    cout<<endl; 
}
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
16.05.2010, 18:47  [ТС]     Удаление элементов массива #13
вот блин, не заметил 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
#include <stdio.h>
#include <conio.h>
#define n 10
void main()
{
clrscr();
int i,j,x[n]={1,2,1,2,1,2,3,4,5,6},k,t,p,s=n;
k=0;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
if (x[i]==x[j])
k=k+1;
printf("%d",k);
if (k>2)
s=s-1;
for (t=0;t<n;t++)
if (x[t]==x[i])
for (p=t;p<n;p++)
x[p]=x[p+1];
k=0;
}
for (i=0;i<s;i++)
printf("%d",x[i]);
}
но код работает немного неправильно.есл кто может помочь, то прошу.
но у меня нет iostream. если можно, помогите доработать мой код

Добавлено через 33 минуты
у меня же вроде всё точно так же как и в варианте сверху, но вот тока у меня не работает=(
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
17.05.2010, 10:27     Удаление элементов массива #14
Гамбит, ваша проблема в размерности массива - сдвинув массив на 1 элемент вперед, вы не уменьшаете его размер, в итоге происходит зацикливание. Раз уж вы ввели переменную s, так и используйте ее
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
int i, j,x[n]={1,2,1,2,1,2,3,4,5,6},k,t,p,s=n, b;
    k=0;
    for (i=0;i<s;i++)
    {
        for (j=0;j<s;j++)
            if (x[i]==x[j])
            {
                k=k+1;
                b=x[i];
            }
 
        //cout<<" K: "<<k<<" ";
        if (k>2)
        {
            for (t=i; t<s; t++)
                if (x[t]==b)
                {
                    for (p=t;p<s;p++)
                        x[p]=x[p+1];
                    t--;
                    s--;
                }
            i--;
        }
        k=0;
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2010, 20:50     Удаление элементов массива
Еще ссылки по теме:

удаление элементов массива, совпадающих с элементами другого массива C++
C++ Удалить из массива A[N] вс отрицательные элементы.Удаление отрицательных элементов массива оформить в виде функции
Удаление элементов из массива C++

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

Или воспользуйтесь поиском по форуму:
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
17.05.2010, 20:50  [ТС]     Удаление элементов массива #15
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
29
30
31
32
#include <stdio.h>
#include <conio.h>
#define n 10
void main()
{
clrscr();
int i,j,x[n]={3,4,5,6,3,4,3,5,5,3},k,t,p,s=n,buf=0;
for (i=0;i<s;i++)
{
    k=0;
    for (j=0;j<s;j++)
    if (x[i]==x[j])
    k=k+1;
    buf=x[i];
    if (k>2)
        {
            for (t=i;t<s;t++)
                {
                    if (x[t]==buf)
                        {
                            for (p=t;p<s;p++)
                            x[p]=x[p+1];
                            s--;
                            t--;
                            i--;
                        }
                }
        }
}
for (i=0;i<s;i++)
printf("%d",x[i]);
}
Вот выкладываю код, который работает=) всем спасибо
Yandex
Объявления
17.05.2010, 20:50     Удаление элементов массива
Ответ Создать тему
Опции темы

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