Kürzen?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

derAtomkeks

ehemals "Sethus"

Betreff: Kürzen?

BeitragFr, Feb 10, 2006 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Feb 10, 2006 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

derAtomkeks

ehemals "Sethus"

BeitragFr, Feb 10, 2006 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
das war mir schon klar,
nur wie ermittle ich den größten gem. teiler?

Spikespine

BeitragFr, Feb 10, 2006 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Suche

Das wird doch nicht zu schwer sein Rolling Eyes
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

derAtomkeks

ehemals "Sethus"

BeitragFr, Feb 10, 2006 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
danke
 

Darren

BeitragFr, Feb 10, 2006 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ging das nicht mit Primfaktorzerlegung? Und dann alle faktoren, die in beiden vorkommen ergeben multipliziert den ggT
MFG Darren
 

Dreamora

BeitragFr, Feb 10, 2006 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht wenn man jemals fertig werden möchte Smile
Dann verwendet man den Euklid'schen Algorithmus.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Feb 12, 2006 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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>

derAtomkeks

ehemals "Sethus"

BeitragSo, Feb 12, 2006 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 12, 2006 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
ey junge, ich mach auch nach jeder zeile code eine zeile abstand Wink
so dürfen die hier wenigstens fleißig scrollen Very Happy
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Feb 12, 2006 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Feb 13, 2006 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Siehe auch Arrow https://www.blitzforum.de/viewtopic.php?t=14337
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group