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);
