Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2019, 21:31   #1
donald knut
Новичок
Джуниор
 
Регистрация: 05.12.2019
Сообщений: 2
По умолчанию C++ Написал программу по считыванию трех чисел и определению образуют ли они геометрическую прогрессию. Все работает, кроме чисел 0.1 0.01 и 0.001.

Написал программу по считыванию трех чисел и определению образуют ли они геометрическую прогрессию. Все работает, кроме чисел 0.1 0.01 и 0.001.
Когда ввожу эти числа, числа с тем же знаменателем, или даже числа в обратном порядке, то программа считает, что это не геометрическая прогрессия, что не верно. Подскажите как можно это исправить. Спасибо!


Код:
#include <iostream>
#include <string>
#include <math.h>
#include <cmath>
double q(float a, float v, float num)
{
	return a * (pow( v , num-1 ));
}
int main() {
	int num = 3;
	float a, b, c;
	float v;
	printf("Vvedite pervyi chlen a\n");
	if (!scanf_s("%g`", &a)) {
		printf("Incorrect enter\n\a");
		return 0;
	}
	printf("Vvedite vtoroi chlen b\n");
	if (!scanf_s("%g", &b)) {
		printf("Incorrect enter\n\a");
		return 0;
	}
	printf("Vvedite tretyi chlen c\n");
	if (!scanf_s("%g", &c)) {
		printf("Incorrect enter\n\a");
		return 0;
	}
	
	for (v = c / b; num <= 9; ) {
		num++;
			if (a / b != b / c) {
				printf("Ne yavlyaetsa geometricheskoi progresiei\n");
			}
			else {
				printf("q%-2d= %-20.6f\n", num, q(a, v, num));
			}
	}
	system("Pause");
	return 0;
}
donald knut вне форума Ответить с цитированием
Старый 06.12.2019, 09:50   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

Я в текст не вникал, но возможно - дело в том, что float переменные сравнивать на равенство - дохлое дело, 1/3 может быть не равно 7/21. Это связано с особенностями машинного представления "плавучки".
Поэтому вместо
Код:
if (a / b != b / c)
я бы написал
Код:
if (abs((a / b- b / c)-1.0) > 0.001)
(точность выбрать по вкусу)
digitalis на форуме Ответить с цитированием
Старый 06.12.2019, 13:15   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Код:
#include <iostream>
#include <string>
#include <cmath>
#include <stdio.h>
#include <cstdlib>


int main()
{
//int num = 3;
float a, b, c, n, x, eps = 1e-4;


printf("Vvedite pervyi chlen a\n");
if(!scanf("%g", &a))
{
    printf("Incorrect enter\n\a");
    return 0;
}

printf("Vvedite vtoroi chlen b\n");
if(!scanf("%f", &b))
{
    printf("Incorrect enter\n\a");
    return 0;
}

printf("Vvedite tretyi chlen c\n");
if(!scanf("%f", &c))
{
    printf("Incorrect enter\n\a");
    return 0;
}

x = b/a;
n = b*x;
if(fabs(c - n) < eps)
  printf("\nGeometricheskaya progressiya.\n");
else
  printf("\nNet geometricheskoi progressii.\n");

system("Pause");
return 0;
}
Cuprum5 вне форума Ответить с цитированием
Старый 06.12.2019, 13:33   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

donald knut, вот такое должно быть название темы. Посмотрите и сравните со своим )

digitalis, Cuprum5 спасибо за ответы.
Alar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написал программу, которая должна выводить среднее арифметическое ряда чисел, вроде все работает, но выводит какое-то левое число lfybbk Общие вопросы C/C++ 6 30.12.2016 11:33
Составьте программу,заменяющую меньшее из трех данных чисел произведением этих чисел Делька Помощь студентам 1 24.09.2015 17:21
Даны четыре вещественных числа, проверить: образуют ли данные числа геометрическую прогрессию (язык C) Даша(S) Помощь студентам 6 04.04.2015 23:43
Задача в visual basic: Дан массив ненулевых целых чисел размера N. Проверить, образуют ли его элементы геометрическую прогрессию. Екатерина23 Помощь студентам 2 15.01.2014 00:47
Написал программу, все работает кроме одного момента. Palomnik1096 Microsoft Office Excel 5 09.12.2010 14:56