Entwickler-Ecke

Basistechnologien - Ungerade und Gerade Summen


TheSoul - Mo 24.08.09 13:46
Titel: Ungerade und Gerade Summen
Hallo zusammen.

Ich bin neu hier und befasse mich seit kurzem durch die Schule mit C#. Ich habe eine Aufgabe begonnen, leider komme ich da nicht weiter.

Die Aufgabe lautet wie folgt:

Schreibe ein Konsolenprogramm,welches über den Inputstream mehrere Zahlen einliest bis die Zahl 0 eingegeben wurde. Anschliessend diese Zahlen als gerade und ungerade Zahlen summiert wiedergiebt.

Das heisst

zB Input:

1
5
8
12

Output:
Ungerade Summe: 6
Gerade Summe:20



Ich habe einbisschen angefangen zu Coden und bin im Moment nicht so weit.

Hier mein Code:



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:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace aufgabe4._2
{
    class Program
    {
        public static void Main(string[] args)
        {

            
            Console.Write("Hallo, ");
            Console.WriteLine("Dieses Programm rechnet die Summe der Geraden und Ungeraden");
            Console.WriteLine("Geben Sie eine Zahl ein");
            string x = Console.ReadLine();
            int a = Convert.ToInt32(x);
            int aRest = a % 2


            if (aRest > 0)
            {
                Console.Write("Die Zahl ");
                Console.Write(a);
                Console.WriteLine(" ist ungerade");
                Console.Write("Die Summe der ungeraden ");
                Console.Write(a);
                
            }
            
            else     {
                Console.Write("Die Zahl ");
                Console.Write(a);
                Console.WriteLine(" ist gerade");
                Console.Write("Die Summe der geraden ");
                Console.Write(a);
            }
            
             Console.ReadLine();

            
            }
        }
    }


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Christian S. - Mo 24.08.09 13:50

Hallo und :welcome:!

Was ist denn jetzt genau das Problem, bei dem wir Dir helfen sollen? :-)

Grüße
Christian

P.S.: Bei konkreten Problemen helfen wir Dir gerne weiter, wir werden Dir aber nicht Deine Hausaufgaben machen ;)


TheSoul - Mo 24.08.09 13:54

Danke :wink:

Mein Problem ist dass ich nicht mehr weiter weiss. :roll:

Ich verlange von niemandem meine Hausaufgaben zu machen :) Brauche nur einige kleine Tipps wie man diese Aufgabe angehen kann.


Christian S. - Mo 24.08.09 13:55

Jetzt wissen wir immer noch nicht, wo Du genau nicht weiter kommst. Welchen Teil der Aufgabe versuchst Du zu machen und auf welche Hürde stößt Du da, die Du nicht überwinden kannst? :-)


TheSoul - Mo 24.08.09 13:58

:D

Den Anfang habe ich bereits. Das Konsolenprogramm trennt die geraden und ungeraden Zahlen. Wie kann ich jetzt die geraden und ungeraden summieren und getrennt wiedergeben? Und was muss ich schreiben, damit das Programm erst wenn ich die 0 eingebe die Zahlen zusammenzählt?

PS: Habe erst letzte Woche mit C# begonnen


Th69 - Mo 24.08.09 14:18

Stichwort: Schleife (while, for oder foreach)


TheSoul - Mo 24.08.09 14:26

danke für die rasche antwort.

kannst du mir auch noch sagen wo ich dies ungefähr einsetzen muss?


JüTho - Mo 24.08.09 14:53

Hallo und noch :welcome:

Fast alles, was du in deinem ersten Beitrag als Code gebracht hast, gehört in diese Schleife (vorzugsweise do-while). Das kannst du dir durch "Formulierungen in normaler Sprache" selbst erklären.

Lediglich Deklarationen von Variablen, die du vorher und nachher benötigst, müssen außerhalb der Schleife stehen. Vor allem brauchst du (eine andere deiner Fragen) je eine Variable für "Summe aller geraden" und "Summe aller ungeraden". Sinnvollerweise wird jede eingegebene Zahl sofort geprüft und summiert (sonst bräuchte man unnötige Zwischenspeicher für alle Zahlen).

Ich hoffe, das führt weiter.

Jürgen


InCoBra - Mo 24.08.09 15:03

Die Schleife muss um die Einlesefunktion...


C#-Quelltext
1:
2:
3:
4:
5:
String input = "";
while (input != "0")
{
   // Tue das und das...
}


oder wenn du eh in Integer umwandelst:

C#-Quelltext
1:
2:
3:
4:
5:
int input = -1;
while (input != 0)
{
   // Tue das und das
}


Edit: Zu langsam...


TheSoul - Mo 24.08.09 16:14

Inzwischen habe ich die Aufgabe abgeschlossen. :idea: :D Danke an die, die versucht haben mir zu helfen.

Hier meine Lösung:



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:
using System;

namespace aufgabe4._2
{
    class Program
    {
        public static void Main(string[] args)
        {
            Aufgabe4();    
        }

        private static void Aufgabe4()
        {
            int gerade = 0, ungerade = 0;

            Console.Write("Hallo, ");
            Console.WriteLine("Dieses Programm rechnet die Summe der Geraden und Ungeraden");
            Console.WriteLine("Geben Sie eine Zahl ein");

            string x = "";
            while ((x = Console.ReadLine()) != "0")
            {
                int a = Convert.ToInt32(x);
                int aRest = a % 2;

                if (aRest > 0)
                {
                    ungerade += a;

                }

                else
                {
                    gerade += a;
                }
            }

            string ausgabe = string.Format("Die Summe der ungeraden: {0}, Summe der geraden: {1} ", ungerade, gerade);
            Console.Out.WriteLine(ausgabe);

            Console.ReadLine();

        }
    }
}


Für Fragen stehe ich ihnen gerne zur Verfügung. Ihr könnt mir auch eine PN schreiben.


InCoBra - Mo 24.08.09 16:32

Nur eine Sache...
Warum

C#-Quelltext
1:
2:
int aRest = a % 2;
if (aRest > 0)


und nicht einfach:

C#-Quelltext
1:
if (a % 2 > 0)                    


Gruß


TheSoul - Mo 24.08.09 16:43

user profile iconInCoBra hat folgendes geschrieben Zum zitierten Posting springen:
Nur eine Sache...
Warum

C#-Quelltext
1:
2:
int aRest = a % 2;
if (aRest > 0)


und nicht einfach:

C#-Quelltext
1:
if (a % 2 > 0)                    


Gruß


Hab ich so übernommen. Anfänger halt. :oops:


JüTho - Mo 24.08.09 16:58

Und nun komme ich noch mit meinem Standard-Vorschlag: Statt Convert.ToInt32 ist besser int.TryParse zu verwenden. Was passiert denn, wenn jemand keine Zahl eingibt, sondern Text (und sei es aus Versehen)? Bei Convert gibt es eine Exception, ggf. mit Programmabsturz; bei TryParse gibt es eine Ersatzlösung. Also:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
int a = 0;
ifint.TryParse(x, out a) ) {
    //  ich ziehe den Vergleich "gleich Null" vor
    if (a % 2 == 0)
        gerade += a;
    else
        ungerade += a;
else {
    Console.WriteLine("Falsche Eingabe - keine Zahl");
}

Gruß Jürgen


TheSoul - Di 25.08.09 08:14

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Und nun komme ich noch mit meinem Standard-Vorschlag: Statt Convert.ToInt32 ist besser int.TryParse zu verwenden. Was passiert denn, wenn jemand keine Zahl eingibt, sondern Text (und sei es aus Versehen)? Bei Convert gibt es eine Exception, ggf. mit Programmabsturz; bei TryParse gibt es eine Ersatzlösung. Also:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
int a = 0;
ifint.TryParse(x, out a) ) {
    //  ich ziehe den Vergleich "gleich Null" vor
    if (a % 2 == 0)
        gerade += a;
    else
        ungerade += a;
else {
    Console.WriteLine("Falsche Eingabe - keine Zahl");
}

Gruß Jürgen


Danke für die elegante Lösung Jürgen. int.TryParse habe ich zum ersten Mal gesehen. Habe es so übernommen und es funktioniert prima.

Gruss