С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Задан массив размера N. Удалить из массива все отрицательные элементы.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 16:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив: Удалить из массива все отрицательные элементы. (C++):

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

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

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

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

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

Удалить из массива все отрицательные элементы - C++
удалить из массива все отрицательные элементы . под удалением элемента следует понимать : исключение этого элемента из массива путем...

44
Сыроежка
Заблокирован
26.11.2011, 18:43 #16
Цитата Сообщение от mc.Duck Посмотреть сообщение
Vampire110, то есть в массив типа int надо засунуть переменную типа char, например.
С ваших слов получается именно так! Переменная типа int занимает в памяти 4 байта, даже если она = 0. Ничему не равна она быть не может, т.к даже по умолчанию она хранит в себе область памяти, в которой находится.
Даже я ничего не понял, что вы хотели сказать, и причем здесь переменная типа char?!
0
BRcr
4010 / 2299 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
26.11.2011, 19:02 #17
Цитата Сообщение от Vampire110 Посмотреть сообщение
... изменение размера массива посредством изменения переменной, хранящей размер массива ...
это где ж такие переменные водятся-то?
0
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;
    
}
Пробуйте, у меня работает
0
go
Эксперт С++
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]<<" ";
0
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
26.11.2011, 21:05 #20
Цитата Сообщение от Сыроежка Посмотреть сообщение
Здесь ни одно из приведенных решений не является корректным! Пока автор вопроса не скажет, каким значением заменить отрицательные элементы в масиве, задачу решить нельзя!
Удалить - значит убрать этот элемент из массива, а остальные данные сдвинуть.
Если вы не поняли задачу, не надо показывать какой вы "острый" и умный.
2
Vampire110
17 / 17 / 0
Регистрация: 18.05.2011
Сообщений: 33
26.11.2011, 22:49  [ТС] #21
Cпасибо, но не могли бы вы перевести прогу на Pellec C а то так не совсем понятно
1
BRcr
4010 / 2299 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
26.11.2011, 22:59 #22
Цитата Сообщение от Vampire110 Посмотреть сообщение
не могли бы вы перевести прогу на Pellec C
А что, в Pellec'e какой-то другой язык Си используется? Просто позаменяйте все cin, cout на printf, scanf и будет вам Си'шная версия.
0
Vampire110
17 / 17 / 0
Регистрация: 18.05.2011
Сообщений: 33
26.11.2011, 23:23  [ТС] #23
могу лишнего поудалять и работать не будет. не всю прогу а ту часть где удаление
1
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.11.2011, 23:26 #24
Столько алгоритмов удаления, а про самый быстрый метод удаления элементов забыли:
http://www.cyberforum.ru/showthread.php?p=2132969
0
BRcr
26.11.2011, 23:36
  #25

Не по теме:

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

0
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.11.2011, 23:44 #26
Цитата Сообщение от BRcr Посмотреть сообщение

Не по теме:


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

Не по теме:

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

0
BRcr
4010 / 2299 / 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;
                }
        }
Тут еще и последний элемент массива не забыт
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;
                }
        }
Тут еще и последний элемент массива не забыт
В моей версии тоже не забыт
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 };. Когда удалите, то сообщите мне! Мне будет очень любопытно особенно посмотреть, как вы будете сдвигать элементы массива! Флаг вам в руки и удачи!
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
27.11.2011, 11:09 #30
Сыроежка, для начала откройте глаза
в связи с вашей некомпетентностью в массивах, привожу скриншот работы моего кода, на вашем примере.
Как видите, отработало корректно, и в следующий раз прежде чем писать огромный пост на форуме, разберитесь в коде
0
Миниатюры
Массив: Удалить из массива все отрицательные элементы.  
27.11.2011, 11:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 11:09
Привет! Вот еще темы с ответами:

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

Из массива вещественных чисел удалить все отрицательные элементы - C++
Помогите пожалуйста с кодом для этой программы.(Только чтобы он был максимально простым и понятным для меня,и при использовании простых...

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

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


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

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

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