Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/12/2007, à 22: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, à 01: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, à 23: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, à 23:24

Tycho Brahe

Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau

curious a écrit :

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, à 23: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, à 23:29

Tycho Brahe

Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau

aleph a écrit :

> 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, à 23: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, à 23: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 22/12/2007, à 00:06

Tycho Brahe

Re : [résolu] Pascal: assignation de valeur a la 1ère case d'un tableau

aleph a écrit :

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 22/12/2007, à 00: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, à 01: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, à 17: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