Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 19.12.2014
Сообщений: 5
1

Вычисление суммы двух модулей с оператором if

20.12.2014, 19:01. Показов 611. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал без оператора if, не понимаю, зачем он здесь нужен? Как будет выглядеть код с ним?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
main()
{
    setlocale (0,"RUS");
    float a,b, R;
    printf("Введите число a\n");
    scanf("%f", &a);
    printf("Введите число b\n");
    scanf("%f", &b);
    R=abs(a) + abs(b);
    printf("Результат: %f%", R);
    getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2014, 19:01
Ответы с готовыми решениями:

Вычисление суммы модулей чисел после нуля
Написал прогу по вычислению суммы модулей чисел после нуля. Когда ввожу вручную - всё норм, а от с...

Вычисление суммы модулей элементов массива
Добрый день. Написала программу: предлагает ввести двумерный массив, находит номер первой из...

Процедура на вычисление суммы модулей элементов матрицы
Подскажите, как реализовать процедуру, вычисляющую сумму модулей всех элементов заданной матрицы...

Вычисление степени матрицы, вычисления произведения двух матриц, вычисление суммы двух матриц
Здравствуйте, помогите решить, пожалуйста: Заданы две квадратные матрицы А и В. Вычислить матрицу...

7
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
20.12.2014, 19:50 2
Цитата Сообщение от majesty13 Посмотреть сообщение
зачем он здесь нужен?
Для ковыряния мозга.
C
1
    if (a < 0) a=-a;
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
20.12.2014, 20:05 3
Цитата Сообщение от majesty13 Посмотреть сообщение
без оператора if, не понимаю, зачем он здесь нужен?
Ты использовал макрос abs, которые другие люди создали для твоего удобства. А этот макрос является тернарным оператором
C
1
#define abs(x) ((x)>=0) ? (x) : -(x)
(надеюсь, в скобках не напутал), который в свою очередь является сокращенной формой if-а. И ты прав! Если уже созданы некие средства - почему бы ими не воспользоваться!
Но тут тонкий момент. Этот макрос, как и куча других удобных макросов и функций (хоть простейший strcpy и printf), не является в строгом смысле частью языка Си. Это библиотека, к нему приложенная. Принято это библиотеку ко всем реализациям прикладывать. А кто-то прикладывает другой макрос, скажем "_abs" или "ABS", или вместо функции strcpy предлагает "_strcpy" - его право. Язык от этого не меняется.
Ладно, все это лирика.
Цитата Сообщение от majesty13 Посмотреть сообщение
Как будет выглядеть код с ним?
C
1
2
3
4
if (a>=0) Aa = a;
else Aa = -a;
if (b>=0) Ab = b;
else Ab = -b;
И вот этот код уже ни от каких реализаций и библиотек не зависит
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
20.12.2014, 20:17 4
Зато в данном случае код вырастает в 2 раза минимум. Вместо
Assembler
1
2
3
    fld a
    fabs
    fstp    a
добавляется ещё и сравнение с 0, что изящества коду не прибавляет. Впрочем, зависит от компилятора. Кстати, int abs(int) и double fabs(double) вполне себе ф-ции, одна из ISO C90, другая - из ANSI.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
20.12.2014, 20:40 5
Цитата Сообщение от Charles Kludge Посмотреть сообщение
что изящества коду не прибавляет.
Не могу с вами не согласиться. Просто в асме есть команда fabs, а в Си ее аналога нет. И слава Богу, а то дальнейшее развитие этой темы могло бы привести к языку типа АПЛ (кстати, весьма интересному по тем временам).
Но был вопрос (с первого взгляда даже странный), я попытался найти на него ответ (тоже, видать, не без странностей)

Добавлено через 5 минут
majesty13, по ходу рекомендация. Забудьте про тип данных float. Используйте double Потом спасибо скажете. Или нет, не скажете. Не заметите просто. А вот используя float когда-нибудь воскликните - "Блин, ну почему же мне раньше никто не сказал!"
0
Charles Kludge
20.12.2014, 20:46
  #6

Не по теме:

Байт, что-то мне Антон Павлович вспомнился:

— Как, однако, они... толсто пишут!
Это я про размер кода. :)

0
0 / 0 / 0
Регистрация: 19.12.2014
Сообщений: 5
20.12.2014, 20:51  [ТС] 7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
main()
{
    setlocale (0,"RUS");
    float a,b, R;
    printf("Введите число a\n");
    scanf("%f", &a);
    printf("Введите число b\n");
    scanf("%f", &b);
    if (a < 0) a=-a;
    if (b < 0) b=-b;
    R=a+b;
    printf("Результат: %f%", R);
    getch();
}
С таким кодом (без abs) программа тоже все успешно считает Правда, не знаю, корректен ли такой код.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
20.12.2014, 22:20 8
Цитата Сообщение от majesty13 Посмотреть сообщение
не знаю, корректен ли такой код.
Без вопросов! Все Ок!
Цитата Сообщение от majesty13 Посмотреть сообщение
printf("Результат: %f%", R);
В конце процентик дурной какой-то. Но на работоспособность не влияет.

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

Не по теме:

Charles Kludge, Странно, что мы раньше не встречались. Но встретились. Я рад.:)

0
20.12.2014, 22:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2014, 22:20
Помогаю со студенческими работами здесь

Вычисление среднего геометрического модулей двух введенных с клавиатуры целых чисел
№186 Напишите программу вычисления среднего геометрического модулей двух введенных с клавиатуры...

Вычисление среднего геометрического модулей двух введенных с клавиатуры целых чисел X и Y
Напишите программу вычисления среднего геометрического модулей двух введенных с клавиатуры целых...

Вычисление суммы двух векторов
Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над матрицами: 1....

Вычисление суммы двух векторов
МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ Реализовать в виде модуля набор подпрограмм для выполнения следующих...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru