Bruchrechnen, ggT, kgV

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Artemis

Betreff: Bruchrechnen, ggT, kgV

BeitragSo, Jul 03, 2005 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier sind 5 Funktionen zum Bruchrechnen mit Blitz.
Es sind:
BAddieren
BSubtrahieren
BMultiplizieren
BDividieren

Brüche werden folgendermaßen notiert:
1. als String
2. erst zähler, dann ein slash("/") dann der nenner
3. bei einem gemischten bruch, wird zuerst der ganzzahlanteil dann der slash dann der zähler, dann wieder ein slash und dann der nenner notiert

zusätlich zu den funktionen, gibt es noch die funktionen
ggT und kgV welche den größten gemeinsamen Teiler oder das kleinste gemeinsame Vielfache berechnen.

außerdem dabei sind noch die funktionen
In (gibt zurück wie oft ein string in einem anderen vorkommt)
und Middle$ ( gibt den string zwischen trennzeichen zurück)

die letzteren 4 funktionen werden aber für das bruchrechenen gebraucht!!

viel spass
jonas

Code: [AUSKLAPPEN]
Function BAddieren$(Zahl1$,Zahl2$)
   
   Local N1, N2
   Local Z1, Z2
   Local N,Z
   
   Zahl1$ = Kuerzen(Zahl1$)
   Zahl2$ = Kuerzen(Zahl2$)
   
   Select In( Zahl1$,"/")
      Case 0
         Z1 = Int(Zahl1$)
         N1 = 1
      Case 1
         Z1 = Int(Middle$(Zahl1$,"/",0,1))
         N1 = Int(Middle$(Zahl1$,"/",1,2))
      Case 2
         Z1 = Int(Middle$(Zahl1$,"/",1,2))
         N1 = Int(Middle$(Zahl1$,"/",4,3))
         Z1 = Z1 + (Int(Middle$(Zahl1$,"/",0,1))*N1)
   End Select
   Select In( Zahl2$,"/")
      Case 0
         Z2 = Int(Zahl2$)
         N2 = 1
      Case 1
         Z2 = Int(Middle$(Zahl2$,"/",0,1))
         N2 = Int(Middle$(Zahl2$,"/",1,2))
      Case 2
         Z2 = Int(Middle$(Zahl2$,"/",1,2))
         N2 = Int(Middle$(Zahl2$,"/",4,3))
         Z2 = Z2 + (Int(Middle$(Zahl2$,"/",0,1))*N2)
   End Select
   
   If N1 = N2 Then
      Z = Z1 + Z2
      N = N1
      If N<0 And Z<0 Then
         N = Abs(N)
         Z = Abs(Z)
      EndIf
    Else
      N = kgV(N1,N2)
      Z1 = Z1 * (N/N1)
      Z2 = Z2 * (N/N2)
      Z = Z1 + Z2
      If N<0 And Z<0 Then
         N = Abs(N)
         Z = Abs(Z)
      EndIf
   EndIf
   
   Return Kuerzen(Str$(Z)+"/"+Str$(N))
   
End Function

Function BSubtrahieren$(Zahl1$,Zahl2$)
   
   Local N1, N2
   Local Z1, Z2
   Local N,Z
   
   Zahl1$ = Kuerzen(Zahl1$)
   Zahl2$ = Kuerzen(Zahl2$)
   
   Select In( Zahl1$,"/")
      Case 0
         Z1 = Int(Zahl1$)
         N1 = 1
      Case 1
         Z1 = Int(Middle$(Zahl1$,"/",0,1))
         N1 = Int(Middle$(Zahl1$,"/",1,2))
      Case 2
         Z1 = Int(Middle$(Zahl1$,"/",1,2))
         N1 = Int(Middle$(Zahl1$,"/",4,3))
         Z1 = Z1 + (Int(Middle$(Zahl1$,"/",0,1))*N1)
   End Select
   Select In( Zahl2$,"/")
      Case 0
         Z2 = Int(Zahl2$)
         N2 = 1
      Case 1
         Z2 = Int(Middle$(Zahl2$,"/",0,1))
         N2 = Int(Middle$(Zahl2$,"/",1,2))
      Case 2
         Z2 = Int(Middle$(Zahl2$,"/",1,2))
         N2 = Int(Middle$(Zahl2$,"/",4,3))
         Z2 = Z2 + (Int(Middle$(Zahl2$,"/",0,1))*N2)
   End Select
   
   If N1 = N2 Then
      Z = Z1 - Z2
      N = N1
      If N<0 And Z<0 Then
         N = Abs(N)
         Z = Abs(Z)
      EndIf
    Else
      N = kgV(N1,N2)
      Z1 = Z1 * (N/N1)
      Z2 = Z2 * (N/N2)
      Z = Z1 - Z2
      If N<0 And Z<0 Then
         N = Abs(N)
         Z = Abs(Z)
      EndIf
   EndIf
   
   Return Kuerzen(Str$(Z)+"/"+Str$(N))
   
End Function

Function BMultiplizieren$(Zahl1$,Zahl2$)
   
   Local N1, N2
   Local Z1, Z2
   Local N,Z
   
   Zahl1$ = Kuerzen(Zahl1$)
   Zahl2$ = Kuerzen(Zahl2$)
   
   Select In( Zahl1$,"/")
      Case 0
         Z1 = Int(Zahl1$)
         N1 = 1
      Case 1
         Z1 = Int(Middle$(Zahl1$,"/",0,1))
         N1 = Int(Middle$(Zahl1$,"/",1,2))
      Case 2
         Z1 = Int(Middle$(Zahl1$,"/",1,2))
         N1 = Int(Middle$(Zahl1$,"/",4,3))
         Z1 = Z1 + (Int(Middle$(Zahl1$,"/",0,1))*N1)
   End Select
   Select In( Zahl2$,"/")
      Case 0
         Z2 = Int(Zahl2$)
         N2 = 1
      Case 1
         Z2 = Int(Middle$(Zahl2$,"/",0,1))
         N2 = Int(Middle$(Zahl2$,"/",1,2))
      Case 2
         Z2 = Int(Middle$(Zahl2$,"/",1,2))
         N2 = Int(Middle$(Zahl2$,"/",4,3))
         Z2 = Z2 + (Int(Middle$(Zahl2$,"/",0,1))*N2)
   End Select
   
   N = N1*N2
   Z = Z1*Z2
   If N<0 And Z<0 Then
      N = Abs(N)
      Z = Abs(Z)
   EndIf
   
   Return Kuerzen(Str$(Z)+"/"+Str$(N))
   
End Function

Function BDividieren$(Zahl1$,Zahl2$)
   
   Local Z1, Z2
   
   Zahl1$ = Kuerzen(Zahl1$)
   Zahl2$ = Kuerzen(Zahl2$)
   
   Select In( Zahl2$,"/")
      Case 0
         Z2 = Int(Zahl2$)
         N2 = 1
      Case 1
         Z2 = Int(Middle$(Zahl2$,"/",0,1))
         N2 = Int(Middle$(Zahl2$,"/",1,2))
      Case 2
         Z2 = Int(Middle$(Zahl2$,"/",1,2))
         N2 = Int(Middle$(Zahl2$,"/",4,3))
         Z2 = Z2 + (Int(Middle$(Zahl2$,"/",0,1))*N2)
   End Select
   
   Return Kuerzen(BMultiplizieren$(Zahl1$,Str$(N2)+"/"+Str$(Z2)))
   
End Function



Function kgV(Zahl1,Zahl2)
   
   Local Counter
   Local kgV
   
   While Not kgV
      
      Counter = Counter + 1
      If Float(Counter)/Float(Zahl1) = Counter/Zahl1 Then
         If Float(Counter)/Float(Zahl2) = Counter/Zahl2 Then
            kgV = Counter
         EndIf
      EndIf
      
   Wend
   
   Return kgV
   
End Function

Function ggT(Zahl1,Zahl2)
   
   Local Counter
   Local ggT
   Local Tmp
   
   If Zahl1 < Zahl2 Then
      Tmp = Zahl1
      Zahl1 = Zahl2
      Zahl2 = Tmp
   EndIf
   
   For Counter = Zahl1 To 0 Step -1
      
      If Float(Zahl1)/Float(Counter) = Zahl1/Counter Then
         If Float(Zahl2)/Float(Counter) = Zahl2/Counter Then
            ggT = Counter
            Exit
         EndIf
      EndIf      
      
   Next
   
   Return ggT
   
End Function

Function Kuerzen$(Bruch$)
   
   Local ggT
   
   Select In( Bruch$,"/")
      Case 0
         Z = Int(Bruch$)
         N = 1
      Case 1
         Z = Int(Middle$(Bruch$,"/",0,1))
         N = Int(Middle$(Bruch$,"/",1,2))
      Case 2
         Z = Int(Middle$(Bruch$,"/",1,2))
         N = Int(Middle$(Bruch$,"/",4,3))
         Z = Z + (Int(Middle$(Bruch$,"/",0,1))*N)
   End Select
   
   ggT = ggT(N,Z)
   
   If ggT > 1 Then
      N = N / ggT
      Z = Z / ggT
   EndIf
   
   If N = 1 Then
      Return Str$(Z)
    Else
      Return Str$(Z)+"/"+Str$(N)
   EndIf
   
End Function

Function In(DurchsuchText$,SuchText$)
   
   Local L_Counter
   Local L_Vorkommen
   
   For L_Counter = 1 To Len(DurchsuchText$)
      
      If Mid$(DurchsuchText$,L_Counter,Len(SuchText$)) = SuchText$ Then
         L_Vorkommen = L_Vorkommen + 1
      EndIf
      
   Next
   
   Return L_Vorkommen
   
End Function

Function Middle$(DurchsuchText$,Trenner$,Pos1,Pos2 )
   
   Local L_Counter
   Local L_Trennzeichen
   Local L_Middle$
   
   For L_Counter = 1 To Len(DurchsuchText$)
      Select Mid$(DurchsuchText$,L_Counter,1)
         Case Trenner$
            L_Trennzeichen = L_Trennzeichen + 1
         Default
            If Pos1 <= L_Trennzeichen Then
               If Pos2 > L_Trennzeichen Then
                  L_Middle$ = L_Middle$ + Mid$(Durchsuchtext$,L_Counter,1)
               EndIf
            EndIf
      End Select
   Next
   
   Return L_Middle$
   
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group