Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
potřeboval bych poradit jak ošetřit vstup u tohodle programku, něco jsem už vymyslel, nicmeně nefunguje to tak jak bych chtěl... Má to načíst 4 čísla(souřadnice dvou bodů) a následně spočitat střed kružnice a poloměr... Potřebuju tam dat nějakou podminku že načitané hodnoty musí být čiselne at po zadani neceho jineho do vstupu to vyhlasi chybovou hlasku. Např když zadam "ahoj" misto čisla at to napiše "Nespravny vstup.". Nicméně problém je v tom že moje řešení nějak nebere desetiná čísla čili když zadam 1,5 do vstupu tak to hodi taky chybovou hlašku. Budu rad za jakykoliv navrh ;)
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
int main()
{
cout << "Zadejte souradnice bodu A a B:" << endl;
double a, b, c, d;
bool req = true;
if (!(cin >> a))
req = false;
cin.clear();
if (!(cin >> b))
req = false;
cin.clear();
if (!(cin >> c))
req = false;
cin.clear();
if (!(cin >> d))
req = false;
cin.clear();
if (!req)
{
cout << "Nespravny vstup." << endl;
return 0;
}
double S1 = ((a+c)/2);
double S2 = ((b+d)/2);
double polomer = (sqrt(pow((a-c), 2)+pow((b-d), 2)))/2;
cout.setf(ios::fixed);
cout.precision(6);
cout << "Stred kruznice je: " << "S[" << S1 << "," << S2 << "]" << endl;
cout << "Polomer kruznice r ma hodnotu: " << polomer << endl;
return 0;
}Offline
↑ Nefritox:
Pokud chceš dosáhnout toho že to bude brát pouze čísla, tak jediná možnost je brát vstup jako string
a pak jej od filtrovat.
zde je kousek kodu:
bool isDecimal(std::string & s)
{
// od filtrovani bilich mezer:
unsigned index = 0 ;
while ( index < s.length() && std::isspace(s[index]) )
++index ;
bool decimalEncountered = false ;
if ( s[index] == '$' || std::isdigit(s[index]) || s[index] == '.' )
{
if ( s[index] == '$' )
{
if ( index+1 >= s.length() )
return false ;
s[index] = ' ' ; // odstraneni $
}
if ( s[index++] == '.' )
{
if (index >= s.length() )
return false ;
decimalEncountered = true ;
}
while ( index < s.length() )
{
if ( !std::isdigit(s[index]) )
{
if ( !s[index] == '.' || decimalEncountered )
return false ;
decimalEncountered = true ;
}
++index ;
}
return true ;
}
return false ;
}tohle jedna z moznych metod
Offline