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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
#1

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

06.05.2010, 21:58. Просмотров 1425. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление элементов массива (C++):

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

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

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

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

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

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

14
neske
1505 / 872 / 84
Регистрация: 26.03.2010
Сообщений: 2,986
06.05.2010, 22:00 #2
Удаление.. полное, или просто замена значения на ноль?
0
Crudelis
Шаровик затейник
676 / 418 / 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 обнуляете
0
Гамбит
14 / 14 / 1
Регистрация: 19.10.2009
Сообщений: 93
06.05.2010, 22:08  [ТС] #4
Цитата Сообщение от neske Посмотреть сообщение
Удаление.. полное, или просто замена значения на ноль?
в массиве нужно оставить только элементы, которые повторяются 2 или меньше раз. остальные удалить
0
CyBOSSeR
Эксперт С++
2305 / 1675 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
06.05.2010, 22:08 #5
Гамбит, решение зависит от того, что подразумевается под удалением элементов.
Можно удаляемые элементы перенести в конец массива и рассматривать его как массив меньшего размера, можно скопировать неудаляемые элементы во второй массив и удалить первый. Что конкретно нужно?
0
Гамбит
14 / 14 / 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
Эксперт С++
2305 / 1675 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
06.05.2010, 22:14 #7
Гамбит, еще раз... Из массива ничего физически удалить нельзя, можно лишь удалить весь массив. Есть 2 варианта:
1. Удаляемые элементы перенести в конец массива и рассматривать его как массив меньшего размера.
2. Скопировать неудаляемые элементы во второй массив и удалить первый.
Какой из вариантов тебя интересует?
0
Гамбит
14 / 14 / 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
Шаровик затейник
676 / 418 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
06.05.2010, 22:23 #9
Цитата Сообщение от Гамбит Посмотреть сообщение
наверное первый, так как в задании про второй ничего не сказано.
так а а взадании и не должны говорить про то что должен быть второй массив, или тритей, главное как вы его решите, скажу что второй вариант более проще

Добавлено через 1 минуту
Цитата Сообщение от Гамбит Посмотреть сообщение
но у меня получается всё в обратном порядке=(
сделайте вывод значений не с начала, а с конца)
0
Гамбит
14 / 14 / 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
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
07.05.2010, 12:13 #11
neske,
Что значит "полное удаление"? Удалить элемент из массива невозможно.
0
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; 
}
0
Гамбит
14 / 14 / 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
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;
    }
0
Гамбит
14 / 14 / 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
Привет! Вот еще темы с ответами:

Удаление элементов массива - C++
Возможно ли в С удалять элементы массива? Например: 10, 14, 1, 2, 80 надо удалить 1 что бы получилась 10 , 14, 2, 80

Удаление элементов массива - C++
#include&lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; bool Delete(int *Array, int &amp;SizeArrray, int num); int main() { ...

Удаление элементов массива! - C++
Дарова ребята, помогите написать прогу что удаляет элемент массива (что равет суме двух следующих элементов массива). Прога очень лёгкая,...

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


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

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

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