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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2011, 10:48   #1
jasul
Падаван
Пользователь
 
Аватар для jasul
 
Регистрация: 23.09.2011
Сообщений: 98
По умолчанию Ошибка `sqrt' undeclared (first use this function)

Код:
#include <cstdlib>
#inclube <math.h>
#include <iostream>
using namespace std;

int main( ) {
int n ;
int i ;
int is_prime ; //
is_prime = true ;

cout << "vvedite 4islo";
cin >> n ;
i = 2;
 while (i <= sqrt ((static_cast<double>(n))); 
{
      if ( n % i == 0){
      is_prime = false;
      i++;
      }
      if (is_prime)
      cout << " 4islo prostoe";
      else
      cout << "4islo ne prostoe";

    system("PAUSE");
    return 0;
}
Вот код программы. Код в точности списан с книги, возможно ли что там отпечатка? По данной ошибки перерыл весь поисковик нашёл что то подобное на иностранном форуме, к сожалению их языком не владею. И выяснить причину ошибки не удалось.Если вас не затруднит помогите выяснить причину ошибки!
............Сила воли ключ идеальности...........

Последний раз редактировалось Stilet; 23.09.2011 в 11:34.
jasul вне форума Ответить с цитированием
Старый 23.09.2011, 10:55   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Три ошибки уже нашёл:
#inclube <math.h>
while (i <= sqrt ((static_cast<double>(n)));
bool is_prime ;
Ща гляну дальше.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 23.09.2011 в 10:58.
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.09.2011, 10:55   #3
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

Код:
#include <math.h>
theos вне форума Ответить с цитированием
Старый 23.09.2011, 11:02   #4
jasul
Падаван
Пользователь
 
Аватар для jasul
 
Регистрация: 23.09.2011
Сообщений: 98
По умолчанию

Спасибо что пришли на помощь!Smitt&Wesson Первую ошибку исправил! Вероятно она у меня не единственная! Компилятор говорить что ошибка в этой строке - while (i <= sqrt ((static_cast<double>(n)));

Вот понял вторую ошибку-точка с запятой не нужна!)
............Сила воли ключ идеальности...........

Последний раз редактировалось Stilet; 23.09.2011 в 11:34.
jasul вне форума Ответить с цитированием
Старый 23.09.2011, 11:11   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Лови рабочий код
Код:
#pragma argsused
#include <cstdlib>
#include <math.h>
#include <iostream>
using namespace std;

int main( )
{
int n ;
int i ;
bool is_prime ; //
is_prime = true ;

cout << "vvedite 4islo";
cin >> n;
i = 2;
while (i <= sqrt(n))
{
if ( n % i == 0){
is_prime = false;}
i++;
}
if (is_prime)
cout << " 4islo prostoe";
else
cout << "4islo ne prostoe";

system("PAUSE");
return 0;
}
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.09.2011, 11:16   #6
jasul
Падаван
Пользователь
 
Аватар для jasul
 
Регистрация: 23.09.2011
Сообщений: 98
По умолчанию

Спасибо!Спасибо!Спасибо! Так значит в книге была отпечатка??? Или такая операция, функция, как static_cast<double> в современых кампиляторах не используется?
............Сила воли ключ идеальности...........
jasul вне форума Ответить с цитированием
Старый 23.09.2011, 11:21   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Используется, но не в данном случае.
http://www.rsdn.ru/article/cpp/static_cast.xml
Переменную n, надо объявить как static int n;
Но зачем?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.09.2011, 11:22   #8
jasul
Падаван
Пользователь
 
Аватар для jasul
 
Регистрация: 23.09.2011
Сообщений: 98
По умолчанию

Очень благодарен вам!
............Сила воли ключ идеальности...........
jasul вне форума Ответить с цитированием
Старый 23.09.2011, 11:38   #9
jasul
Падаван
Пользователь
 
Аватар для jasul
 
Регистрация: 23.09.2011
Сообщений: 98
По умолчанию

http://www.rsdn.ru/article/cpp/static_cast.xml
Переменную n, надо объявить как static int n;
Но зачем?[/QUOTE]

В книги написано чтобы не было проблем с числами с плавающей точкой.
Цитата с книги-ядром программы является следующий цикл.Обратите внимание: чтобы избежать проблем с преобразованием данных,целочисленная переменная n должна быть приведена к типу double перед её передачей к типу sqrt в качестве параметра.Это необходимо поскольку функция принимает и возвращает знвачения типа double.
............Сила воли ключ идеальности...........
jasul вне форума Ответить с цитированием
Старый 23.09.2011, 11:55   #10
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

С++ тип инт самостоятельно переводит в тип double.
Если есть необходимость проверять натуральные числа, лучше сразу объявить n как double.
double n;
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка : expression syntax in function main 7ple Общие вопросы C/C++ 12 09.10.2011 16:36
Ошибка Undeclared identifier: 'Locate' Valeria15 БД в Delphi 7 22.08.2011 13:21
Ошибка Undeclared Identifier 'edit1'. kote404 Помощь студентам 1 19.05.2011 23:00
ошибка в цикле for 'n' : undeclared identifie; ; Illuminated Общие вопросы C/C++ 1 13.12.2010 22:15
Ошибка в делфи DCC Error Unit1.pas(340): E2003 Undeclared identifier: 'Visual' Яр|/||< (^_^) Общие вопросы Delphi 7 19.02.2010 09:11