Anfänger: Wie wird das in C# programmiert? Need help :(

Terr0rSandmann

Legende
Thread Starter
Mitglied seit
19.06.2010
Beiträge
31.268
Ort
Potsdam
Hi

Ich soll in Studium ein kleines Programm in C# schreiben.

Der User soll 12 Testergebnisse und 4 Übungsergebnisse eingeben können.
Zum Schluss soll der Durchschnitt ausgerechnet werden, sowohl von den 12 Tests, als auch von den 4 Übungen.
Diese beiden Durchschnitte zählen 50/50 und ergeben eine Gesamtnote.

Das ist soweit recht leicht, aber das Programm soll einen Fehler ausspucken, wenn der User zB etwas falsches eingiebt, wie ein Wort statt einer Zahl.
Zudem soll das Programm eine Meldung machen, wenn der User irgendwie unter 50% im Test/Übung erreicht hat und ihn mitteilen, dass er doch nicht bestanden hat.

So weit bin ich jetzt:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Üb1
{
class Program
{
static void Main(string[] args)
{
// Tests = x
// Übungen = y

int[] Ergebnis_Test = new int[16];
int[] Ergebnis_Übung = new int[10];

#region Tests

for (int x=1; x<13; x++)
{
Console.WriteLine("Bitte Testergebnis " + x + " eingeben");
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
}

Console.WriteLine("Gesamtpunktzahl Tests: " + Ergebnis_Test.Sum());

int Durchschnitt_Tests = Ergebnis_Test.Sum() / 12;

Console.WriteLine("Durchschnitt Tests: " + Durchschnitt_Tests);
Console.WriteLine("Bitte beliebige Zahl oder einen beliebigen Buchstaben eintippen zum fortfahren");
Console.ReadLine();

#endregion Tests

#region Übung

for (int y = 1; y < 5; y++)
{
Console.WriteLine("Bitte Übungsergebnis " + y + " eingeben");
Ergebnis_Übung[y] = Convert.ToInt32(Console.ReadLine());
}

Console.WriteLine("Gesamtpunktzahl der Übungen: " + Ergebnis_Übung.Sum());

int Durchschnitt_Übung = Ergebnis_Übung.Sum() / 4;

Console.WriteLine("Durchschnitt Tests: " + Durchschnitt_Übung);
Console.ReadLine();
#endregion Übung

}
}
}
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Für die Fehler bei falscher Eingabe:
füg in deine For schleife eine FormatExeption ein: ToInt32 Method (String) (übrigens sehr gute Adresse, wenn du nicht weiter kommst)

Lösung(nicht getestet)
for (int x=1; x<13; x++)
{
Console.WriteLine("Bitte Testergebnis " + x + " eingeben");
try{
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
}
catch(FormatException)
{
Console.Writeline("Falsche Eingabe");
x = x -1;
}
}

Und das nicht bestanden ist, gilt auch wenn nur einem Wert unter 50%?
Entweder gleich bei der Eingabe der Werte Prüfen und einen Bool setzen, oder eine for(each) schleife, die den minimalwert raus findet. Ist der Minimalwert kleiner 50% hat er nicht bestanden.
 
Zu 1:
Du kannst einfach an der Stelle
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
ein trycatch verwenden
try
{
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
}
catch
{
//Fehler bei Eingabe
}
Da hier ein Fehler geschmissen wird wenn es nicht geparsed werden kann. Alternativ ginge auch
bool erfolgreich = Int32.TryParse(Console.ReadLine(), out Ergebnis_Test[x]);
Zudem kann man das ganze auch in einer Methode aufrufen die sich bei einem Fehler wiederum selbst aufruft
private int eingabe()
{
int wert = 0;
Console.Writeline("Einegben:");
bool erfolgreich = Int32.TryParse(Console.ReadLine(), out wert);
if (erfolgreich == false)
{
console.writeLine("Fehler bei eingabe");
return eingabe();
}
else
{
return wert;
}
}

Zu 2:
Hier muss die maximale erreichbare Punktzahl durch zwei geteilt werden und wenn das diese größer ist als die erreichten Punkte gibt es die Meldung.
if((Maximale_Punktzahl/2) >= Erreichte_Punktzahl){
Console.Writeline("nicht erreicht");
}
 
Und das nicht bestanden ist, gilt auch wenn nur einem Wert unter 50%?
Entweder gleich bei der Eingabe der Werte Prüfen und einen Bool setzen, oder eine for(each) schleife, die den minimalwert raus findet. Ist der Minimalwert kleiner 50% hat er nicht bestanden.

Ja, sobald ein einizges Ergebnis unter 50% ist, hat der User nicht bestanden.


Und danke schon einmal an euch 2, dass ihr mir so schnell geantwortet habt.
Werde mal probieren, was ich da jetzt aus euern Informationen entnehmen und verbauen kann ;)
 
Hmm ... nun rumprobiert und was soll ich sagen ... ich kriege es irgendwie nicht hin :(

Aktuell sieht es so aus:
namespace Üb1
{
class Program
{
static void Main(string[] args)
{
// Tests = x
// Übungen = y

int[] Ergebnis_Test = new int[16];
int[] Ergebnis_Übung = new int[10];

#region Tests
for (int x = 1; x < 13; x++)
{
Console.WriteLine("\nBitte Testergebnis " + x + " eingeben");
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());

if (Ergebnis_Test[x] <= 50)
{
Console.WriteLine("Unter 50%, leider nicht bestanden.");
}
else
{
Console.WriteLine("Super, dieser Test wurde bestanden.");
}
}

Console.WriteLine("\nGesamtpunktzahl Tests: " + Ergebnis_Test.Sum());

int Durchschnitt_Tests = Ergebnis_Test.Sum() / 12;

Console.WriteLine("Durchschnitt Tests: " + Durchschnitt_Tests);
Console.WriteLine("\n");
#endregion Tests



#region Übung
for (int y = 1; y < 5; y++)
{
Console.WriteLine("\nBitte Übungsergebnis " + y + " eingeben");
Ergebnis_Übung[y] = Convert.ToInt32(Console.ReadLine());

if (Ergebnis_Übung[y] <= 50)
{
Console.WriteLine("Unter 50%, leider nicht bestanden.");
}
else
{
Console.WriteLine("Super, diese Übrung wurde bestanden.");
}
}

Console.WriteLine("\nGesamtpunktzahl der Übungen: " + Ergebnis_Übung.Sum());

int Durchschnitt_Übung = Ergebnis_Übung.Sum() / 4;

Console.WriteLine("Durchschnitt Tests: " + Durchschnitt_Übung);
#endregion Übung


#region Bestanden/Nicht bestanden
int Gesamtergebnis = (Durchschnitt_Tests + Durchschnitt_Übung)/2;

if (Gesamtergebnis <= 50)
{
Console.WriteLine("\nUnter 50%, leider nicht bestanden.");
}

else
{
Console.WriteLine("\nSuper, bestanden.");
}
Console.ReadLine();
#endregion Bestanden/Nicht bestanden

}
}
}


Ich weiß leider nicht, ich das mache, dass er einen Fehler ausspucht, wenn ein einziges Ergebnis unter 50% ist.
Er sagt dem User zwar an, dass er da unter 50% hat ode rhalt über 50%, allerdings weiß ich nicht, wie ich das dann anstelle, dass er dem User sagt, wenn er alle Werte eingetragen hat, das er nicht bestanden hat, wenn ein Ergebnis unter 50% war.
Oder wie er das macht, wenn zb anstatt einer Punktzahl ein Wort/Buchstabe eingetippt wird, dass er dann die Eingabe wiederholen will.

Kann mir da wer helfen? Vllt wo einfach was reinkopieren ...
 
Zuletzt bearbeitet:
Puhh ... niemand? Muss das bis Di Abend abgeben und bin voll überfordert :(
 
"Er sagt dem User zwar an, dass er da unter 50% hat ode rhalt über 50%, allerdings weiß ich nicht, wie ich das dann anstelle, dass er dem User sagt, wenn er alle Werte eingetragen hat, das er nicht bestanden hat, wenn ein Ergebnis unter 50% war."

Nach jeder Eingabe und erfolgreicher Prüfung, dass es eine Zahl ist, wird geprüft, ob es unter 50% ist. Wenn ja, setz einfach eine Variable auf true (Typ boolean), die kannst du z.B. unter50prozent nennen. Am Ende wertest du diese einfach aus: Ist sie wahr, dann wahr ein Ergebnis unter 50%.

Bzgl. prüfen, einer schrieb doch:
Code:
try
 {
 Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
 }
 catch
 {
 //Fehler bei Eingabe
 }

du hast aber nur
Code:
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
Nimm einfach die Eingabe in eine Schleife. Im catch wird der Fehler gefangen, dort setzt du x = x-1, sodass er aktuelle Durchlauf noch einmal geschieht.
 
Zuletzt bearbeitet:
Wo genau muss den die bool Sache hin? Also an welche Stelle muss ich das einbauen und wie muss die Anweisung denn aussehen? Habe noch nie mit bool gearbeitet.
(habe erst seit Okt. 2011 C#, also totaler Noob :p)
 
bool hasFailed = false;

if (Ergebnis_Übung[y] < 50)
{
Console.WriteLine("Unter 50%, leider nicht bestanden.");
hasFailed = true;
}
else
{
Console.WriteLine("Super, diese Übrung wurde bestanden.");
}
}

if(hasFailed){
Console.WriteLine("Übung insgesamt nicht bestanden, da ein Ergebnis unter 50%");
}
 
Toll ... nun habe ich erfahren, dass das leicht anders ist.

Die Tests sind in 4 Blöcken gestaffelt.
Entweder man schafft die 3 Tests vom Block mit über 50% oder die Übung mit mind. 50%.
Um zum Schluss für für die Endprüfung zugelassen zu werden, müssen alle 4 Blöcke bestanden sein.

Also ...

Test 1 - 3 über 50% oder Übung1 über 50%.
Test 4 - 6 über 50% oder Übung2 über 50%.
Test 7 - 9 über 50% oder Übung3 über 50%.
Test 10 - 12 über 50% oder Übung 4 über 50%.

Puhhh ... das ist ja echt kacke :(
 
Auch nicht viel schwerer. Dein einlesen der Übungen und Tests ist fertig, wenn du das noch einbaust:

Erklärung:
- Mit try versucht er, wie der name schon sagt, den Wert einzulesen und zu convertieren, bei irgend einem Fehler, wird dieser mit catch abgefangen und behandelt. Mehr hier: try-catch )
- x = x -1; sorgt dafür, dass der falsche Wert erneut eingegeben werden muss.

for (int x=1; x<13; x++)
{
Console.WriteLine("Bitte Testergebnis " + x + " eingeben");
try{
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
}
catch
{
Console.Writeline("Falsche Eingabe");
x = x -1;
}
}
*Das selbe auch bei allen anderen Eingaben, die Fehler verursachen können.


kleiner Typo: Console.WriteLine("Durchschnitt Tests: " + Durchschnitt_Übung);



So jetzt zu den Abfragen:

du kannst If-Abfragen auch UND-Verknüpfen, mit einem &&
z.B:
IF(Test1 >50 && Test2 > 50 && Test3 > 50)
{PART1 bestanden}
IF(Ügung1 > 50)
{PART1 bestanden}
...
IF(PART1 bestanden && PART" bestanden && PART3 bestanden && PART4 bestanden)
{"Du hast bestanden"
}else{
"Loser :fresse:"
}

Ich würde persönlich einen Bool benutzen, kannst aber auch einen int nehmen und +1 zählen, wenn er größer 1 ist, hat man bestanden.

PS: lern das auch erst seit Oktober, das ist keine Ausrede :p
 
Zuletzt bearbeitet:
Jo, das ist die Lösung. Man muss es eben nur noch mit den richtigen Variablen ergänzen.
 
Mal hier ein aktueller Ausschnitt der Region Test:

#region Tests
for (int x = 1; x < 13; x++)
{
Console.WriteLine("\nBitte Testergebnis " + x + " eingeben");


try
{
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
if (Ergebnis_Test[x] < 0 || Ergebnis_Test[x] > 100) // nur Zahlen von 0 - 100
{
Console.WriteLine("\nFalsche Eingabe, bitte erneut eingeben");
}
}
catch
{
Console.WriteLine("Eingabe fehlerhaft, bitte wiederholen.");
x--;
}

bool hasFailed = false;

if (Ergebnis_Test[x] < 50)
{
Console.WriteLine("Leider kein gutes Ergebnis.");
hasFailed = true;
}
else if (Ergebnis_Test[x] < 101)
{
Console.WriteLine("Super, dieser Test wurde bestanden.");
}
else
{
Console.WriteLine("Ungültige Eingabe.");
x--;
}
if (hasFailed)
{
Console.WriteLine("Test nicht bestanden, da ein Ergebnis unter 50%.");
}


}

Console.WriteLine("\nGesamtpunktzahl Tests: " + Ergebnis_Test.Sum());

int Durchschnitt_Tests = Ergebnis_Test.Sum() / 12;

Console.WriteLine("Durchschnitt Tests: " + Durchschnitt_Tests);
Console.WriteLine("\n");
#endregion Tests

Funzt soweit halbwegs. Er merkt, wenn ich eine Zahl über 100 eintippe, dass die Eingabe falsch war und fragt das Ergebnis erneut ab.
Wenn ich allerdings einen Buchstabe oder ein Wort eintippe, dann sagt er mir zwar, dass die Eingabe fehlerhaft ist, sagt mir aber zusätzlich, dass der Test bestanden wurde, was ja totaler Quatsch ist.
Wo genau liegt denn da der Fehler? Bzw wie mache ich ihm klar, dass er das nicht so ausgeben soll?
 
Zuletzt bearbeitet:
Das catch liegt an der falschen Stelle. Das Programm arbeitet einen Befehl nach dem anderen ab.
Die ganzen Abfragen ob bestanden oder nicht, kommen nach catch, werden also alle überprüft egal oder der Wert stimmt oder nicht.
 
Zuletzt bearbeitet:
Aber das ist doch nach dem Catch, oder? Verstehe das nciht ganz, wie du das meinst ...
 
Zuletzt bearbeitet:
Bei der try catch versucht er das was in try drin steht auszuführen.
bei irgend einem Fehler wird das im catch ausgeführt
Danach arbeitet er deine for-schleife einfach weiter ab, nur dass es keinen eingelesenen Wert gibt, da er ja falsch war.

Oder glaubst, dass er wegen dem x-- wieder von vorne anfängt?
Das macht er nicht, eine For schleife vergleicht immer nur vor jedem Durchlauf der schleife, ob die Bedingung noch zu trift.
 
Die Schleife wird trotzdem weiter bearbeitet, trotz des Fehlers.
Du kannst enweder den code ab bool mit in den try-Block packen, oder nach x--; ein continue; anfügen ;D
 
Zuletzt bearbeitet:
Ah super, das mit continue; funktioniert.
Toll ... nun habe ich aber irgendetwas gemacht, wieso er nicht mehr weiter macht und das Programm abstürzt, wenn ich einen Buchstaben eingebe.
Puhh ... Alles Mist ^^


Edit:

Etwas verwirrend, wenn er nicht einrückt, hoffe ihr erkennt es trotzdem.
Funktioniert soweit halbwegs, nur das mit den Bestehen der Blöcke fehlt wohl ...

namespace Üb1
{
class Program
{
static void Main(string[] args)
{
// Tests = x
// Übungen = y

int[] Ergebnis_Test = new int[16];
int[] Ergebnis_Übung = new int[10];

#region Tests
for (int x = 1; x < 13; x++)
{
Console.WriteLine("\nBitte Testergebnis " + x + " eingeben (in %)");


try
{
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
if (Ergebnis_Test[x] < 0 || Ergebnis_Test[x] > 100)
{

}
}
catch
{
Console.WriteLine("Eingabe fehlerhaft, bitte wiederholen.\nBuchstaben sind nicht gültig.");
x--;
continue;
}

if (Ergebnis_Test[x] < 0 || Ergebnis_Test[x] > 100)
{
Console.WriteLine("\nFalsche Eingabe, bitte erneut eingeben.");
}


bool hasFailed = false;

if (Ergebnis_Test[x] < 50)
{
Console.WriteLine("Leider kein gutes Ergebnis.");
hasFailed = true;
}
else if (Ergebnis_Test[x] < 101)
{
Console.WriteLine("Super, dieser Test wurde bestanden.");
}
else
{
Console.WriteLine("Nur Zahlen von 0 bis 100.");
x--;
continue;
}
if (hasFailed)
{
Console.WriteLine("Test nicht bestanden, da ein Ergebnis unter 50%.");
}


}

Console.WriteLine("\nGesamtpunktzahl Tests: " + Ergebnis_Test.Sum());

int Durchschnitt_Tests = Ergebnis_Test.Sum() / 12;

Console.WriteLine("Durchschnitt Tests: " + Durchschnitt_Tests);
Console.WriteLine("\n");
#endregion Tests



#region Übung
for (int y = 1; y < 5; y++)
{
Console.WriteLine("\nBitte Testergebnis " + y + " eingeben (in %)");


try
{
Ergebnis_Übung[y] = Convert.ToInt32(Console.ReadLine());
if (Ergebnis_Übung[y] < 0 || Ergebnis_Übung[y] > 100)
{

}
}
catch
{
Console.WriteLine("Eingabe fehlerhaft, bitte wiederholen.\nBuchstaben sind nicht gültig.");
y--;
continue;
}

if (Ergebnis_Übung[y] < 0 || Ergebnis_Übung[y] > 100)
{
Console.WriteLine("\nFalsche Eingabe, bitte erneut eingeben.");
}


bool hasFailed = false;

if (Ergebnis_Übung[y] < 50)
{
Console.WriteLine("Leider kein gutes Ergebnis.");
hasFailed = true;
}
else if (Ergebnis_Übung[y] < 101)
{
Console.WriteLine("Super, diese Übung wurde bestanden.");
}
else
{
Console.WriteLine("Nur Zahlen von 0 bis 100.");
y--;
continue;
}
if (hasFailed)
{
Console.WriteLine("Übung nicht bestanden, da ein Ergebnis unter 50%.");
}


}

Console.WriteLine("\nGesamtpunktzahl der Übungen: " + Ergebnis_Übung.Sum());

int Durchschnitt_Übung = Ergebnis_Übung.Sum() / 4;

Console.WriteLine("Durchschnitt Tests: " + Durchschnitt_Übung);
#endregion Übung


#region Bestanden/Nicht bestanden

int Gesamtergebnis = (Durchschnitt_Tests + Durchschnitt_Übung) / 2;

if (Gesamtergebnis < 50)
{
Console.WriteLine("\nUnter 50% in der Gesamtwertung, leider nicht bestanden.");
}

else
{
Console.WriteLine("\nSuper, du hast bestanden.");
}
Console.ReadLine();
#endregion Bestanden/Nicht bestanden


}
}
}

Es funktioniert jetzt recht gut. Er meldet einen Fehler, wenn die eingegebene Zahl über 100 ist und will das Ergebnis erneut wissen. Wenn ich einen Buchstaben eingebe, dann meldet er, das Buchstaben nicht zulässig sind udn möchte das Ergebnis erneut wissen.
Soweit, so gut :)

Nun ist nur noch das Problem mit dem bestehen der Teilblöcke
Die Tests sind in 4 Blöcken gestaffelt.
Entweder man schafft die 3 Tests vom Block mit über 50% oder die Übung mit mind. 50%.
Um zum Schluss für für die Endprüfung zugelassen zu werden, müssen alle 4 Blöcke bestanden sein.

Also ...

Test 1 - 3 über 50% oder Übung1 über 50%.
Test 4 - 6 über 50% oder Übung2 über 50%.
Test 7 - 9 über 50% oder Übung3 über 50%.
Test 10 - 12 über 50% oder Übung 4 über 50%.
 
Zuletzt bearbeitet:
Das wäre für 1 den ersten Teilblock

Code:
if(Ergebnis_Test[0] < 50 || Ergebnis_Test[1] < 50 || Ergebnis_Test[2] < 50 || Ergebnis_Übung[1] < 50){
Console.WriteLine("Fail");
}
else
Console.WriteLine("Win");

Jetzt frag nicht wieder, wo das hingehört und wie man das für die anderen Blöcke macht. Schau dir das in Ruhe an, dann ist das recht leicht zu verstehen.
 
Ah ok, das leuchtet ein ;)

Wusste nur nicht genau, wie ich die einzelnen Arrayteile so direkt anspreche.

Edit:
Eine kleine Sache.
In der Bedingung symbolisiert && und ||ein UND. Wie wird denn das ODER geschrieben?
Denn ich brauche für zB Testblock1 -> Test1 & Test2 & Test3 ODER Übung1 zum bestehen ...
 
Zuletzt bearbeitet:
Hmm ... und wieso geht das dann nicht :(

Habe mal eingetippt, dass alle Tests mit 11% geschrieben wurden und die Tests mit 99%, trotzdem meint er, dass die Teilblöcke alle nicht bestanden wurden :(

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Üb1
{
class Program
{
static void Main(string[] args)
{
// Tests = x
// Übungen = y

int[] Ergebnis_Test = new int[16];
int[] Ergebnis_Übung = new int[10];

#region Tests
for (int x = 1; x < 13; x++)
{
Console.WriteLine("\nBitte Testergebnis " + x + " eingeben:");


try
{
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
if (Ergebnis_Test[x] < 0 || Ergebnis_Test[x] > 100)
{

}
}
catch
{
Console.WriteLine("Eingabe fehlerhaft, bitte wiederholen.\nBuchstaben und Sonderzeichen sind nicht gültig.");
x--;
continue;
}

if (Ergebnis_Test[x] < 0 || Ergebnis_Test[x] > 100)
{
Console.WriteLine("\nFalsche Eingabe, bitte erneut eingeben.");
}


bool hasFailed = false;

if (Ergebnis_Test[x] < 50)
{
Console.WriteLine("Leider kein gutes Ergebnis.");
hasFailed = true;
}
else if (Ergebnis_Test[x] < 101)
{
Console.WriteLine("Super, dieser Test wurde bestanden.");
}
else
{
Console.WriteLine("Nur Zahlen von 0 bis 100.");
x--;
continue;
}
if (hasFailed)
{
Console.WriteLine("Test nicht bestanden, da das Ergebnis unter 50% beträgt.");
}


}

Console.WriteLine("\nGesamtpunktzahl Tests: " + Ergebnis_Test.Sum());

int Durchschnitt_Tests = Ergebnis_Test.Sum() / 12;

Console.WriteLine("Durchschnitt der Tests: " + Durchschnitt_Tests);
Console.WriteLine("\n");
#endregion Tests



#region Übung
for (int y = 1; y < 5; y++)
{
Console.WriteLine("\nBitte Testergebnis " + y + " eingeben:");


try
{
Ergebnis_Übung[y] = Convert.ToInt32(Console.ReadLine());
if (Ergebnis_Übung[y] < 0 || Ergebnis_Übung[y] > 100)
{

}
}
catch
{
Console.WriteLine("Eingabe fehlerhaft, bitte wiederholen.\nBuchstaben und Sonderzeichen sind nicht gültig.");
y--;
continue;
}

if (Ergebnis_Übung[y] < 0 || Ergebnis_Übung[y] > 100)
{
Console.WriteLine("\nFalsche Eingabe, bitte erneut eingeben.");
}


bool hasFailed = false;

if (Ergebnis_Übung[y] < 50)
{
Console.WriteLine("Leider kein gutes Ergebnis.");
hasFailed = true;
}
else if (Ergebnis_Übung[y] < 101)
{
Console.WriteLine("Super, diese Übung wurde bestanden.");
}
else
{
Console.WriteLine("Nur Zahlen von 0 bis 100.");
y--;
continue;
}
if (hasFailed)
{
Console.WriteLine("Übung nicht bestanden, da das Ergebnis unter 50% beträgt.");
}


}

Console.WriteLine("\nGesamtpunktzahl der Übungen: " + Ergebnis_Übung.Sum());

int Durchschnitt_Übung = Ergebnis_Übung.Sum() / 4;

Console.WriteLine("Durchschnitt der Übungen: " + Durchschnitt_Übung);
#endregion Übung


#region Bestanden/Nicht bestanden


if (Ergebnis_Test[0] >= 49 && Ergebnis_Test[1] >= 49 && Ergebnis_Test[2] >= 49 || Ergebnis_Übung[0] >= 49)
{
Console.WriteLine("\nErgebnis der Teilblöcke:");
Console.WriteLine("Glückwunsch, Teilblock 1 bestanden.");
}
else
{
Console.WriteLine("\nErgebnis der Teilblöcke:");
Console.WriteLine("Teilblock 1 leider nicht bestanden.");
}


if (Ergebnis_Test[3] < 50 && Ergebnis_Test[4] < 50 && Ergebnis_Test[5] < 50 || Ergebnis_Übung[1] < 50)
{
Console.WriteLine("Teilblock 2 leider nicht bestanden.");
}
else
{
Console.WriteLine("Glückwunsch, Teilblock 2 bestanden.");
}


if (Ergebnis_Test[6] < 50 && Ergebnis_Test[7] < 50 && Ergebnis_Test[8] < 50 || Ergebnis_Übung[2] < 50)
{
Console.WriteLine("Teilblock 3 leider nicht bestanden.");
}
else
{
Console.WriteLine("Glückwunsch, Teilblock 3 bestanden.");
}


if (Ergebnis_Test[9] < 50 && Ergebnis_Test[10] < 50 && Ergebnis_Test[11] < 50 || Ergebnis_Übung[3] < 50)
{
Console.WriteLine("Teilblock 4 leider nicht bestanden.");
}
else
{
Console.WriteLine("Glückwunsch, Teilblock 4 bestanden.");
}

int Gesamtergebnis = (Durchschnitt_Tests + Durchschnitt_Übung) / 2;
Console.WriteLine("\nGesamtdurchschnitt der Tests und Übungen: " + Gesamtergebnis);
Console.ReadLine();
#endregion Bestanden/Nicht bestanden

}
}
}
 
du fängst oben mit 1 an zu zählen, also Test 1 = Ergebnis_Test[1] nicht [0], bei den Übungen das selbe. aber das nur am rande, sollte nicht dran liegen.

ich test grad mal dein code. meld mich dann nochmal

---------- Beitrag hinzugefügt um 21:38 ---------- Vorheriger Beitrag war um 21:36 ----------

(Ergebnis_Test[0] >= 49 && Ergebnis_Test[1] >= 49 && Ergebnis_Test[2] >= 49) || Ergebnis_Übung[0] >= 49

---------- Beitrag hinzugefügt um 21:41 ---------- Vorheriger Beitrag war um 21:36 ----------

und die unteren 3 Abfragen bei den Prüfungen müssen größer 50 sein. bzw. sind komplett falsch, bau sie so auf wie den ersten, dann klappts.
 
Zuletzt bearbeitet:
Sooooo ... bin fertig. Vielen Dank an euch, ihr habt mir noch einmal den Arsch gerettet ;)

So sieht nun das fertige Programm aus, falls es denn wen interessieren sollte.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Üb1
{
class Program
{
static void Main(string[] args)
{
// Tests = x
// Übungen = y

int[] Ergebnis_Test = new int[16];
int[] Ergebnis_Übung = new int[10];

#region Tests
for (int x = 1; x < 13; x++)
{
Console.WriteLine("\nBitte Testergebnis " + x + " eingeben:");


try
{
Ergebnis_Test[x] = Convert.ToInt32(Console.ReadLine());
if (Ergebnis_Test[x] < 0 || Ergebnis_Test[x] > 100)
{

}
}
catch
{
Console.WriteLine("Eingabe fehlerhaft, bitte wiederholen.\nBuchstaben und Sonderzeichen sind nicht gültig.");
x--;
continue;
}

if (Ergebnis_Test[x] < 0 || Ergebnis_Test[x] > 100)
{
Console.WriteLine("\nFalsche Eingabe, bitte erneut eingeben.");
}


bool hasFailed = false;

if (Ergebnis_Test[x] < 50)
{
Console.WriteLine("Leider kein gutes Ergebnis.");
hasFailed = true;
}
else if (Ergebnis_Test[x] < 101)
{
Console.WriteLine("Super, dieser Test wurde bestanden.");
}
else
{
Console.WriteLine("Nur Zahlen von 0 bis 100.");
x--;
continue;
}
if (hasFailed)
{
Console.WriteLine("Test nicht bestanden, da das Ergebnis unter 50% beträgt.");
}


}

Console.WriteLine("\nGesamtpunktzahl Tests: " + Ergebnis_Test.Sum());

int Durchschnitt_Tests = Ergebnis_Test.Sum() / 12;

Console.WriteLine("Durchschnitt der Tests: " + Durchschnitt_Tests);
Console.WriteLine("\n");
#endregion Tests



#region Übung
for (int y = 1; y < 5; y++)
{
Console.WriteLine("\nBitte Testergebnis " + y + " eingeben:");


try
{
Ergebnis_Übung[y] = Convert.ToInt32(Console.ReadLine());
if (Ergebnis_Übung[y] < 0 || Ergebnis_Übung[y] > 100)
{

}
}
catch
{
Console.WriteLine("Eingabe fehlerhaft, bitte wiederholen.\nBuchstaben und Sonderzeichen sind nicht gültig.");
y--;
continue;
}

if (Ergebnis_Übung[y] < 0 || Ergebnis_Übung[y] > 100)
{
Console.WriteLine("\nFalsche Eingabe, bitte erneut eingeben.");
}


bool hasFailed = false;

if (Ergebnis_Übung[y] < 50)
{
Console.WriteLine("Leider kein gutes Ergebnis.");
hasFailed = true;
}
else if (Ergebnis_Übung[y] < 101)
{
Console.WriteLine("Super, diese Übung wurde bestanden.");
}
else
{
Console.WriteLine("Nur Zahlen von 0 bis 100.");
y--;
continue;
}
if (hasFailed)
{
Console.WriteLine("Übung nicht bestanden, da das Ergebnis unter 50% beträgt.");
}


}

Console.WriteLine("\nGesamtpunktzahl der Übungen: " + Ergebnis_Übung.Sum());

int Durchschnitt_Übung = Ergebnis_Übung.Sum() / 4;

Console.WriteLine("Durchschnitt der Übungen: " + Durchschnitt_Übung);
#endregion Übung


#region Bestanden/Nicht bestanden


if ((Ergebnis_Test[1] >= 49 && Ergebnis_Test[2] >= 49 && Ergebnis_Test[3] >= 49) || Ergebnis_Übung[1] >= 49)
{
Console.WriteLine("\nErgebnis der Teilblöcke:");
Console.WriteLine("Glückwunsch, Teilblock 1 bestanden.");
}
else
{
Console.WriteLine("\nErgebnis der Teilblöcke:");
Console.WriteLine("Teilblock 1 leider nicht bestanden.");
}


if ((Ergebnis_Test[4] >= 49 && Ergebnis_Test[5] >= 49 && Ergebnis_Test[6] >= 49) || Ergebnis_Übung[2] >= 49)
{
Console.WriteLine("Glückwunsch, Teilblock 2 bestanden.");
}
else
{
Console.WriteLine("Teilblock 2 leider nicht bestanden.");
}


if ((Ergebnis_Test[7] >= 49 && Ergebnis_Test[8] >= 49 && Ergebnis_Test[9] >= 49) || Ergebnis_Übung[3] >= 49)
{
Console.WriteLine("Glückwunsch, Teilblock 3 bestanden.");
}
else
{
Console.WriteLine("Teilblock 3 leider nicht bestanden.");
}


if ((Ergebnis_Test[10] >= 49 && Ergebnis_Test[11] >= 49 && Ergebnis_Test[12] >= 49) || Ergebnis_Übung[4] >= 49)
{
Console.WriteLine("Glückwunsch, Teilblock 4 bestanden.");
}
else
{
Console.WriteLine("Teilblock 4 leider nicht bestanden.");
}

int Gesamtergebnis = (Durchschnitt_Tests + Durchschnitt_Übung) / 2;
Console.WriteLine("\nGesamtdurchschnitt der Tests und Übungen: " + Gesamtergebnis);
Console.ReadLine();

#endregion Bestanden/Nicht bestanden

}
}
}
 
Was studierst du denn? Wenns Informatik ist, guck dir das Programm in nem Jahr nochmal an, dann wirst du entsetzt sein, weil man es wohl in einem Viertel der Zeilen und mit mehr Übersicht etc. hätte machen können ;)
 
Habe im Oktober mit Umweltinformatik angefangen.

Und ja, mir kommt das Programm auch sehr sehr lang vor für das bisschen Inhalt ... aber naja, jeder fängt mal klein an ;)
 
Jo, so siehts aus. Ich hab auch noch nen Stück weit zur Verwirrung beigetragen, weil ich alle Ergebnisse mit ODER verknüpft habe, weil ich die Bedingungen nur überflogen habe.

Noch nen kleiner Tipp: Wenn man mit Arrays arbeitet, fängt man üblicherweise bei 0 an diese zu befüllen. Das erste Element des Arrays ist dann array[0] und nicht array[1].

Ich würde dir in jedem Fall auch raten für die Programmiersprache deiner Wahl ein ordentliches Buch zu besorgen. Das wird dich sehr lange Zeit begleiten, die 50€ sind sehr gut investiert.

Die Grundtypen der (prozeduralen) Programmierung (Schleifen,Abfragen,Bedingungen,Typen) sind bei fast allen Sprachen gleich, es ändert sich nur geringfügig die Syntax. Wenn du also die prozeduralen Grundzüge verstanden hast, kannst du jede Programmiersprache innerhalb von kurzer Zeit anwenden.
 
Kannst du da ein Buch empfehlen?
 
Ich kann dir "Java ist auch eine Insel" sehr empfehlen, wenn du mit Java durchstarten willst, oder "The C Programming Language" von Kernighan/Ritchie für C. Ansonsten könnte ich noch "Learning Ruby" und "Learning Rails" von O'Reilly empfehlen. Da Ruby und insbesondere Rails aber ziemlich eigene Wege gehen, würde ich das nicht für jemanden empfehlen, der gerade in die Programmierung einsteigt.

Für C# habe ich leider kein Buch, da kann ich dir auch nichts empfehlen.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh