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

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

Войти
Регистрация
Восстановить пароль
 
Виктор242424
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 37
#1

Массивы.Из массива удалить последний из нечетных элементов - C++

06.01.2013, 19:13. Просмотров 640. Ответов 13
Метки нет (Все метки)

программа запускается,но не хочет корректно работать,помогите пожалуйста

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 "stdafx.h"
#include "locale.h"
 
 
void vod(int*a,int b)
{
    int i;
    printf("Введите массив A[%d]\n",b);
        for(i = 0;i < b;++i)
            scanf_s("%d",&a[i]);
}
void show (int*a,int b)
{
    int i;
    for(i = 0;i < b; ++i)
        printf("%d",a[i]);
}
void work(int *a,int *b)
{
    int i;
    for(i = 0; i < *b; ++i)
        if(a[i]%2 == 1) 
        {
            for (int j = i + 1; j < (*b); j++) 
            {
                a[i - 1] = a[i];
            }
            (*b)--;
            i--;
 
        }
 
}
void main()
{
    int a[5];
    setlocale(LC_CTYPE,"Russian");
    printf("Из массива удалить последний из нечетных элементов.\n");
    vod(a,5);
    int size = 5;
    work(a,&size);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2013, 19:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массивы.Из массива удалить последний из нечетных элементов (C++):

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

Из массива A удалить те цепочки нечетных элементов, в которых нет ни одного элемента из массива B - C++
Пожалуйста помогите! Из массива A удалить те цепочки нечетных элементов, в которых нет ни одного элемента из массива B. Пример: ...

Удалить пять первых нечетных элементов массива - C++
Удалить пять первых нечетных элементов массива. Добавить в конец массива три новых нулевых эле-мента

Удалить последний элемент массива - C++
Может кто помочь как можно удалить последний элемент массива, токо не используя встроеных стеков деков списков и .т.д ?

Удалить из массива первый и последний элементы - C++
15. Сформировать одномерный массив целых чисел , используя датчик случайных чисел. По запросу выполнить циклическую перестановку...

Удалить из массива последний парный элемент - C++
Есть код, он рабочий и все хорошо с ним, но нужно что бы в результате выводящий ноль был справа, а не слева. Само задание: Заданный...

13
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
06.01.2013, 23:48 #2
А что значит удалить элемент? Заменить на какой то? Или обозначить нулем? Просто Если массив статический, то заменить нулем лучше.

P.S. Если уж на то пошло проще с конца пробежать, встретить первый элемент и заменить нулем
1
David Sylva
1287 / 949 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
06.01.2013, 23:53 #3
Цитата Сообщение от Buildog Посмотреть сообщение
А что значит удалить элемент?
Думаю имеется ввиду сжать массив.
1
Buildog
40 / 40 / 2
Регистрация: 29.04.2012
Сообщений: 185
06.01.2013, 23:58 #4
Так если сжать статический массив, надо что то придумать с последним элементом. Или просто делать массив динамическим
1
David Sylva
1287 / 949 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.01.2013, 00:03 #5
Цитата Сообщение от Buildog Посмотреть сообщение
Так если сжать статический массив, надо что то придумать с последним элементом.
Ничего не надо думать, из массива нельзя удалять элементы, поэтому подходящий вариант сжимание массива.
Тс ваш код это код на СИ, если надо на С++, то упрощённая версия можно сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> 
 
int main() 
{ 
    const int size = 10; 
    int array[size] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
    int i, j; 
 
    for ( i = size - 1; i >= 0; i--)  
        if(array[i] % 2 != 0) 
        {
            for ( j = i; j < size - 1; j++) 
                array[j] = array[j+1]; 
            break;  
        } 
 
        for ( i = 0; i < size - 1; ++i) 
            std::cout << array[i] << " "; 
        std::cout << std::endl;
}
1
Виктор242424
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 37
07.01.2013, 12:09  [ТС] #6
Цитата Сообщение от David Sylva Посмотреть сообщение
Ничего не надо думать, из массива нельзя удалять элементы, поэтому подходящий вариант сжимание массива.
Тс ваш код это код на СИ, если надо на С++, то упрощённая версия можно сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> 
 
int main() 
{ 
    const int size = 10; 
    int array[size] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
    int i, j; 
 
    for ( i = size - 1; i >= 0; i--)  
        if(array[i] % 2 != 0) 
        {
            for ( j = i; j < size - 1; j++) 
                array[j] = array[j+1]; 
            break;  
        } 
 
        for ( i = 0; i < size - 1; ++i) 
            std::cout << array[i] << " "; 
        std::cout << std::endl;
}
объясните мне пожалуйста значение двух последних строк)
0
David Sylva
1287 / 949 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.01.2013, 12:12 #7
Это цикл в котором выводим массив
Пустая строка
0
Igor3D
965 / 498 / 50
Регистрация: 01.10.2012
Сообщений: 2,487
07.01.2013, 12:21 #8
Лучше так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 
 
int main() 
{ 
    int size = 10; 
    int array[size] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
    int i, j; 
 
    for ( i = size - 1; i >= 0; i--)  {
        if(array[i] % 2 != 0) 
        {
            --size;
            for ( j = i; j < size; j++) 
                array[j] = array[j+1]; 
            break;  
        } 
    } 
    for ( i = 0; i < size; ++i) 
        std::cout << array[i] << " "; 
    std::cout << std::endl;
}
1
David Sylva
1287 / 949 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.01.2013, 12:25 #9
Цитата Сообщение от Igor3D Посмотреть сообщение
Лучше так
Чем? У меня например на Visual Studio показывает ошибку, потому что размер массива должен быть константным.Ваш код не везде отработает и данный аспект не соответствует стандарту.
1
Виктор242424
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 37
07.01.2013, 12:31  [ТС] #10
Цитата Сообщение от David Sylva Посмотреть сообщение
Это цикл в котором выводим массив
Пустая строка
понял.спасибо
0
Igor3D
965 / 498 / 50
Регистрация: 01.10.2012
Сообщений: 2,487
07.01.2013, 12:45 #11
Цитата Сообщение от David Sylva Посмотреть сообщение
Чем?
Массив может не иметь ни одного нечетного элемента

Цитата Сообщение от David Sylva Посмотреть сообщение
У меня например на Visual Studio показывает ошибку, потому что размер массива должен быть константным.Ваш код не везде отработает и данный аспект не соответствует стандарту.
Согласен (я на gcc/icc)
1
David Sylva
1287 / 949 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.01.2013, 12:47 #12
Цитата Сообщение от Igor3D Посмотреть сообщение
Массив может не иметь ни одного нечетного элемента
Согласен.
0
Igor3D
965 / 498 / 50
Регистрация: 01.10.2012
Сообщений: 2,487
07.01.2013, 12:54 #13
C++
1
2
3
4
5
6
7
8
9
10
void work( int * a, int & size )  // вызов: work(a, size)
{
    for (int i = size - 1; i >= 0; --i)
        if (a[i] % 2) {
            --size;
            for (int j = i; j < size; ++j) 
                a[j] = a[j + 1];
            return;
        }
}
0
AlvinMax
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 16
07.01.2013, 17:47 #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
#include <iostream>
 
 using namespace std;
 
int main() 
{ 
 
 int n; cin>>n;
 int a[1000],i;
 for (i=1;i<=n;++i)
     cin >> a[i];
 int t,k=0;
 for (i=n;i>=1;--i)
     if (a[i]%2==1)
     { t=i;break;}
 int b[999];
 for (i=1;i<=n;++i)
     if (i!=t)
     { ++k; b[k]=a[i];}
     for (i=1;i<=k;++i)
     cout << b[i] << ' ';
     system("pause");
  
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2013, 17:47
Привет! Вот еще темы с ответами:

Удалить из массива последний отриц. элемент - C++
Всем доброй ночи! Очень нужна помощь с программой, так как завтра защищать лабараторную, получать допуск к сессии....

Удалить из массива последний отрицательный элемент. - C++
Добрый день! Помогите с решением задачи. ...

Удалить из массива первую строку последний столбец - C++
удалить из массива первую строку последний столбец

Массивы. Написать инструкцию, по которой меняется 1 и последний элемент массива - C++
Дан массив int arr={4,6,1,2,4,5,9,3}. Написать инструкцию, по которой меняется 1 и последний элемент массива.


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
07.01.2013, 17:47
Ответ Создать тему
Опции темы

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