PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Satz des Phytagoras - Brute



Mafio
15.10.2008, 15:06
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

Mafio
15.10.2008, 15:15
Genau,
Das Problem ist nur, meine C++ kentnisse sind nur (wenn überhaupt) theoretisch...

dioXin
15.10.2008, 15:36
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()...

M$A!
15.10.2008, 15:41
//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

RikuXan
15.10.2008, 15:48
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

Mafio
15.10.2008, 15:54
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

M$A!
15.10.2008, 15:58
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.

Mafio
15.10.2008, 15:59
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?

Mafio
15.10.2008, 16:01
er soll die werte jedesmal verändern, und grade da hab ich das problem, wie sag ich pass die werte so lange an bis...

M$A!
15.10.2008, 16:05
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

Mafio
15.10.2008, 16:08
| 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 ;)

Mafio
15.10.2008, 16:12
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

M$A!
15.10.2008, 16:18
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.

Mafio
15.10.2008, 16:21
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...?

RikuXan
15.10.2008, 16:26
#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

M$A!
15.10.2008, 16:28
#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()

ichich
15.10.2008, 16:30
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

Mafio
15.10.2008, 16:48
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;
}

RikuXan
15.10.2008, 17:05
Nur nochmal zum Verständnis :>
Was genau meintest du jetz ( welcher Codeschnipsel traf es am besten )

MfG RikuXan

Mafio
15.10.2008, 17:09
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

Mafio
15.10.2008, 19:02
http://rapidshare.com/files/154323636/Rechtwinkliges_Dreieck.exe.html

*closed*

M$A!
15.10.2008, 19:23
Schick doch den Code. ¬_¬

Darkthief
15.10.2008, 19:30
yap, ich hab nen mac
die exe hilft da nich viel

ichich
15.10.2008, 19:57
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.

Mafio
15.10.2008, 20:39
#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

ichich
15.10.2008, 21:40
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);
}

Mafio
15.10.2008, 21:50
...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