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

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

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

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

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

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

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

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

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

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

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

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

Одномерный массив. Все отрицательные среди них числа возвести в квадрат, найти их сумму и количество - C++
Дана последовательность из М чисел. Все отрицательные среди них числа возвести в квадрат, найти их сумму и количество

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
12.03.2014, 17:56     Все отрицательные среди данных числа заменить на 0 #16
Цитата Сообщение от KOPOJI Посмотреть сообщение
ну тогда вы немного переборщили, зачем домножать на число?
действительно
незачем
вот так ракеты и падают
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 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
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
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
Сообщений: 677
Завершенные тесты: 1
12.03.2014, 18:44     Все отрицательные среди данных числа заменить на 0 #19
Цитата Сообщение от ValeryS Посмотреть сообщение
-1/2 =-1;
Серьёзно? Т.е. математика, утверждающая, что (-1)/2 = -0.5 и что при округлении до целого получим ноль, на самом деле ничего не понимает в реальных цифрах?) Ну тогда ИМХО, мы только что нашли серьёзную ошибку архитектуры. Представляю сколько за долгие годы существования ЭВМ эта ошибка портила людям нервы и мировоззрение). А зачем нам сдвигать? Можно РЕАЛЬНО РАЗДЕЛИТЬ НА 2. Даже если компилятор соптимизирует "/2" к ">>1" и сдвиг действительно даст результат, расходящийся с математикой, то старое доброе деление, переданное компилятору с флагом "не оптимизировать" должно дать нормальный результат. Сейчас нет возможности проверить "num_bits/2==-1" =(
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
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));
_include
Студент
52 / 52 / 12
Регистрация: 17.09.2012
Сообщений: 291
Записей в блоге: 2
Завершенные тесты: 1
12.03.2014, 18:54     Все отрицательные среди данных числа заменить на 0 #21
Прочел я две страницы. То ли туповат, то ли вообще ничего не пойму.
Мой вариант такой:
Не смейтесь, но Grafon, не указал больше данных. Вдруг эти числа в массиве?
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
#include "stdafx.h"
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define n 4
 
void main()
{
    int mas[n];
    srand(time(NULL));
    for(int i =0; i < n; i++)
    {
        mas[i]=rand()%10-5;
    }
    for(int i = 0; i < n; i++)
    {
    printf(" %d ",mas[i]);
    }
    printf("\n");
    for(int i = 0; i < n; i++)
    {
        if (mas[i]<0)
        mas[i]=0;
        printf(" %d ",mas[i]);
    }
    
_getch();
}
Поправьте меня, может я вижу только верхушку айсберга?
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16694 / 6620 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
12.03.2014, 19:26     Все отрицательные среди данных числа заменить на 0 #22

Не по теме:

Цитата Сообщение от Retyrn0 Посмотреть сообщение
привязка к 32-битности же осталась.
а у меня и не было намерения от нее избавляться..



Добавлено через 1 минуту
Цитата Сообщение от _include Посмотреть сообщение
Вдруг эти числа в массиве?
я приводил пример с массивом..
Цитата Сообщение от _include Посмотреть сообщение
Поправьте меня, может я вижу только верхушку айсберга?
нет, просто это решение "в лоб", неинтересно)

Добавлено через 1 минуту

Не по теме:

к тому же, по сути, сишный вариант.. З.Ы. math.h, как минимум, лишнее

Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
12.03.2014, 19:56     Все отрицательные среди данных числа заменить на 0 #23
C++
1
2
3
4
5
6
#include <iostream.h>
void main () 
{
    signed int x=-1;
    cout<<x/2<<endl;
}
Мой компьютер с Вами не согласен. По-дурости, видимо, результатом выводит 0)

Добавлено через 5 минут
Цитата Сообщение от KOPOJI Посмотреть сообщение
а у меня и не было намерения от нее избавляться..
Если уж мы решили, что это сложная задаче, то стоит подойти к ней с максимальной серьёзностью) А где жмакнуть, чтобы текст маленьким был?

Добавлено через 57 секунд
Цитата Сообщение от KOPOJI Посмотреть сообщение
это решение "в лоб", неинтересно)
+100500 =)
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
12.03.2014, 20:46     Все отрицательные среди данных числа заменить на 0 #24
Ну, я тут попробовал...
Я вообще-то новичок, так что прошу сильно не пинать))
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
//Даны четыре числа. 
//Все отрицательные среди них числа заменить на 0
 
#include<stdio.h>
#include<math.h>
#include<iostream>
 
int main()
 {
          int a, b, c, d;
          printf("vvedite a \n");
          scanf("%d", &a);
          printf("vvedite b \n");
          scanf("%d", &b);
          printf("vvedite c \n");
          scanf("%d", &c);
          printf("vvedite d \n");
          scanf("%d", &d);
          
          if(a<0)
          { a=a*0; printf("a=%d \n",a); }
          else { printf("a=%d \n",a);}
          
          if(b<0)
          { b=b*0; printf("b=%d \n",b); }
          else { printf("b=%d \n",b);}
          
          if(c<0)
          { c=c*0; printf("c=%d \n",c); }
          else { printf("c=%d \n",c);}
          
          if(d<0)
          { d=d*0; printf("d=%d \n",d); }
          else { printf("d=%d \n",d);}
          
          
                   
 system("PAUSE");
 return 0;
 }
вот скрин http://s34-temporary-files.*********.../636991373.jpg

пишу на дев, если что)
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16694 / 6620 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
12.03.2014, 21:03     Все отрицательные среди данных числа заменить на 0 #25
Кликните здесь для просмотра всего текста
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
C++
1
2
#include<math.h>
#include<iostream>
они не нужны. Нужен только stdio и stdlib
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
C
1
a=a*0;
бессмысленное умножение. Проще сразу присвоить ноль
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
C
1
2
3
if(a<0)
* * * * * { a=a*0; printf("a=%d \n",a); }
* * * * * else { printf("a=%d \n",a);}
Дублирование кода. Прямо напрашивается дополнительная функция. К тому же, printf попросту повторяется зазря, else явно лишнее.
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
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int a, b, c, d;
 
    printf("vvedite a \n");
    scanf("%d", &a);
    printf("vvedite b \n");
    scanf("%d", &b);
    printf("vvedite c \n");
    scanf("%d", &c);
    printf("vvedite d \n");
    scanf("%d", &d);
 
 
    if(a<0)
        a=0;
    printf("a=%d \n",a);
 
    if(b<0)
        b=0;
    printf("b=%d \n",b);
 
    if(c<0)
        c=0;
    printf("c=%d \n",c);
 
    if(d<0)
        d=d*0;
    printf("d=%d \n",d);          
 
    system("PAUSE");
    return 0;
}
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
#include <stdio.h>
#include <stdlib.h>
 
void print_val(int, const char);
 
int main()
{
    int a, b, c, d;
 
    printf("vvedite a \n");
    scanf("%d", &a);
    printf("vvedite b \n");
    scanf("%d", &b);
    printf("vvedite c \n");
    scanf("%d", &c);
    printf("vvedite d \n");
    scanf("%d", &d);
 
    print_val(a, 'a');
    print_val(b, 'b');
    print_val(c, 'c');
    print_val(d, 'd');
 
    system("PAUSE");
    return 0;
}
 
void print_val(int x, const char c)
{
    printf("%c=%d \n", c, (x < 0 ? 0 : x));
}
или вообще все раскидать
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
#include <stdio.h>
#include <stdlib.h>
 
void get_val(int *, const char);
void print_val(int, const char);
 
int main()
{
    int a, b, c, d;
 
    get_val(&a, 'a');
    get_val(&b, 'b');
    get_val(&c, 'c');
    get_val(&d, 'd');
 
    print_val(a, 'a');
    print_val(b, 'b');
    print_val(c, 'c');
    print_val(d, 'd');
 
    system("PAUSE");
    return 0;
}
 
void get_val(int *x, const char c)
{
    printf("vvedite %c \n", c);
    scanf("%d", x);
}
void print_val(int x, const char c)
{
    printf("%c=%d \n", c, (x < 0 ? 0 : x));
}

Цитата Сообщение от Richie_Bolat Посмотреть сообщение
вот скрин
Прикрепляйте изображения к сообщениям
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
12.03.2014, 21:39     Все отрицательные среди данных числа заменить на 0 #26
KOPOJI, я прямо выговор получил)) извините, если что))

вот скрин -

Цитата Сообщение от KOPOJI Посмотреть сообщение
бессмысленное умножение. Проще сразу присвоить ноль
ну, я сначала хотел просто присвоить, но потом почему-то подумал, что так будет проще для компилятора))

кстати, я так полагаю задача не так уж проста как кажется и решается по другому?))

вот скрин -
Миниатюры
Все отрицательные среди данных числа заменить на 0  
KOPOJI
12.03.2014, 21:47
  #27

Не по теме:

Цитата Сообщение от Richie_Bolat Посмотреть сообщение
я прямо выговор получил)) извините, если что))
не, это просто небольшая помощь. Я не шибко спец в Си..

решений уйма. Посмотрите предыдущие страницы

Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
12.03.2014, 23:09     Все отрицательные среди данных числа заменить на 0 #28
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
полагаю задача не так уж проста как кажется
Нет. Задача вполне простая) Просто программисты начинают использовать специфический юмор, Вы поймёте очень скоро, не обижайтесь)
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
13.03.2014, 19:35     Все отрицательные среди данных числа заменить на 0 #29
Retyrn0, ок) я не обижаюсь, что Вы? Спасибо за разьяснение) теперь буду знать) ох.. надеюсь, что я быстро привыкну к этой пока что не до конца понятной, но очень интересной среде=)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 21:42     Все отрицательные среди данных числа заменить на 0
Еще ссылки по теме:

Одномерный массив. Все отрицательные среди них числа возвести в квадрат, найти их сумму и количество - C++
Дана последовательность из М чисел. Все отрицательные среди них числа возвести в квадрат, найти их сумму и количество.

Найти минимум в массиве и заменить все отрицательные чётные числа на его значение - C++
Ребята, посмотрите пожалуйста в чем не доработка или ошибка Судя по условию, нечетные числа все равно отрабатывает, к if-у и else уже...

Найти минимум в массиве и заменить все отрицательные чётные числа на его значение - C++
Ребята, посмотрите пожалуйста в чем не доработка или ошибка Судя по условию, нечетные числа все равно отрабатывает, к if-у и else уже...

Массивы:многомерный и одномерный (заменить нулями все отрицательные числа выше главной диагонали) - C++
Вот массив номер 1 (многомерный) тут задача была заменить нулями все отрицательные числа выше главной диагонали И найти место максимума...

Написать рекурсивную функцию, которая вначале печатает все отрицательные числа, а затем все положительные числа - C++
Дана последовательность ненулевых чисел, в конце которой следует 0. Написать рекурсивную функцию, которая вначале печатает все...


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

Или воспользуйтесь поиском по форуму:
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
13.03.2014, 21:42     Все отрицательные среди данных числа заменить на 0 #30
Если серьёзно, то
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
a=a*0;
лучше
C++
1
a=0;
Заставлять процессор умножать, зная, что в результате получим ноль - не комильфо. Лучше тупо приравнять(и даже быстрее). Умножение я использовал чтобы избавиться от
C++
1
if()
Остальные...ну я не знаю зачем они умножали)

Добавлено через 42 секунды
Ну и соответственно b,c,d - то же самое.
Yandex
Объявления
13.03.2014, 21:42     Все отрицательные среди данных числа заменить на 0
Ответ Создать тему
Опции темы

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