Autor Beitrag
Mysterio08
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Sa 02.10.10 13:00 
Hallo,

ich habe eine Frage zur Case-Anweisung: Ist es möglich, auch ganze (Integer-)Bereiche prüfen zu lassen? In Delphi wäre das also äquivalent zu "1..5".
Wenn es so etwas nicht gibt: Wie würdet ihr solche Prüfungen vornehmen? Mit if-else (die einzige Alternative, die mir einfällt)?! Da ist dann aber wieder der Nachteil, dass es bei vielen (Bereichs-)Prüfungen sehr unübersichtlich wird.

mfg.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 02.10.10 13:50 
Du kannst nur schauen, ob du die Bereiche mathematisch erfassen kannst und auf wenige Werte reduzieren kannst.

Eine andere Möglichkeit gibt es in C# nicht, da musst du schon if..else benutzen.

Je nach Anwendungszweck und Zahlenbereichen kann es aber andere Tricks bzw. Möglichkeiten geben.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.10.10 15:46 
Also in C lässt man einfach das break am Ende weg. Jetzt ist mir aber die C#-case-Syntax nicht geläufig, deswegen kann ich nicht sagen, ob es da auch so geht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 02.10.10 15:49 
Ja, das geht genauso, aber man muss ja trotzdem die einzelnen Werte angeben.
Mysterio08 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 03.10.10 08:42 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst nur schauen, ob du die Bereiche mathematisch erfassen kannst und auf wenige Werte reduzieren kannst.


Ich bin auf diese Bereichsfrage erst gekommen, als ich eine ganz einfache Aufgabe lösen wollte: in ein Edit wird eine Zahl zwischen 1 und 15 eingegeben und ausgegeben wird die Note - wie man es von der Oberstufe kennt.
Wie würdest du da solch einen mathematischen Bereich erfassen bzw. mit welchem Trick (nur damit ich mal eine Vorstellung habe).
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.10.10 09:18 
Nun, dort macht eine komplette Switch-Abfrage kaum Sinn, da man die Note auch direkt berechnen kann. Bereiche gibt es da für + oder - als Zusatz, das kann man mit modulo zusammenfassen. Hier mal zwei Lösungswege, ein kurzer und einer mit switch. :mrgreen:
ausblenden 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:
        private void button1_Click(object sender, EventArgs e)
        {
            int Mark = 0;
            if (Int32.TryParse(textBox1.Text, out Mark))
                label1.Text = new string[] { "6""5-""5""5+""4-""4""4+""3-"
                    "3""3+""2-""2""2+""1-""1""1+" }[Mark];
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int Mark = 0;
            if (Int32.TryParse(textBox2.Text, out Mark)) {
                int NewMark = 6 - (Int32)Math.Ceiling(Mark / 3.0);
                String MarkString = NewMark.ToString();
                switch (Mark % 3)
                {
                    case 0:
                        if (Mark != 0)
                            MarkString = MarkString + '+';
                        break;
                    case 1:
                        MarkString = MarkString + '-';
                        break;
                }
                label2.Text = MarkString;
            }
        }
Ach ja, für die Zahlen 1-15 als Bereich könntest du modulo 15 benutzen, wenn du schauen willst ob eine Zahl in diesem Bereich ist.