Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.65/23: Рейтинг темы: голосов - 23, средняя оценка - 4.65
Vampire110
17 / 17 / 0
Регистрация: 18.05.2011
Сообщений: 33
1

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

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

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

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 16:16
Ответы с готовыми решениями:

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

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

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

Удалить все отрицательные элементы массива
У меня есть динамический масив... Как удалить все отрицательние елементи? ...

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

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

Проблема в том, что из массива нельзя удалить отрицательные элементы. Их лишь можно заменить на какие-нибудь другие значения. То есть количество элементов в массвиве не меняется.
0
Boogi43
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
co6ak
Кошковед
515 / 503 / 63
Регистрация: 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;
}
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");
    }
0
co6ak
Кошковед
515 / 503 / 63
Регистрация: 12.04.2010
Сообщений: 1,392
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
mc.Duck
Заблокирован
26.11.2011, 17:31 8
co6ak, в C++ можно без него. В си - не знаю.
0
Сыроежка
Заблокирован
26.11.2011, 17:37 9
Цитата Сообщение от mc.Duck Посмотреть сообщение
co6ak, в C++ можно без него. В си - не знаю.
И в С++, и в С в функции main можно опустить предложение return. Тогда компилятор сам вставляет код, который соответствуют предложению return ( 0 );
0
co6ak
Кошковед
515 / 503 / 63
Регистрация: 12.04.2010
Сообщений: 1,392
26.11.2011, 17:43 10
ну-ну. удачи в начинаниях
0
Сыроежка
Заблокирован
26.11.2011, 17:46 11
Цитата Сообщение от co6ak Посмотреть сообщение
ну-ну. удачи в начинаниях
Это вы про что?! Про то, что вы стандарт не знаете?!
0
mc.Duck
Заблокирован
26.11.2011, 17:57 12
Сыроежка, хех) рассмешили. Ну ладно уж, со6ак, наверное, хочет показать обширность своих знаний.
0
Vampire110
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
mc.Duck
Заблокирован
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
BRcr
4019 / 2309 / 291
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
26.11.2011, 19:02 17
Цитата Сообщение от Vampire110 Посмотреть сообщение
... изменение размера массива посредством изменения переменной, хранящей размер массива ...
это где ж такие переменные водятся-то?
0
Mustik
56 / 56 / 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
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
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
Mustik
56 / 56 / 6
Регистрация: 10.07.2011
Сообщений: 229
26.11.2011, 21:05 20
Цитата Сообщение от Сыроежка Посмотреть сообщение
Здесь ни одно из приведенных решений не является корректным! Пока автор вопроса не скажет, каким значением заменить отрицательные элементы в масиве, задачу решить нельзя!
Удалить - значит убрать этот элемент из массива, а остальные данные сдвинуть.
Если вы не поняли задачу, не надо показывать какой вы "острый" и умный.
2
26.11.2011, 21:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2011, 21:05

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

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

Из массива вещественных чисел удалить все отрицательные элементы
Ребят проверьте пожалуйста мой код, почему то я не уверен,что он правильно...


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

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

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