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

Массив: Удалить из массива все отрицательные элементы. - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.72
Vampire110
17 / 17 / 0
Регистрация: 18.05.2011
Сообщений: 33
26.11.2011, 16:16     Массив: Удалить из массива все отрицательные элементы. #1
Задан массив размера N. Удалить из массива все отрицательные элементы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 16:16     Массив: Удалить из массива все отрицательные элементы.
Посмотрите здесь:

Удалить из массива все отрицательные элементы C++
C++ Удалить все отрицательные элементы массива
C++ если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном случае-удалить отрицательные элементы.после удален
Удалить из массива все отрицательные элементы C++
C++ Массив: Сформировать третий массив, в который включить все отрицательные элементы массива А и все максимальные элементы массива В.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
26.11.2011, 16:29     Массив: Удалить из массива все отрицательные элементы. #2
Vampire110,

Проблема в том, что из массива нельзя удалить отрицательные элементы. Их лишь можно заменить на какие-нибудь другие значения. То есть количество элементов в массвиве не меняется.
Boogi43
4 / 4 / 0
Регистрация: 25.11.2011
Сообщений: 56
26.11.2011, 17:11     Массив: Удалить из массива все отрицательные элементы. #3
пусть нам дан массив M[N], тогда алгоритм удаления отрицательных чисел следующий
C++
1
2
3
4
5
6
7
k=1;
for(i=(N-1); i>-1; i--)
     if (M[i]<0)
        {
           for (j=i; j<(N-k); j++)
                 M[j]=M[j+1];
         }
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
26.11.2011, 17:20     Массив: Удалить из массива все отрицательные элементы. #4
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
#include <iostream>
#include <time.h>
 
int main()
{
    srand( time ( NULL ) );
    int *mas_a;
    int *mas_b;
    std::cout << "Enter number of elements: ";
    int N;
    std::cin >> N;
    mas_a = new int ( N );
    int counter = 0;
    std::cout << std::endl;
    for ( int i = 0; i < N; i ++ )
    {
        mas_a[i] = rand() % 100 - rand() % 50;
        std::cout << mas_a[i];
        if ( mas_a[i] < 0 )
            counter++;
    }
    mas_b = new int ( N - counter );
    for ( int i = 0; i < N; i ++ )
    {   
        int j = 0;
        if ( mas_a[i] >= 0 )
            mas_b[j++] = mas_a[i];
    }
    std::cout << "nResulted massive: " << std::endl;
    for ( int i = 0; i < N - counter; i ++ )
    {   
        std::cout << mas_b[i];
    }
    std::cin.get();
    return 0;
}
mc.Duck
Заблокирован
26.11.2011, 17:25     Массив: Удалить из массива все отрицательные элементы. #5
Vampire110, удалить элементы из массива нельзя, но можно составить новый(реализация на C++):
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
#include<iostream>
#include<cstdlib>
using namespace std;
 
const int n=10;
 
int main()
{
    int mass[n];
    int counter=0;
    int counter2=0;
    for(int i=1;i<=10;i++) mass[i]=rand() %10-3;
    cout<<"Mass 1: ";
    for(int i=1;i<=10;i++) cout<<mass[i]<<" ";cout<<endl;
    for(int i=1;i<=10;i++) if(mass[i]>=0) counter++;
    
    int *new_mass = new int [counter];
    
    for(int i=1;i<=10;i++) if(mass[i]>=0) {counter2++;new_mass[counter2]=mass[i];}
    
    cout<<"Mass 2: ";
    
    for(int i=1;i<=counter2;i++) cout<<new_mass[i]<<" ";cout<<endl;
     
    system("Pause");
    }
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
26.11.2011, 17:26     Массив: Удалить из массива все отрицательные элементы. #6
mc.Duck, return?
Сыроежка
Заблокирован
26.11.2011, 17:26     Массив: Удалить из массива все отрицательные элементы. #7
Цитата Сообщение от Boogi43 Посмотреть сообщение
пусть нам дан массив M[N], тогда алгоритм удаления отрицательных чисел следующий
C++
1
2
3
4
5
6
7
k=1;
for(i=(N-1); i>-1; i--)
     if (M[i]<0)
        {
           for (j=i; j<(N-k); j++)
                 M[j]=M[j+1];
         }
Уважаемый, вы не удалили отрицательные элементы! Рассмотрите пример int a[2] = { -1, -2 }; В условиях задачи не хватает пункта, каким значением заменить отрицательные элементы массива!

Здесь ни одно из приведенных решений не является корректным! Пока автор вопроса не скажет, каким значением заменить отрицательные элементы в масиве, задачу решить нельзя!
mc.Duck
Заблокирован
26.11.2011, 17:31     Массив: Удалить из массива все отрицательные элементы. #8
co6ak, в C++ можно без него. В си - не знаю.
Сыроежка
Заблокирован
26.11.2011, 17:37     Массив: Удалить из массива все отрицательные элементы. #9
Цитата Сообщение от mc.Duck Посмотреть сообщение
co6ak, в C++ можно без него. В си - не знаю.
И в С++, и в С в функции main можно опустить предложение return. Тогда компилятор сам вставляет код, который соответствуют предложению return ( 0 );
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
26.11.2011, 17:43     Массив: Удалить из массива все отрицательные элементы. #10
ну-ну. удачи в начинаниях
Сыроежка
Заблокирован
26.11.2011, 17:46     Массив: Удалить из массива все отрицательные элементы. #11
Цитата Сообщение от co6ak Посмотреть сообщение
ну-ну. удачи в начинаниях
Это вы про что?! Про то, что вы стандарт не знаете?!
mc.Duck
Заблокирован
26.11.2011, 17:57     Массив: Удалить из массива все отрицательные элементы. #12
Сыроежка, хех) рассмешили. Ну ладно уж, со6ак, наверное, хочет показать обширность своих знаний.
Vampire110
17 / 17 / 0
Регистрация: 18.05.2011
Сообщений: 33
26.11.2011, 18:23  [ТС]     Массив: Удалить из массива все отрицательные элементы. #13
Под удалением элемента массива следует понимать изменение размера массива посредством изменения переменной хранящей размер массива а не создание нового массива.
на Pellec C как это будет выглядеть?
Сыроежка
Заблокирован
26.11.2011, 18:27     Массив: Удалить из массива все отрицательные элементы. #14
Цитата Сообщение от Vampire110 Посмотреть сообщение
Под удалением элемента массива следует понимать изменение размера массива посредством изменения переменной хранящей размер массива а не создание нового массива.
на Pellec C как это будет выглядеть?
Вы не можете изменить размерность массива. Если вы измените значение переменной, задающий размер массива, то, фактически, вы создадите новый массив, который не будет содержать элементы исходного массива. Поэтому без промежуточного массива здесь не обойтись.
mc.Duck
Заблокирован
26.11.2011, 18:32     Массив: Удалить из массива все отрицательные элементы. #15
Vampire110, то есть в массив типа int надо засунуть переменную типа char, например.
С ваших слов получается именно так! Переменная типа int занимает в памяти 4 байта, даже если она = 0. Ничему не равна она быть не может, т.к даже по умолчанию она хранит в себе область памяти, в которой находится.
Сыроежка
Заблокирован
26.11.2011, 18:43     Массив: Удалить из массива все отрицательные элементы. #16
Цитата Сообщение от mc.Duck Посмотреть сообщение
Vampire110, то есть в массив типа int надо засунуть переменную типа char, например.
С ваших слов получается именно так! Переменная типа int занимает в памяти 4 байта, даже если она = 0. Ничему не равна она быть не может, т.к даже по умолчанию она хранит в себе область памяти, в которой находится.
Даже я ничего не понял, что вы хотели сказать, и причем здесь переменная типа char?!
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
26.11.2011, 19:02     Массив: Удалить из массива все отрицательные элементы. #17
Цитата Сообщение от Vampire110 Посмотреть сообщение
... изменение размера массива посредством изменения переменной, хранящей размер массива ...
это где ж такие переменные водятся-то?
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
26.11.2011, 19:11     Массив: Удалить из массива все отрицательные элементы. #18
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
48
49
50
51
52
53
54
55
56
57
#include <iostream> //подключение заголовочного файла управления потоками ввода/вывода
#include <string>
#include <windows.h>
 
 
void main( void )
{
    int N,tmpN;
    int size;
 
    std::cout << "Enter the array size: ";
    std::cin >> N;
    tmpN = N;
    
    // создаем динамический массив
    double *arr = new double[N];
    
    // заполняем массив
    for( int i = 0; i < N; ++i )
    {
        std::cout << "Enter the value of arr[" << i << "] = ";
        std::cin >> arr[i];
    }
    // ищем отрицательные элементы и удаляем их из массива
    for( int i = 0; i < N; ++i )
    {
        if( arr[i] < 0 )
        {
            size = sizeof( double ) * ( tmpN - ( i + 1 ));
            if( !size )
            {
                --tmpN;
                break;
            }
            memcpy( &arr[i],&arr[i + 1],size );
            --i;
            --tmpN;
        }
    }
    if( !tmpN )
    {
        std::cout << "All values are negatives" << std::endl;
    }
    else
    {
        // выводим оставшиеся данные
        std::cout << "Data in the array: " << std::endl;
        for( int i = 0; i < tmpN; ++i )
        {
            std::cout << "arr[" << i << "] = " << arr[i] << std::endl;
        }
    }
 
    system( "PAUSE" );
    delete []arr;
    
}
Пробуйте, у меня работает
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.11.2011, 19:33     Массив: Удалить из массива все отрицательные элементы. #19
Цитата Сообщение от Сыроежка Посмотреть сообщение
Здесь ни одно из приведенных решений не является корректным! Пока автор вопроса не скажет, каким значением заменить отрицательные элементы в масиве, задачу решить нельзя!
С чего бы это?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const int N=5;
    int M[N]={1,-2,3,-4,5};
    int i,j,count=N;
 
    for (i=0;i<count;i++)
        if (M[i]<0)
        {
            for (j=i;j<count-1;j++)
                M[j]=M[j+1];
            count--;
            i--;
        }
        //cout << count<<endl;
        for (i=0;i<count;i++)
            cout << M[i]<<" ";
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2011, 21:05     Массив: Удалить из массива все отрицательные элементы.
Еще ссылки по теме:

Удалить из массива все отрицательные элементы; C++
C++ Из массива Х(N) все положительные элементы записать в массив У(К), а все отрицательные элементы – в массив Z(М)...
C++ Из массива вещественных чисел удалить все отрицательные элементы

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

Или воспользуйтесь поиском по форуму:
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
26.11.2011, 21:05     Массив: Удалить из массива все отрицательные элементы. #20
Цитата Сообщение от Сыроежка Посмотреть сообщение
Здесь ни одно из приведенных решений не является корректным! Пока автор вопроса не скажет, каким значением заменить отрицательные элементы в масиве, задачу решить нельзя!
Удалить - значит убрать этот элемент из массива, а остальные данные сдвинуть.
Если вы не поняли задачу, не надо показывать какой вы "острый" и умный.
Yandex
Объявления
26.11.2011, 21:05     Массив: Удалить из массива все отрицательные элементы.
Закрытая тема Создать тему
Опции темы

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