Bruchrechnen, ggT, kgV
Übersicht

![]() |
ArtemisBetreff: Bruchrechnen, ggT, kgV |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group