c++ Problem z pierwiastkowaniem

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));

0

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

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

0

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

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.

0

Pomogłeś dzięki wielkie !

1 użytkowników online, w tym zalogowanych: 0, gości: 1