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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.72
Vampire110
17 / 17 / 0
Регистрация: 18.05.2011
Сообщений: 33
#1

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

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

Задан массив размера N. Удалить из массива все отрицательные элементы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 16:16     Массив: Удалить из массива все отрицательные элементы.
Посмотрите здесь:
C++ если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном случае-удалить отрицательные элементы.после удален
C++ Массив: Сформировать третий массив, в который включить все отрицательные элементы массива А и все максимальные элементы массива В.
C++ Удалить все отрицательные элементы массива
Удалить из массива все отрицательные элементы; C++
Удалить из массива все отрицательные элементы C++
Удалить из массива все отрицательные элементы C++
C++ Из массива Х(N) все положительные элементы записать в массив У(К), а все отрицательные элементы – в массив Z(М)...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
26.11.2011, 18:43     Массив: Удалить из массива все отрицательные элементы. #16
Цитата Сообщение от mc.Duck Посмотреть сообщение
Vampire110, то есть в массив типа int надо засунуть переменную типа char, например.
С ваших слов получается именно так! Переменная типа int занимает в памяти 4 байта, даже если она = 0. Ничему не равна она быть не может, т.к даже по умолчанию она хранит в себе область памяти, в которой находится.
Даже я ничего не понял, что вы хотели сказать, и причем здесь переменная типа char?!
BRcr
4008 / 2297 / 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++
3586 / 1366 / 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]<<" ";
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
26.11.2011, 21:05     Массив: Удалить из массива все отрицательные элементы. #20
Цитата Сообщение от Сыроежка Посмотреть сообщение
Здесь ни одно из приведенных решений не является корректным! Пока автор вопроса не скажет, каким значением заменить отрицательные элементы в масиве, задачу решить нельзя!
Удалить - значит убрать этот элемент из массива, а остальные данные сдвинуть.
Если вы не поняли задачу, не надо показывать какой вы "острый" и умный.
Vampire110
17 / 17 / 0
Регистрация: 18.05.2011
Сообщений: 33
26.11.2011, 22:49  [ТС]     Массив: Удалить из массива все отрицательные элементы. #21
Cпасибо, но не могли бы вы перевести прогу на Pellec C а то так не совсем понятно
BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
26.11.2011, 22:59     Массив: Удалить из массива все отрицательные элементы. #22
Цитата Сообщение от Vampire110 Посмотреть сообщение
не могли бы вы перевести прогу на Pellec C
А что, в Pellec'e какой-то другой язык Си используется? Просто позаменяйте все cin, cout на printf, scanf и будет вам Си'шная версия.
Vampire110
17 / 17 / 0
Регистрация: 18.05.2011
Сообщений: 33
26.11.2011, 23:23  [ТС]     Массив: Удалить из массива все отрицательные элементы. #23
могу лишнего поудалять и работать не будет. не всю прогу а ту часть где удаление
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.11.2011, 23:26     Массив: Удалить из массива все отрицательные элементы. #24
Столько алгоритмов удаления, а про самый быстрый метод удаления элементов забыли:
http://www.cyberforum.ru/showthread.php?p=2132969
BRcr
26.11.2011, 23:36
  #25

Не по теме:

Цитата Сообщение от Thinker Посмотреть сообщение
Столько алгоритмов удаления, а про самый быстрый метод удаления элементов забыли:
Он поди что уже патентом защищен! Цитировать-то его хоть можно?

Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.11.2011, 23:44     Массив: Удалить из массива все отрицательные элементы. #26
Цитата Сообщение от BRcr Посмотреть сообщение

Не по теме:


Он поди что уже патентом защищен! Цитировать-то его хоть можно?

Не по теме:

Не стал патентовать, все для людей, пользуйтесь на здоровье А если без шуток, то правда алгоритм минимальной сложности, это очень важно

BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
26.11.2011, 23:47     Массив: Удалить из массива все отрицательные элементы. #27
Мои пять копеек:
C++
1
2
3
4
5
6
7
8
        int size_of_M = sizeof( M ) / sizeof( M[0] );
 
        for ( int i = 0; i < size_of_M; i++ ) {
                if ( M[i] < 0 ) {
                        for ( int j = i; j < size_of_M - 1; j++ ) { M[j] = M[j + 1]; }
                        M[size_of_M - 1] = 0;
                }
        }
Тут еще и последний элемент массива не забыт
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
27.11.2011, 01:01     Массив: Удалить из массива все отрицательные элементы. #28
Цитата Сообщение от BRcr Посмотреть сообщение
Мои пять копеек:
C++
1
2
3
4
5
6
7
8
        int size_of_M = sizeof( M ) / sizeof( M[0] );
 
        for ( int i = 0; i < size_of_M; i++ ) {
                if ( M[i] < 0 ) {
                        for ( int j = i; j < size_of_M - 1; j++ ) { M[j] = M[j + 1]; }
                        M[size_of_M - 1] = 0;
                }
        }
Тут еще и последний элемент массива не забыт
В моей версии тоже не забыт
Сыроежка
Заблокирован
27.11.2011, 08:16     Массив: Удалить из массива все отрицательные элементы. #29
Цитата Сообщение от go Посмотреть сообщение
С чего бы это?
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]<<" ";
Проблема в том, что вы не внимательно читаете то, что я пишу. А вам, в силу вашей невысокой квалификации, следует внимательно читать, что я пишу. Это вам пойдет на пользу. Я уже раньше привел пример массива, когда это выполнить нельзя. Специально для вас привожу еще более простой пример int a[] = { -1 };. Догадайтесь с трех раз, удаляет ли ваш код отрицательный элемент?!
Но даже без этого примитивного примера прежде, чем бросаться писать код, задумайтесь над чем, что значит "удалить" отрицательный элемент в массиве? Это означает, что надо заменить его значение каким-то другим значением, так как удалять элементы в массиве нельзя! Массив имеет фиксированный размер!

Если что-то не понятно, то не стеснейтись, обращайтесь, я вам разъясню. Мне это не трудно сделать и в четвертый раз!

Добавлено через 5 минут
Цитата Сообщение от Mustik Посмотреть сообщение
Удалить - значит убрать этот элемент из массива, а остальные данные сдвинуть.
Если вы не поняли задачу, не надо показывать какой вы "острый" и умный.
Это вы не понимаете, что происходит! Специально для таких "продвинутых", как вы, повторяю простейший пример. Попробуйте удалить отрицательный элемент в массиве int a[] = { -1 };. Когда удалите, то сообщите мне! Мне будет очень любопытно особенно посмотреть, как вы будете сдвигать элементы массива! Флаг вам в руки и удачи!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 11:09     Массив: Удалить из массива все отрицательные элементы.
Еще ссылки по теме:
C++ Из массива вещественных чисел удалить все отрицательные элементы
C++ Из массива вещественных чисел удалить все отрицательные элементы
Из массива вещественных чисел удалить все отрицательные элементы C++
1. Написать функцию проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными э C++
C++ Написать функцию проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными элем

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
27.11.2011, 11:09     Массив: Удалить из массива все отрицательные элементы. #30
Сыроежка, для начала откройте глаза
в связи с вашей некомпетентностью в массивах, привожу скриншот работы моего кода, на вашем примере.
Как видите, отработало корректно, и в следующий раз прежде чем писать огромный пост на форуме, разберитесь в коде
Миниатюры
Массив: Удалить из массива все отрицательные элементы.  
Yandex
Объявления
27.11.2011, 11:09     Массив: Удалить из массива все отрицательные элементы.
Закрытая тема Создать тему
Опции темы

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