Ein Array ist eine Ansammlung mehrerer, unterschiedlicher Zeichen, auf die man durch Nummerierung genauen Zugriff hat.

Da der String nicht diese exakte Zugriffsmöglichkeit bietet, sind Arrays besser geeignet, einzelne Zeichen aufzufinden und eventuell neu anzuordnen.
Jedes Zeichen ist durch ASCII oder ISO 646 indiziert und so ähnelt das Array einem Regal mit Postfächern. Nur so wird aufgefunden.

Achten Sie darauf, mittels Bedingung nur Eingaben im Bereich des Arrays zuzulassen. Das Programm sucht sonst endlos nach Nonexistenzen und stürzt schließlich ab!

Bedingungen mit if... else...  |   for Schleife  |   Datentypen  |   Strings  |   Container  |   Suchen und Ersetzen   |  ASCII in C++ abrufen

Im Beispiel links wird dreimal ein und dieselbe Ausgabe dargestellt aber das aus drei verschiedenen Definitionen.

Mit sizeof() ist hier nicht der Speicherbedarf gemeint, sondern der Inhalt der Arrays. Die for Schleife zählt also den Inhalt mit i < sizeof() ab. Beachten Sie besonders die Anzahl der Elemente, speziell die 0 in C++, um nicht Positionen ausserhalb des Arrays anzusprechen.

Dies ist ein besonders gutes Beispiel um zu zeigen, was innerhalb des Arrays steht und wie es abgerufen werden kann. Da im cout keine bestimmte Position sondern i als Element definiert wird, werden alle Elemente im Array ausgegeben.

Das hört sich recht einfach an; ist es aber nicht! Der Computer weiß nämlich nicht was Ziffern sind und er weiß auch nicht was fünf Stellen sind.

Wenn ich fünf Stellen eingebe - etwa "fuenf" - dann sind das zwar fünf Stellen aber leider keine Ziffern. Und wenn ich "800mu" eintippe ist dies dem Computer auch einerlei, denn auch hier sind fünf Stellen vorhanden.

Also schreiben wir ein Programm, das auf beide Kriterien achtet und im Ergebnis eben nur fünf Ziffern gelten lässt und keine versehentlichen Eingaben oder bewusst gewählten Unfug.
Wichtig ist auch der Unterschied zwischen Ziffernkombination und Zahl. So hat die Ziffernkombination 00001 den Wert 1 und die Zahl 10000 hat eben den Wert 10000.

Beliebige Eingabe
Wert der Eingabe
Alle Eingaben...
Damit hier zwischen Zeichen und Zahlen unterschieden wird, braucht es nur zwei kleine Bedingungen:

if ( x <= 0 || x > 0 ) ... und somit ist der gesamte Zahlenbreich erfasst!

Alles andere sind dann eben Zeichen. Sorgen Sie in JavaScript aber dafür, daß auch alle Eingabetypen möglich sind.
Mit parseInt oder parseFloat wären ohnehin ausschliesslich Zahlen zulässig und Unterscheidungen obsolet.
Probieren Sie auch Eingaben wie 007 oder 0815 und achten Sie dabei auf den Wert!

Der atoi ( Abk. für Array to Integer ) macht zunächst stdlib.h als Direktive nötig. Dieser atoi interpretiert die Ziffern als Integer aus dem array, worin ja alles Mögliche stehen kann. Uns geht es aber um die Ziffern. Hier fällt auf, daß etwa eine Postleitzahl mit fünf Stellen im Definitionsbereich des arrays mit dem Typ char leicht Platz findet. Gut so, denn dann hat man Platz, sich zu vertippen.

Der eigentliche Auszug der Ziffern aus dem Array passiert mittels Definition in eing = atoi ( variable )

Klar, daß eine Variable des Typs Integer vergeben wird, um zu zählen usw. Dann wird's etwas mathematisch durch die Werte in den Bedingungen und letztlich wird obige for Schleife als Bedingung herangezogen.

Postleitzahl

Anzahl der Stellen

Wert der Eingabe

Alle Werte...

Man kann die Länge der Eingabe natürlich in HTML bestimmen und zwar mit maxlength="5". Dennoch soll dieses kleine Skript obiges Programm simulieren und zwar mittels for Schleife wie in C++. Erst bei einer Länge von 5 wird hier der Wert ausgegeben. Alles andere ist irrelevant und wird konsequent mit 0 quittiert. Auch und sogar die Eingabe 00000, die ja eigentlich 5 Stellen hat, spielt hierbei keine Rolle.

Solange Sie Ihre Eingaben machen, wird im Feld Entsprechendes angezeigt. Sobald Sie fünf Stellen erreicht haben, werden Sie im Dialog gefragt, ob Sie die Werte mit OK oder Abbrechen übernehmen wollen oder nicht.

Wahr oder Falsch mit bool'schen Datentypen

Die Eingaben der Benutzer sind nicht immer bedacht und korrekt. Daher ist meines Erachtens das Thema wichtig und verdient auch die Betrachtung mehrerer Möglichkeiten zur Lösung des Problems. Pimäre Aufgabe des Programmierers ist es ja, alle Möglichkeiten vorwegzudenken.

Es bieten sich Schlagworte wie stringstream oder atoi oder auch stoi immer wieder an. Nicht alle sind gleichermassen geeignet. Häufig ist das, was schnell funktioniert auf Dauer nicht mehr geeignet, um am Programm weiter zu schreiben.

Ferner wird z.B. das Kommando stoi in C++ 11 nicht mehr unterstützt. Der stringstream tritt an seine Stelle, verlangt aber andere Handhabung.

Obiges Beispiel der Postleitzahlen gab schon einen deutlichen Vorgeschmack. Im Folgenden sollen weitere Methoden andgewandt werden. Dabei können sich Themen ausdehnen und so überschneiden. Treffen Sie auf Unbekanntes, dann einfach in anderen Kapiteln stöbern.

Die for Schleife  |   Datentypen  |   Strings  |   Zeichen zählen  |   Der Struct

Die Länge eines Arrays lässt sich ferner mit strlen ( Abk. für string length ) bestimmen. Allerdings ist dies ein Sonderkommando, wie ich sie nenne, und kein grundlegendes Prinzip der Informatik wie die for Schleife.

In diesen Sonderkommandos sind die grundlegenen Funktionen enthalten, was zur Folge hat, daß punktueller Zugriff oder Modifizierungen nicht immer möglich sind.

Achten Sie bei beiden Quellcodes auf die Bibliothek string.h und auf den Umstand, daß zwar ein Array mit dem Datentyp char deklariert wurde, für das Kommando strlen ( variable ) aber besagte Bibliothek string.h notwendig ist.

Das Array nimmt zwar bis zu 30 Zeichen auf, aber unsere Bedingung bezieht sich auf 20 Zeichen. Ausserdem ist als Eingabe cin.getline ( variable , max. Zeichen ) notwendig, da sonst ab dem ersten Leerzeichen die Kette unterbrochen wird. Als Datentyp dominiert hier also der String.

Eigentlich sind zwei Aktionen nötig, um Zahlen von Zeichen zu trennen. Sie müssen dementsprechend zwei Datentypen deklarieren und den atoi dem Integer zuweisen. Array to Integer wird mit atoi abgekürzt. Ist die Eingabe eine Zahl, dann wird der Integer ausgegeben; ist es ein Zeichen, dann der Charakter.

Der Charakter wird als Array quasi in Rohform ausgegeben und nicht 0 als Ersatz, während der Integer mit
eing = atoi ( maxim ) erst definiert werden muss. Bei der Gelegenheit kann man auch die Länge des Arrays mit
cin . getline ( maxim , 10 ) recht komfortabel begrenzen.

atoi und Architektur

Der Struct ist im minimalen Beispiel eigentlich unterfordert; er fasst lediglich einen Datentyp. Wichtiger ist das Alias zwischen Struct und Hauptprogramm. Dieses Alias schafft den zweiten Datentyp, der ja ein Integer sein soll. So wird per string eingab immer nur ein String aufgenommen. Der Integer ist im Hauptprogramm deklarativ gar nicht vorgesehen.

Wohl aber im Struct und dieser kennt nun wieder nur Integer. Hier wird also munter zwischen den Datentypen gewechselt. Ausserdem habe ich es mir zur Angewohnheit gemacht, Integer auf ihre Echtheit zu prüfen mittels kleiner Rechnung.

Der Vollständigkeit halber ein Progrämmchen, das nicht nur den Typ der Eingabe unterscheidet, sondern auch die Zeichen zählt. Dabei verzichte ich bewusst auf strlen und nehme solide die for Schleife.

Das Programm zählt ungeachtet des Datentyps die Anzahl der Zeichen. Die Unterscheidung ob Zeichen oder Zahlen eingegeben wurden wird im Anschluss gemacht und mit der Anzahl ausgegeben.

Belegung

Machen Sie im Skript Ihre Eingabe - oberes Feld - und nehmen Sie das Zeichen auf. Für jedes Zeichen müssen Sie die Eingabe bestätigen. Somit wird ein Array bzw. der Index Stück für Stück besetzt.

In JavaScript geht es dabei um den Parameter a für das jeweilige Zeichen dem Parameter x des Array. Beide Variablen müssen global deklariert werden. Die Zählvariable e in der for Schleife kann lokal deklariert sein.

Kernstück ist e += ' ' + y + ' := ' + a [ y ] woraus durch Addition etwa ein Appendix entsteht. Um das Array zu löschen, ist eine komplette Neuinitialisierung nötig x = 0; a [ x ] = 0; a.length = 0

Stoppuhr und Zeiten nehmen

Startseite  |  Hinweise und Impressum  |  Facebook  |  Twitter  |  Google plus