>|Sh4d0w|<
Commander
- Registriert
- Jan. 2009
- Beiträge
- 2.489
Hallo Leute, ich erstelle mir gerade einen Bruchrechner, der im momentanen Stadium ersteinmal 2 Brüche dividieren kann. Später erfolgen dann noch switch case Anweisungen.
Ich habe absichtlich eine Struktur angelegt, damit ich Strukturen gleichzeitig mal übe.
So - jetzt zu meinem Problem. Ich habe ersteinmal beide Brüche gegenseitig multiplizert. D. h Zähler1 * Nenner 2 und Nenner1 * Zaehler 2. Diese ergeben dann meine beiden Zwischenvariablen uiZaehlerErg und uiNennerErg. Der Bruch wird später mit Abhängigkeit des Vorzeichens am Ende und gleichzeitig in einer Kommazahl ausgegeben. Jetzt hakt es bei der Kommazahl, denn diese ist immer 0.
gerechnet wird mit:
berechnung.fErgebnis = (1 / berechnung.uiNennerErg) * berechnung.uiZaehlerErg;
Es funktioniert wenn ich z. B eingebe.:
berechnung.fErgebnis = 100 + 10;
Zum testen habe ich mir innerhalb der BerechnungBruch - Methode eine C.WL Ausgabe eingefügt, die die eingegebenenen Werte auch ausgibt, um zu prüfen ob die Variablenwerte richtig übergeben wurden etc. Das geht auch alles!
Wo liegt jetzt der Fehler ? Ich such mittlerweile schon fast ne Stunde rum und ein Schulkollege findet den Fehler ebenfalls nicht.
MfG Alex
Ich habe absichtlich eine Struktur angelegt, damit ich Strukturen gleichzeitig mal übe.
So - jetzt zu meinem Problem. Ich habe ersteinmal beide Brüche gegenseitig multiplizert. D. h Zähler1 * Nenner 2 und Nenner1 * Zaehler 2. Diese ergeben dann meine beiden Zwischenvariablen uiZaehlerErg und uiNennerErg. Der Bruch wird später mit Abhängigkeit des Vorzeichens am Ende und gleichzeitig in einer Kommazahl ausgegeben. Jetzt hakt es bei der Kommazahl, denn diese ist immer 0.
gerechnet wird mit:
berechnung.fErgebnis = (1 / berechnung.uiNennerErg) * berechnung.uiZaehlerErg;
Es funktioniert wenn ich z. B eingebe.:
berechnung.fErgebnis = 100 + 10;
Zum testen habe ich mir innerhalb der BerechnungBruch - Methode eine C.WL Ausgabe eingefügt, die die eingegebenenen Werte auch ausgibt, um zu prüfen ob die Variablenwerte richtig übergeben wurden etc. Das geht auch alles!
Wo liegt jetzt der Fehler ? Ich such mittlerweile schon fast ne Stunde rum und ein Schulkollege findet den Fehler ebenfalls nicht.
MfG Alex
Code:
using System;
using System.Collections.Generic;
using System.Text;
namespace Bruchrechner
{
class Program
{
public struct Bruch
{
public uint uiZaehler1;
public uint uiZaehler2;
public uint uiZaehlerErg;
public uint uiNenner1;
public uint uiNenner2;
public uint uiNennerErg;
public char cVorzeichen1;
public char cVorzeichen2;
public char cVorzeichenErg;
//Für Konvertierung
public string sZaehler1;
public string sZaehler2;
public string sNenner1;
public string sNenner2;
public string sVorzeichen1;
public string sVorzeichen2;
public float fErgebnis;
}
static void Main(string[] args)
{
Console.WriteLine("\t\tBruchrechner");
Console.WriteLine("\t\t============");
Bruch meinBruch = EingabeBruch();
Bruch ausgabeBruch = BerechnungBruch(meinBruch);
AusgabeBruch(ausgabeBruch);
}
static Bruch EingabeBruch()
{
Bruch eing = new Bruch();
//Eingabe 1. Bruch
do
{
Console.WriteLine("1. Bruch");
Console.Write("Vorzeichen des Bruches: ");
eing.sVorzeichen1 = Console.ReadLine();
eing.cVorzeichen1 = Convert.ToChar(eing.sVorzeichen1);
} while (eing.cVorzeichen1 != '-');
Console.Write("Zaehler eingeben: ");
eing.sZaehler1 = Console.ReadLine();
eing.uiZaehler1 = Convert.ToUInt32(eing.sZaehler1);
do
{
Console.Write("Nenner eingeben: ");
eing.sNenner1 = Console.ReadLine();
eing.uiNenner1 = Convert.ToUInt32(eing.sNenner1);
} while (eing.uiNenner1 == 0);
//Eingabe 2. Bruch
Console.WriteLine("\n\n2. Bruch");
Console.Write("Vorzeichen des Bruches: ");
eing.sVorzeichen2 = Console.ReadLine();
eing.cVorzeichen2 = Convert.ToChar(eing.sVorzeichen2);
Console.Write("Zaehler eingeben: ");
eing.sZaehler2 = Console.ReadLine();
eing.uiZaehler2 = Convert.ToUInt32(eing.sZaehler2);
do
{
Console.Write("Nenner eingeben: ");
eing.sNenner2 = Console.ReadLine();
eing.uiNenner2 = Convert.ToUInt32(eing.sNenner2);
} while (eing.uiNenner2 == 0);
return eing;
}
static Bruch BerechnungBruch(Bruch berechnung)
{
berechnung.uiZaehlerErg = berechnung.uiZaehler1 * berechnung.uiNenner2;
berechnung.uiNennerErg = berechnung.uiNenner1 * berechnung.uiZaehler2;
if (berechnung.cVorzeichen1 == '+' && berechnung.cVorzeichen2 == '+')
{
berechnung.cVorzeichenErg = '+';
}
else if (berechnung.cVorzeichen1 == '-' && berechnung.cVorzeichen2 == '-')
{
berechnung.cVorzeichenErg = '+';
}
else if (berechnung.cVorzeichen1 == '+' && berechnung.cVorzeichen2 == '-' || berechnung.cVorzeichen1 == '-' && berechnung.cVorzeichen2 == '+')
{
berechnung.cVorzeichenErg = '-';
}
[B][COLOR="Red"]berechnung.fErgebnis = 1 / berechnung.uiNennerErg * berechnung.uiZaehlerErg;[/COLOR][/B]
//Überprüfung der Variablen
//Console.WriteLine("Z1: " + berechnung.uiZaehler1 + " N1: " + berechnung.uiNenner1 + " Z2: " + berechnung.uiZaehler2 + " N2: " + berechnung.uiNenner2);
Console.WriteLine("Erg: " + berechnung.fErgebnis);
return berechnung;
}
static void AusgabeBruch(Bruch ausgabe)
{
//Überprüfung der Variablen
//Console.WriteLine("Z1: " + ausgabe.uiZaehler1 + " N1: " + ausgabe.uiNenner1 + " Z2: " + ausgabe.uiZaehler2 + " N2: " + ausgabe.uiNenner2 + "Erg :" + ausgabe.fErgebnis);
Console.Write("\n\n\tErgebnis: " + ausgabe.cVorzeichenErg + ausgabe.uiZaehlerErg + "/" + ausgabe.uiNennerErg);
Console.Write(" oder " + ausgabe.cVorzeichenErg + ausgabe.fErgebnis);
Console.WriteLine("\n\t==========================");
Console.ReadKey();
}
}
}