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

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

Восстановить пароль Регистрация
 
Devsety
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 7
26.09.2011, 16:28     Удаление элементов массива #1
Задание: Удаление элементов из массива оформить в виде функции. Поиск места удаления элемента или группы элементов в некоторых задачах также оформить в виде функции.
Удалить в массиве первую группу из двух подряд идущих нулей.

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
void erase(int *a, int& n, int x){
   for (int i = x; i < n ; ++i)
    swap(a[i], a[i + 1]);
   --n;
}
 
int del(int *a, int& n){
    int x = zero_check(a, n);
   if (a[x+1] == 0)
       return 0;
   do{
       erase(a, n, x);
   }while (a[x] != n);
    erase(a, n, x);
    return 1;
 
int zero_check(int *a, int& n){
   int k = 0, x = -1;
    for (int i = 0; i < n ; ++i)
       if (a[i] == 0){
              x = i;
              break;
           }
 
    return x;
}
}
Два вопроса - 1) где я не вижу ошибку, почему не удаляет; 2) В таком виде ведь если будет массив 1 0 2 3 0 0 4, два нуля не удалятся, т.к. проверка только после первого нуля идет, значит надо создань отдельную функцию поиска 2х нулей? (zero_check нужна в другом задании в той же программе) Или можно что-то сделать с этой?
Заранее спасибо за ответ!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.09.2011, 16:38     Удаление элементов массива #2
Не понял, у вас zero_check объявлена в функции del?
Devsety
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 7
26.09.2011, 16:53  [ТС]     Удаление элементов массива #3
Не понял, у вас zero_check объявлена в функции del?
эм... это как? Нам преподаватель говорила, процедурный тип в с++ не нужен, в отличие от паскаля АВС
-=ЮрА=-
Заблокирован
Автор FAQ
26.09.2011, 16:54     Удаление элементов массива #4
Devsety, в чём делать Си или С++?
Devsety
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 7
26.09.2011, 16:56  [ТС]     Удаление элементов массива #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Devsety, в чём делать Си или С++?
В С++
-=ЮрА=-
Заблокирован
Автор FAQ
26.09.2011, 17:42     Удаление элементов массива #6
Devsety, держи на плюсах
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
43
44
45
46
47
#include <iostream>
#include <cstdlib>
#include <conio.h>
 
using namespace std;
 
int move_zero(int &m, int * vec);
 
int main()
{
    int * arr,i,m;
    do
    {
        std::cout<<"Enter num elements in vector : ";
        std::cin>>m;
        std::cout<<"\tInput vector\r\n";
        arr = new int [m];
        for(i = 0; i < m; i++)
        {
            std::cout<<"arr["<<i + 1<<"] = ";
            std::cin>>arr[i];
        }
        std::cout<<"deleted : "<<move_zero(m, arr)<<" elements\r\n";
        std::cout<<"\tOutput vector\r\n";
        for(i = 0; i < m; i++)
            std::cout<<arr[i]<<" ";
        std::cout<<"\r\nPress Y for new input\r\n";
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
 
int move_zero(int &m, int * vec)
{
    int n = 0;
    for(int i = 0,j; i < m - 1; i++)
    {
        if(vec[i] == 0 && vec[i + 1] == 0)
        {
            for(j = i; j < m - 2; j++)
                vec[j] = vec[j + 2];
            n += 2;
        }
    }
    m -= n;
    return n;
}
Enter num elements in vector : 10
Input vector
arr[1] = 1
arr[2] = 0
arr[3] = 0
arr[4] = 2
arr[5] = 0
arr[6] = 0
arr[7] = 3
arr[8] = 0
arr[9] = 0
arr[10] = 4
deleted : 6 elements
Output vector
1 2 3 4
Press Y for new input
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
26.09.2011, 17:44     Удаление элементов массива #7
Цитата Сообщение от Devsety Посмотреть сообщение
Удалить в массиве первую группу из двух подряд идущих нулей.
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 <iostream>
using namespace std;
 
int  arr_erase(int val, int*  arr, int size, int all = 0) {
   int* na, *nb;
   int  len;
   int* end = arr + (size - 1);
   do {
          if( *arr == val && *(arr + 1) == val ) {
                for(len = 2; len > 0; len--)
                   for(na = arr, nb = arr + 1; na != end + 1; *na++ = *nb++);
                size -= 2;
                arr  -= 2;
                if(! all)
                    break;
           }
   }  while(++arr != end);
   return size;
}
 
int   main(void) {
    int arr[] = { 0, 100, 0, 30, 0, 0, 1, 0, 0,  23, 0, 11, 0, 0 };
 
    // если последний параметр: 1-удаление всех  элементов, 0 - только первые два
    int size  = arr_erase(0, arr, sizeof(arr)/sizeof(int), 1);
    for(int i = 0; i < size; i++)
           cout << arr[i] << ", ";
    cout.put('\n');
 
    cin.get();
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
26.09.2011, 17:48     Удаление элементов массива #8
Devsety, я удалил все группы нулей, если же нужно только первую, то мой алгоритм упрощается
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int move_zero(int &m, int * vec)
{
    int n = 0;
    for(int i = 0; i < m - 1; i++)
    {
        if(vec[i] == 0 && vec[i + 1] == 0)
        {
            for(; i < m - 2; i++)
                vec[i] = vec[i + 2];
            n += 2;
        }
    }
    m -= n;
    return n;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2011, 21:42     Удаление элементов массива
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Devsety
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 7
26.09.2011, 21:42  [ТС]     Удаление элементов массива #9
-=ЮрА=-, а чтобы потом в case использовать если нули есть то move_zero, а если нет, то выдать сообщение , что таковых нет? я попыталась испраивть, но что то у меня совсем ничего не получается>_<

Добавлено через 3 часа 34 минуты
Всем спасибо, написала, все работает!)
Yandex
Объявления
26.09.2011, 21:42     Удаление элементов массива
Ответ Создать тему
Опции темы

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