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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2011, 17:32   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию C++: чистая арифметика, опять считает больше, чем надо

Добрый день, дорогие формучане!

Простейшая задача - ну чисто школьная арифметика, и опять видит неправильно - считает на шаг больше, чем надо.

Условие:
Дано целое число N (> 0). Найти наименьшее целое
положительное число K, квадрат которого превосходит N:
K^2 > N. Функции возведения в степень и извлечение квадратного корня не использовать.

А у меня с числом 10 видит К=3, хотя по правилам должен видеть 4 (это самое малое число, квадрат которого больше 10). То есть получается опять выполняет программу на шаг больше, чем надо.

Код:
#include <iostream>
#include <conio.h>
#include <stdio.h>

using namespace std;

int main ()

{
int N=0, K=1;
	cout<<"Vvedite N"<<endl;
	cin>>N;
	
	K=N;
		while (K*K>N)
			{
				K--;
			}
			
	cout<<K;

_getch ();
return 0;
}
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 01.04.2011, 17:36   #2
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

Опять те же грабли
Repeat untill вам в помощь

Но вот я думаю что как то некрасиво, чем больше n тем больше ваша программа вхолостую молотить будет
BoozZzilla вне форума Ответить с цитированием
Старый 01.04.2011, 17:40   #3
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Мы такого не проходили((( Нам while нужен(((( Вот я и думаю, как выкрутиться... как прописать условие так, чтобы увидев что число необходимое найдено, сразу остановился. Ну не будешь же искуственно добавлять 1 к найденному числу - типа потому что он увидел на шаг больше
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 01.04.2011, 17:44   #4
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

Ну тогда если нет условия начинать с n то начните с еденицы и на увеличение с условием пока квадрат меньше...
Пока меньше будет прибавлять, как станет больше проскочит дальше
Как так вы репит антил не проходили? Мне кажется их НУЖНО вместе проходить

Последний раз редактировалось BoozZzilla; 01.04.2011 в 17:48.
BoozZzilla вне форума Ответить с цитированием
Старый 01.04.2011, 17:46   #5
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Счас попробуем
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 01.04.2011, 17:51   #6
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Так программа увидела правильно)) Чуть условие подкрутила и все в порядке. Спасибо))

Я с другой задачей, чувствую, скоро заявлюсь.. еще подумаю, почему она считает неправильно (может быть, меня осенит идея) - если не смогу понять ошибку, ждите))

Видите, я блондинка, и вижу мир немного по-другому... так сказать искаженное восприятие математической логики)))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 01.04.2011 в 17:53.
Blondy вне форума Ответить с цитированием
Старый 01.04.2011, 18:33   #7
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Код:
#include <iostream>
using namespace std;
int main (){
	int N=0, K=1;
	cout<<"Vvedite N"<<endl;
	cin>>N;
	while(K * (++K) < N);	
	cout<<K<<"\n";
	return 0;
}
Hemul вне форума Ответить с цитированием
Старый 01.04.2011, 18:36   #8
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Ага, спасибо)) Мы тут уже с одним юношей уже разобрались.... Но у Вас тоже очень изящно написано))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 01.04.2011, 18:46   #9
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Hemul Посмотреть сообщение
Код:
#include <iostream>
using namespace std;
int main (){
	int N=0, K=1;
	cout<<"Vvedite N"<<endl;
	cin>>N;
	while(K * (++K) < N);	
	cout<<K<<"\n";
	return 0;
}
N = 4 ;
K = ?
Vago вне форума Ответить с цитированием
Старый 01.04.2011, 18:51   #10
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

N = 4;
K = 2;

2 * 2 < n == false
и это первое несовпадение (тк 1 * 1 < n ==true )
Hemul вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аргументов ЕСЛИ больше чем 7 Freerider1972 Microsoft Office Excel 40 16.05.2011 10:44
Задача где неизвестных больше чем известных. poolt Microsoft Office Excel 17 01.12.2010 02:28
Больше чем LongInt Dionix Общие вопросы Delphi 7 17.07.2010 16:30
Чем больше объектов - тем меньше скорость? Diego__ Microsoft Office Word 6 05.01.2010 01:39
Да тестостерона в 3 раза больше чем норма HellMercenariess Свободное общение 3 25.08.2009 22:52