[C++] Budowanie trójkąta z odcinków
-
- Użytkownik
- Posty: 97
- Rejestracja: 1 sty 2013, o 17:48
- Płeć: Kobieta
- Lokalizacja: pomorze
- Podziękował: 6 razy
[C++] Budowanie trójkąta z odcinków
Witam,
dostałam do napisania taki oto program w C++:
Napisz program sprawdzający, czy z podanych odcinków o długościach podanych przez użytkownika da się zbudować trójkąt (czy suma długości dwóch boków jest większa od trzeciego), a jeśli tak, to czy jest on prostokątny (czy dla boków \(\displaystyle{ a, b, c: a ^{2} + b ^{2} = c ^{2}}\)). Dla sprawdzenia każdego z warunków uzyć funkcji.
Mam problem z zadeklarowaniem funkcji, nie bardzo wiem od czego zacząć. Będę wdzięczna za jakieś wskazówki.
Pozdrawiam
dostałam do napisania taki oto program w C++:
Napisz program sprawdzający, czy z podanych odcinków o długościach podanych przez użytkownika da się zbudować trójkąt (czy suma długości dwóch boków jest większa od trzeciego), a jeśli tak, to czy jest on prostokątny (czy dla boków \(\displaystyle{ a, b, c: a ^{2} + b ^{2} = c ^{2}}\)). Dla sprawdzenia każdego z warunków uzyć funkcji.
Mam problem z zadeklarowaniem funkcji, nie bardzo wiem od czego zacząć. Będę wdzięczna za jakieś wskazówki.
Pozdrawiam
Ostatnio zmieniony 20 mar 2013, o 22:55 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
[C++] Budowanie trójkąta z odcinków
Technicznie się nie znam na \(\displaystyle{ C}\). Ale najpierw uporządkowałbym liczby \(\displaystyle{ a,b,c}\) rosnąco. Potem sprawdziłbym warunek \(\displaystyle{ c<a+b}\) i wreszcie \(\displaystyle{ c^2=a^2+b^2}\).
-
- Użytkownik
- Posty: 1406
- Rejestracja: 6 maja 2012, o 22:46
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Podziękował: 107 razy
- Pomógł: 145 razy
[C++] Budowanie trójkąta z odcinków
int - typ całkowity
double - typ zmiennoprzecinkowy
ja użyję int
double - typ zmiennoprzecinkowy
ja użyję int
Kod: Zaznacz cały
int czy_trojkat(int a, int b, int c)
{
if( c < a+b) return 1;
else return 0;
}
int czy_prostokatny(int a, int b, int c)
{
if( a^2 + b^2 = c^2) return 1;
else return 0;
}
int main()
{
int tab[3];
cout << "Podaj dlugosci 3 bokow: ";
for( int i = 0 ; i < 3 ; i++)
cin >> tab[i];
... // posortuj bobelkowo (google)
if( czy_trojkat(tab[0], tab[1], tab[2]))
{
cout << "mozna zbudowac trojkat";
if ( czy_prostokatny(tab[0], tab[1], tab[2]))
cout << "trojkat jest prostokatny";
}
...
}
-
- Użytkownik
- Posty: 55
- Rejestracja: 4 maja 2011, o 13:37
- Płeć: Mężczyzna
- Podziękował: 2 razy
- Pomógł: 14 razy
[C++] Budowanie trójkąta z odcinków
No chyba nie. ^ to bitowy XOR.Ser Cubus pisze:Kod: Zaznacz cały
if( a^2 + b^2 = c^2) return 1;
-
- Użytkownik
- Posty: 106
- Rejestracja: 17 gru 2012, o 23:56
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 7 razy
- Pomógł: 31 razy
[C++] Budowanie trójkąta z odcinków
Zamysł dobry, ale sortowanie tu nie jest potrzebne. Wystarczy maksymalna wartość a ją trochę łatwiej zaimplementować od booble sort. Błąd też przy ^. Aha i najlepiej takie coś:
nie zapisywać jako zmienną 32 bitową a jako 1 bitową (typ bool), bo przyjmuje tylko wartość true/false.
Kod: Zaznacz cały
int czy_trojkat(int a, int b, int c)
{
if( c < a+b) return 1;
else return 0;
}
int czy_prostokatny(int a, int b, int c)
{
if( a^2 + b^2 = c^2) return 1;
else return 0;
}
- MichalPWr
- Użytkownik
- Posty: 1625
- Rejestracja: 29 wrz 2010, o 15:55
- Płeć: Mężczyzna
- Lokalizacja: Leszno
- Podziękował: 7 razy
- Pomógł: 387 razy
[C++] Budowanie trójkąta z odcinków
Nie czytałem polecanie, ani nie wczytywałem się w kod, ale
nie widzisz tutaj błędu?
Poza tym, w typie logicznym w C++ używamy true i false, a nie 0 i 1. Widać takie pomieszanie C i C++.
Kod: Zaznacz cały
if( a^2 + b^2 = c^2) return 1;
Poza tym, w typie logicznym w C++ używamy true i false, a nie 0 i 1. Widać takie pomieszanie C i C++.
-
- Użytkownik
- Posty: 97
- Rejestracja: 1 sty 2013, o 17:48
- Płeć: Kobieta
- Lokalizacja: pomorze
- Podziękował: 6 razy
[C++] Budowanie trójkąta z odcinków
No własnie juz przy tym warunku jest problem z programem, nie chce dzialac, warunki beda trzy na istnienie trojkata, ale nie wiem jak to zapisac w formie funkcji. Jakiej zmiennej uzyc, double i int nie pasują w tym wypadku. Program zglasza błąd w momencie kiedy chce sprawdzić czy istnieje trójkąt prostokątny.
- MichalPWr
- Użytkownik
- Posty: 1625
- Rejestracja: 29 wrz 2010, o 15:55
- Płeć: Mężczyzna
- Lokalizacja: Leszno
- Podziękował: 7 razy
- Pomógł: 387 razy
[C++] Budowanie trójkąta z odcinków
magda87, Może inaczej. Napisz swój program, możesz się wzorować na ww. propozycjach. Według mnie program należy zrobić na double ew. float, no chyba, że w specyfikacji było że ma śmigać na int-ach. Jak już zrobisz swój program to pokaż go nam oraz koniecznie napisz jakiego kompilatora używasz i jakie błędy Ci wyrzuca.
-
- Użytkownik
- Posty: 97
- Rejestracja: 1 sty 2013, o 17:48
- Płeć: Kobieta
- Lokalizacja: pomorze
- Podziękował: 6 razy
[C++] Budowanie trójkąta z odcinków
Korzystam z Dev-C++ 5.2.0.2. Na ten moment mam tyle, i to jest wg kompilatora dobrze napisane, wszystkie warunki sprawdza, ale nie wiem jak sie zabrać za warunek dotyczący tego czy trójkąt jest prostokątny. Jesli chce skorzystac ze zmiennej float, double czy int to wyskakuje błąd : _CRTIMP double _cdecl pow ( double, double) dla funkcji pow lub gdy korzystam z operatora ^ krzyczy ze nie pasuje on do zmiennych tego typu.
-- 20 mar 2013, o 17:17 --
chyba coś przesadziłam z warunkami na istnienie trójkąta, wystraczylby jeden. Jeśli mam trzy to obojetnie co bym nie wpisala po uruchomieniu programu, to podaje mi ze trojkąt istnieje
chyba wystraczy tylko
-- 20 mar 2013, o 17:46 --
nie to nie tak beda trzy warunki tyle że zamiast operatora \(\displaystyle{ lub}\) trzeba użyc operatora \(\displaystyle{ i}\):
zarówno w zapisie funkcji jak i w programie właściwym
Kod: Zaznacz cały
#include <iostream>
#include <math.h>
using namespace std;
int czy_trojkat ( int a, int b, int c)
{
if( a + b>c || a+c> b || b+c>a)
return 1;
else
return 0;
}
int main()
{
int a,b,c;
cout<<"podaj a:"<< endl;
cin>>a;
cout<<"podaj b:"<< endl;
cin>>b;
cout<<"podaj c:"<< endl;
cin>>c;
if( a + b>c || a+c> b || b+c>a)
{
cout<<"trojkat istnieje"<< endl;
}
else
{
cout<< "nie mozna zbudowac trojkata"<< endl;
}
if (pow(a,2) + pow(b,2) = pow(c,2)) // tutaj wyskakuje błąd [b]_CRTIMP double _cdecl pow (double, double)[/b]
{
cout<< "trojkat jest prostokatny"<< endl;
}
else
{
cout<<"trojkat nie jest prostokatny"<< endl;
}
return 0;
}
chyba coś przesadziłam z warunkami na istnienie trójkąta, wystraczylby jeden. Jeśli mam trzy to obojetnie co bym nie wpisala po uruchomieniu programu, to podaje mi ze trojkąt istnieje
chyba wystraczy tylko
Kod: Zaznacz cały
if ( a+b>c)
nie to nie tak beda trzy warunki tyle że zamiast operatora \(\displaystyle{ lub}\) trzeba użyc operatora \(\displaystyle{ i}\):
Kod: Zaznacz cały
if( a + b>c && a+c> b && b+c>a)
Ostatnio zmieniony 20 mar 2013, o 22:56 przez Afish, łącznie zmieniany 1 raz.
Powód: Stosuj tagi code.
Powód: Stosuj tagi code.
-
- Użytkownik
- Posty: 145
- Rejestracja: 16 lis 2007, o 09:06
- Płeć: Mężczyzna
- Lokalizacja: Gniezno
- Podziękował: 2 razy
- Pomógł: 27 razy
[C++] Budowanie trójkąta z odcinków
Popraw na:
W C/C++ znak = jest operatorem przypisania, natomiast znak == jest operatorem porównania (dla zdefiniowanych typów).
Kod: Zaznacz cały
(pow(a,2) + pow(b,2) == pow(c,2))
-
- Użytkownik
- Posty: 97
- Rejestracja: 1 sty 2013, o 17:48
- Płeć: Kobieta
- Lokalizacja: pomorze
- Podziękował: 6 razy
[C++] Budowanie trójkąta z odcinków
Tak wiem, pomyłka:)
Napisałam taki program, może go ktoś sprawdzić? Niby działa ale chcę sę upewnić, że jest dobrze napisany:
Napisałam taki program, może go ktoś sprawdzić? Niby działa ale chcę sę upewnić, że jest dobrze napisany:
Kod: Zaznacz cały
#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;
float czy_trojkat ( float a, float b, float c)
{
if( a + b>c && a+c> b && b+c>a)
return 1;
else
return 0;
}
float czy_prostokatny ( float a, float b, float c)
{
if (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a)
return 1;
else
return 0;
}
int main()
{
float a,b,c;
cout<<"podaj a:"<< endl;
cin>>a;
cout<<"podaj b:"<< endl;
cin>>b;
cout<<"podaj c:"<< endl;
cin>>c;
if( a + b>c && a+c> b && b+c>a)
{
cout<<"trojkat istnieje"<< endl;
}
else
{
cout<< "nie mozna zbudowac trojkata"<< endl;
}
if (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a)
{
cout<< "trojkat jest prostokatny"<< endl;
}
else
{
cout<<"trojkat nie jest prostokatny"<< endl;
}
return 0;
}
[C++] Budowanie trójkąta z odcinków
Ze mnie taki ekspert programistyczny jak nie powiem co. Ale przypatrując się temu wszystkiemu obserwuję stały przyrost linii kodu. Czy to nie przesada, aby tak trywialny problem rozwiązywać tak długim programem?
- Althorion
- Użytkownik
- Posty: 4541
- Rejestracja: 5 kwie 2009, o 18:54
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 9 razy
- Pomógł: 662 razy
[C++] Budowanie trójkąta z odcinków
1. Nie ma powodu, by funkcje
2. Po co Ci te funkcje, skoro z nich nie korzystasz? Powtarzasz te warunki w kodzie programu.
3. Po co Ci biblioteki
czy_trojkat
oraz czy_prostokatny
zwracały liczbę zmiennoprzecinkową, typ logiczny (bool
) jest dla nich idealny.2. Po co Ci te funkcje, skoro z nich nie korzystasz? Powtarzasz te warunki w kodzie programu.
3. Po co Ci biblioteki
cmath
i cstdlib
?-
- Użytkownik
- Posty: 1406
- Rejestracja: 6 maja 2012, o 22:46
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Podziękował: 107 razy
- Pomógł: 145 razy
[C++] Budowanie trójkąta z odcinków
Kod: Zaznacz cały
if( a + b>c && a+c> b && b+c>a)
używaj boola w funkcjach, lub int jeżeli wydaje Ci się łatwiejsze
i korszytaj z funkcji