Форум программистов, компьютерный форум 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++ Даны действительные числа. Заменить все отрицательные элементы их квадратами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_include
Студент
 Аватар для _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
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,353
12.03.2014, 19:26     Все отрицательные среди данных числа заменить на 0 #22

Не по теме:

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



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

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

Не по теме:

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

Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 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
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,353
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
Сообщений: 675
Завершенные тесты: 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, ок) я не обижаюсь, что Вы? Спасибо за разьяснение) теперь буду знать) ох.. надеюсь, что я быстро привыкну к этой пока что не до конца понятной, но очень интересной среде=)
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
13.03.2014, 21:42     Все отрицательные среди данных числа заменить на 0 #30
Если серьёзно, то
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
a=a*0;
лучше
C++
1
a=0;
Заставлять процессор умножать, зная, что в результате получим ноль - не комильфо. Лучше тупо приравнять(и даже быстрее). Умножение я использовал чтобы избавиться от
C++
1
if()
Остальные...ну я не знаю зачем они умножали)

Добавлено через 42 секунды
Ну и соответственно b,c,d - то же самое.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,052
13.03.2014, 21:45     Все отрицательные среди данных числа заменить на 0 #31
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Остальные...ну я не знаю зачем они умножали)
ну так наверно, за тем же
KOPOJI
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,353
13.03.2014, 21:48     Все отрицательные среди данных числа заменить на 0 #32
Цитата Сообщение от Retyrn0 Посмотреть сообщение
ну я не знаю зачем они умножали)
для сокращения. Да и интереснее же.. Ну а по факту, результат проверки условия - целое число. Если честно, не знаю, как в плюсах (хотя cout условия выдает тоже число), но в си до последнего стандарта (вроде до последнего) вообще не было логических типов. 0 - ложь, отличные от 0 - истина. Если рассматривать с такой стороны, то добавлять явную проверку if, возможно, и не имеет смысла..
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,052
13.03.2014, 21:54     Все отрицательные среди данных числа заменить на 0 #33
Цитата Сообщение от KOPOJI Посмотреть сообщение
Если честно, не знаю, как в плюсах (хотя cout условия выдает тоже число), но в си до последнего стандарта (вроде до последнего) вообще не было логических типов. 0 - ложь, отличные от 0 - истина.
в плюсах появился тип bool который имеет два значения false и true

при приведению к int false=0 true=1
например вот такой код
C++
1
int m= !!k;
запишет в m 0 если k лежит 0
и 1 если в k отличное от нуля число
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
13.03.2014, 21:57     Все отрицательные среди данных числа заменить на 0 #34
Цитата Сообщение от KOPOJI Посмотреть сообщение
добавлять явную проверку if, возможно, и не имеет смысла
Действительно. Обсуждал тему замены условий и ветвлений в GP GPU - скорее всего там особенно выгодно пользоваться математикой вместо условий - архитектура не очень дружит с ветвлением кода по понятным причинам, а так вроде должен прирост скорости наблюдаться, в сравнении с ветвлениями.
Но достаточно не удобная и не понятная эта математическая подмена для большинства смертных)

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
ну так наверно, за тем же
Я не взялся отвечать за всех, в том числе за ТС, который написал
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
if(a<0)
{ a=a*0;
KOPOJI
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,353
13.03.2014, 22:04     Все отрицательные среди данных числа заменить на 0 #35
Цитата Сообщение от ValeryS Посмотреть сообщение
в плюсах появился тип bool
да это я знаю, что он появился. В си тоже появился в C99.. Просто как-то не вдавался в подробности того, что именно будет в плюсах в результате условия - булево или же int. Но, к примеру, код
C++
1
std::cout << (1 < 1);
выдает 0, а не false. И, например, в яве или шарпе не получится написать нечто наподобие while(1), только выражения, результатом которых будет true/false или сами эти значения - они требуют четко "только boolean".. C/C++ в этом плане "помягче"

Добавлено через 2 минуты
другое дело - что там "под капотом": boolean или же int..) Проверять лень
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,052
13.03.2014, 22:09     Все отрицательные среди данных числа заменить на 0 #36
Цитата Сообщение от KOPOJI Посмотреть сообщение
выдает 0, а не false.
потому что приводится к int
Цитата Сообщение от KOPOJI Посмотреть сообщение
И, например, в яве или шарпе не получится написать нечто наподобие while(1), только выражения, результатом которых будет true/false или сами эти значения - они требуют четко "только boolean".. C/C++ в этом плане "помягче"
видать ужесточили и вот это
Цитата Сообщение от KOPOJI Посмотреть сообщение
x[i] *= x[i] >= 0;
уже не пройдет
Цитата Сообщение от KOPOJI Посмотреть сообщение
C/C++ в этом плане "помягче"
да он просто ближе к "железу"
а у процессора только нолики и единички

Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
другое дело - что там "под капотом": boolean или же int..) Проверять лень
по размеру тот же int
но компилятор его за int не считает
C++
1
2
3
4
5
bool k=false;
k++;
k++;
k++;
k--; //false
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
13.03.2014, 22:45     Все отрицательные среди данных числа заменить на 0 #37
Цитата Сообщение от ValeryS Посмотреть сообщение
по размеру тот же int
Разве? А мой компилятор по дурости выделяет всего 1 байт под bool ;-)

Добавлено через 3 минуты
Вообще для двух вариантов true и false хватит и одного бита, но комп. не знает ничего меньше байта - приходиться 7 лишних бит за собой таскать
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,052
13.03.2014, 23:12     Все отрицательные среди данных числа заменить на 0 #38
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Разве? А мой компилятор по дурости выделяет всего 1 байт под bool ;-)
теперь смотрим стандарт
[ Note: in particular, sizeof(bool) and sizeof(wchar_t) are implementation-defined.
—end note
sizeof(bool) is not required to be 1.
[Примечание: в частности, SizeOf (BOOL) и SizeOf (wchar_t) зависят от реализации. 74) -Конец примечания
SizeOf (BOOL) не требуется, чтобы быть 1.
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Вообще для двух вариантов true и false хватит и одного бита, но комп. не знает ничего меньше байта
компилятор Keil, тот что работает с микроконтроллерами, спокойно выделяет 1 бит
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
14.03.2014, 01:33     Все отрицательные среди данных числа заменить на 0 #39
Цитата Сообщение от ValeryS Посмотреть сообщение
что работает с микроконтроллерами
Ну я поэтому и говорил слово "комп.". В моей железяке памяти мнооого и адресовать каждый бит было бы накладно чисто с технической точки зрения ;-)
Цитата Сообщение от ValeryS Посмотреть сообщение
зависят от реализации
Не вижу ни одной причины добавлять ещё по 16 бит к остальным 7 болтающимся за единственным несущим информацию, но раз стандарт так говорит, то ладно. Мне просто повезло с выбором платформы, хотя адресация каждого бита - очень заманчивая штука, мне часто её не хватает. Может на днях разработают железки, которые смогут так делать, а иначе зачем жить =)

Добавлено через 1 минуту
64-битные адреса уже пользуют, может совершат 8-ми кратную детализацию памяти...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2014, 07:03     Все отрицательные среди данных числа заменить на 0
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,052
14.03.2014, 07:03     Все отрицательные среди данных числа заменить на 0 #40
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Не вижу ни одной причины добавлять ещё по 16 бит к остальным 7 болтающимся за единственным несущим информацию,
ну вот тебе одна из них
выравнивание памяти, процессору удобней работать с адресами кратными 2 / 4 чем с каждым байтом

Добавлено через 7 минут
Цитата Сообщение от Retyrn0 Посмотреть сообщение
хотя адресация каждого бита - очень заманчивая штука, мне часто её не хватает.
ну адресация,не адресация, а работать с битами можно, посмотри "битовые поля"
http://www.c-cpp.ru/books/bitovye-polya
Yandex
Объявления
14.03.2014, 07:03     Все отрицательные среди данных числа заменить на 0
Ответ Создать тему
Опции темы

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