Archiv verlassen und diese Seite im Standarddesign anzeigen : Satz des Phytagoras - Brute
Servus,
ich würde gern eine Konsolenanwendug haben die die Möglichkeiten eines Rechtwinkligen Dreieks und die Seiten-Größen angibt.
Schematisch:
If a² + b² = c²
Print "A=$a"
Print "B=$b"
Print "C=$c"
Wiederhole
//So, wenn jezt jemand eine Idee hat wie man das in C++ schriebt, bitte bitte posten ;)
//Was ich jedoch viel interessanter finde, WIE mache ich das ohne "Bruten!
hAgBaRd2ooo
15.10.2008, 15:10
Ya macht mal sowas haben den Satz des Pythagoras gerade in school und das Ding waere jetzt echt von nutzen :D
Genau,
Das Problem ist nur, meine C++ kentnisse sind nur (wenn überhaupt) theoretisch...
Ya macht mal sowas haben den Satz des Pythagoras gerade in school und das Ding waere jetzt echt von nutzen :D
ähh wir ham das in der 6. oder so gemacht, wie alt bist du^^
GregorSamsa
15.10.2008, 15:41
Wie deine C++-Kenntnisse sind theoretisch? Könntest du das Proggen wenn ich dir sage wie du das zu machen hast?
Also, im Prinzip müssen ja 2 Zahlen eingegeben werden, dann machst du sowas:
Benutzer sucht sich z.b. A und B aus, und gibt dann ein:
A = 3
B = 4
Danach gibst du aus:
Wurzel(A²+B²)
Wurzel ziehst du meine ich mit sqrt()...
//So, wenn jezt jemand eine Idee hat wie man das in C++ schriebt, bitte bitte posten Winken
Genauso wie von Hand, du rechnest es einfach o.O musst halt nur überprüfen was angegeben wird, in der Konsole könntest du a, b und c abfragen und die unbekannte Größe mit x oder so angeben.
Darkthief
15.10.2008, 15:43
Ich könnte dir schnell ein prog mit python oder java scheiben, für den satz des pythagoras.
c++ hab ich nur früher mal gemacht.
java wär doch auch ok, oder muss es unbedingt c++ sein?
Added after 3 minutes:
als überlegung würde ich erst abfragen welche beiden größen er angeben will, so nach dem motto:
für A und B 1 eingeben
für B und C 2 eingeben
für C und A 3 eingeben
für exit 0 eingeben
dann mit switch schleife verbinden
und halt für jeden case die formel eingeben
find ich persönlich einfacher als die lösung mit x
Was genau willstu machen?
C eingeben lassen und A und B ausgeben lassen?
Oder A und B eingeben -> C ausgeben, oder was genau? :)
Kann dir kurz was schreiben, wenn ich weiß was genau du meinst :)
MfG RikuXan
Also,
1. Mit Theoretisch meinte ich das ich weiß was ich machen will, wie du ja, aber das nicht wirklich in die Praxis umgesetzt bekomme
so,
2. Es soll eigentlich nur eine ganz einfache Überprüfung und Ausgabe sein,
eifacher gesagt, ich will alle -> bis ich programm beende <- möglichkeiten ausgegeben haben wie ein dreieck Rechtwinklich sein kan : sprich
if(a*a+b*b==c*c)
{
cout<<"Das Dreieck ist Rechtwinklig";
}
if(!(a*a+b*b==c*c))
{
cout<<"Das Dreieck ist nicht Rechtwinklig";
}
cout<<"\n";
jedoch am ende mit /wiederhole und solange bis, und das die anwendung die zahlen für a,b und c alle durchtestet, halt bis a*a+b*b==c*c -truh
Dann solltest du aber eine Definitionsmenge / Höchstlimit festlegen. Sonst testet er das bis weiß gott wann durch. Und was soll er durchtesten? soll er a, b und c immer um eins erhören oder nur a / b / c? Um wie viel erhöhen? 1 ? 0.1? ... ?
Was bringt dir das überhaupt? :-P Da macht ein Taschenrechner mit ein paar Tastendrücken weniger Arbeit.
1. Natürlich mach ich das Begrenzt,
2. Ja, mit nem TaschenRechner kann das ja jeder, aber es ist doch interesannter ein Programm dafür zu schreiben
Darkthief
15.10.2008, 15:59
wenn ich das richtig verstanden hab…
du hast alle drei werte (a,b,c)
und willst testen, ob das dreieck rechtwinklig ist?
den code haste ja schon
ich verstehe jetzt nicht warum er weiter testen sollte, bis a*a+b*b==c*c true ergibt?
gibst du mehrere wert für a b und c ein?
oder soll er die werte verändern?
er soll die werte jedesmal verändern, und grade da hab ich das problem, wie sag ich pass die werte so lange an bis...
for ( i = 0 ; i < MAX_WERT ; i++ )
{
a++;
b++;
c++;
if ( a*a + b*b == c*c )
{..}
else
{..}
}
// hm ?
Darkthief
15.10.2008, 16:05
naja,
theorethisch kann er jeden wert verändern
nähmlich indem du einfach die zwei anderen werte angibst, und den dritten berechnest
aber wenn du alle werte veränderst, dann kannst du ja gleich ein x beliebiges rechtwinkliges dreieck nehmen
sollen die wert angenähert werden?
sollen es z.B. die nächst größeren ganzen zahlen sein?
ich versteh immer noch nicht den sinn
denn wenn du abc hast, und sie zu einem rechtwinkligen dreieck ändern willst, dann musst du auch angeben welcher der werte geändert werden soll
| a | b | c |
versuche 0 | 0 | 1
if 0*0 + 0*0 = 1*1
print 0 0 1
versuche 0 | 0 | 2
if 0*0 + 0*0 = 2*2
print 0 0 2
versuche 0 | 0 |3
if 0*0 + 0*0 = 3*3
print 0 0 3
versuche 0 | 0 | 4
if 0*0 + 0*0 = 4*4
print 0 0 4
versuche 0 | 0 | 5
if 0*0 + 0*0 = 5*5
print 0 0 5
so und jezt ohne das ich mehr arbeit habe wie wenn ichs mit nem taschenrechner mache ;)
die Idee von M$A! ist schon ganz gut... wenn sie funktionieren würde oder ich schlau genug währe die richtig (if False) in den quelltext zu fügen
Added after 2 minutes:
du kannst dir nen gaphig taschenrechner hohlen
von casio claspadd 330
der rechnet dir auch eine parabel in 3d aus (gitter netz)
scheiß teil aber es gibt dir das einfaher aus
WAS?
hAgBaRd2ooo
15.10.2008, 16:16
Ya macht mal sowas haben den Satz des Pythagoras gerade in school und das Ding waere jetzt echt von nutzen :D
ähh wir ham das in der 6. oder so gemacht, wie alt bist du^^
Gymnasium 9. Klasse :o
int a = eingabe;
int b = eingabe;
int ab = a*a + b*b;
for ( i = 0 ; i < MAX_WERT ; i++ )
{
c++;
if ( ab == c*c )
{
cout << "Rechtwinklig" << endl;
..
}
else
{
cout << "Nicht rechtwinklig" << endl;
..
}// Ende Else
}// Ende For
Edit: Du solltest bei den Engaben natürlich noch abfragen löl. Und den restlichen Code einfügen :P
Edit2: Anstatt c*c kann man glaub auch ^2 machen ich weiß aber net obs in c++ geht, kam mir nur so innen Kopf xD.
Sorry, ich zu blöd...
#include <iostream>
using namespace std;
int main()
{
for ( i = 1 ; i < MAX_WERT ; i++ )
{
a++;
b++;
c++;
if(a*a+b*b==c*c)
{
cout<<"Das Dreieck ist Rechtwinklig";
}
if(!(a*a+b*b==c*c))
{
cout<<"Das Dreieck ist Rechtwinklig";
}
cout<<"\n";
}
Das geht nicht, weil...?
#include <iostream>
using namespace std;
#define MAXLIMIT 1000
main()
{
int a , b , c;
for( a = 0 ; a <= MAXLIMIT ; a++ )
{
for( b = 0 ; b <= MAXLIMIT ; b++ )
{
for( c = 0 ; c <= MAXLIMIT ; c++ )
{
if( a*a + b*b == c*c && a != 0 && b != 0 && c != 0 )
{
cout << "Das Dreieck mit den Seiten a: " << a << " , b: " << b << " und c: " << c << " ist rechwinklig.\n";
}
}
}
}
}
Is zwar ohne Klassen oder C++ spezifisches, geht aber ;)
Du inkrementierst immer gleichzeitig a, b und c
=> Er versucht nur
1,1,1
2,2,2
3,3,3
usw.
MfG RikuXan
#include <iostream>
#DEFINE MAX_WERT 20
using namespace std;
int main()
{
int a,b,c,ab;
cout << "Wert für A eingeben" << endl;
cin >> a;
cout << "Wert für B eingeben" << endl;
cin >> b;
ab = a*a + b*b;
for ( i = 0 ; i < MAX_WERT ; i++ )
{
c++;
if ( ab == c*c )
{
cout << "Rechtwinklig" << endl;
}
else
{
cout << "Nicht rechtwinklig" << endl;
}// Ende Else
}// Ende For
}// Ende Main()
if(a*a+b*b==c*c)
{
cout<<"Das Dreieck ist Rechtwinklig";
}
if(!(a*a+b*b==c*c))
{
cout<<"Das Dreieck ist Rechtwinklig";
}
guck dir das mal an!
Wäre natürlich schön wenn du uns den fehler nennen könntest und nicht einfach sagst "es geht nicht." Weis jetzt nämlich nich obs nen compilerfehler gibt oder nen laufzeit fehler und wodrauf du hinaus willst.
Außerdem frag ich mich was du überhaupt von uns willst? Diese Sache zu programmieren ist vollkommen trivial (und sinnlos, naja vllt gibt es ja in deinen gedanken einen höheren Sinn) und wenn man noch nicht mal das schafft ist das board hier vllt der falsche Ort...
Darkthief
15.10.2008, 16:48
also nach deinem post nehme ich jetz an, das du alle rechtwinkligen dreiecke mit ganzzahligen seiten längen bis max_lenght wissen willst.
dann würd ich einfach 3 zählschleifen verschachteln
so, 1. sry, mein problem war das Dev-C++ eine main datei erstellte die nach dem 25. mal neu schreiben nicht mehr funkte ^^,
2. ich perfektioniere das programm noch nen bissien und dann sell ich das hier zum download.. wenn jemand will ^^, lol
3. thx für die ganzen hilfen ;)
GregorSamsa
15.10.2008, 16:53
Mach doch folgendes:
#include <stdio.h>
int main()
{
int a, b;
float c;
printf("A:");
scanf("%i", &a);
printf("B:");
scanf("%i", &b);
c = sqrt(a+a+b*b);
printf("C ist %f\n", c);
return 0;
}
Nur nochmal zum Verständnis :>
Was genau meintest du jetz ( welcher Codeschnipsel traf es am besten )
MfG RikuXan
c = sqrt(a+a+b*b);
äam, ja...
ne, aber noch mal was anderen... wie kann ich fest legen das die bereits für a eingesetzten variablen nicht erneut für b infrage kommen wenn b a ist,
sprich ausgaben wie
3 , 4 , und 5
4 , 3 , und 5
sollen vermieden werden
GregorSamsa
15.10.2008, 18:11
Ach fuck hab da a*a+b*b falsch geschrieben... is ja wohl klar das a+a eigendlich a*a heißen sollte...
Zu deinem Problem:
Entweder einen Algorithmus finden, der die nacheinander die passenden Zahlen ausgibt, oder die bereits benutzen Zahlen (z.B. in einer Matrix) speicherst.
Darkthief
15.10.2008, 18:33
das ist doch eigentlich das geringste problem
das programm ist jetzt nicht so komplex, das das groß speicher kostet
http://rapidshare.com/files/154323636/Rechtwinkliges_Dreieck.exe.html
*closed*
Schick doch den Code. ¬_¬
Darkthief
15.10.2008, 19:30
yap, ich hab nen mac
die exe hilft da nich viel
sprich ausgaben wie
3 , 4 , und 5
4 , 3 , und 5
sollen vermieden werden
überprüfe einfach ob B < A ist. wenn das nämlich zutrifft gab es die kombination schon.
#include <iostream>
using namespace std;
string blub;
#define LIMIT 1000
int main()
{
int a , b , c;
for( a = 0 ; a <= LIMIT ; a++ )
{
for( b = 0 ; b <= LIMIT ; b++ )
{
for( c = 0 ; c <= LIMIT ; c++ )
{
if( a*a + b*b == c*c && a != 0 && b != 0 && c != 0 )
if( b < a )
{
{
cout << "Das Dreieck mit den Seiten A:"<< a <<"\t B:" << b << "\t C:" << c << "\t ist Rechtwinklig\n";
}
}
}
}
}
getline (cin,blub);
}
Inc. dem einfachen aber doch so genialen Vorschlag von ichich... das war der Punkt den ich übersehen habe ^^ lol
Ich meinte es eig genau andersherum^^ ist zwar wayne aber sieht ordentlicher aus.... ( beginnt dann mit 3 4 5 )
EDIT: nochwas verbessert (s. kommentare)
:
#include <iostream>
using namespace std;
string blub;
#define LIMIT 1000
int main()
{
int a , b , c;
for( a = 1 ; a <= LIMIT ; a++ ) //a = 1 anstatt 0
{
for( b = 1 ; b <= LIMIT ; b++ ) //b = 1 anstatt 0
{
for( c = 1 ; c <= LIMIT ; c++ ) //c = 1 anstatt 0
{
if( a*a + b*b == c*c ) // dadurch ist && a != 0 && b != 0 && c != 0 überflüssig
if( b > a )
{
{
cout << "Das Dreieck mit den Seiten A:"<< a <<"\t B:" << b << "\t C:" << c << "\t ist Rechtwinklig\n";
}
}
}
}
}
getline (cin,blub);
}
...ja das hab ich auch schon geändert, .... ich hab das problem das immer wenn ich fast fertig bin und irgendwas poste eine neue idee kommt... sollte das denn hier auch noch am laufen halten und nicht nur auf meinem Computer
Powered by vBulletin® Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.