Kürzen?
Übersicht

![]() |
derAtomkeksehemals "Sethus"Betreff: Kürzen? |
![]() Antworten mit Zitat ![]() |
---|---|---|
HI,
ich hab hier ein kleines Programm gemacht , das kann Brüche addieren, subtrahieren, multiplizieren und dividieren. Wenn ich jetzt mit größeren Brüchen rechne ist das Ergebnis zum Beispiel 100 1000stel. Das finde ich zu groß. jetzt brauche ich eine Funktion die das Ergebnis so weit wie möglich kürzt. Kann mir da einer helfen? Code: [AUSKLAPPEN] Graphics 640,480 Repeat Cls a=Input("Zaehler1: ") b=Input("Nenner1: ") c=Input("Zaehler2: ") d=Input("Nenner2: ") r$=Input("rechenart (+,-,/,*): ") Cls Locate 0,0 Print a Locate 0,20 Print b Locate 50,0 Print c Locate 50,20 Print d Locate 25,10 Print r$ Line 0,17,20,17 Line 45,17,70,17 ;RECHNEN Select r$ Case "+" ez=a*d+b*c en=b*d Case "-" ez=a*d-b*c en=b*d Case "*" ez=a*c en=b*d Case "/" ez=a*d en=b*c Default Print "Diese Rechenart ist nicht zugelassen!" WaitKey End End Select ;KÜRZEN ;ERGEBNIS SCHREIBEN Locate 100,0 Print ez Locate 100,20 Print en Line 90,17,120,17 Locate 75,10 Print "=" WaitKey Until KeyHit(1) end |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Such mal nach ggT = Größter gemeinsamer Teiler.
Teile einfach Zähler und Nenner durch den ggT und du hast deinen gekürzten Bruch! |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
- Zuletzt bearbeitet von SpionAtom am So, Feb 19, 2006 21:25, insgesamt 4-mal bearbeitet
![]() |
derAtomkeksehemals "Sethus" |
![]() Antworten mit Zitat ![]() |
---|---|---|
das war mir schon klar,
nur wie ermittle ich den größten gem. teiler? |
||
![]() |
Spikespine |
![]() Antworten mit Zitat ![]() |
---|---|---|
Suche![]() Das wird doch nicht zu schwer sein ![]() |
||
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax |
![]() |
derAtomkeksehemals "Sethus" |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke | ||
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ging das nicht mit Primfaktorzerlegung? Und dann alle faktoren, die in beiden vorkommen ergeben multipliziert den ggT | ||
MFG Darren |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nicht wenn man jemals fertig werden möchte ![]() Dann verwendet man den Euklid'schen Algorithmus. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mal ne ggt-Funktion geschrieben:
Code: [AUSKLAPPEN] AppTitle "ggT-Funktion"
Graphics 640,480,16,2 Global a = Input("Wert für a eingeben : ") Global b = Input("Wert für b eingeben : ") Dim Primzahl(2000) Dim Primfaktor1(2000) Dim Primfaktor2(2000) Dim teiler(2000) Global num,xflex,yflex,fnum1,fnum2,x,y,z,wert,quo,div,tnum Function teilbar(quo,div) If quo Mod div = 0 Then Return 1 Else Return 0 EndIf End Function Function Primzahlen_erfassen(nr) Primzahl(0)=2 Primzahl(1)=3 Primzahl(2)=5 Primzahl(3)=7 num = 4 For i = 2 To nr If teilbar(i,2)=0 And teilbar(i,3)=0 And teilbar(i,5)=0 And teilbar(i,7)=0 Then Primzahl(num)=i num = num + 1 EndIf Next End Function Function ggT(x,y) If x>y Then Primzahlen_erfassen(x) If y>x Then Primzahlen_erfassen(y) If x=y Then Primzahlen_erfassen(x) xflex = x yflex = y ;Primfaktoren herausfinden Repeat For i = 0 To num-1 If teilbar(xflex,Primzahl(i))=1 Then xflex = xflex / Primzahl(i) Primfaktor1(fnum1)=Primzahl(i) fnum1 = fnum1 + 1 EndIf Next Until xflex = 1 Repeat For i = 0 To num-1 If teilbar(yflex,Primzahl(i))=1 Then yflex = yflex / Primzahl(i) Primfaktor2(fnum2)=Primzahl(i) fnum2 = fnum2 + 1 EndIf Next Until yflex = 1 ;Primfaktoren gegenüberstellen For i = 0 To fnum1-1 If Primfaktor1(i)>0 Then For j = 0 To fnum2-1 If Primfaktor2(j)>0 Then If Primfaktor1(i)=Primfaktor2(j) Then teiler(tnum) = Primfaktor1(i) Primfaktor1(i)=0 Primfaktor2(j)=0 tnum = tnum + 1 EndIf EndIf Next EndIf Next wert = teiler(0) If tnum > 1 Then For i = 1 To tnum-1 wert = wert * teiler(i) Next EndIf Return wert End Function Print ggT(a,b) WaitKey End |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
derAtomkeksehemals "Sethus" |
![]() Antworten mit Zitat ![]() |
---|---|---|
jo danke für den aufwand, aber ich hab hier schon eine etwas einfachere funktion
If ez1 < en1 Then Tmp = ez1 ez1 = en1 en1 = Tmp EndIf For Counter = ez1 To 0 Step -1 If Float(ez1)/Float(Counter) = ez1/Counter Then If Float(en1)/Float(Counter) = en1/Counter Then ; ggT = Counter Exit EndIf EndIf Next hier das neue: Code: [AUSKLAPPEN] Graphics 640,480
Repeat Cls a=Input("Zaehler1: ") b=Input("Nenner1: ") c=Input("Zaehler2: ") d=Input("Nenner2: ") r$=Input("rechenart (+,-,/,*): ") Cls Locate 0,0 Print a Locate 0,20 Print b Locate 50,0 Print c Locate 50,20 Print d Locate 25,10 Print r$ Line 0,17,20,17 Line 45,17,70,17 ;RECHNEN Select r$ Case "+" ez=a*d+b*c en=b*d Case "-" ez=a*d-b*c en=b*d Case "*" ez=a*c en=b*d Case "/" ez=a*d en=b*c Default Print "Diese Rechenart ist nicht zugelassen!" WaitKey End End Select ;KÜRZEN ez1=ez en1=en If ez1 < en1 Then Tmp = ez1 ez1 = en1 en1 = Tmp EndIf For Counter = ez1 To 0 Step -1 If Float(ez1)/Float(Counter) = ez1/Counter Then If Float(en1)/Float(Counter) = en1/Counter Then ; ggT = Counter Exit EndIf EndIf Next ez=ez/ggt en=en/ggt ;ERGEBNIS SCHREIBEN Locate 100,0 Print ez Locate 100,20 Print en Line 90,17,120,17 Locate 75,10 Print "=" WaitKey Until KeyHit(1) End |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
ey junge, ich mach auch nach jeder zeile code eine zeile abstand ![]() so dürfen die hier wenigstens fleißig scrollen ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
hier mal eine Variante....
Code: [AUSKLAPPEN] Global Zaehler= 1500,Nenner=2000
BruchKuerzen() Print Zaehler+" / " + Nenner WaitKey Function BruchKuerzen() If Zaehler>Nenner Then c= Zaehler : Zaehler= Nenner : Nenner= c:Tausch = True For t = 2 To Zaehler If Zaehler Mod t = 0 If Nenner Mod t = 0 Zaehler= Zaehler / T Nenner= Nenner / t BruchKuerzen() If Tausch = True Then c= Zaehler : Zaehler= Nenner : Nenner= c Exit End If End If Next End Function |
||
[BB2D | BB3D | BB+]
|
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Siehe auch ![]() |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group