Le langage de programmation C est connu comme un langage de tableau à index zéro. Le premier élément d'un tableau est accessible à l'aide de 0
. Par exemple double arr[2] = {1.5,2.5}
Le premier élément du tableau arr
est à la position 0. arr[0] === 1.5
Quels langages de programmation sont des index basés sur 1?
J'ai entendu parler de ces langages commençant à 1 au lieu de 0 pour l'accès aux baies: ALGOL, Matlab, Action !, Pascal, Fortran, Cobol. Est-ce complet?
Plus précisément, un tableau basé sur 1 accéderait au premier élément avec 1, pas zéro.
Une liste peut être trouvée sur wikipedia .
ALGOL 68
APL
AWK
CFML
COBOL
Fortran
FoxPro
Julia
Lua
Mathematica
MATLAB
PL/I
Ring
RPG
Sass
Smalltalk
Wolfram Language
XPath/XQuery
Fortran commence à 1. Je sais que parce que mon père avait l'habitude de programmer Fortran avant ma naissance (j'ai 33 ans maintenant) et il critique vraiment les langages de programmation modernes pour commencer à 0, disant que ce n'est pas naturel, pas comment les humains pensent, contrairement aux mathématiques, et bientôt.
Cependant, je trouve les choses commençant à 0 assez naturelles; mon premier vrai langage de programmation était C et * (ptr + n) n'aurait pas si bien fonctionné si n n'avait pas commencé à zéro!
Une assez grande liste de langues est sur Wikipedia sous Comparaison des langages de programmation (tableau) sous la table "Liste de références croisées du système de tableau" (colonne d'index de base par défaut)
This a une bonne discussion sur 1- contre 0- indexé et les abonnements en général
Pour citer le blog:
EWD831 par E.W.Dijkstra, 1982.
Lorsqu'il s'agit d'une séquence de longueur N, dont nous souhaitons distinguer les éléments par indice, la prochaine question vexante est quelle valeur d'indice attribuer à son élément de départ. Le respect de la convention a) donne, au début de l'indice 1, la plage d'indices 1 ≤ i <N + 1; commencer par 0, cependant, donne la plus belle plage 0 ≤ i <N. Laissons donc nos ordinaux commencer à zéro: l'ordinal d'un élément (indice) est égal au nombre d'éléments qui le précèdent dans la séquence. Et la morale de l'histoire est que nous devrions mieux considérer - après tous ces siècles! - zéro comme un nombre le plus naturel.
Remarque :: De nombreux langages de programmation ont été conçus sans tenir dûment compte de ce détail. Dans FORTRAN, les indices commencent toujours à 1; en ALGOL 60 et en Pascal, la convention c) a été adoptée; la plus récente SASL s'est repliée sur la convention FORTRAN: une séquence en SASL est en même temps une fonction sur les entiers positifs. Pitié! (Fin de la remarque.)
Dans Ada, vous pouvez également définir vos indices de tableau selon vos besoins:
A : array(-5..5) of Integer; -- defines an array with 11 elements
B : array(-1..1, -1..1) of Float; -- defines a 3x3 matrix
Quelqu'un pourrait soutenir que les plages d'index de tableau définies par l'utilisateur entraîneront des problèmes de maintenance. Cependant, il est normal d'écrire du code Ada d'une manière qui ne dépend pas des indices de tableau. À cette fin, le langage fournit des attributs d'élément, qui sont automatiquement définis pour tous les types définis:
A'first -- this has the value -5
A'last -- this has the value +5
A'range -- returns the range -5..+5 which can be used e.g. in for loops
Fortran, Matlab, Pascal, ALGOL, Smalltalk et bien d'autres.
Vous pouvez le faire en Perl
$[ = 1; # set the base array index to 1
Vous pouvez également commencer par 42 si vous en avez envie. Cela affecte également les index de chaîne.
En fait, l'utilisation de cette fonctionnalité est fortement déconseillée.
JDBC (pas un langage, mais une API)
String x = resultSet.getString(1); // the first column
Lua - décevant
Trouvé un - Lua (langage de programmation)
Vérifiez la section des tableaux qui dit -
"Les tableaux Lua sont basés sur 1: le premier index est 1 plutôt que 0 comme c'est le cas pour de nombreux autres langages de programmation (bien qu'un index explicite de 0 soit autorisé)"
VB Classic, au moins à travers
Option Base 1
Les chaînes en Delphi commencent à 1.
(Les tableaux statiques doivent avoir une limite inférieure spécifiée explicitement. Les tableaux dynamiques commencent toujours à 0.)
PL/SQL . Un résultat de cela est lorsque vous utilisez des langues qui commencent à partir de 0 et que vous interagissez avec Oracle, vous devez gérer vous-même les conversions 0-1 pour l'accès aux tableaux par index. En pratique, si vous utilisez une construction comme foreach
sur des lignes ou accédez à des colonnes par nom, ce n'est pas vraiment un problème, mais vous voudrez peut-être la colonne la plus à gauche, par exemple, qui sera la colonne 1.
L'ensemble des langages wirthiens, y compris Pascal, Object Pascal, Modula-2, Modula-3, Oberon, Oberon-2 et Ada (ainsi que quelques autres que j'ai probablement négligés) permettent aux tableaux d'être indexés à partir de n'importe quel point que vous aimez, y compris, évidemment, 1.
Erlang indexe les tuples et les tableaux à partir de 1.
Je pense - mais je ne suis plus positif - que ALGOL et PL/1 indexent tous les deux à partir de 1. Je suis également assez sûr que Cobol indexe à partir de 1.
Fondamentalement, la plupart des langages de programmation de haut niveau avant C indexés à partir de 1 (avec les langages d'assemblage étant une exception notable pour des raisons évidentes - et la raison pour laquelle les index C à partir de 0) et de nombreux langages extérieurs à l'hégémonie dominée par C le font encore à ce jour.
Les index commencent à un dans CFML.
ColdFusion - même s'il est Java sous le capot
Ada et Pascal.
Personne n'a mentionné XPath.
Mathematica et Maxima, en plus d'autres langues déjà mentionnées.
Il y a aussi Smalltalk
informix, en plus d'autres langues déjà mentionnées.
Visual FoxPro, FoxPro et Clipper utilisent tous des tableaux où l'élément 1 est le premier élément d'un tableau ... Je suppose que c'est ce que vous entendez par 1 indexé.
De base - pas seulement VB, mais toutes les anciennes versions numérotées de la ligne des années 1980.
Richard
Je vois que la connaissance de fortran ici est toujours sur la version '66.
Fortran a variable à la fois les limites inférieures et supérieures d'un tableau.
Signification, si vous déclarez un tableau comme:
real, dimension (90) :: x
alors 1 sera la borne inférieure (par défaut).
Si vous le déclarez comme
real, dimension(0,89) :: x
cependant, il aura une limite inférieure de 0.
Si au contraire vous le déclarez comme
real, allocatable :: x(:,:)
alors vous pouvez l'allouer à ce que vous voulez. Par exemple
allocate(x(0:np,0:np))
signifie que le tableau aura les éléments
x(0, 0), x(0, 1), x(0, 2 .... np)
x(1, 0), x(1, 1), ...
.
.
.
x(np, 0) ...
Il existe également des combinaisons plus intéressantes possibles:
real, dimension(:, :, 0:) :: d
real, dimension(9, 0:99, -99:99) :: iii
qui sont laissés comme devoirs pour le lecteur intéressé :)
Ce ne sont que ceux dont je me suis souvenu du haut de ma tête. Étant donné que l'une des principales forces de fortran est la capacité de gestion des baies, il est clair qu'il existe de nombreuses autres entrées et sorties non mentionnées ici.
RPG, y compris RPGLE moderne
FoxPro tableaux utilisés à partir de l'index 1.
dBASE a utilisé des tableaux à partir de l'index 1.
Bien que C soit de par sa conception 0 indexé, il est possible d'organiser l'accès à un tableau en C comme s'il était indexé 1 (ou toute autre valeur). Ce n'est pas quelque chose que vous attendez d'un codeur C normal, mais cela aide parfois.
Exemple:
#include <stdio.h>
int main(){
int zero_based[10];
int* one_based;
int i;
one_based=zero_based-1;
for (i=1;i<=10;i++) one_based[i]=i;
for(i=10;i>=1;i--) printf("one_based[%d] = %d\n", i, one_based[i]);
return 0;
}