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

Все отрицательные среди данных числа заменить на 0 - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Grafon
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 19
12.03.2014, 15:57     Все отрицательные среди данных числа заменить на 0 #1
Даны четыре числа. Все отрицательные среди них числа заменить на 0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2014, 15:57     Все отрицательные среди данных числа заменить на 0
Посмотрите здесь:

Ввести с клавиатуры 10 чисел. Если среди них есть числа большие 15, заменить их на 15. Напечатать все полученные числа. C++
Заменить все отрицательные числа их модулями C++
C++ Массивы:многомерный и одномерный (заменить нулями все отрицательные числа выше главной диагонали)
C++ Написать рекурсивную функцию, которая вначале печатает все отрицательные числа, а затем все положительные числа
C++ Даны действительные числа. Заменить все отрицательные элементы их квадратами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
12.03.2014, 16:05     Все отрицательные среди данных числа заменить на 0 #2
C++
1
2
3
4
if( repeat1 < 0 ) repeat1 = 0;
if( SystemBugCount < 0 ) SystemBugCount = 0;
if( x < 0 ) x = 0;
if( float__ < 0 ) float__ = 0;
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
12.03.2014, 16:16     Все отрицательные среди данных числа заменить на 0 #3
Давайте поизвращаемся +)

C++
1
2
3
4
5
 signed int NUMS[4],i;
 for(i=0;i<4;i++)cin>>NUMS[i];
 for(i=0;i<4;i++)NUMS[i]*=(1+(NUMS[i]>>31));
 for(i=0;i<4;i++)cout<<NUMS[i]<<" ";
}
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
12.03.2014, 16:17     Все отрицательные среди данных числа заменить на 0 #4
Retyrn0, вы заголовок темы читали?
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
12.03.2014, 16:22     Все отрицательные среди данных числа заменить на 0 #5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
вы заголовок темы читали?
Нет. А надо было?) Ну поменять на if(NUMS[i]<0)NUMS[i]=0;
Но это же скучно.)
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
12.03.2014, 16:25     Все отрицательные среди данных числа заменить на 0 #6
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Но это же скучно.)
Это не важно. Главное ведь человеку помочь.
KOPOJI
Модератор
 Аватар для KOPOJI
16240 / 6451 / 389
Регистрация: 12.06.2012
Сообщений: 19,333
12.03.2014, 16:34     Все отрицательные среди данных числа заменить на 0 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
const int N = 4;
 
int main(int argc, char *argv[])
{
    int x[N];
    
    for(int i = 0; i < N; ++i)
    {
        std::cin >> x[i];
        x[i] *= x[i] >= 0;
    }
    for(int i = 0; i < N; ++i)
        std::cout << x[i] << ' ';
    std::cout << std::endl;
    
    return 0;
}
TenGen
Будущее рядом
 Аватар для TenGen
96 / 94 / 20
Регистрация: 06.03.2014
Сообщений: 342
12.03.2014, 16:36     Все отрицательные среди данных числа заменить на 0 #8
SatanaXIII, я бы все таки запрограммировал понадежнее:

C++
1
2
3
4
5
6
7
8
const int repeat1_zero = 0;
const int SystemBugCount_zero = 0;
const int x_zero = 0;
const int float__zero = 0;
if( repeat1 < 0 ) repeat1 = repeat1_zero;
if( SystemBugCount < 0 ) SystemBugCount = SystemBugCount_zero;
if( x < 0 ) x = x_zero;
if( float__ < 0 ) float__ = float__zero;
А то сами понимаете, задача не так проста, какой кажется
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
12.03.2014, 16:45     Все отрицательные среди данных числа заменить на 0 #9
C++
1
2
3
4
5
6
7
8
9
int replacer(int x) { return (x < 0) ? 0 : x; }
 
int main(void)
{
   int arr[N];
//...
   std::transform(arr, arr + N, arr, replacer);
//...
}
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
12.03.2014, 16:48     Все отрицательные среди данных числа заменить на 0 #10
Цитата Сообщение от TenGen Посмотреть сообщение
я бы все таки запрограммировал понадежнее
Не факт, что они именно так даны. Тут без пояснений тс мы бессильны.
Цитата Сообщение от TenGen Посмотреть сообщение
А то сами понимаете, задача не так проста, какой кажется
Само собой. Иначе не было б тут уже два листа обсуждений.
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
12.03.2014, 16:51     Все отрицательные среди данных числа заменить на 0 #11
Цитата Сообщение от KOPOJI Посмотреть сообщение
x[i] *= x[i] >= 0;
опередил
но можно еще так извращаться
C++
1
 x[i] *= x[i] > 0;
если элемент 0 то сравнение ложь 0 но умножение 0*0=0
так что только отрицательные обнуляться
а можно еще вот так
C++
1
x[i]*= x[i]*!(x[i]&0x80000000);
но это жесткая привязка к int 32 разряда
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
12.03.2014, 17:01     Все отрицательные среди данных числа заменить на 0 #12
Цитата Сообщение от TenGen Посмотреть сообщение
А то сами понимаете, задача не так проста, какой кажется
Та да
Но тогда уже и
C++
1
2
3
4
if((MASS=new signed int[count])==NULL)
{
  cout<<"ERROR!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
}
нужно прикрутить, а-то вдруг массив станет не на 4, а на 5 элементов, а у системы не окажется искомых 20 с копейками байт)
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
12.03.2014, 17:07     Все отрицательные среди данных числа заменить на 0 #13
Цитата Сообщение от Retyrn0 Посмотреть сообщение
MASS=new signed int[count])==NULL
и давно научили new с NULL сравнивать?
исключения нужно ловить
KOPOJI
Модератор
 Аватар для KOPOJI
16240 / 6451 / 389
Регистрация: 12.06.2012
Сообщений: 19,333
12.03.2014, 17:26     Все отрицательные среди данных числа заменить на 0 #14
Цитата Сообщение от ValeryS Посмотреть сообщение
но это жесткая привязка к int 32 разряда
ну тогда вы немного переборщили, зачем домножать на число?
C
1
x[i] *= !(x[i] & 0x80000000);
Хотя если "помудреннее", можно и так
C
1
x[i] *= !(x[i] & (1 << 31));
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
12.03.2014, 17:41     Все отрицательные среди данных числа заменить на 0 #15
Цитата Сообщение от ValeryS Посмотреть сообщение
исключения нужно ловить
Точно...ох уж эти правила хорошего тона...Мы сделали единогласный вывод, что ТС лучше изучать программирование на БОЛЕЕ ПРОСТЫХ ПРИМЕРАХ, чем он привёл ХД
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
12.03.2014, 17:56     Все отрицательные среди данных числа заменить на 0 #16
Цитата Сообщение от KOPOJI Посмотреть сообщение
ну тогда вы немного переборщили, зачем домножать на число?
действительно
незачем
вот так ракеты и падают
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
12.03.2014, 18:00     Все отрицательные среди данных числа заменить на 0 #17
Цитата Сообщение от KOPOJI Посмотреть сообщение
x[i] *= !(x[i] & (1 << 31));
привязка к 32-битности же осталась.

Лучше:
C++
1
2
3
4
5
6
7
8
signed int num_bits=-1;
unsigned int count=0;
while(num_bits!=0)
{
  num_bits/=2;
  count++;
}
x[i] *= !(x[i] & (1 << count));
Или что-то такое.
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
12.03.2014, 18:19     Все отрицательные среди данных числа заменить на 0 #18
Цитата Сообщение от Retyrn0 Посмотреть сообщение
signed int num_bits=-1;
Цитата Сообщение от Retyrn0 Посмотреть сообщение
while(num_bits!=0)
{
* num_bits/=2;
бесконечный цикл
-1/2 =-1;
у знаковых при сдвиге вправо знаковый бит копируется
1111 1111(bin) >>1 = 1111 1111(bin)
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
12.03.2014, 18:44     Все отрицательные среди данных числа заменить на 0 #19
Цитата Сообщение от ValeryS Посмотреть сообщение
-1/2 =-1;
Серьёзно? Т.е. математика, утверждающая, что (-1)/2 = -0.5 и что при округлении до целого получим ноль, на самом деле ничего не понимает в реальных цифрах?) Ну тогда ИМХО, мы только что нашли серьёзную ошибку архитектуры. Представляю сколько за долгие годы существования ЭВМ эта ошибка портила людям нервы и мировоззрение). А зачем нам сдвигать? Можно РЕАЛЬНО РАЗДЕЛИТЬ НА 2. Даже если компилятор соптимизирует "/2" к ">>1" и сдвиг действительно даст результат, расходящийся с математикой, то старое доброе деление, переданное компилятору с флагом "не оптимизировать" должно дать нормальный результат. Сейчас нет возможности проверить "num_bits/2==-1" =(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2014, 18:49     Все отрицательные среди данных числа заменить на 0
Еще ссылки по теме:

Одномерный массив. Все отрицательные среди них числа возвести в квадрат, найти их сумму и количество C++
Одномерный массив. Все отрицательные среди них числа возвести в квадрат, найти их сумму и количество C++
C++ Ввести с клавиатуры 10 чисел. Если среди них есть числа, большие 15, заменить их на 15. Напечатать все полученные числа

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
12.03.2014, 18:49     Все отрицательные среди данных числа заменить на 0 #20
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Серьёзно?
ага
дополнительный код однако
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Ну тогда ИМХО, мы только что нашли серьёзную ошибку архитектуры.
лет так пятьдесят её не могли найти
решается то просто
C++
1
2
3
4
5
6
7
8
unsigned int num_bits=(unsigned int)-1;
unsigned int count=0;
while(num_bits!=0)
{
  num_bits/=2;
  count++;
}
x[i] *= !(x[i] & (1 << count));
Yandex
Объявления
12.03.2014, 18:49     Все отрицательные среди данных числа заменить на 0
Ответ Создать тему
Опции темы

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