matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Hochschulmathe
  Status Uni-Analysis
    Status Reelle Analysis
    Status UKomplx
    Status Uni-Kompl. Analysis
    Status Differentialgl.
    Status Maß/Integrat-Theorie
    Status Funktionalanalysis
    Status Transformationen
    Status UAnaSon
  Status Uni-Lin. Algebra
    Status Abbildungen
    Status ULinAGS
    Status Matrizen
    Status Determinanten
    Status Eigenwerte
    Status Skalarprodukte
    Status Moduln/Vektorraum
    Status Sonstiges
  Status Algebra+Zahlentheo.
    Status Algebra
    Status Zahlentheorie
  Status Diskrete Mathematik
    Status Diskrete Optimierung
    Status Graphentheorie
    Status Operations Research
    Status Relationen
  Status Fachdidaktik
  Status Finanz+Versicherung
    Status Uni-Finanzmathematik
    Status Uni-Versicherungsmat
  Status Logik+Mengenlehre
    Status Logik
    Status Mengenlehre
  Status Numerik
    Status Lin. Gleich.-systeme
    Status Nichtlineare Gleich.
    Status Interpol.+Approx.
    Status Integr.+Differenz.
    Status Eigenwertprobleme
    Status DGL
  Status Uni-Stochastik
    Status Kombinatorik
    Status math. Statistik
    Status Statistik (Anwend.)
    Status stoch. Analysis
    Status stoch. Prozesse
    Status Wahrscheinlichkeitstheorie
  Status Topologie+Geometrie
  Status Uni-Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenSoftwaretechnik und ProgrammierungEndl. Automaten
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
Forum "Softwaretechnik und Programmierung" - Endl. Automaten
Endl. Automaten < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Endl. Automaten: Aufgabe
Status: (Frage) beantwortet Status 
Datum: 16:42 So 10.06.2012
Autor: egal

Aufgabe
Es soll überprüft werden, ob das Eingegebene aus blanks, keinem oder einem Vorzeichen '+' bzw. '-' und aus sonst nur Ziffern besteht, d.h. als eine formal korrekte ganze Zahl zu interpretieren ist i.S.d. endlichen Automaten.

Quellcode dazu:

import eip.*;

public class DigitAutomat2
{

   public static boolean digitCheck2(String inputString)
   {
   int q = 2;
   boolean zeichenTest = true;
   for (int i = 0; i < inputString.length(); i++)
   {
   char Zeichen = inputString.charAt(i);
   switch (q)
   {
   case 1:
   switch (Zeichen)
   {
   case ' ':
   q = 1;
   break;
   default:
   zeichenTest = false;
   break;
   }
   case 2:
   switch (Zeichen)
   {
   case '+':
   q = 2;
   break;
   case '-':
   q = 2;
   break;
   case '0': case '1': case '2': case '3': case '4':
   case '5': case '6': case '7': case '8': case '9':
   q = 3;
   break;
   default:
   zeichenTest = false;
   break;
   }
   break;
  
   case 3:
   switch (Zeichen)
   {
   case '0': case '1': case '2': case '3': case '4':
   case '5': case '6': case '7': case '8': case '9':
   q = 3;
   break;
   default:
   zeichenTest = false;
   break;
   }
   break;
  
   case 4:
   switch (Zeichen)
   {
   case '0': case '1': case '2': case '3': case '4':
   case '5': case '6': case '7': case '8': case '9':
   q = 3;
   break;
   default:
   zeichenTest = false;
   break;
   }
   break;
  
   default:
   zeichenTest = false;
   }
   }
   return zeichenTest;
   }
}

und nun die Klasse für die main, die DigitAutomat2 verwendet:

import eip.*;

public class IntDigitAutomat
{
static public void main(String[] args)
{
DigitAutomat2 dsa = new DigitAutomat2();

Std.out.print("Eingabe: ");

String inputString = Std.in.readString(); //Datentyp "String" = Zeichenketten

if (dsa.digitCheck2(inputString))
Std.out.println(inputString + " Automat sagt JA! ");
else
Std.out.println(inputString + " Automat sagt NEIN! ");
}
}

Hallo,

ich versuche den oberen Quellcode nachzuvollziehen und ich weiß einfach nicht, was "char Zeichen = inputString.charAt(i); " bedeutet... was genau macht das inputString.charAt(i)???

Lt. Internetquellen gibt charAt(); für eine Zahl eine entsprechendes Zeichen aus (ist das wie aus den ASCII-Tabellen für den Datentyp Char????)... so ergibt charAt(7); die Zahl 7 im Output...

Dann leite ich mir das folgendermaßen für meinen Fall ab:
Ich gebe ein 43, was überprüft werden soll.
Die Schleife geht zwei mal durch genommen. das inputString.charAt(i)? wandelt  also jeweils die 1 und 2 um in entsprechende Zeichen, wozu aber diese Zeichen, wenn man einfach das eingegebene, und zwar inputString später in den cases überprüfen kann?!

2. Frage, wieso verschachtelt man die switch-case-Anweisung überhaupt?!

Hoffe die Aufgabenstellung ist in Ordnung so und der Quelltext trotz schmächtiger Formatierung zu verstehen.

Besten Dank für eure Antworten


        
Bezug
Endl. Automaten: Antwort
Status: (Antwort) fertig Status 
Datum: 17:29 So 10.06.2012
Autor: felixf

Moin!

> Es soll überprüft werden, ob das Eingegebene aus blanks,
> keinem oder einem Vorzeichen '+' bzw. '-' und aus sonst nur
> Ziffern besteht, d.h. als eine formal korrekte ganze Zahl
> zu interpretieren ist i.S.d. endlichen Automaten.
>
> Quellcode dazu:
>  

1:
2: > import eip.*;
3: >  
4: > public class DigitAutomat2
5: >  {
6: >  
7: > public static boolean digitCheck2(String inputString)
8: >     {
9: >   int q = 2; 
10: >  boolean zeichenTest = true;
11: >   for (int i = 0; i < inputString.length(); i++) 
12: >  { 
13: >  char Zeichen = inputString.charAt(i); 
14: >  switch (q)
15: >   {
16: >   case 1:
17: >   switch (Zeichen)
18: >   {
19: >   case ' ':
20: >   q = 1;
21: >   break;
22: >   default:
23: >   zeichenTest = false;
24: >   break;
25: >   }
26: >   case 2:
27: >   switch (Zeichen)
28: >   {
29: >   case '+':
30: >   q = 2;
31: >   break;
32: >   case '-':
33: >   q = 2;
34: >   break;
35: >   case '0': case '1': case '2': case '3': case '4': 
36: >  case '5': case '6': case '7': case '8': case '9':
37: >   q = 3;
38: >   break;
39: >   default:
40: >   zeichenTest = false;
41: >   break;
42: >   }
43: >   break;
44: >  
45: >  case 3:
46: >   switch (Zeichen)
47: >   {
48: >   case '0': case '1': case '2': case '3': case '4': 
49: >  case '5': case '6': case '7': case '8': case '9':
50: >   q = 3;
51: >   break;
52: >   default:
53: >   zeichenTest = false;
54: >   break;
55: >   }
56: >   break;
57: >  
58: >  case 4:
59: >   switch (Zeichen)
60: >   {
61: >   case '0': case '1': case '2': case '3': case '4': 
62: >  case '5': case '6': case '7': case '8': case '9':
63: >   q = 3;
64: >   break;
65: >      default:
66: >      zeichenTest = false;
67: >      break;
68: >   }
69: >   break;
70: >  
71: >  default:
72: >   zeichenTest = false;
73: >   }
74: >   }
75: >   return zeichenTest;
76: >     }
77: >  }
78: >  
79: > und nun die Klasse für die main, die DigitAutomat2 
80: > verwendet:
81: >  
82: > import eip.*;
83: >  
84: > public class IntDigitAutomat 
85: > {
86: >   static public void main(String[] args) 
87: >  {
88: >   DigitAutomat2 dsa = new DigitAutomat2();
89: >  
90: >  Std.out.print("Eingabe: ");
91: >  
92: >  String inputString = Std.in.readString(); //Datentyp 
93: > "String" = Zeichenketten
94: >  
95: >  if (dsa.digitCheck2(inputString))
96: >   Std.out.println(inputString + " Automat sagt JA! ");
97: >   else
98: >   Std.out.println(inputString + " Automat sagt NEIN! ");
99: >   }
100: >  }

>
> ich versuche den oberen Quellcode nachzuvollziehen und ich
> weiß einfach nicht, was "char Zeichen =
> inputString.charAt(i); " bedeutet... was genau macht das
> inputString.charAt(i)???
>  
> Lt. Internetquellen gibt charAt(); für eine Zahl eine
> entsprechendes Zeichen aus (ist das wie aus den
> ASCII-Tabellen für den Datentyp Char????)... so ergibt
> charAt(7); die Zahl 7 im Output...

Der Befehl "char Zeichen = inputString.charAt(i);" erzeugt eine Variable Zeichen vom Typ char, welche den Wert von inputString.charAt(i) enthaelt.

Die Methode []charAt(int) der Klasse String (inputString ist eine Variable vom Typ String) liefert das i-te Zeichen des Strings zurueck. Ist etwa inputString = "test", so ist inputString.charAt(0) == 't', inputString.charAt(1) == 'e', usw.

> Dann leite ich mir das folgendermaßen für meinen Fall
> ab:
>  Ich gebe ein 43, was überprüft werden soll.

Damit ist inputString == "43".

Und somit ist inputString.charAt(0) == '4' und inputString.charAt(1) == '3'.

>  Die Schleife geht zwei mal durch genommen. das
> inputString.charAt(i)? wandelt  also jeweils die 1 und 2 um

Was ist 1 und 2 hier?

> in entsprechende Zeichen, wozu aber diese Zeichen, wenn man
> einfach das eingegebene, und zwar inputString später in
> den cases überprüfen kann?!

Ich verstehe nicht was du meinst.

> 2. Frage, wieso verschachtelt man die switch-case-Anweisung
> überhaupt?!

Es geht hier doch darum, einen endlichen Automaten zu simulieren. Die Variable $q$ sagt, in welchem Zustand der Automat gerade ist. Je nach Zustand soll das aktuelle Zeichen verschieden interpretiert werden. Die aeussere switch-Anweisung entscheidet, welcher Zustand der aktuelle ist, und die innere jeweils, welches das aktuelle Zeichen ist (und was dann passieren soll).

LG Felix


Bezug
                
Bezug
Endl. Automaten: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:21 So 10.06.2012
Autor: egal

perfekt erklärt Felix, danke schön und schönes Wochenende ;-)

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.unimatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]