Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Гамбит
15 / 15 / 1
Регистрация: 19.10.2009
Сообщений: 93
1

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

06.05.2010, 21:58. Просмотров 1636. Ответов 14
Метки нет (Все метки)

Добрго времени суток!
Задача : Дан целочисленный массив Х размера Н. Удалить из массива все элементы,встречающиеся более двух раз.
Вот собственно что у меня получилось. Трабла с самим удалением. помогите пожалуйста!!

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 <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]);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2010, 21:58
Ответы с готовыми решениями:

Удаление четных элементов массива,больших среднего арифметического всех элементов массива
Доброго времени суток! Помогите пожалуйста) Вот задание:Из массива удалить...

Удаление из одного массива элементов второго массива и запись результата в третий
Есть массив masA (длина lenA), есть массив masB (длина lenB). Необходимо из...

удаление элементов массива, которые равны сумме предыдущего и следующего элементов
Нужно написать подпрограмму которая удаляет элементы массива, которые равны...

Удалить из массива A[N] вс отрицательные элементы.Удаление отрицательных элементов массива оформить в виде функции
Что исправить? #include &lt;stdio.h&gt; #define N 10 int udalenie(int A,int k...

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

14
neske
1527 / 894 / 192
Регистрация: 26.03.2010
Сообщений: 3,074
06.05.2010, 22:00 2
Удаление.. полное, или просто замена значения на ноль?
0
Crudelis
Шаровик затейник
683 / 432 / 78
Регистрация: 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 обнуляете
0
Гамбит
15 / 15 / 1
Регистрация: 19.10.2009
Сообщений: 93
06.05.2010, 22:08  [ТС] 4
Цитата Сообщение от neske Посмотреть сообщение
Удаление.. полное, или просто замена значения на ноль?
в массиве нужно оставить только элементы, которые повторяются 2 или меньше раз. остальные удалить
0
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
06.05.2010, 22:08 5
Гамбит, решение зависит от того, что подразумевается под удалением элементов.
Можно удаляемые элементы перенести в конец массива и рассматривать его как массив меньшего размера, можно скопировать неудаляемые элементы во второй массив и удалить первый. Что конкретно нужно?
0
Гамбит
15 / 15 / 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 всё в порядке, он какой надо. проблема в самой перестановке
0
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
06.05.2010, 22:14 7
Гамбит, еще раз... Из массива ничего физически удалить нельзя, можно лишь удалить весь массив. Есть 2 варианта:
1. Удаляемые элементы перенести в конец массива и рассматривать его как массив меньшего размера.
2. Скопировать неудаляемые элементы во второй массив и удалить первый.
Какой из вариантов тебя интересует?
0
Гамбит
15 / 15 / 1
Регистрация: 19.10.2009
Сообщений: 93
06.05.2010, 22:16  [ТС] 8
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Гамбит, еще раз... Из массива ничего физически удалить нельзя, можно лишь удалить весь массив. Есть 2 варианта:
1. Удаляемые элементы перенести в конец массива и рассматривать его как массив меньшего размера.
2. Скопировать неудаляемые элементы во второй массив и удалить первый.
Какой из вариантов тебя интересует?
наверное первый, так как в задании про второй ничего не сказано.
Я пытался сделать первый способ, переприсваивая соседние элементы, но у меня получается всё в обратном порядке=(
как видно из текста программы должно получится 3 4 5 6, а получается 6 5 4 3 2. О_о я хз почему
0
Crudelis
Шаровик затейник
683 / 432 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
06.05.2010, 22:23 9
Цитата Сообщение от Гамбит Посмотреть сообщение
наверное первый, так как в задании про второй ничего не сказано.
так а а взадании и не должны говорить про то что должен быть второй массив, или тритей, главное как вы его решите, скажу что второй вариант более проще

Добавлено через 1 минуту
Цитата Сообщение от Гамбит Посмотреть сообщение
но у меня получается всё в обратном порядке=(
сделайте вывод значений не с начала, а с конца)
0
Гамбит
15 / 15 / 1
Регистрация: 19.10.2009
Сообщений: 93
06.05.2010, 23:06  [ТС] 10
блин, а можете мне код нацарапать со вторым массивом? а то у меня вообще какуюто ахинею выводит
C++
1
2
3
4
5
6
7
8
}
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]);
}
вот что у меня получилось...
0
Darky
Быдлокодер
508 / 295 / 84
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
07.05.2010, 12:13 11
neske,
Что значит "полное удаление"? Удалить элемент из массива невозможно.
0
NNN777
300 / 158 / 62
Регистрация: 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; 
}
0
Гамбит
15 / 15 / 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 минуты
у меня же вроде всё точно так же как и в варианте сверху, но вот тока у меня не работает=(
0
NNN777
300 / 158 / 62
Регистрация: 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;
    }
0
Гамбит
15 / 15 / 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]);
}
Вот выкладываю код, который работает=) всем спасибо
0
17.05.2010, 20:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2010, 20:50

Удаление элементов массива без буферного массива
Требуется удалить элементы из массива, при это длинна массива уменьшится, ВАЖНО...

Удаление элементов массива
1)В каждой группе подряд идущих одинаковых элементов оставить только один...

Удаление элементов массива
#include&lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; bool Delete(int...


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

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

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