Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Grafon
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 19
1

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

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

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

Найти наибольший элемент среди элементов диагонали и заменить им все отрицательные элементы
в матрице А размерностью 5*5 найти наибольший элемент среди элементов диагонали...

Заменить все отрицательные числа их модулями
Помогите решить с использованием цикла While Ввести с клавиатуры 10 чисел...

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

Ввести с клавиатуры 10 чисел. Если среди них есть числа большие 15, заменить их на 15. Напечатать все полученные числа.
Помогите решить задачу в Turdo C++, там где используется printf scanf: Ввести...

Все отрицательные числа в массиве заменить минимальным значением элемента
Есть массив из n-чисел. Все отрицательные числа в нем заменить минимальным...

40
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
12.03.2014, 16:05 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;
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
12.03.2014, 16:16 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]<<" ";
}
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
12.03.2014, 16:17 4
Retyrn0, вы заголовок темы читали?
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
12.03.2014, 16:22 5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
вы заголовок темы читали?
Нет. А надо было?) Ну поменять на if(NUMS[i]<0)NUMS[i]=0;
Но это же скучно.)
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
12.03.2014, 16:25 6
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Но это же скучно.)
Это не важно. Главное ведь человеку помочь.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16753 / 6644 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
12.03.2014, 16:34 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;
}
1
TenGen
Будущее рядом
99 / 98 / 48
Регистрация: 06.03.2014
Сообщений: 342
12.03.2014, 16:36 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;
А то сами понимаете, задача не так проста, какой кажется
0
John Prick
836 / 767 / 258
Регистрация: 27.07.2012
Сообщений: 2,179
Завершенные тесты: 3
12.03.2014, 16:45 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);
//...
}
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
12.03.2014, 16:48 10
Цитата Сообщение от TenGen Посмотреть сообщение
я бы все таки запрограммировал понадежнее
Не факт, что они именно так даны. Тут без пояснений тс мы бессильны.
Цитата Сообщение от TenGen Посмотреть сообщение
А то сами понимаете, задача не так проста, какой кажется
Само собой. Иначе не было б тут уже два листа обсуждений.
0
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,703
12.03.2014, 16:51 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 разряда
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
12.03.2014, 17:01 12
Цитата Сообщение от TenGen Посмотреть сообщение
А то сами понимаете, задача не так проста, какой кажется
Та да
Но тогда уже и
C++
1
2
3
4
if((MASS=new signed int[count])==NULL)
{
  cout<<"ERROR!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
}
нужно прикрутить, а-то вдруг массив станет не на 4, а на 5 элементов, а у системы не окажется искомых 20 с копейками байт)
0
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,703
12.03.2014, 17:07 13
Цитата Сообщение от Retyrn0 Посмотреть сообщение
MASS=new signed int[count])==NULL
и давно научили new с NULL сравнивать?
исключения нужно ловить
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16753 / 6644 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
12.03.2014, 17:26 14
Цитата Сообщение от ValeryS Посмотреть сообщение
но это жесткая привязка к int 32 разряда
ну тогда вы немного переборщили, зачем домножать на число?
C
1
x[i] *= !(x[i] & 0x80000000);
Хотя если "помудреннее", можно и так
C
1
x[i] *= !(x[i] & (1 << 31));
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
12.03.2014, 17:41 15
Цитата Сообщение от ValeryS Посмотреть сообщение
исключения нужно ловить
Точно...ох уж эти правила хорошего тона...Мы сделали единогласный вывод, что ТС лучше изучать программирование на БОЛЕЕ ПРОСТЫХ ПРИМЕРАХ, чем он привёл ХД
0
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,703
12.03.2014, 17:56 16
Цитата Сообщение от KOPOJI Посмотреть сообщение
ну тогда вы немного переборщили, зачем домножать на число?
действительно
незачем
вот так ракеты и падают
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
12.03.2014, 18:00 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));
Или что-то такое.
0
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,703
12.03.2014, 18:19 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)
0
Retyrn0
45 / 45 / 5
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
12.03.2014, 18:44 19
Цитата Сообщение от ValeryS Посмотреть сообщение
-1/2 =-1;
Серьёзно? Т.е. математика, утверждающая, что (-1)/2 = -0.5 и что при округлении до целого получим ноль, на самом деле ничего не понимает в реальных цифрах?) Ну тогда ИМХО, мы только что нашли серьёзную ошибку архитектуры. Представляю сколько за долгие годы существования ЭВМ эта ошибка портила людям нервы и мировоззрение). А зачем нам сдвигать? Можно РЕАЛЬНО РАЗДЕЛИТЬ НА 2. Даже если компилятор соптимизирует "/2" к ">>1" и сдвиг действительно даст результат, расходящийся с математикой, то старое доброе деление, переданное компилятору с флагом "не оптимизировать" должно дать нормальный результат. Сейчас нет возможности проверить "num_bits/2==-1" =(
0
ValeryS
Модератор
7265 / 5519 / 692
Регистрация: 14.02.2011
Сообщений: 18,703
12.03.2014, 18:49 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));
0
12.03.2014, 18:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2014, 18:49

Заменить в одномерном числовом массиве все отрицательные числа на нули
Заменить в одномерном числовом массиве все отрицательные числа на нули....

Даны действительные числа. Заменить все отрицательные элементы их квадратами
Я новичок в программировании, помогите. Даны действительные числа А1....,А18....

Заменить в исходном файле все отрицательные числа на положительные и наоборот
На экзамене попалась задачка, но решить ее до конца я так и не смог,за что...


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

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

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