Winkelumrechner

cpuman990

Cadet 4th Year
Registriert
Juli 2014
Beiträge
89
Hallo zusammen,

die Aufgabe besteht darin einen Winkelumrechner zu programmieren. Mithilfe von Visual Studio und einer relativ verschachtelten switch-case Struktur habe ich die Methode umrechnen erstellt. In dieser Methode Umrechnen werden wiederum zuvor definierte Methoden aufgerufen (zb. GradZuGon etc.). Diese Methoden haben wiederum einen Eingangsparameter (z.B. double grad). Das Problem besteht nun darin , dass wenn ich die Variable dblErgebnis = GradzuGon(double grad) in der Methode Umrechnen setze, die Fehlermeldung "der Name grad ist im aktuellen Kontext nicht vorhanden " kommt. Wahrscheinlich ist die Lösung relativ banal, bin leider noch Neuling im programmieren.

Das wäre der Quellcode
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace GDI_Hausübung_1
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public string strWinkel;
        public string strEingabe;
        public string strAusgabe;
        public double dblWinkel;
        public double dblErgebnis;


        public MainWindow()
        {
            InitializeComponent();
            strWinkel = "";
            strEingabe = "";
            strAusgabe = "";
            dblWinkel = 0;
            dblErgebnis = 0;


        }
        public double GradZuRadient(double grad)
        {
            double lokalRadient;
            lokalRadient = grad * Math.PI / 180;
            return lokalRadient;
        }
        public double GradZuGon(double grad)
        {
            double lokalGon;
            lokalGon = grad * 200 / 180;
            return lokalGon;
        }
        public double RadientZuGrad(double radient)
        {
            double lokalGrad;
            lokalGrad = radient * 180 / Math.PI;
            return lokalGrad;
        }
        public double RadientZuGon(double radient)
        {
            double lokalGon;
            lokalGon = 200 * radient / Math.PI;
            return lokalGon;
        }
        public double GonZuGrad(double gon)
        {
            double lokalGrad;
            lokalGrad = gon * 180 / 200;
            return lokalGrad;

        }
        public double GonZuRadient(double gon)
        {
            double lokalRadient;
            lokalRadient = gon * Math.PI / 200;
            return lokalRadient;
        }
        public string EingangsEinheit()
        {
            string lokalText;
            lokalText = "";
            if (radiobuttongrad.IsChecked == true)
            {
                lokalText = "grad";
            }
            if (radiobuttongon.IsChecked == true)
            {
                lokalText = "radient";
            }
            if (radiobuttongon.IsChecked == true)
            {
                lokalText = "gon";
            }
            return lokalText;
        }
        public string AusgangsEinheit()
        {
            string lokalText;
            lokalText = "";
            if (radiobuttongrad1.IsChecked == true)
            {
                lokalText = "grad";
            }
            if (radiobuttonradient1.IsChecked == true)
            {
                lokalText = "radient";
            }
            if (radiobuttongon1.IsChecked == true)
            {
                lokalText = "gon";
            }
            return lokalText;
        }
        public void Umrechnen(double value)
        {
            strEingabe = EingangsEinheit();
            strAusgabe = AusgangsEinheit();



            switch (strEingabe)
            {
                case "grad":
                    switch (strAusgabe)
                    {
                        case "grad":
                            dblErgebnis = value;
                            break;
                        case "gon":
                            dblErgebnis = GradZuGon(double grad);
                            break;
                        case "radient":
                            dblErgebnis = GradZuRadient(double grad);
                            break;
                    }
                    break;
                case "gon":
                    switch (strAusgabe)
                    {
                        case "grad":
                            dblErgebnis = GonZuGrad(double gon);
                            break;
                        case "gon":
                            dblErgebnis = value;
                            break;
                        case "radient":
                            dblErgebnis = GonZuGrad(double gon);
                            break;
                    }
                    break;
                case "radient":
                    switch (strAusgabe)
                    {
                        case "grad":
                            dblErgebnis = RadientZuGrad(double radient);
                            break;
                        case "gon":
                            dblErgebnis = RadientZuGon(double radient);
                            break;
                        case "radient":
                            dblErgebnis = value;
                            break;
                    }

                    break;
            }
        }
        public void AnzeigenUmrechnung()
        {
            labelErgebnis.Content = textboxeingabe.Text + EingangsEinheit() + " ergibt " + dblErgebnis + AusgangsEinheit();

        }
    }
}
Danke im Voraus !
 
Zuletzt bearbeitet:
Pack dein Code in [CODE][/CODE] Klammern, so macht das kein Spaß zu lesen ...
 
Alles klar !
Nur vorweg die grafische Oberfläche (MainWindow.xaml) habe ich nicht aufgeführt, bzw den Quellcode von dieser, sollte aber auch erst nicht von bedeutung sein.
 
cpuman990 schrieb:
Das Problem besteht nun darin , dass wenn ich die Variable dblErgebnis = GradzuGon(double grad) in der Methode Umrechnen setze, die Fehlermeldung "der Name grad ist im aktuellen Kontext nicht vorhanden " kommt. Wahrscheinlich ist die Lösung relativ banal, bin leider noch Neuling im programmieren.
cpuman990 schrieb:
case "gon": dblErgebnis = GradZuGon(double grad); break;

Sowas geht ja auch gar nicht. woher soll die Methode denn double grad überhaupt kennen? Du definierst eine Variable als Parameter von einer Methode, von der du ein Ergebnis erwartest, ohne überhaupt etwas reinzustecken. Das macht so keinen Sinn. Generell solltest du die Umrechnen-Methode umwandeln denk ich, die ist so nicht schön. Arbeite z. B. mit einer Enum-Variable für den Eingabetyp und einer für den Ausgabetyp a la
C#:
var eingabe = GetEingabeTyp() mit GUI-Bezug... => Typen.Grad

var ausgabe = GetAusgabeTyp() mit GUI-Bezug... => Typen.Radiant
Dann machst du eine Methode wie folgt: double Umrechnen(Typen eingTyp, Typen ausgTyp, double value), und in der wird anhand der Typen umgerechnet sowie das Ergebnis zurückgegeben, mit dem du dann machen kannst was du willst (zurück in die GUI z. B.)
 
hm, wir haben eine anleitung bekommen (textlich), in welcher steht, dass dem Attribut dblErgebnis der Rückgabewert der Methode ... zugewiesen werden soll. Die Umrechnungsmethoden waren auch so beschrieben. Ist es denn icht möglich das so mit der Methode Umrechnen zu machen ? Oder muss man diese Parameter explizit definieren im Methodenkopf von Umrechnen ? Es wurde nämlich explizit angegeben, dass die Methode Umrechnen einen Übergabeparameter vom typ double erwartet, welcher value genannt werden soll (also keine weiteren?!). strEingabe und strAusgabe sollte dann der Rückgabewert von eingangsEinheit und ausgangsEinheit zugewiesen werden.
 
cpuman990 schrieb:
hm, wir haben eine anleitung bekommen (textlich), in welcher steht, dass dem Attribut dblErgebnis der Rückgabewert der Methode ... zugewiesen werden soll. Die Umrechnungsmethoden waren auch so beschrieben. Ist es denn icht möglich das so mit der Methode Umrechnen zu machen ? Oder muss man diese Parameter explizit definieren im Methodenkopf von Umrechnen ? Es wurde nämlich explizit angegeben, dass die Methode Umrechnen einen Übergabeparameter vom typ double erwartet, welcher value genannt werden soll (also keine weiteren?!). strEingabe und strAusgabe sollte dann der Rückgabewert von eingangsEinheit und ausgangsEinheit zugewiesen werden.

Ja geh halt mal zum Tutor, der erklärt dir wie es gedacht ist und im Zweifel einfach drei Bier ausgeben. Meiner, du warst offensichtlich nicht zum Unterricht, da bleibt dir nur Tutor oder Prof, und ich wüsste wen ich bearbeite ;)

Zum Thema: völlig sinnfrei hier Code auseinandernehmen zu wollen, die Anforderung aus dritter Hand kann keiner raten!
 
@cpuman990 Dann pass einfach die Methodenparameter an und es sollte gehen. Du darfst halt nicht noch mal neu im Methodenaufruf definieren wie du es da tust mit double radient oder so. Du willst ja die value umwandeln also gibst du in die Umrechnungsmethoden value rein und bekommst dort dann das Ergebnis raus, fertig. Auch wenn ich die Umsetzung besser machen würde, aber wenn das nicht der Aufgabe entspricht ist es halt so. Für den Anfang ist es ja voll okay :) Dachte nicht, dass die Aufgabe so limitierend ist, das war nicht so eindeutig im Ausgangspost.
 
Ja, wir haben quasi eine art leitfaden bekommen ;)Wenn ich die 6 Methoden mit zb (double grad) definiert habe und dann in der Methode Umrechnen verwende, muss ich dann quasi in die () der jeweiligen Methode einfach value setzen ?
 
Jap, ist ja der Übergabeparameter. Beispiel:
C#:
// Deklaration der Methode
double Add(double value1, double value2){
    return value1 + value2;
}

// Verwendung
public void main(args){
    Console.WriteLine(Add(1.0,2.5));
}

Für dein Beispiel bedeutet das: du hast value als Eingabeparameter, der umgerechnet werden soll, und der muss für jede deiner Methoden einheitlich verständlich sein. Was die dann damit machen (also Grad, Radiant, whatever zurückgeben) ist ja erstmal egal, der Wert muss da rein sonst rechnest du ja auch nichts um.
 
Es sind zwei Fehler.
Der eine ist der syntaktische falsche Funktionsaufruf mit foo(double grad)
Der andere, dass die Variable grad, eh gar nicht definiert ist.
Dem Kontext nach würde ich davon ausgehen, dass in die Variable value übergeben werden muss.
Also alles Aufrufe nach Schema foo(value)
 
Alles klar danke ! wenn ich jetzt in die Funktionen einfach value einsetze, dann funktioniert der Code !
Vielen Dank !
 
  • Gefällt mir
Reaktionen: mambokurt und Nero1
Wie ist der Altgrad-Winkel angegeben ? Normalerweise rechnet man dort mit ° ' " (Grad, Minuten und Sekunden). 60" = 1' , 60' = 1°. Es ist nicht üblich die Grad mit Dezimalstellen anzugeben.
Bei den Neugrad gilt das Dezimalsystem, also 100 Neu" = 1 Neu' und 100 Neu' = 1 Neu°.
Außerdem sind die Richtungen der Winkel Alt-/Neu-Grad unterschiedlich.
Alt-Grad : entgegen dem Uhrzeigersinn
Neu-Grad : im Uhrzeigesinn

Sollen diese Aspekte in die Berechnung einfließen ?
Alt-Grad als Grad, Minuten, Sekunden ( Sekunden ggf. mit Dezimalstellen). Die Richtung ggf. als Vorzeichen oder als Extra-Variable.

Die Richtung beim Bogenmaß entspricht der Altgrad-Richtung.

GradGon.png
 

Ähnliche Themen

W
  • Gesperrt
  • Frage
2 3
Antworten
45
Aufrufe
2.639
Antworten
10
Aufrufe
760
Antworten
5
Aufrufe
864
Zurück
Oben