braunbär hat geschrieben:Datenstrukturen dienen dazu, irgend etwas zu modellieren. Die obere und untere Grenze eines Array entspricht normalerweise genauso irgend etwas, was im Modell abgebildet wird, wie die drei bytes oder zwei Strings des record irgend etwas entspricht, was in diesem Record abgebildet wird. Und natürlich kann ich statt von 10 bis 20 - was eben gerade den abzubildenden Daten entspricht - genauso von 0 bis 10 gehen, 0 entspricht dann eben 10, 1 entspricht 11, usw. Aber das ist doch kein Vorteil.
Man könnte ja in records prinzipiell alle Daten als Strings speichern , das wäre doch eine super "Vereinheitlichung". Manche simple Datenbanksysteme arbeiten ja sogar so.
Das beispiel ist sehr schlecht, da Strings Zahlen in Log(10) abspeichern, Binäre Datentypen allerdings in Log(2). Rechnen wir Log(10)/Log(2) ergibt das Ungefähr 3, also ist die String Variante um einen Faktor 3 Schlechter (Einfaches Beispiel, die Zahl 100 als String 3 Byte, als Binärer Datentyp passt sie in 1 Byte). Darum veränderst du damit das Asymptotische Verhalten deines Programmes, was Arraygrenzen nicht tuen.
braunbär hat geschrieben:Man kann sich zu allem irgend welche absurde Szenarien ausdenken. Dein Anfänger wird auf die Art sowieso nicht weit kommen, und wird auch ohne flexible array-Grenzen ohne intensivte Unterstützung sein Programm nicht zum Laufen bringen. Ich rede nicht von einem blutigen Anfänger, der sich an einer Aufgabe versucht, mit der er hoffnungslos überfordert ist.
Du findest das absurd? ich habe erst vor kurzem von einem Anfänger in einer Skriptsprache die Frage gesehen warum man Strings nicht als Funktionen verwenden kann (also "Funktion1()" statt Funktion1()). Das sich Anfänger Code den sie nicht verstehen aus dem Internet zusammenkopieren sehe ich Täglich (ich bin in verschiedenen Foren unterwegs, u.a. in einem mit sehr vielen neueinsteigern), da kommt dann die Frage auf warum ein Fehler auftritt, wenn sie DWord für 64 Bit Zahlen verwenden, oder ähnliches, weil die sich einfach komplett hirnlos alles zusammenkopieren, und hoffen das es funktioniert.
Tatsächlich habe ich das Problem das Arrays mit 0 nicht 1 anfangen (vor dem du dich in einem vorherigen Post ja so ausgelassen hast) so gut wie nie gesehen, copy & paste errors sehe ich allerdings wirklich fast täglich.
braunbär hat geschrieben:Dass du dich inzwischen gezwungenermaßen daran gewöhnt hast derart schief zu denken, heißt ja nicht, dass das für alle anderen auch gelten muss. Ein gewöhnlicher Mensch beginnt beim Zählen mit 1, und ohne diese 0-basierten offenen Felder wäre das völlig selbstverständlich. Wir haben Jahrzehntelang in Turbo-Pascal Software entwickelt, da wäre es keinem Programmierer im Traum eingefallen, alle Felder mit 0 als untersten Index anzulegen. Manche Felder, wo man es braucht, natürlich schon. Und in seltenen, begründeten Ausnahmefällen eine ganz andere untere Array-Grenze, da ist dann auch kein Mißverständnis möglich.
Ich sehe ein das es natürlicher ist mit 1 anzufangen, ich finde nur das es öfter Praktischer ist mit 0 anzufangen. Darum wenn ich die Wahl hätte zwischen immer mit 0 anzufangen und immer mit 1 anzufangen würde ich 0 wählen. Und wenn ich die Wahl hätte immer mit 0 anzufangen, oder Frei wählen zu dürfen würde ich immer 0 anfangen, da dies eine Unnötige Fehlerquelle ist. Wenn ich unnötige Fehlerquellen möchte würde ich C++ Programmieren, aber ich habe Pascal extra gewählt da darin die meisten Unnötigen Fehlerquellen wegfallen.
Es wäre einfach eine Sache mehr bei der ein Fehler auftreten kann, während wenn es immer bei 0 Anfängt, muss man nicht drüber nachdenken und die Fehlerchance ist Praktisch 0 (wenn man doch ne 1 hinschreibt sollte man den Fehler beim erneuten durchlesen sehr schnell finden)