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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2009, 21:04   #1
МартинИ
Пользователь
 
Аватар для МартинИ
 
Регистрация: 23.12.2008
Сообщений: 47
По умолчанию Структуры и пары

Код:
//Поле first - дробное число, поле second - целое число, показатель степени
//реализовать метод power() - возведение числа first в second 
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

class power
{public:
void setpower(float f, int s)      //определение внутри класса
{first = f; second = s;}
void setpower(const power &p);     //метод перегружен 
void Display() const;              //вывод
void power::Make();
void power::Read();                 //ввод полей и проверка
private:
float first; int second;
};

void power::Display() const           //определение вне класса константного метода
{
cout << "Vvedeno chyslo - "<< first <<", stepen/' chysla - " << second << endl;
}

void power::Read()
{
 cout << "Chyslo: "; cin >> first;
 cout << "Stepen/': "; cin >> second;
 if(second % 1 == 0)
 {cout << "Stepen/' cila." << endl;}
 else {cout << "Stepen/' ne cila! Vvedit stepen/': "; cin >> second;}
}

void power::Make()
{
	float m;
	m=pow(first,second);
	cout << "Rezultat: " << m << endl;
}


void power::setpower(const power &p)             //определение вне класса
{first = p.first; second = p.second;}



int main(void)
{
	system("cls");
power p;
p.Read();
p.Display();
p.Make();
getch();
return 0;
}
возникла проблема с
Код:
void power::Read()
{
 cout << "Chyslo: "; cin >> first;
 cout << "Stepen/': "; cin >> second;
 if(second % 1 == 0)
 {cout << "Stepen/' cila." << endl;}
 else {cout << "Stepen/' ne cila! Vvedit stepen/': "; cin >> second;}
}
оно должно определять целое это число или не целое, а в тоге или не работает просто, или при вводе нецелого числа - пишет, что целое

и еще вопрос- как проверить, дробное (нецелое) число или нет?
Люди - отвратительные. Эгоистичные. Шумные. Говорят ерунду. А подумав еще немножко, понимаешь, что ты абсолютно такой же, если не хуже...
МартинИ вне форума Ответить с цитированием
Старый 08.12.2009, 01:00   #2
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

никак ты не определишь таким условием second %1 == 0. Для вещественных чисел нет такой операции "проверка на равенство нулю"! НЕТУ!!! и никогда не будет.
double x = 0; if (x == 0) /// никогда не выполниться, т. к. x - вещественное число.
нужно рассматривать погрешность по абсолбтной величине.
Например: if (abs(x) < epsilon) // где epsilon - маленькое число, например 0.001. Вообще epsilon подбирается опытным путем, но это дело сложное.

В твоей задаче можно было написать
Код:
if (abs(second % 1) < 0.001) {cout << "Stepen/' cila." << endl;}
 else {cout << "Stepen/' ne cila! Vvedit stepen/': "; cin >> second;}
}
но это все равно ничего не даст, так как любое число делится на 1 с остатком 0.
Проверить можно след. образом: рассмотреть абсолютную величину разности числа и его целой части. Если меньше epsilon - то целое, иначе - нет.

Короче, если есть число x, то
if (abs(x - floor(x)) < epsilon) // чило целое, иначе - не целое.

Пиши в своей программе так:
Код:
if (abs(second - floor(second)) < 0.001) {cout << "Stepen/' cila." << endl;}
 else {cout << "Stepen/' ne cila! Vvedit stepen/': "; cin >> second;}
}

Последний раз редактировалось Stilet; 08.12.2009 в 08:37.
Alex_FF вне форума Ответить с цитированием
Старый 09.12.2009, 19:47   #3
МартинИ
Пользователь
 
Аватар для МартинИ
 
Регистрация: 23.12.2008
Сообщений: 47
По умолчанию

так second целое число int....
но все равно спасибо
Люди - отвратительные. Эгоистичные. Шумные. Говорят ерунду. А подумав еще немножко, понимаешь, что ты абсолютно такой же, если не хуже...
МартинИ вне форума Ответить с цитированием
Старый 09.12.2009, 20:59   #4
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
Смех

Цитата:
оно должно определять целое это число или не целое, а в тоге или не работает просто, или при вводе нецелого числа - пишет, что целое
Цитата:
Сообщение от МартинИ Посмотреть сообщение
так second целое число int....
тогда нафига тебе вообще определять целое число или нет, если оно у тебя int? оно же всегда целым будет!
Alex_FF вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти номера пары точек, расстояние между которыми наибольшее Nevis Помощь студентам 5 21.06.2009 23:37
Точки и нахождение ближайшей пары точек Salim Помощь студентам 0 15.06.2009 23:32
Определения частоты пары соседних символов в каждой строке и формирования файла частот построчно ивт Паскаль, Turbo Pascal, PascalABC.NET 0 05.12.2008 20:09
Пары регистров в Delphi Jupiter Общие вопросы Delphi 4 13.08.2008 17:29