c++ Problem z pierwiastkowaniem

c++ Problem z pierwiastkowaniem
NO
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 6 lat
  • Postów:15
0

Pisze w miare spory programik ale mam jednak pewien problem, gdy chce wywołać coutem wysokość to wychodza mi niepoprawne wyniki, powiedzmy ze chce obliczyc wysokosc trojkata rownoramiennego wpisuje dlugosc bokum, podstawe i wszystko jest okej (wysokoscKwadrat) to robi, problem jest gdy chce pozniej wyciagnac z tego pierwiastek wyskakuja mi wtedy dziwne liczby. Powiedzmy ze: dlugoscBokuBC to 10 a dlugoscBokuA to 16 wynik wychodzi dobry, bo rowny 36, i teraz chce wyciagnac z tego pierwiastek i wychodzi mi liczba 1! Pomocy o co tu chodzi ?

wysokoscKwadrat=(dlugoscBokuBCdlugoscBokuBC)-((dlugoscBokuA/2)(dlugoscBokuA/2));
wysokosc=pow(wysokoscKwadrat,(1/2));

twonek
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
0

Bez kodu to można co najwyżej wróżyć.

NO
W takim razie dodaje
NO
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 6 lat
  • Postów:15
0

#include <iostream>
#include<math.h>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include<cstdlib>
#include<conio.h>
using namespace std;

int main()
{
char a;
cout << "1. KWADRAT" << endl;
cout<<"2. PROSTOKAT"<<endl;
cout<<"3. TROJKAT"<<endl;
a=getch();
switch(a)
{
case '1': //kwadrat
{
float dlugoscBoku, obwod,pole;
cout<<"Podaj d³ugosc jednego z boku: ";
cin>>dlugoscBoku;
pole=dlugoscBokudlugoscBoku;
obwod=dlugoscBoku
4;
cout<<"Pole kwadratu wynosi: "<<pole<<endl;
cout<<"Obwod tego kwadratu wynosi: "<<obwod<<endl;
}
break;
case '2': //prostokat
{
float dlugoscBoku1,dlugoscBoku2,obwod,pole;
cout<<"Podaj dlugosc boku A: ";
cin>>dlugoscBoku1;
cout<<"Podaj dlugosc boku B: ";
cin>>dlugoscBoku2;
pole=dlugoscBoku1dlugoscBoku2;
obwod= (2
dlugoscBoku1)+(2dlugoscBoku2);
cout<<"Pole tego prostokatu wynosi: "<<pole<<endl;
cout<<"Obwod tego prostokatu jest rowny: "<<pole<<endl;
}
break;
case '3': //trojkaty
{
cout<<"1. trojkat rownoramienny"<<endl;
cout<<"2. trojkat rownoboczny"<<endl;
//cout<<"3";
char a;
a=getch();
switch(a)
{
case '1': // trojkat rownoramienny
{
float dlugoscBokuA, dlugoscBokuBC, pole, obwod, wysokoscKwadrat,wysokosc;
cout<<"Podaj podstawe trojkata: ";
cin>> dlugoscBokuA;
cout<<"Podaj dlugosc jednego z bokow: ";
cin>>dlugoscBokuBC;
wysokoscKwadrat=(dlugoscBokuBC
dlugoscBokuBC)-((dlugoscBokuA/2)(dlugoscBokuA/2));
wysokosc=pow(wysokoscKwadrat,(1/2)); //cos tu nie gra
pole=(dlugoscBokuA
wysokosc)/2;
obwod=(dlugoscBokuBC*2)+dlugoscBokuA;
cout<<"Pole tego trojkata jest rowne: "<<wysokosc<<endl;
cout<<"Obwod tego trojkata wynosi: "<<obwod<<endl;
}
break;
case '2': //trojkat rownoboczny
{
float dlugoscBoku, pole, obwod, wysokosc;
float pierwiastek3;
cout<<"Podaj dlugosc dowolnego boku: ";
cin>>dlugoscBoku;
** pierwiastek3=pow(3,1/2);
cout<<pierwiastek3;
**

    }
}


}
break;
}
return 0;

}

Problem jest tam gdzie mam wyciagnac pierwiastek z czegosc chodzby tu gdzie zaznaczyłem pogrubionym

tubiz
Jaki był powód załączenia cmath mając math.h?
twonek
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
0

Do obliczania pierwiastka jest sqrt(). To raz.
1/2 to 0. To dwa.
Cokolwiek do potęgi 0 to 1. To trzy.

NO
Co to za roznica czy podniose cos do potegi jednej drugiej czy uzyje funkcji pierwiastka? Dlaczego 1/2 to 0 skoro jest przedstawiony jako float ?
twonek
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
2

Na temat odpowiadaj w postach.

Co to za roznica czy podniose cos do potegi jednej drugiej czy uzyje funkcji pierwiastka?

A no choćby taka, że gdybyś użył sqrt() to nie miałbyś tego błędu, bo nie musiałbyś podać potęgi do której chcesz podnieść.
A bardziej generalnie to należy pisać kod tak, by by zgodny z intencją programisty. Chcesz wyciągnąć pierwiastek, a nie podnieść do jakiejś dziwnej potęgi, więc użyj funkcji do wyciągania pierwiastka.

Dlaczego 1/2 to 0 skoro jest przedstawiony jako float ?

1 to liczba całkowita, 2 to liczba całkowita, więc dzielenie jest całkowitoliczbowe. Dopiero wynik tego dzielenia (0) trafi do funkcji pow() jako float.

NO
O chyba czaje. Czyli gdybym zamiast 1 napisał 1.0 a za 2 napisałbym 2.0 to teoretycznie powinno działac ?
twonek
tak, przy czym wystarczy by jedna z liczb była typu zmiennoprzecinkowego
NO
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 6 lat
  • Postów:15
0

Pomogłeś dzięki wielkie !

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.