Autor Beitrag
I027
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 29.05.12 16:32 
Hallo zusammen,
ich habe vor kurzem angefangen mich als Programieranfänger an C# als Einstieg heranzuwagen. Ich habe mir nun eine kleine Konsolenanwendung geschrieben, die mir aus 2 Zahlen eine Berechnung machen soll. Darin enthalten ist folgenden Methode:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
static int eingabeZahl()
        {
            int i = 1;
            while ( i <= 2 )
            {
                Console.WriteLine("Bitte geben Sie die " + i + ". Zahl ein");
                break;
            }
            i++;
            int eingegebeneZahl = System.Convert.ToInt32(Console.ReadLine());
            return eingegebeneZahl;
        }

Die Methode soll wenn Sie das erste mal ausgeführt wird, für i den Wert 1 annehmen und beim zweiten Aufruf der Methode den Wert 2. Aktuell ist es so, das ich immer die Ausgabe "Bitte geben Sie die 1. Zahl ein" bekomme und nicht wie gewünscht beim zweiten Aufruf "Bitte geben Sie die 2. Zahl ein".

Kompletter Code:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.Title = "NICO's Taschenrechner";

            int ergebnis = 0;

            Console.WriteLine("Was möchten Sie tun? - Bitte Zahl Eingeben!:");
            Console.WriteLine("Addieren(1)");
            Console.WriteLine("Subtrahieren(2)");
            Console.WriteLine("Multiplizieren(3)");
            Console.WriteLine("Dividieren(4)");

            int eingabe = System.Convert.ToInt32(Console.ReadLine());

            int zahl1 = eingabeZahl();
            int zahl2 = eingabeZahl();
            
            if (eingabe == 1)
            {
                ergebnis = zahl1 + zahl2;
            }
            else if (eingabe == 2)
            {
                ergebnis = zahl1 - zahl2;
            }
            else if (eingabe == 3)
            {
                ergebnis = zahl1 * zahl2;
            }
            else if (eingabe == 4)
            {
                ergebnis = zahl1 / zahl2;
            }
            else
            {
                Console.WriteLine("Ungültige Eingabe!");
            }

            Console.WriteLine("Das Ergebnis ist: " + ergebnis);

            Console.ReadLine();
        }
        static int eingabeZahl()
        {
            int i = 1;
            while ( i <= 2 )
            {
                Console.WriteLine("Bitte geben Sie die " + i + ". Zahl ein");
                break;
            }
            int eingegebeneZahl = System.Convert.ToInt32(Console.ReadLine());
            i++;
            return eingegebeneZahl;
        }
    }
}


Ich hoffe ich konnte einigermaßen klar machen, was ich machen möchte


Moderiert von user profile iconTh69: Topic aus WinForms verschoben am Di 29.05.2012 um 21:11
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 29.05.12 16:47 
Hallo und :welcome:!

Das i++ steht nicht innerhalb der Schleife :-)

Grüße,
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".

Für diesen Beitrag haben gedankt: I027
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 29.05.12 17:36 
Hallo,

auch das alleine wird nicht helfen, denn die Schleife ist wegen dem break so auch ziemlich sinnlos.

Besser ist es den Index als Parameter zu übergeben:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
static int eingabeZahl(int index)
{
    Console.WriteLine("Bitte geben Sie die " + index + ". Zahl ein");

    // ...
}

Für diesen Beitrag haben gedankt: I027
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 29.05.12 20:09 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
static int eingabeZahl()
        {
            int i = 1;
            while ( i <= 2 )
            {
                Console.WriteLine("Bitte geben Sie die " + i + ". Zahl ein");
                break;
            }
            i++;
            int eingegebeneZahl = System.Convert.ToInt32(Console.ReadLine());
            return eingegebeneZahl;
        }


i wird hier immer als 1 fest gelegt und das wird sich auch nicht ändern.
Entweder, du gibst i als Parameter der Methode, oder du erstellt eine Klasse mit einer globalen Variable i.
Die erst Variante ist in diesem Fall sinnvoller.

Die while-Schleife "missbrauchst" du hier als if-Abfrage.
Die Schleife soll immer so lange laufen, bis i nicht mehr kleiner oder gleich 2 ist, da du die Schleife aber sofort abbrichst, läuft die sowieso nicht weiter, egal was für ein Wert i hat.
Es funktioniert zwar, ist aber schlecht programmiert, deshalb formuliere es so:

ausblenden C#-Quelltext
1:
2:
3:
4:
if (i <= 2)
{
    Console.WriteLine("Bitte geben Sie die " + i + ". Zahl ein");
}


Das hat den selben Effekt und ist auch leichter zu verstehen, nämlich so:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
WENN (Bedingung)
{
    Tue etwas
}
SONST
{
    Tue etwas
}


Also im Endeffekt so:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
if (Bedingung)
{
}
else
{
}


Das i++ steht da auch sinnlos rum.
Wenn es einen Effekt haben soll, dann muss es in der Schleife (ohne break) stehen, aber dann zählt sie einfach so und es wird keine Eingabe abgefragt. Daher kann das eigentlich ganz verschwinden.

Der Rest ist soweit ok.



Zu deinem Programm:
Dort ist bisher alles korrekt. Mein erstes Rechner-Programm habe ich allerdings anders geschrieben und zwar habe ich für jede Operation eine Methode erstellt, die sowohl Eingabe, als auch Berechnung erledigt.
Das hat den Vorteil, dass ich für jede Operation einen passenden Text angeben kann, wie z.B. "Geben sie bitte den ersten Summanden ein:"


Deine Variante geht aber auch, allerdings musst du die Methode da zwei mal aufrufen.
Wenn ich eine solche Methode schreibe, dann würde ich das wie folgt machen:

Eine Zähl-Schleife zählt einfach von 1 bis 2. Die Syntax sieht so aus:

ausblenden C#-Quelltext
1:
2:
3:
for (int i = START; i < Start; i++)
{
}


i muss dabei kein integer sein, allerdings ist das die hauptsächliche Verwendungsart.
Danach steht die Bedingung, die angibt, bis wann gezählt wird. Es ist egal, was da steht, es muss aber eine Bedingung sein und deinen Ansprüchen genügen. Pass dabei auf, dass du keine Endlos schleife erstellst.
Und als letztes steht, wie gezählt wird. Wenn du schreibst i = i + 2 dann zählt die Schleife in zweier-Schritten. i = i + 1 ist das gleiche, wie i++.

Du erstellst also eine Schleife, die bei 0 beginnt und bei solange zählt, wie i kleiner 2 ist.
Und dazwischen fügst du dann deinen Text ein, der ausgegeben werden soll.
Warum die Schleife bei 0 beginnt und nur bis 1 zählen darf, kommt gleich.

Die Zahlen müssen aber auch noch gespeichert werden und das würde ich mit einem Array machen.
Wenn du Arrays noch nicht kennst, eine kleine Erklärung:
Ein Array ist eine Sammlung von Variablen mit dem gleichen Typ.
Die Syntax sieht so aus:
ausblenden C#-Quelltext
1:
TYP[] VariablenName = new TYP[LängeDesArrays];					

In deinem Fall reicht ein Array vom Typ i und der Länge 2, also das:
ausblenden C#-Quelltext
1:
int[] zahlen = new int[2];					

Da passen nun zwei Zahlen rein.

Aufgerufen werden sie so:
ausblenden C#-Quelltext
1:
TYP[INDEX]					

Damit kannst du dann die Variable ändern oder ausgeben lassen.

Was das nun bringt:
Du kannst dieses Array als ganzes ausgeben und im eigentlichen Programm ganz einfach abfragen.
Allerdings musst du dabei beachten, dass der Computer immer mit 0 anfängt, zu zählen.
Wenn du zwei Elemente hast, gibt es also entweder zahlen[0] oder zahlen[1].

Was du also machst, ist folgendes:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
for (int i = 0; i < 2; i++)
{
    Console.WriteLine("Geben sie die " + (i + 1) + "te Zahl ein:");
    zahlen[i] = Convert.ToInt32(Console.ReadLine());
}


Da hat die Schleife zwei Aufgaben:
1. Zeigen, welche Zahl gesucht ist
2. Das Array an der richtigen Stelle mittels Index aufrufen.
Im Text hab ich (i + 1) geschrieben, weil der PC ja bei 0 beginnt, zu zählen, wir aber bei 1.


Nun wird als zwei mal gefragt, welche Zahl. Dabei wird gezeigt, welche Zahl gebraucht wird und die eingeben Zahl wird in ein Array gespeichert.
Dieses Array müssen wir dann noch mit return zurück geben (vorher noch den Rückgabetyp auf int[] setzen) und können die Zahlen dann auswerte. Beispiel:

ausblenden C#-Quelltext
1:
ergebnis = zahlen[0] + zahlen[1];					



Die komplette Methode sieht also so aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
static int[] GetNumbers()
{
    int[] zahlen = new int[2];

    for (int i = 0; i < 2; i++)
    {
        Console.WriteLine("Geben sie die " + (i + 1) + "te Zahl ein:");
        zahlen[i] = Convert.ToInt32(Console.ReadLine());
    }

    return zahlen;
}


Im Programm sieht das dann so aus:

ausblenden C#-Quelltext
1:
2:
int[] zahlen = GetNumbers();
ergebnis = zahlen[0] + zahlen[1];





Hab jetzt mehr geschrieben, als nötig, aber gerade Arrays sind ständig sehr wichtig in der Programmierung, und alles andere, was ich erklärt hab, auch, deshalb hab ich mir mal die Arbeit gemacht^^

Lies das Buch:
openbook.galileocomp...sharp_2010/index.htm

Was da nicht drin steht, brauchst du auch nicht^^
Ist kostenlos und sehr gut erklärt, eigentlich ein Buch, was neben sehr guten Erklärungen und ausreichend Grundwissen gleich noch Beispiele liefert.
Zu Kaufen gibts das auch, dann hast du das halt als Buch mit CD, auf der die Programme sind, aber ich habs bis jetzt noch nicht gebraucht.

Wenn du also wirklich programmieren lernen willst, lies das. Es liest sich gut, hätte ich auch erst nicht gedacht^^



Ach und noch was:
Ist das nicht das falsche Forum für so Fragen? ^^
Solche Fragen bitte zukünftig hier rein:
www.c-sharp-forum.de...technologien_82.html
ok?

Für diesen Beitrag haben gedankt: I027
I027 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 30.05.12 08:28 
Wow, vielen lieben Dank für die tollen und ausführlichen Antworten. Ich werde das Ganze mal mit Hilfe eurer Vorschlägen versuchen zu "optimieren" und werde dann den kompletten Code nochmal posten. :zustimm:

Grüße Nico
I027 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 30.05.12 09:40 
So, habe das Ganze jetzt mal entsprechen mit euren Vorschlägen bearbeitet und mit Kommentaren versehen. In den Kommentaren habe ich es so hingeschrieben wie ich es verstanden habe, vielleicht könnt ihr da nochmal drüber schauen ;-).

Im Nächsten Schritt werde ich dann mal wie von Paladin700 vorgeschlagen für jede Berechnung eine eigene Methode erstellen.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.Title = "NICO's Taschenrechner";

            int ergebnis = 0;

            Console.WriteLine("Was möchten Sie tun? - Bitte Zahl Eingeben!:");
            Console.WriteLine("Addieren(1)");
            Console.WriteLine("Subtrahieren(2)");
            Console.WriteLine("Multiplizieren(3)");
            Console.WriteLine("Dividieren(4)");

            int eingabe = System.Convert.ToInt32(Console.ReadLine());

            int[] meineZahlen = eingabeZahlen(); //Hier wird ein neues Array "meineZahlen" mit den Zahlen aus dem Array "zahlen" der Methode "eingabeZahlen" befüllt
    
            if (eingabe == 1)
            {
                ergebnis = meineZahlen[0] + meineZahlen[1];
            }
            else if (eingabe == 2)
            {
                ergebnis = meineZahlen[0] - meineZahlen[1];
            }
            else if (eingabe == 3)
            {
                ergebnis = meineZahlen[0] * meineZahlen[1];
            }
            else if (eingabe == 4)
            {
                ergebnis = meineZahlen[0] / meineZahlen[1];
            }
            else
            {
                Console.WriteLine("Ungültige Eingabe!");
            }

            Console.WriteLine("Das Ergebnis ist: " + ergebnis);

            Console.ReadLine();
        }
        static int[] eingabeZahlen() //Gibt durch die Klammern an, das ein Array ausgegeben werden soll
        {
            int[] zahlen = new int[2];  //Erstellt ein Array mit 2 "Werten"

            for (int i = 0; i < 2; i++) //Schleife wird ausgeführt, solande i kleiner als 2 ist
            {
                Console.WriteLine("Bitte geben sie die " + (i + 1) + ". Zahl ein"); //i ist am Anfang 0 und wird um 1 erhöht, also ist i im ersten Durchlauf 1
                zahlen[i] = System.Convert.ToInt32(Console.ReadLine()); //Im ersten Durchlauf wird die Eingabe im Array auf der Position zahlen[0] gespeichert, beim zweiten Durchlauf wird die Eingabe auf der Position zahlen[1] gespeichert
            }
            return zahlen; //Das Komplette Array mit dem Namen "zahlen" wird zurück gegeben.
        }
    }
}
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mi 30.05.12 17:05 
Stimmt soweit. Aber das war ja hauptsächlich nur kopieren^^


Ich kann hier ja gleich mal einen kleinen Mini-Crash-Kurs aufziehen und dann fang ich gleich mal so an:


  1. Sorge dafür, dass die Eingabe immer Fehlerlos von Statten geht. Wenn du einen Buchstaben eingibst, würde das bei der Eingabe grundsätzlich zum Absturz des Programms führen.
    Tipp: Schu nicht, ob die richtige Zahl, sondern das richtige Zeichen eingegeben wurde.
  2. Sorge dafür, dass das Programm nicht nach jeder Anwendung neu gestartet werten muss.
    Tipp: Schau dir dazu die do-while-Schleife an, die macht genau das, wenn du weißt, wie ^^
  3. Die Überprüfung, welche Option gewählt wurde, lässt sich viel schöner gestalten und ist auch einfacher, zu erweitern, wenn du die switch-Anweisung nutzt. Die ist deiner if-else-Variante im Grunde um nix überlegen, ist (meiner Meinung nach) aber übersichtlicher und lässt sich deutlich einfacher erweitern. Außerdem erspart die (besonders im Zusammenhang mit Visual Studio) bei der Arbeit mit Enumerationen (Klassen-ähnliche Sammlungen von ganz einfachen Werten. Kommt später noch) eine ganze Menge Schreibarbeit. Sprich: Visual Studio schreibt für dich ^^
  4. Schaffst du es, dass, egal was passiert, das Konsolen-Fenster immer schön gestaltet bleibt? Titel reicht da erst mal, aber der muss immer oben sein und alles unnütze soll gelöscht werden.
    Tipp: Für die Kopfzeile ist ne Methode, die das schreibt, ganz praktisch. Und die Methode Console.Clear() löscht den Fenster-Inhalt.
    Als Beispiel:
    ausblenden C#-Quelltext
    1:
    oOo...Kleiner Rechner...oOo // <- Das ist die Kopfzeile und ist immer an der oberen Kante.					



Denk mal eine Weile darüber nach.
Das sind alles ganz einfache Aufgaben und eigenen sich besonders gut zum üben der Syntax von C# und zu verstehen, wie diese Sprache arbeitet. Denn beim Programmieren kannst du nicht gerade aus denken, wie im realen Leben, du musst abstrakt denken und verstehen, wie der Compiler alles versteht. Wenn du dann noch die Objektorientierte Programmierung gut beherrschst, stehen dir im Prinzip alle Türen offen. ^^

Ein Hinweis: Ein Freund von mir ist ziemlich fix im Umgang mit Webdesign, also HTML, PHP, CSS und auch serverbezogene Datenbanken. Er ist gerade erst von der Schule runter und die Arbeitgeber reißen sich um ihn. ^^
Gute Programmierer, die nebenbei noch jung und lernwillig sind (und sich manipulieren lassen) sind nun mal rar^^

Wenn du vor hast, dich selbstständig zu machen, dann kann man damit auch eine gaaaaanze Menge Geld machen, voraus gesetzt, die Firmen wissen, dass du gut bist.

Also häng dich rein, es schadet nicht, liefert Grundwissen über praktisch alle Software-Bereiche (hab ne grobe Theorie, wie Skyrim programmiert wurde :D), du förderst logisches Denken und auch die Fähigkeit, abstrakte und teilweise sehr komplizierte Sachverhalte zu verstehen, zu analysieren und damit zu arbeiten, etc.

Ach ja, das lese ich grad:
openbook.galileocomp...sharp_2010/index.htm
Vielleicht hab ich es schon erwähnt, vielleicht auch nicht ^^
Ist sehr gut, das Buch^^
Ich bin grad bei Kapitel 10 angekommen und hab damit den grundlegenden Teil für C# im Prinzip abgeschlossen.
Die Kapitel 8 und 9 schleppen sich zwar etwas (Bei 8. wusste ich 3/4 schon :D) und 9. ist über das Debugging, wo ich weiß, dass ich das bei meinen Projekten noch gar nicht in so großem Umfang brauche.

Lies dich ein, es liest sich erstaunlich gut^^

Für diesen Beitrag haben gedankt: I027
I027 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 31.05.12 09:16 
Ich muss sagen, das ich programmieren auch wirklich sehr spannend finde und es kein langweiliges "rumgehacke" ist wie manche einem weiß machen wollen.
Ich danke dir auf jedenfall schon mal sehr für deine Hilfe und werde mich sobald es zeitlich klappt gleich an deine "Aufgaben" machen :zustimm: .

Grüße,
Nico
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Do 31.05.12 12:35 
Hätte ich auch nicht gedacht, bis ich angefangen habe :D

Und heute ist das ein besserer Zeitvertreib als Skyrim zocken :D

Und dazu kommt noch der Stolz, wenn man was neues lernt und anwenden kann oder ein Programm fertig bekommt und es funktioniert.
Das kann einem kein Spiel bieten.

Ganz abgesehen davon hat mal halt auch komplett freie Hand und das gefällt mir auch^^ Und da bietet sich C# auch gerade gut an, weil die Sprache verhältnismäßig leicht ist und trotzdem extrem viel bietet.



Find ich gut, dass du dich da rein hängst, deswegen helfe ich auch so aktiv^^

Mir passt es auch nicht, was andere sagen. Letztens, z.B. im Geschichte-Unterricht waren wir im Computer-Raum, sollten an Vorträgen arbeiten. Ich war fertig und hab mir meine Zeit mit Java vertrieben, im BlueJ, was jeder aus Info kennt.
Die Reaktion: "Der programmiert ja schon wieder. Das ist doch krank!"
Ich kapier nicht, was daran krank ist. Das schult so viele Fähigkeiten de Gehirns und ist auf jeden Fall sinnvoller, als sich das Hirn kaputt zu saufen.
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Fr 01.06.12 02:05 
Nun, eine Sache hast du daraus definitiv gelernt:

Solche Typen sind nicht wirklich für eine Freundschaft deinerseits geeignet ;)

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 01.06.12 14:27 
Stimmt auch wieder :D

Sind ja auch nur Mitschüler. Unwichtige Subjekte, die ignoriert werden können. :D

Für diesen Beitrag haben gedankt: I027
I027 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 08.06.12 14:20 
Da bin ich wieder :)

Habe jetzt endlich mal ein wenig Zeit gehabt mich der Ganzen Sache etwas anzunehmen. Es wäre toll wenn du über meine Lösungsansätze mal drüber schauen könntest. Punkt 4. habe ich bisher leider nicht hinbekommen, hier suche ich noch nach einer Möglichkeit den Inhalt der Methode "kopfzeile" soweit schreibgeschützt zu machen, das Console.Clear den Inhalt nicht löschen kann :? .

Feedback erwünscht! :D :

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Code wird ausgeführt, bis "e" = true ist und somit "x" gedrückt wurde und das Programm damit beendet wird: 
            bool e = false;
            do
            {
                Console.Clear();
                kopfzeile();
                Console.WriteLine("Was möchten Sie tun? - Bitte Zahl Eingeben!:");
                Console.WriteLine("Addieren         (1)");
                Console.WriteLine("Subtrahieren     (2)");
                Console.WriteLine("Multiplizieren   (3)");
                Console.WriteLine("Dividieren       (4)");

                //Schleife wird ausgeführt, bis eine Zahl eingeben wird und somit "istZahl" = true ist:
                bool istZahl = false;
                int eingabe = 0;
                while (istZahl == false)
                {
                    Console.WriteLine("Bitte wählen Sie die Rechenmethode:");

                    //Prüfe ob "eingabeString" sich in eine Zahl konvertieren lässt:
                    string eingabeString = System.Convert.ToString(Console.ReadLine());
                    //Text in der Console löschen:
                    Console.Clear();
                    //Kann die Zahl umgewandelt werden, ist die Zahl true und wird diese in "eingabe" geschrieben, ansonsten ist "result" false:
                    bool result = Int32.TryParse(eingabeString, out eingabe);
                    if (result == true)
                    {
                        istZahl = true;
                    }
                    else
                    {
                        Console.WriteLine("Konvertierung fehlgeschlagen, bitte verwenden Sie eine Zahl zur Eingabe!");
                    }
                }

                //Hier wird ein neues Array "meineZahlen" mit den Zahlen aus dem Array "zahlen" der Methode "eingabeZahlen" befüllt
                int ergebnis = 0;
                int[] meineZahlen = eingabeZahlen();

                switch (eingabe)
                {
                    case 1:
                        ergebnis = meineZahlen[0] + meineZahlen[1];
                        break;
                    case 2:
                        ergebnis = meineZahlen[0] - meineZahlen[1];
                        break;
                    case 3:
                        ergebnis = meineZahlen[0] * meineZahlen[1];
                        break;
                    case 4:
                        ergebnis = meineZahlen[0] / meineZahlen[1];
                        break;
                    default:
                        Console.WriteLine("Falsche Eingabe!");
                        break;
                }

                Console.WriteLine("Das Ergebnis lautet: " + ergebnis);
                Console.WriteLine();
                Console.WriteLine("zum beenden x drücken, ansonsten ENTER oder beliebige TASTE");
                string ende = System.Convert.ToString(Console.ReadLine());
                if (ende == "x")
                {
                    e = true;
                }

            } while (e == false); 
        }
        static int[] eingabeZahlen() //Gibt durch die Klammern an, das ein Array ausgegeben werden soll
        {
            int[] zahlen = new int[2];  //Erstellt ein Array mit 2 "Werten"

            for (int i = 0; i < 2; i++) //Schleife wird ausgeführt, solande i kleiner als 2 ist
            {
                Console.WriteLine("Bitte geben sie die " + (i + 1) + ". Zahl ein"); //i ist am Anfang 0 und wird um 1 erhöht, also ist i im ersten Durchlauf 1
                zahlen[i] = System.Convert.ToInt32(Console.ReadLine()); //Im ersten Durchlauf wird die Eingabe im Array auf der Position zahlen[0] gespeichert, beim zweiten Durchlauf wird die Eingabe auf der Position zahlen[1] gespeichert
                Console.Clear();
            }
            return zahlen; //Das Komplette Array mit dem Namen "zahlen" wird zurück gegeben.
        }
        private static void kopfzeile()
        {
            string kopf = "oOoOo...TASCHENRECHNER 1.0...oOoOo";
            Console.WriteLine(kopf);
            Console.WriteLine();
        }
    }
}
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 08.06.12 16:05 
Ich schau es mir heute Abend, oder Morgen an.
Muss noch unter die Dusche, dann gehts Partiiii machen :D
I027 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 08.06.12 16:25 
user profile iconPalladin007 hat folgendes geschrieben Zum zitierten Posting springen:
Ich schau es mir heute Abend, oder Morgen an.
Muss noch unter die Dusche, dann gehts Partiiii machen :D


Lass dir ruhig Zeit, und viel Spaß :)
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 08.06.12 23:34 
ausblenden C#-Quelltext
1:
bool e = false;					

Man sollte möglichst "sprechende" Variablen-Namen nehmen, also Namen, anhand denen man sofort weiß, was die Aufgabe ist.

ausblenden C#-Quelltext
1:
string eingabeString = System.Convert.ToString(Console.ReadLine());					

Diese Zeile, die prüft gar nichts.
Die ToString-Funktion, die konvertiert bloß einen Wert in einen Text und mehr nicht, da ReadLine aber sowieso einen Text, also String, zurück gibt, ist das überflüssig.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
bool result = Int32.TryParse(eingabeString, out eingabe);
                    if (result == true)
                    {
                        istZahl = true;
                    }
else
                    {
                        Console.WriteLine("Konvertierung fehlgeschlagen, bitte verwenden Sie eine Zahl zur Eingabe!");
                    }

Das ist soweit richtig, allerdings kannst du eigentlich auch gleich in die Variable istZahl speichern. Dann sähe das so aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
istZahl = Int32.TryParse(eingabeString, out eingabe);
                    if (istZahl == false)
                    {
                        Console.WriteLine("Konvertierung fehlgeschlagen, bitte verwenden Sie eine Zahl zur Eingabe!");
                    }


Wenn du das dann mal anschaust, passiert das gleiche, allerdings sparst du dir einen else-Block und eine Variable.


Ja, der switch-Block.
Das funktioniert so ja alles ganz gut, aber die Kontrolle, ob eine richtige Wahl getroffen wurde, die müsste vorher kommen, oder nach dem default im switch-Block baust du ein, dass die Frage erneut gestellt wird. Ich würde die Kontrolle der Zeichen gleich in der do-while-Schleife erledigen und das Konvertieren in eine Zahl weg lassen. Wenn du da gleich überprüfst, ob das richtige Zeichen eingegeben wurde, dann steht fest, dass auch unter keinen Umständen ein falsches Zeichen eingegeben werden kann.



Die Möglichkeit, das Programm zu beenden, steht jetzt am Ende.
Das geht so auch ganz gut, allerdings würde ich die gleich in das Menü schreiben, weil man sonst erst eine Rechnung durchführen muss um zu beenden. Das ist nicht notwendig und bei dem Umfang würde das auch nicht stören, aber schließlich sind Programme für den Nutzer, also solltest du schauen, die möglichst Nutzer-Freundlich zu gestalten. Am besten so, dass der Nutzer gar nicht mehr denken muss, denn dann ist er glücklich :D


user profile iconI027 hat folgendes geschrieben Zum zitierten Posting springen:
Punkt 4. habe ich bisher leider nicht hinbekommen, hier suche ich noch nach einer Möglichkeit den Inhalt der Methode "kopfzeile" soweit schreibgeschützt zu machen, das Console.Clear den Inhalt nicht löschen kann :? .



Das ist ganz einfach^^
Immer nach jeder Aktion wird das Fenster gelöscht. Wie das geht, weißt du ja.
Und immer, wenn das Fenster gelöscht wird, kommt als erstes die Kopfzeile hin^^
Das Fenster löschen kannst du eigentlich dann ja auch bei Kopfzeile mit einbauen, dann ersparst du dir Schreib-Arbeit.