2012-11-05 4 views
3

Il y a un moyen de rendre x array constant après que les données ont été lues par l'utilisateur? Il y a un moyen de rendre variable non modifiable après que sa valeur soit lue par l'utilisateur (par exemple y)?Comment rendre la matrice dynamique constante?

program hmm; 
    uses crt; 
    var 
     i, y: word; 
     x: array of word; 
begin 
    readln(y); 
    y:=y-1; 
    SetLength(x,y); 
    for i := 0 to y do begin 
     read(x[i]); 
    end; 
readkey; 
end. 

Pour y faire constante que j'ai essayé quelque chose comme cela, mais il ne fonctionnera pas - y sera défini comme 0.

program hmm; 
    uses crt; 
    var 
     i: word; 
     x: array of word; 
    const 
    {$J+} 
     y:word = 0; 
    {$J-} 
begin 
    {$J+} 
    readln(y); 
    y:=y-1; 
    {$J-} 
    y:=0; 
    SetLength(x,y); 
    for i := 0 to y do begin 
     read(x[i]); 
    end; 
readkey; 
end. 

Merci pour l'aide.

Répondre

3

Oui. Ne les modifiez pas dans votre code après avoir défini la valeur initiale.

À part ça, il n'y a aucun moyen. Un tableau dynamique par définition est modifiable, et ainsi est une variable - c'est pourquoi ils ont dynamique et variable comme noms.

+0

Donc c'est aussi bête, de ne pas dire stupide: /. À mon humble avis il devrait y avoir un moyen d'attribuer la valeur des constantes à l'exécution, non seulement avant la compilation, mais pouvez-vous me dire pourquoi {$ J +} et {$ J-} ​​ne fonctionnent pas? – Isinlor

+0

Je n'ai aucune idée de pourquoi ils ne fonctionnent pas; Je ne les ai jamais utilisés. En ce qui concerne votre question, je n'ai pas dit que c'était stupide ou stupide; si j'avais pensé cela, j'aurais baissé les taux et voté pour fermer au lieu de répondre. Il n'y a pas besoin d'écrire sur les constantes, jamais, IMO. Acceptez simplement l'entrée de l'utilisateur une fois, puis n'écrivez plus dans les variables dans votre code. C'est très facile à appliquer (c'est ** votre code, après tout), et quand vous passez les variables à d'autres routines, définissez les paramètres comme 'const SomeVar: Integer' et il ne peut pas être changé dans le code de réception du tout. –

+0

BTW: La seule raison, AFAICT, qu'il existe toujours un support pour la "constante inscriptible" ridicule est la prise en charge du code hérité; il a été obsolète depuis la sortie de Delphi 2 (et '{$ J +/-}' a été introduit). –

Questions connexes