Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/68: Рейтинг темы: голосов - 68, средняя оценка - 4.65
17 / 17 / 0
Регистрация: 18.05.2011
Сообщений: 33
1

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

26.11.2011, 16:16. Показов 13949. Ответов 44
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задан массив размера N. Удалить из массива все отрицательные элементы.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2011, 16:16
Ответы с готовыми решениями:

если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном случае-удалить отрицательные элементы.после удален
задан массив Х целых чисел. если массив не является знакочередующимся,то удалить из массива все...

Массив: Сформировать третий массив, в который включить все отрицательные элементы массива А и все максимальные элементы массива В.
Даны массивы целых чисел A и B. Сформировать третий массив, в который включить все отрицательные...

Удалить из массива все отрицательные элементы;
Удалить из массива все отрицательные элементы;

Удалить все отрицательные элементы массива
У меня есть динамический масив... Как удалить все отрицательние елементи? if(mass<0) а дальше?

44
Заблокирован
26.11.2011, 16:29 2
Vampire110,

Проблема в том, что из массива нельзя удалить отрицательные элементы. Их лишь можно заменить на какие-нибудь другие значения. То есть количество элементов в массвиве не меняется.
0
4 / 4 / 2
Регистрация: 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];
         }
0
Кошковед
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
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;
}
0
Заблокирован
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");
    }
0
Кошковед
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
26.11.2011, 17:26 6
mc.Duck, return?
0
Заблокирован
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 }; В условиях задачи не хватает пункта, каким значением заменить отрицательные элементы массива!

Здесь ни одно из приведенных решений не является корректным! Пока автор вопроса не скажет, каким значением заменить отрицательные элементы в масиве, задачу решить нельзя!
0
Заблокирован
26.11.2011, 17:31 8
co6ak, в C++ можно без него. В си - не знаю.
0
Заблокирован
26.11.2011, 17:37 9
Цитата Сообщение от mc.Duck Посмотреть сообщение
co6ak, в C++ можно без него. В си - не знаю.
И в С++, и в С в функции main можно опустить предложение return. Тогда компилятор сам вставляет код, который соответствуют предложению return ( 0 );
0
Кошковед
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
26.11.2011, 17:43 10
ну-ну. удачи в начинаниях
0
Заблокирован
26.11.2011, 17:46 11
Цитата Сообщение от co6ak Посмотреть сообщение
ну-ну. удачи в начинаниях
Это вы про что?! Про то, что вы стандарт не знаете?!
0
Заблокирован
26.11.2011, 17:57 12
Сыроежка, хех) рассмешили. Ну ладно уж, со6ак, наверное, хочет показать обширность своих знаний.
0
17 / 17 / 0
Регистрация: 18.05.2011
Сообщений: 33
26.11.2011, 18:23  [ТС] 13
Под удалением элемента массива следует понимать изменение размера массива посредством изменения переменной хранящей размер массива а не создание нового массива.
на Pellec C как это будет выглядеть?
1
Заблокирован
26.11.2011, 18:27 14
Цитата Сообщение от Vampire110 Посмотреть сообщение
Под удалением элемента массива следует понимать изменение размера массива посредством изменения переменной хранящей размер массива а не создание нового массива.
на Pellec C как это будет выглядеть?
Вы не можете изменить размерность массива. Если вы измените значение переменной, задающий размер массива, то, фактически, вы создадите новый массив, который не будет содержать элементы исходного массива. Поэтому без промежуточного массива здесь не обойтись.
0
Заблокирован
26.11.2011, 18:32 15
Vampire110, то есть в массив типа int надо засунуть переменную типа char, например.
С ваших слов получается именно так! Переменная типа int занимает в памяти 4 байта, даже если она = 0. Ничему не равна она быть не может, т.к даже по умолчанию она хранит в себе область памяти, в которой находится.
0
Заблокирован
26.11.2011, 18:43 16
Цитата Сообщение от mc.Duck Посмотреть сообщение
Vampire110, то есть в массив типа int надо засунуть переменную типа char, например.
С ваших слов получается именно так! Переменная типа int занимает в памяти 4 байта, даже если она = 0. Ничему не равна она быть не может, т.к даже по умолчанию она хранит в себе область памяти, в которой находится.
Даже я ничего не понял, что вы хотели сказать, и причем здесь переменная типа char?!
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
26.11.2011, 19:02 17
Цитата Сообщение от Vampire110 Посмотреть сообщение
... изменение размера массива посредством изменения переменной, хранящей размер массива ...
это где ж такие переменные водятся-то?
0
58 / 58 / 6
Регистрация: 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;
    
}
Пробуйте, у меня работает
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
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]<<" ";
0
58 / 58 / 6
Регистрация: 10.07.2011
Сообщений: 229
26.11.2011, 21:05 20
Цитата Сообщение от Сыроежка Посмотреть сообщение
Здесь ни одно из приведенных решений не является корректным! Пока автор вопроса не скажет, каким значением заменить отрицательные элементы в масиве, задачу решить нельзя!
Удалить - значит убрать этот элемент из массива, а остальные данные сдвинуть.
Если вы не поняли задачу, не надо показывать какой вы "острый" и умный.
2
26.11.2011, 21:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2011, 21:05
Помогаю со студенческими работами здесь

Удалить из массива все отрицательные элементы
удалить из массива все отрицательные элементы . под удалением элемента следует понимать :...

Удалить из массива все отрицательные элементы
Создать динамический массыв. Розмерность массыва ввести из клавиатуры. Задание: Удалить из массыва...

Из массива Х(N) все положительные элементы записать в массив У(К), а все отрицательные элементы – в массив Z(М)...
Пожалуйста помогите решить задачку на си++, заранее спасибо Из массива Х(N) все положительные...

Массив: Заменить все отрицательные элементы массива их квадратами и упорядочить элементы массива по возрастанию.
Сформировать массив 20 целых случайных чисел в диапазоне от минус 30 до 30. Напечатать его....


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru