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

Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
Ален
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 10
20.08.2010, 20:26     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #1
Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c . Если равенство выполняется, выведите YES, если не выполняется, выведите NO.

Числа a, b, c – действительные, положительные, не превосходят 10 и заданы не более, чем с 7 знаками после точки.


Вариант простой проверки двух double переменных не прохдит
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2010, 20:26     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c
Посмотрите здесь:

C++ Даны три действительных числа. Возвести в квадрат те из них, значения которых неотрицательны
Возвести в квадрат три действительных числа C++
C++ Даны три действительных числа, выбрать из них те, которые принадлежат интервалу от 1 до 3
даны два действительных числа C++
Даны три действительных числа a, b, c. Найти наибольшее из них C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
20.08.2010, 20:39     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(void){
    int a, b, c;
    printf("A = ");
    scanf("%d", &a);
    printf("B = ");
    scanf("%d", &b);
    printf("C = ");
    scanf("%d", &c);
    printf("A + B = C ? -> %s\n", ( a + b == c ) ? "YES" : "NO");
    
    return 0;
}
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
20.08.2010, 20:44     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #3
Цитата Сообщение от Ален Посмотреть сообщение
Вариант простой проверки двух double переменных не прохдит
как это понимать?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.08.2010, 00:23     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #4
Ален, Вдогонку.

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
#include <iostream>
 
template<class T>
bool sum(T a, T b, T c)
{
   if((a+b)==c)
      return 1;
   else
      return 0;
}
 
int main()
{
   double a, b, c;
   std::cout<<"Enter a: ";
   std::cin>>a;
   std::cout<<"Enter b: ";
   std::cin>>b;
   std::cout<<"Enter c: ";
   std::cin>>c;
   bool res=sum(a,b,c);
   if(res==1)
      std::cout<<"Sum of a and b is equal to c\n";
   else
      std::cout<<"Sum of a and b is not equal to c\n";
   return 0;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.08.2010, 00:32     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #5
Цитата Сообщение от Lavroff Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
template<class T>
bool sum(T a, T b, T c)
{
* *if((a+b)==c)
* * * return 1;
* *else
* * * return 0;
}
Может все таки:
C++
1
2
3
4
template<class T>
bool sum(T a, T b, T c) {
  return a + b == c;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.08.2010, 00:35     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #6
CyBOSSeR, Можно и так. Но мне раньше был бы понятнее первый способ. А разница в трех строчках не всегда критична. Тем не менее спасибо. Более красиво.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.08.2010, 00:41     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #7
Lavroff, хотел еще спросить почему ты возвращаещь int (0, 1), если тип результата bool?
Цитата Сообщение от Lavroff Посмотреть сообщение
А разница в трех строчках не всегда критична.
В данном случае разница не только в количестве строк, но еще и в производительности, которой ветвления совсем не способствуют.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.08.2010, 00:42     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #8
CyBOSSeR, Гм. Про возвращение совершенно не суть. Любое ненулевое значение - true. Нулевое - false.
Про производительность да, спасибо. Тем не менее, в таких задачах она обычно не критична)
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.08.2010, 00:47     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #9
Цитата Сообщение от Lavroff Посмотреть сообщение
Про возвращение совершенно не суть. Любое ненулевое значение - true. Нулевое - false.
Ну не скажи. В каждый раз при возврате значения будет происходить неявное преобразования из int в bool, что опять же не есть хорошо для производительности, да и смотрится странновато.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.08.2010, 00:49     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #10
CyBOSSeR, Однако в Си ведь так возвращали, потому что просто напросто не было типа bool. Но если учитывать опять же производительность - вы правы.
ISergey
21.08.2010, 01:52
  #11

Не по теме:

Lavroff, Одно не пойму.. зачем лишний раз else писать?

C++
1
2
3
4
5
6
7
8
template<class T>
bool sum(T a, T b, T c)
{
   if((a+b)==c)
      return 1; Если условие сработает то в любом случаи будет выход из функции..
  // else
   return 0;
}

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.08.2010, 01:56     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #12
ISergey, А вот с этим да) Протупил. Привык с чего-то так писать оО
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
21.08.2010, 03:14     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #13
Я конечно понимаю, вы молодцы и всё такое. Шаблоны уже пошли, дальше в теме будут паттерны и цитирования Александреску....

А проблема то ТС заключается в том, что ему нужно складывать действительные числа. Более того, он явно указал, что складывает для числа типа double и оно не равно третьему, хотя, должно бы.

Ален, нужно сравнивать не a + b == c, а fabs((a + b) - c) <= x, где x - допустимая величина погрешности, например, 0.001
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.08.2010, 03:38     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #14
NightmareZ, Увлеклись.(
Nick Alte
Эксперт С++
1591 / 983 / 116
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
21.08.2010, 18:28     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #15
При сравнении результатов действий с числами с плавающей точкой не проверяют абсолютное равенство. Вместо этого проверяют попадание в некоторый доверительный интервал:
C++
1
2
3
4
5
const double epsilon = 1e-8;
inline bool IsEqual(double op1, double op2)
{
    return fabs(op1-op2)<epsilon;
}
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
22.08.2010, 01:11     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #16
Цитата Сообщение от Nick Alte Посмотреть сообщение
При сравнении результатов действий с числами с плавающей точкой не проверяют абсолютное равенство. Вместо этого проверяют попадание в некоторый доверительный интервал:
C++
1
2
3
4
5
const double epsilon = 1e-8;
inline bool IsEqual(double op1, double op2)
{
    return fabs(op1-op2)<epsilon;
}
Тебе не кажется, что этот ответ уже был дан в теме?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2010, 20:51     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c
Еще ссылки по теме:

C++ Даны три действительных числа a, b, c. Возвести в квадрат те из них, значения которых положительные
C++ Даны три действительных числа a, b, c. Найти наибольшее из них
Даны три действительных числа, выбрать (вывести на экран) те из них, которые пренадлежат интервалу C++

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

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1591 / 983 / 116
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
22.08.2010, 20:51     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c #17
NightmareZ, теперь кажется, а тогда не заметил.
Yandex
Объявления
22.08.2010, 20:51     Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c
Ответ Создать тему
Опции темы

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