#1 Le 21/12/2007, à 21:40
- Tycho Brahe
[résolu] Pascal: assignation de valeur a la 1ère case d'un tableau
Bonjour,
J'ai rencontré aujourd'hui un petit soucis avec les tableaux en Pascal.
Code en cause : http://rafb.net/p/QvCArS98.html (code mis plus bas en cas de lien mort)
Description : On entre une séquence d'ADN (une série de lettres) qui est stoquée dans un tableau. Le programme retourne la séquence d'ADN complémentaire (il remplace quelques lettres dans la séquence). Ceci n'est qu'un petit exercice, on suppose donc que les valeurs entrées sont toutes correctes et ne dépassent pas les limites (cf tableau).
Problème : Il est impossible d'assigner une valeur a la première à sequence[0] (la première lettre de la séquence) par une saisie au clavier. Il est pourtant tout a fait possible de lui assigner une valeur "manuellement" (en utilisant en dehors du for un sequence[0] := 'A'; par exemple).
Matériel : J'utilise le compilateur Free pascal, version 2.0.4-5 (version présente dans les dépots ubuntu). Avant ceci j'ai également testé depuis ma fac qui doit proposer une version plus ancienne du Free Pascal Compiler.
Questions : Pourquoi est-il impossible d'assigner ainsi une valeur a sequence[0] ? Que faire pour y remédier.
Edit :
Program adn;
Type
ADNsequence = array of char;
Var
sequence : ADNsequence;
ind : smallint;
longueur : smallint;
Begin
(* Saisie de la sequence ADN *)
writeln ('Donnez la longueur de la sequence : ');
read (longueur);
SetLength(sequence, longueur);
writeln ('Donnez la sequence d_adn : ');
for ind := 0 to (longueur-1) do
readln(sequence[ind]);
(* Affichage de la sequence complementaire *)
for ind := 0 to (longueur-1) do
begin
case sequence[ind] of
'A' : write ('T');
'T' : write ('A');
'C' : write ('G');
'G' : write ('C');
otherwise write (sequence[ind])
end;
end;
writeln('');
End.
Dernière modification par Tycho Brahe (Le 22/12/2007, à 00:04)
Loi de Newton :
Si tu restes à glander sous le pommier, tu pourrais bien prendre une pomme sur la gueule.
Hors ligne
#2 Le 21/12/2007, à 22:06
- curious
Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau
vérifies d'abord le type d'éléments déclaré surtout pas des constants
Hors ligne
#3 Le 21/12/2007, à 22:24
- Tycho Brahe
Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau
vérifies d'abord le type d'éléments déclaré surtout pas des constants
C'est un tableau de caractères et on entre que des caractères, donc pas d'erreur de type en théorie. Cependant suite a ton message j'ai testé avec des entiers et des réels, celà fonctionne. Je ne comprend donc pas pourquoi le tout premier caractère entré fonctionne mal lorsqu'il doit être un caractère, ceci d'autant plus que si on entre une valeur d'un autre type on a une runtime error qui stop le programme, ce qui n'est pas le cas ici.
Loi de Newton :
Si tu restes à glander sous le pommier, tu pourrais bien prendre une pomme sur la gueule.
Hors ligne
#4 Le 21/12/2007, à 22:26
- aleph
Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau
> Pourquoi est-il impossible d'assigner ainsi une valeur a sequence[0] ? Que faire pour y remédier.
Parce qu'en Pascal les tableaux (array) sont de base 1.
http://courses.cs.vt.edu/~cs3304/FreePascal/doc/ref/node6.html#SECTION03331000000000000000
#5 Le 21/12/2007, à 22:29
- Tycho Brahe
Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau
> Pourquoi est-il impossible d'assigner ainsi une valeur a sequence[0] ? Que faire pour y remédier.
Parce qu'en Pascal les tableaux (array) sont de base 1.
http://courses.cs.vt.edu/~cs3304/FreePascal/doc/ref/node6.html#SECTION03331000000000000000
Ce n'est pas ce qui est indiqué dans la documentation officielle de Free Pascal :
http://www.freepascal.org/docs-html/ref … 390003.3.1
After a call to SetLength, valid array indexes are 0 to 999: the array index is always zero-based.
(Nota : les valeurs 0 et 999 sont en relation avec un exemple o๠on fait un tableau de 1000 cases)
Et même si c'était el cas, j'ai déjà testé depuis longtemps : celà revient exactement au même résultat final.
Dernière modification par Tycho Brahe (Le 21/12/2007, à 22:31)
Loi de Newton :
Si tu restes à glander sous le pommier, tu pourrais bien prendre une pomme sur la gueule.
Hors ligne
#6 Le 21/12/2007, à 22:52
- aleph
Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau
Il y longtemps que je n'ai plus fait du Pascal.
Une piste: tu ne mélangerais pas par hasard tableaux dynamiques et statiques dans tes déclarations ?
Sinon, je sèche.
#7 Le 21/12/2007, à 23:06
- Tycho Brahe
Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau
Il y longtemps que je n'ai plus fait du Pascal.
Une piste: tu ne mélangerais pas par hasard tableaux dynamiques et statiques dans tes déclarations ?Sinon, je sèche.
A l'origine j'avais un tableau statique uniquement, je en connaissais pas les tableaux dynamiques en Free Pascal (ma prof m'avais intox en me disant que ça n'existais pas <_<). C'est en me documentant sur ce problème que je les ai découvert, j'ai donc réécrit mon code avec ce nouveau type. Dans tout les cas je reste avec 1 seul tableau et j'ai passé la syntaxe au peigne fin.
PS : pour ceux qui ont remarqué, j'ai oublié un petit ; ligne 35 (aucune erreur a la compilation du fait qu'aucune instruction ne se trouve entre ce end et le suivant). La correction de ce soucis mineur n'as rien changé au programme, il fonctionne de la même manière.
Dernière modification par Tycho Brahe (Le 21/12/2007, à 23:07)
Loi de Newton :
Si tu restes à glander sous le pommier, tu pourrais bien prendre une pomme sur la gueule.
Hors ligne
#8 Le 22/12/2007, à 00:01
- Tycho Brahe
Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau
Soucis résolu grà¢ce a un ami :
Il suffit de mettre un readln a la ligne 16. Tout ceci est du a un \n gênant <_<
Au passage j'édite mon premier post afin de le passer en [résolu] et d'y ajouter le code (afin de ne plus dépendre du pastbin).
Loi de Newton :
Si tu restes à glander sous le pommier, tu pourrais bien prendre une pomme sur la gueule.
Hors ligne
#9 Le 27/06/2017, à 16:16
- gotgot
Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau
Je suis tombé sur le logiciel sim4 : https://doc.ubuntu-fr.org/sim4
J'en fait la traduction mais je sais c'est complètement hors sujet ...
Tout seul on vas plus vite, ensemble on vas plus loin.
Notre vision d'avenir est forte, Nos rèves aussi soyons vraie !
Hors ligne