C# :: Aufgabe #69
11 Lösungen

Größter gemeinsamer Teiler
Anfänger - C#
von hobeditz
- 19.09.2014 um 20:58 Uhr
Entwickeln Sie ein Programm, welches den größten gemeinsamen Teiler zweier Zahlen ermittelt. Die Zahlen sollen vom Nutzer selber bestimmt werden.
Zitat:
Tipp:
Der euklidische Algorithmus könnte helfen.
Lösungen:

using System; namespace ggT { class Program { static void Main(string[] args) { uint zahl1; uint zahl2; Console.WriteLine("Bitte geben Sie die erste Zahl (größer 0) ein!"); while (!uint.TryParse(Console.ReadLine(), out zahl1)) Console.WriteLine("Bitte eine Ganzzahl, größer 0, eingeben!"); Console.WriteLine("Bitte geben Sie die zweite Zahl (größer 0) ein!"); while (!uint.TryParse(Console.ReadLine(), out zahl2)) Console.WriteLine("Bitte eine Ganzzahl, größer 0, eingeben!"); if (zahl1 == zahl2) { Console.WriteLine("Da beide Zahlen gleichgroß sind, ist ihr ggT: " + zahl1); Console.ReadLine(); } else { while (zahl1 != zahl2) { if (zahl1 > zahl2) { if (zahl1 - zahl2 > 0) { zahl1 = zahl1 - zahl2; } } else { if (zahl2 - zahl1 > 0) { zahl2 = zahl2 - zahl1; } } } Console.WriteLine("Der ggT der beiden Zahlen beträgt " + zahl1); Console.ReadLine(); } } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GGT { class Program { static void Main(string[] args) { Console.WriteLine("Geben Sie die erste Zahl ein"); string input1 = Console.ReadLine(); Console.WriteLine("Geben Sie die zweite Zahl ein"); string input2 = Console.ReadLine(); Console.WriteLine(""); int a = Convert.ToInt32(input1); int b = Convert.ToInt32(input2); if (a == 0) { Console.WriteLine("Der grösste gemeinsame Teiler ist " + b); } else { while (b > 0) { if (a > b) { a = a - b; } else { b = b - a; } } Console.WriteLine("Der grösste gemeinsame Teiler ist " + a); } Console.ReadKey(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace größter_gemeinsamer_Teiler { class Program { static void Main(string[] args) { int h = 0; Console.Write("Bitte geben Sie die erste Zahl ein: "); int a = Convert.ToInt32(Console.ReadLine()); Console.Write("Bitte geben Sie die zweite Zahl ein:"); int b = Convert.ToInt32(Console.ReadLine()); while (b != 0) { h = a % b; a = b; b = h; } Console.WriteLine("Der größte gemeinsame Teiler ist {0}", a); Console.ReadLine(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication9 { class Program { static void Main(string[] args) { Console.WriteLine("Geben Sie die erste Zahl ein:"); int a = int.Parse(Console.ReadLine()); Console.WriteLine("Geben Sie die zweite Zahl ein:"); int b = int.Parse(Console.ReadLine()); int teiler = ggT(a, b); Console.WriteLine("Der größte gemeinsame Teiler von {0} und {1} ist {2}", a, b, teiler); Console.ReadLine(); } static int ggT(int a, int b) { if (b == 0) return a; return ggT(b, a % b); } } }

class Program { static void Main(string[] args) { int a = 0, b = 0, rest=1; string stra, strb; bool aoderb = false; Console.WriteLine("Gib zahl a ein: "); stra = Console.ReadLine(); Console.WriteLine("Gib Zahl b ein: "); strb = Console.ReadLine(); try { a = Convert.ToInt16(stra); b = Convert.ToInt16(strb); } catch(Exception ex) { Console.Write(ex); } while (rest != 0) { if (a > b) { rest = a % b; a = b; b = rest; aoderb = true; } else { rest = b % a; b = a; a = rest; aoderb = false; } } if (aoderb == true) { Console.WriteLine(a); } else { Console.WriteLine(b); } Console.ReadLine(); } }
Zitat:
Habe hier den Euklidischen Algorithmus verwendet.

using System; namespace ConsoleApplication11 { internal class Rest { public double restzahlberrechnung(int ergebnisholen, double zahl2, double zahl1) { int neuezahl = ergebnisholen; double zwischenergebnis = neuezahl * zahl2; double restzahl = zahl1 - zwischenergebnis; return restzahl; } } internal class Program { private static void Main(string[] args) { Console.WriteLine("Berrechnung eines gemeinsamen Teilers zweier Zahlen:"); start: Rest klasse = new Rest(); Console.WriteLine("erste zahl:"); string erstezahl = Console.ReadLine(); Console.WriteLine("zweite zahl:"); string zweitezahl = Console.ReadLine(); double zahl1; double zahl2; if (double.TryParse(erstezahl, out zahl1) && double.TryParse(zweitezahl, out zahl2)) { double restzahl = 1; double altergebnis; double restzahlneu = 1; while (restzahl != 0) { altergebnis = zahl1 / zahl2; int ergebnis = (int)altergebnis; restzahl = klasse.restzahlberrechnung(ergebnis, zahl2, zahl1); altergebnis = zahl2 / restzahl; ergebnis = (int)altergebnis; restzahlneu = klasse.restzahlberrechnung(ergebnis, restzahl, zahl2); if (restzahlneu == 0.0) { break; } altergebnis = restzahl / restzahlneu; ergebnis = (int)altergebnis; // 2 restzahl = klasse.restzahlberrechnung(ergebnis, restzahlneu, restzahl); double secondnumber = 0; if (restzahl != 0.00) { secondnumber = restzahlneu; double newrestzahl = restzahl; while (newrestzahl != 0.00) { restzahlneu = secondnumber / newrestzahl; int ganzesergebnis = (int)restzahlneu; double zwischennummer = newrestzahl; newrestzahl = klasse.restzahlberrechnung(ganzesergebnis, newrestzahl, secondnumber); secondnumber = zwischennummer; } restzahl = newrestzahl; Console.WriteLine("Der gemeinsame Teiler ist {0}", secondnumber); Console.ReadLine(); goto start; } } if (restzahlneu == 0.0) { Console.WriteLine("Der gemeinsame Teiler ist {0}", restzahl); goto start; } Console.WriteLine("Der gemeinsame Teiler ist {0}", restzahlneu); Console.ReadLine(); } else { Console.WriteLine("Bitte gültige Zahlen eingeben"); goto start; } } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ggt { class Program { public static int ggT(int a, int b) { int h; while (b != 0) { h = a % b; a = b; b = h; } return a; } static void Main(string[] args) { int zahl1, zahl2; do { Console.WriteLine("Erste Zahl: "); } while (!int.TryParse(Console.ReadLine(), out zahl1)); do { Console.WriteLine("Zweite Zahl: "); } while (!int.TryParse(Console.ReadLine(), out zahl2)); int ggt = ggT(zahl1, zahl2); Console.Clear(); Console.WriteLine("Der größte gemeinsame Teiler von\n{0} und\n{1} ist\n{2}", zahl1, zahl2, ggt); Console.ReadLine(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TrainYourProgrammer69 { class Program { static void Main(string[] args) { int zahlEins, zahlZwei; Console.WriteLine("BERECHNUNG DES GROESSTEN GEMEINSAMEN TEILERS"); Console.Write("Geben Sie die erste Zahl ein: "); while (!Int32.TryParse(Console.ReadLine(), out zahlEins)) { Console.Write("Geben Sie die erste Zahl ein: "); } Console.Write("Geben Sie die zweite Zahl ein: "); while (!Int32.TryParse(Console.ReadLine(), out zahlZwei)) { Console.Write("Geben Sie die zweite Zahl ein: "); } int anzahlTeilerEins = AnzahlTeiler(zahlEins); int anzahlTeilerZwei = AnzahlTeiler(zahlZwei); int[] teilerEins = Teiler(zahlEins, anzahlTeilerEins); int[] teilerZwei = Teiler(zahlZwei, anzahlTeilerZwei); for (int i = 0; i<=anzahlTeilerEins-1; i++) { for (int k = 0; k <= anzahlTeilerZwei-1; k++) { if (teilerEins[i] == teilerZwei[k]) { Console.WriteLine("Der groesste gemeinsame Teiler ist " + teilerEins[i]); Console.ReadKey(); return; } } } Console.WriteLine("Es gibt keinen gemeinsamen Teiler."); Console.ReadKey(); } static int AnzahlTeiler(int zahl) { int anzahlTeiler = 0; for (int i = 0; i <= zahl-1; i++) { if (zahl % (zahl - i) == 0) { anzahlTeiler++; } } return anzahlTeiler; } static int[] Teiler(int zahl, int anzahlTeiler) { int naechsteStelle = 0; int[] teiler = new int[anzahlTeiler]; for (int i = 0; i <= zahl-1; i++) { if (zahl % (zahl - i) == 0) { teiler[naechsteStelle] = zahl - i; naechsteStelle++; } } return teiler; } } }

static void Groesste_gemeinsame_Teiler() { int zahlA, zahlB, temp; //Console.Write("Zahl 1: "); zahlA = 4875346; //Console.Write("Zahl 2: "); zahlB = 123798; temp = zahlA; while (zahlA % temp != 0 || zahlB % temp != 0) { temp--; } Console.WriteLine("Größte gemeinsame Teiler: " + temp); } static void Groesste_gemeinsame_Teiler_euklid() { int a = 4875346, b = 123798, c = 0; do { c = a % b; a = b; b = c; } while (b != 0); Console.WriteLine("Größte gemeinsame Teiler: " + a); }

Es geht mit einer einzigen Code-Zeile: public static int Gcd(int a, int b) => a == 0 ? b : Gcd(b % a, a);
Es genügt eine Code-Zeile:
C#-Code

public static int Gcd(int a, int b) => a == 0 ? b : Gcd(b % a, a);