IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Pascal Discussion :

[Tableau] Array type required


Sujet :

Langage Pascal

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 40
    Points : 41
    Points
    41
    Par défaut [Tableau] Array type required
    Hello à tous,

    Je tente de faire un exercice sur les tableaux, lorsque je teste mon script, j'ai l'erreur array type required....

    (ps : je ne sais pas si le code en question est correct pour l'ennoncé ci-dessous, mais je n'arrive pas à trouver l'erreur du compilateur...)

    Voici l'énnoncé de l'exercice...

    On vous donne un tableau statique d’entiers contenant nb_elem significatifs (les éléments significatifs sont consécutifs et commencent à l’indice minimum du tableau).
    On vous demande d’écrire une routine (procédure ou fonction selon votre choix) qui modifie un tel tableau.
    La modification consiste à réduire le nombre de composantes en « additionnant des contenus ».
    Dès que la somme de composantes successives atteint ou dépasse 10 on remplace l’ensemble de ces composantes par cette somme.
    On parcourt ainsi le tableau pour remplacer des suites de composantes par leur somme.
    Si la dernière suite n’atteint pas 10, on remplace cette suite par le nombre de composantes qu’elle contient.
    On vous demande de minimiser le nombre d’échanges au sein du tableau, ainsi que le nombre de tests effectués.
    PS : tout doit se faire au sein du même tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type ttab = array[1..10] of integer;
    var a : ttab;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    function question (t : ttab; elt : integer):integer;
    var nbre, i, indice, somme : integer;
    begin
     
    result:=1;
    somme:=0;
    indice:=1;
    i:=1;
    nbre:=0;
     
    WHILE elt>indice DO begin
    	somme:=t[indice]+somme;
    		if somme>=10 THEN 
    		begin 
    		result[i]:=somme; 
    		inc(i); 
    		nbre:=0; 
    		end 
    			else inc(nbre);
    	inc(indice);
    end;
    if (nbre<>0) then result[i]:=nbre;
    end;


    Merci d'avance pour votre aide :-)

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 308
    Points
    4 308
    Par défaut
    Comment appelles-tu ta fonction ? A quel endroit est l'erreur ? Quelle ligne ?
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par wormful_sickfoot Voir le message
    Comment appelles-tu ta fonction ? A quel endroit est l'erreur ? Quelle ligne ?

    Hello,

    L'erreur que je reçois du compilateur est :


    Error: Array type required

    Error: Array type required
    Ce sont les deux lignes qui commence (dans le code ci-dessus) par if.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Nai,

    Ta fonction doit renvoyer un Integer, ce qui est donc le type de result.

    Et toi tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (nbre<>0) then result[i]:=nbre;
    traitant result comme un tableau.
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Merci :-)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 40
    Points : 41
    Points
    41
    Par défaut petit soucis
    Hello,

    Voici le code qui fonctionne (énnoncé message ci-desuss):

    Par contre, lorsqu'il à fini de calculer la somme, il affiche des 0 à la fin afin d'arrivée à la fin du tableau... Je voudrais retirer ses zéros et mettre 'rien'.. en cours, on appellait sa des crasses......

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    function question (t : ttab; elt : integer):ttab;
    var nbre, i, indice, somme : integer;
    begin
    
    result[1]:=0;
    somme:=0;
    i:=1;
    nbre:=0;
    
    if (t[1]>= 10) THEN 
    		begin
    		result[i]:=t[1]; inc(i); 
    		end
    		else somme:=t[i];
    
    for indice:=2 to elt DO begin
    
    
    	somme:=t[indice]+somme;
    		
    		if (somme>=10) THEN 
    			
    			begin 
    			result[i]:=somme; 
    			inc(i); 
    			nbre:=0; 
    			somme:=0;
    			end ;
    			
    		
    		if (somme<10) THEN 
    		
    			begin
    			inc(nbre);
    			result[indice]:=0;
    			end;
    			
    end;
    if (nbre>0) THEN result[i]:=nbre-1;
    
    end;
    en gras, la ligne qui remplace par des 0.. faudrait quelque chose du genre '' ?

    Merci

  7. #7
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 308
    Points
    4 308
    Par défaut
    Le problème est que ttab est un tableau d'entiers, donc tu ne pourras stocker que des valeurs entières. Une astuce consiste à déterminer une valeur qui ne sera jamais présente dans les calculs, par exemple -1 si ton tableau stocke seulement des nombres positifs. Ainsi lorsque tu affiches ton tableau, il doit existe une condition qui vérifie si la valeur est -1, et dans ce cas affiche un message spécifique.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

Discussions similaires

  1. Trier un tableau de type défini par l'utilisateur
    Par nonaparus dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/10/2005, 22h11
  2. Tableau(Array) sans taill
    Par krfa1 dans le forum ASP
    Réponses: 4
    Dernier message: 21/09/2005, 23h31
  3. Initialisation d'un tableau de type STRUCT
    Par Axiome dans le forum MFC
    Réponses: 4
    Dernier message: 06/09/2005, 11h58
  4. tableau array
    Par laclac dans le forum Langage
    Réponses: 8
    Dernier message: 01/09/2005, 12h04
  5. [Debutant]reallocation de memoire d'un tableau de type perso
    Par killerjeff dans le forum Débuter
    Réponses: 3
    Dernier message: 04/08/2004, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo