Autor Beitrag
J3rwis
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 11.05.10 20:24 
Hallo ertmal liebe Foristen^^

Also, ich habe für mein Schulprojekt ein kleines Quiz in der Konsolenanwendung programmiert. Jetzt möchte ich für jede richtige Antwort "1. Richtige Antwort" ausgeben lassen. Nur halt eben mit der entsprechenden Zahl der richtigen Antwort.
Nun wollte ich Fragen wie ich dies genau umsetzte. :)
Danke schonmal für alle Tipps bzw Antworten.

P.S. : Da ich noch neu auf dem Gebiet des Programmierens bin konnte ich mit den meisten Forenüberschriften nicht so viel anfangen, darum frage ich hier. Falls das Thema schon bestehen sollte danke ich für einen Hinweis darauf:)
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 12.05.10 09:00 
Hallo und :welcome:

Die Problemstellung ist noch nicht ganz klar:

* Handelt es sich einfach um eine laufende Nummerierung, basierend auf der Reihenfolge von Frage + Antwort? Dann brauchst du keinen Index, sondern einen Zähler (also eine Variable, die einfach hochgezählt wird).
* Oder handelt es sich um eine Liste von Fragen und Antworten, aus der irgendeine ausgewählt wird? Dann handelt es sich wirklich um einen Index, den du dann schon hast.

Zum Erhöhen des Wertes einer int-Variablen gibt es zwei Möglichkeiten:
ausblenden C#-Quelltext
1:
2:
3:
int i = 0;
i = i + 1;    // Standardzuweisung
i++;          // Kurzschreibweise unter C, C++, C#

Zur Ausgabe in der Console gibt es Console.WriteLine mit vielen Varianten. Dazu solltest du in der SDK-Doku/MSDN/Hilfe (Index benutzen!) nachschauen, was es alles gibt. Für deinen Fall passt vermutlich die Version mit einem Format-String am besten.

Du solltest dich wirklich zielgerichtet einarbeiten, z.B. mit dem OpenBook VC#.

Gruß Jürgen
J3rwis Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 16.05.10 15:02 
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:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Quiz
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Willkommen zu meinem Quiz.");
            Console.WriteLine("Ich hoffe ihr habt Spaß und seid erfogreich.");
            Console.WriteLine("Um deine Antwort einzugeben wähle den jeweiligen Buchstaben.");
            Console.WriteLine("Um dies Antwort zu bestädigen drücke Enter.");


            List<Frage> fragen = new List<Frage>();            
            fragen.Add(new Frage("Was ist das neueste Betriebssystem von Microsoft?"new List<string>(new string[] { "Win Vista""Win 2000""Win 7" }), "C"));
            fragen.Add(new Frage("Wer war erster Bundeskanzler der BRD?"new List<string>(new string[] { "Konrad Adenauer""Theodor Heuss""Angela Merkel" }), "A"));
            fragen.Add(new Frage("Von wem stammt das Lied Heal the World?"new List<string>(new string[] { "Elvis Presley""Micheal Jackson""Mearaya Carey""Britney Spears" }), "B"));
            fragen.Add(new Frage("Welche Reaktion findet auf der Sonne statt?"new List<string>(new string[] { "Kernspaltung""Kenrschmelzung""Photosynthese" }), "B"));
            fragen.Add(new Frage("Kernspaltung bedeutet..."new List<string>(new string[] { "das zusammenbringen von Atomkernen""die spaltung von Atomkernen""die nutzbarmachung des Sonnenwindes", }), "B"));
            fragen.Add(new Frage("Wie viele Mitglieder hat die EU"new List<string>(new string[] { "10""25""27""32" }), "C"));
            fragen.Add(new Frage("Wie viele Mitglieder hat der Bundestag"new List<string>(new string[] { "20 + Überhangmandate""300 + Überhangmandate""598 + Überhangmandate""895 + Überhangmandate" }), "C"));
            fragen.Add(new Frage("Welcher Verein ist noch nie aus der 1. Bundesliga abgestiegen"new List<string>(new string[] { "FC Bayern""Hamburger SV""Borrusia Dortmund""Schalke 04" }), "B"));
            fragen.Add(new Frage("Was ist EINE Nuss?"new List<string>(new string[] { "Kokosnuss""Erdbeere""Erdnuss""Kiwi" }), "B"));
            fragen.Add(new Frage("."new List<string>(new string[] { ".""."".""." }), "A"));

            foreach (Frage frage in fragen)
            {
                if (frage.StelleFrage())
                {
                    Console.WriteLine("Richtige!");
                   
                    
                }

                else
                {
                    Console.WriteLine("Falsch!");
                    
                }
            }
        }


        class Frage
        {
            string m_fragetext;
            List<string> m_antworten;
            string m_antwort;

            public Frage(string _fragetext, List<String> _antworten, string _antwort)
            {
                m_fragetext = _fragetext;
                m_antworten = _antworten;
                m_antwort = _antwort;
            }

            public bool check(String _userAntwort)
            {
                return m_antwort.ToLower() == _userAntwort.ToLower();
            }

            public bool StelleFrage()
            {
                Console.WriteLine("{0}", m_fragetext);
                char antwortindex = 'A';
                foreach (string antwort in m_antworten)
                {
                    Console.WriteLine("{0} ) {1}", (Char)(antwortindex++), antwort);
                }
                Console.Write("Antwort: ");
                string userantwort = Console.ReadLine();
                return check(userantwort);

            }
        }
       

      
    }

Also das ist mein momentaner Versuch... Ich muss gestehen der Kolege meines Dads hat mir bis hierhin ein paar Tipps gegeben:)...
Nunja und das "Richtig" soll nun eben dann mit der jeweiligen Anzahl von richtigen Antworten ausgegeben werden:)
Welche der von dir aufgezählten Methoden wäre da denn die richtige Methode? Wie gesagt ich bin noch ein völliger Neuling:)
Nochmal danke für eure/deine Antworten:)[cs]


Zuletzt bearbeitet von J3rwis am So 16.05.10 15:56, insgesamt 1-mal bearbeitet
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 16.05.10 15:34 
Auch (und gerade) wenn du Neuling bist, solltest du die Hilfe benutzen. In diesem Fall meine ich die Hilfe des Forums, nämlich oben den Button "Hilfe". Schau nach unter: Hilfe >> Beiträge/Themen schreiben und bearbeiten >> BBCodes >> Sourcecode. Dort steht u.a., wie Code-Auszüge lesbar gemacht werden. (Ist dir das bei anderen Beiträgen noch nicht aufgefallen?)

Das kannst du auch nachträglich erledigen: Gehe auf deinen Beitrag mit dem Schere-Button, öffne "Bereiche", wähle in der ComboBox C# aus, markiere Code (am besten jede Klasse für sich), Plus-Button drücken, Vorschau benutzen, erst dann absenden.

Dann wären ein paar Hinweise zu deiner Programmstruktur ganz nützlich, damit ich/wir nicht versuchen müssen, deine Gedanken nachzuvollziehen und zu erraten.

Zur konkreten Frage: Wo ist denn eine Variable, die die Anzahl der richtigen Antworten zählt?

Jürgen
J3rwis Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 16.05.10 16:05 
Eben das mit der Variablen ist mein Problem. Ich weiß nicht wie ich diese richtig in den Code einbringe... Ich weiß dass ich das Ausgeben von dem " X.te Antwort richtig" irgendwie in verbindung mit einer Variablen bringen muss ... Aber mir fehlt, sozusagen, das Wissen über die nötige Grammatik...
Ich hab schon bei meinem Freund Googel nach einem Beispielcode oder Ähnlichem gesucht... bin aber leider nicht fündig geworten-.-
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 16.05.10 17:56 
Danke für die Code-Formatierung.

Bei diesem Programmaufbau ist das mit der Variablen doch einfach.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        static void Main(string[] args)
        {
            int correctAnswers = 0;
            
            // und dann hier:
                if (frage.StelleFrage())
                {
                    correctAnswers++;
                    Console.WriteLine("Richtige!");
                }
                else
                {
                    Console.WriteLine("Falsch!");
                }

Wo und wie die Ausgabe eingebaut wird, entscheidest natürlich du. Die richtige Variante von Console.WriteLine kennst du ja schon.

Kleine Hinweise: Die User-Antwort kannst du mit ReadKey abfragen. Wenn du ToLower benutzen willst, dann gib doch im Konstruktor gleich den Kleinbuchstaben vor und setze es dort; dann brauchst du nicht bei jeder Antwort die Konvertierung m_antwort.ToLower() vorzunehmen. Außerdem ist userAntwort schlimmstes Denglisch; lies einmal .NET Richtlinien für Namen oder als Kurzfassung Namenskonventionen.

Gruß Jürgen
J3rwis Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 17.05.10 15:48 
@ JüTho : Danke für deine Hilfe, nun klappt alles wie gewünscht.

Danke nochmal! (Auch für den Verweis auf die Hilfe. Hilft wirklich ;)