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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Grafon
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 19
#1

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

12.03.2014, 15:57. Просмотров 1386. Ответов 40
Метки нет (Все метки)

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

Ввести с клавиатуры 10 чисел. Если среди них есть числа большие 15, заменить их на 15. Напечатать все полученные числа. C++
Заменить в исходном файле все отрицательные числа на положительные и наоборот C++
Заменить все отрицательные числа их модулями C++
C++ Массивы:многомерный и одномерный (заменить нулями все отрицательные числа выше главной диагонали)
C++ Написать рекурсивную функцию, которая вначале печатает все отрицательные числа, а затем все положительные числа
C++ Даны действительные числа. Заменить все отрицательные элементы их квадратами
Одномерный массив. Все отрицательные среди них числа возвести в квадрат, найти их сумму и количество C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2583 / 235
Регистрация: 01.11.2011
Сообщений: 6,391
Завершенные тесты: 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
5549 / 2583 / 235
Регистрация: 01.11.2011
Сообщений: 6,391
Завершенные тесты: 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
5549 / 2583 / 235
Регистрация: 01.11.2011
Сообщений: 6,391
Завершенные тесты: 1
12.03.2014, 16:25     Все отрицательные среди данных числа заменить на 0 #6
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Но это же скучно.)
Это не важно. Главное ведь человеку помочь.
KOPOJI
Модератор
 Аватар для KOPOJI
16613 / 6554 / 408
Регистрация: 12.06.2012
Сообщений: 19,637
Завершенные тесты: 1
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
97 / 95 / 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
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 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
5549 / 2583 / 235
Регистрация: 01.11.2011
Сообщений: 6,391
Завершенные тесты: 1
12.03.2014, 16:48     Все отрицательные среди данных числа заменить на 0 #10
Цитата Сообщение от TenGen Посмотреть сообщение
я бы все таки запрограммировал понадежнее
Не факт, что они именно так даны. Тут без пояснений тс мы бессильны.
Цитата Сообщение от TenGen Посмотреть сообщение
А то сами понимаете, задача не так проста, какой кажется
Само собой. Иначе не было б тут уже два листа обсуждений.
ValeryS
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,297
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
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,297
12.03.2014, 17:07     Все отрицательные среди данных числа заменить на 0 #13
Цитата Сообщение от Retyrn0 Посмотреть сообщение
MASS=new signed int[count])==NULL
и давно научили new с NULL сравнивать?
исключения нужно ловить
KOPOJI
Модератор
 Аватар для KOPOJI
16613 / 6554 / 408
Регистрация: 12.06.2012
Сообщений: 19,637
Завершенные тесты: 1
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
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,297
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
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,297
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++ Ввести с клавиатуры 10 чисел. Если среди них есть числа, большие 15, заменить их на 15. Напечатать все полученные числа
Все отрицательные числа в массиве заменить минимальным значением элемента C++
Найти минимум в массиве и заменить все отрицательные чётные числа на его значение C++
C++ Найти минимум в массиве и заменить все отрицательные чётные числа на его значение

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,297
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
Ответ Создать тему
Опции темы

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