Laden...

Summen berechnen

Erstellt von cfc81 vor 14 Jahren Letzter Beitrag vor 14 Jahren 5.885 Views
C
cfc81 Themenstarter:in
8 Beiträge seit 2009
vor 14 Jahren
Summen berechnen

Hallo,

Aufgabe und meine vorübergehende Lösung, brauche Hilfe!

Wie bekomme ich es hin dass summe1 nur die geraden und summe2 die ungeraden Zahlen addiert? Da stimmt was nicht in meinem Programm!?

Schreiben Sie ein Programm, das eine Anzahl erfragt. Nachdem die Anzahl eingegeben ist, soll das Programm so viele ganze Zahlen lesen, wie die Anzahl angibt.

Ausgabe sollen zwei Summen sein: Die Summe der Zahlen mit den geraden Indizes und die Summe der Zahlen mit den ungeraden Indizes.

Dabei zählen wir den Index 0 zu den geraden Indizes.

class Program {
		
public static void Main(){
			
		int anzahl = Convert.ToInt32(Console.ReadLine());
	        int summe1=0;
	        int summe2=0;
		int[]zahlen = new int[anzahl];
		
		for(int i=0;i<anzahl;++i) {
		
		zahlen[i] = Convert.ToInt32(Console.ReadLine());

                if (i%2==0)		

		summe1 += zahlen[i]; 
		
		Console.WriteLine(summe1);

                if (i%2==1)
		
		summe2 += zahlen[i]; 
		
		Console.WriteLine(summe2);
}
}
}

....lg

691 Beiträge seit 2007
vor 14 Jahren

[Hinweis] Wie poste ich richtig?
Punkt 4, 5,6

Da stimmt was nicht in meinem Programm!?

Was stimmt nicht?

Und wieso lässt du den Index 0 bei deiner Berechnung außen vor?

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

849 Beiträge seit 2006
vor 14 Jahren

Hallo cfc81,

also ersteinmal:
Wie poste ich richtig?

Was denkst du stimmt nicht deinem Programm?

Es verhält sich so wie in der Aufgabe beschrieben.. OK, ein paar erklärende Ausgaben so wie "Summe1 : zahl" wären hübsch gewesen. Und das sich das Program nach der letzten eingabe direkt beendet ist auch nicht schön.. Aber imho funktioniert dein Programm.

edit: @all.. hmm zu spät
@tomot er lässt index 0 imho nicht aussen vor.. warum denkst du das?

C
cfc81 Themenstarter:in
8 Beiträge seit 2009
vor 14 Jahren

oh sorry für das posting, ich mach es nie wieder 😃....

was meinst du mit index 0 außen vor lassen? Versteh ich nicht, sorry....

ist es soweit sonst korrekt?

1.696 Beiträge seit 2006
vor 14 Jahren

oh sorry für das posting, ich mach es nie wieder 😃....

was meinst du mit index 0 außen vor lassen? Versteh ich nicht, sorry....

ist es soweit sonst korrekt?

Na, dass du i=0 setzst und dann mit ++i anfängst bedeutet dass in der Schleife 0 überprungen wurde, ist das nun klar?

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

C
cfc81 Themenstarter:in
8 Beiträge seit 2009
vor 14 Jahren

ähm ok und was muss ich da ändern? und wie bekommt man es hin, dass das Fenster nach der letzten Eingabe sich nicht schließt?

lg

1.696 Beiträge seit 2006
vor 14 Jahren

Console.Readline ... d.h. das Programm wartet auf Eingabe und schliesst sich somit nicht. Wie wäre es, dass du dir mal Grundlagen aneignet? Schau doch mal rein: :rtfm: 🛈 📗

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

S
21 Beiträge seit 2009
vor 14 Jahren

Na, dass du i=0 setzst und dann mit ++i anfängst bedeutet dass in der Schleife 0 überprungen wurde, ist das nun klar?

erm nein?

++i

oder

i++

wird erst Nach dem Durchlaufen der Schleife aufgerufen.
ich habe es auch extra probiert:

            
            int anzahl = 0;
            for (int i = 0; i < 10; ++i)
            {
                ++anzahl;
                Console.WriteLine(i);
            }
            Console.WriteLine("\n" + anzahl);
            Console.ReadLine();
            anzahl = 0;
            for (int i = 0; i < 10; i++)
            {
                ++anzahl;
                Console.WriteLine(i);
            }
            Console.WriteLine("\n" + anzahl);
            Console.ReadLine();

beide mal wird ausgegeben:
0
1
2
3
4
5
6
7
8
9

10

von daher verstehe ich nicht, warum ihr meint 0 wird übersprungen.

849 Beiträge seit 2006
vor 14 Jahren

ganz genau..

5.742 Beiträge seit 2007
vor 14 Jahren

Hallo zusammen,

auch noch ein paar Worte von mir dazu 😄

Grund dafür ist, dass der einzige Unterschied zwischen der Präfixinkrementation (also i) und der Postfixinkrementation (also i) im "Rückgabewert" liegt:


i = 5;
Console.WriteLine(i++); //Gibt "5" aus; i ist 6
i = 5;
Console.WriteLine(++i); //Gibt "6" aus; i ist 6

Da der Wert im Schleifenkopf nicht verwendet wird, macht es keinen Unterschied.

Sähe er hingegen so aus:

for (int i = 0; ++i < lenght; )

würde es tatsächlich einen Unterschied machen.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo cfc81,

bevor wir hier lange spekulieren, schreib doch erstmal, was der Fehler ist. Beachte dabei [Hinweis] Wie poste ich richtig? Punkt 5.

Außerdem geht das alles sehr in Richtung [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

C
cfc81 Themenstarter:in
8 Beiträge seit 2009
vor 14 Jahren

Frage ist einfach nur ob ich mit meiner Version die Aufgabe richtig gelöst habe!?

LG

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo cfc81,

bevor wir jetzt auf gut Glück ja oder nein sagen, ermittelst du das am besten selbst durch einen Test mit verschiedenen Eingabedaten. Vergiss dabei nicht, auch die Behandlung von Fehleingaben zu überprüfen.

herbivore

5.742 Beiträge seit 2007
vor 14 Jahren

Frage ist einfach nur ob ich mit meiner Version die Aufgabe richtig gelöst habe!?

Nein, wenn man von dieser Aufgabenstellung ausgeht:

Wie bekomme ich es hin dass summe1 nur die geraden und summe2 die ungeraden Zahlen addiert?

C
cfc81 Themenstarter:in
8 Beiträge seit 2009
vor 14 Jahren

achso nein da habe ich mich wohl falsch ausgedrückt mit diesem Satz, die Aufgabenstellung steht ja in meinem ersten Posting:

Schreiben Sie ein Programm, das eine Anzahl erfragt. Nachdem die Anzahl eingegeben ist, soll das Programm so viele ganze Zahlen lesen, wie die Anzahl angibt.

Ausgabe sollen zwei Summen sein: Die Summe der Zahlen mit den geraden Indizes und die Summe der Zahlen mit den ungeraden Indizes.

Dabei zählen wir den Index 0 zu den geraden Indizes.

lg....

309 Beiträge seit 2007
vor 14 Jahren

Statt des 2. "if" solltest du es mal mit einem "else" versuchen 😉

denn wenn die Abfrage (i%2==0) falsch ist, kann es doch nur das andere sein ... 👍

mfg Hajoseb

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

M
205 Beiträge seit 2008
vor 14 Jahren

@ Hajoseb:

Ja else ist schöner macht aber für die Funktion keinen Unterschied...

mfg Markus

309 Beiträge seit 2007
vor 14 Jahren

Für die Performance und die "logische" Lesbarkeit sehr wohl :evil:

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

S
21 Beiträge seit 2009
vor 14 Jahren

wie herbivore schon gesagt hat, du must auch überprüfen, ob eine gültige Zahl eingegeben wurde. was passiert, wenn der benutzer bei der Anzahl "-1" oder gar buchstaben oder sonderzeichen eingibt? dein programm stürzt einfach ab. ausserde, der user weiß nicht einmal, was er eingeben soll. Du erwartest als Eingabe eine Zahl, aber sagst es ihm nicht? Du solltest dem User schon sagen was er eingeben soll. Und wiso speicherst du die Zahlen(welche wieder Buchstaben sein könnten, wieder nicht überprüft...) in einem Array? Für diese Aufgabe ist es egal, ob du dir die Zahlen merkst, da du die Summe sowieso gleich addierst und nicht erst im Nachhinein.

Übrigens gibst du nach jeder Zahl Summe1 und Summe2 aus, da du bei den "if" keine Klammern gesetzt hast.

Ich persönlich finde deine Einrückungen schrecklich, einmal eingerückt, einmal nicht... scheint dir wohl ziemlich egal zu sein? Später wirst du dich nichtmehr zurechtfinden. Die "if" sind eingerückt, aber die Befehle nach den "if" nicht... die befehle nach "for" sind nicht eingerückt, aber "for" auch nicht. Du solltest schon einheitlich/übersichtlich programmieren. Siehe hierfür auch die Variablen deklaration.

und statt dem zweiten "if" gehört nunmal ein "else", da "i%2" ENTWEDER "0" ODER "1" sein kann, aber nichts anderes.

C
cfc81 Themenstarter:in
8 Beiträge seit 2009
vor 14 Jahren

ok danke erstmal, ich habe soweit alles nach euren Meinungen geändert!

Ihr müsst daran denken, dies ist mein erster Versuch und meine 1.Aufgabe 😃...

Nun noch eine Verständnisfrage zur Aufgabe, ist gemeint, dass wenn der Benutzer gerade Zahlen eingibt, diese addiert und wenn ungerade Zahlen eingegeben werden diese in einer 2. Summe addiert werden müssen??Wenn ja, wie muss ich mein Programm dann ändern?
Oder ist meine derzeitige Lösung soweit korrekt (ohne Überprüfung ob gültige Zahl o.ä. eingegeben wurde), dass die Summen abwechselnd addiert werden?

LG....

J
3.331 Beiträge seit 2006
vor 14 Jahren

Hallo,

das musst du dir wirklich selbst beantworten können: Was macht die if-Abfrage, welche Bedeutung hat die dort verwendete Variable i, was wird damit gemacht?

Jürgen

C
cfc81 Themenstarter:in
8 Beiträge seit 2009
vor 14 Jahren

ja das is mir schon klar, es geht um die Aufgabenstellung! Bei meiner derzeitigen Lösung werden die Summen abwechselnd addiert, aber ist das auch korrekt laut Aufgabenstellung?

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo cfc81,

in der Aufgabenstellung ist von "Zahlen mit geradem Index" und nicht von "geraden Zahlen" die Rede. Das sollte deine Frage beantworten.

herbivore

C
cfc81 Themenstarter:in
8 Beiträge seit 2009
vor 14 Jahren

ok dann ist meine Lösung doch korrekt....lg