Signaler

Tableau [Résolu]

Posez votre question Anna - Dernière réponse le 26 nov. 2016 à 19:31
Bonjour,

J'ai trouvé une correction pour l'exercice suivant;

Ecrire une procédure permettant d’éclater un tableau T d’entiers en deux tableaux :
  • TP qui contiendra les éléments positifs de T.
  • TN qui contiendra les éléments négatifs de T.


Correction:
Procédure Eclater(T : Tab ; Var TP, TN : Tab)
Var
i, j, k : Entier
Début
i <- 1 j <- 1 k <- 1
Pour i de 1 à n Faire
Si (T[i] > 0) Alors
TP[j] <- T[i]
j <- j + 1
FinSi
Si(T[i] < 0) Alors
TN[k] <- T[i]
k <- k + 1
FinSi
Si(T[i] = 0) Alors
TP[j] <- T[i]
j <- j + 1
TN[k] <- T[i]
k <- k + 1
FinSi
FinPour
Fin

La question qui se pose : pourquoi on a initialiser le compteur "i" au moment ou l'initialisation et l'avancement du compteur dans la boucle "pour" se fait automatiquement ?
en plus, au niveau de 3ème condition ( Si(T[i] = 0) Alors) pourquoi, on ne l'a traité pas avec la 1ère comme ça : ( Si (T[i] >= 0) Alors) ?
Qui peut m'expliquer ça svp. Merci
Afficher la suite 
Utile
+0
moins plus
Bonsoir

dans ce cas l'initialisation des variables d'itération avant la boucle ne sert à rien.
Mais il y a des cas ou c'est utile, par exemple si tu fais une recherche, tu vas parcourir le tableau (dans l'ordre, par dichotomie ou autre peut importe) et au moment ou tu trouves ce que tu cherches tu sors de la boucle.
L'index est conservé, puisqu'il a été initialisé avant.

Quand à la 3eme condition, tu constatera que l'algorithme ne fait pas la même chose que pour >0, le 0 est un cas particulier qui justifie un traitement différentié
Anna- 21 nov. 2016 à 18:09
Merci pour l'explication.
Juste, j'ai pas compris la différence dans le traitement du cas de zéro, au moment ou on peut l'ajouter au 2 premières conditions ( puisque 0 peut être négatif et positif à la fois) et ça devient: Si (T[i] >= 0) Alors TP[j] <- T[i]
Si (T[i] >= 0) Alors TP[k] <- T[i]
Répondre
Whismeril 8473Messages postés mardi 11 mars 2003Date d'inscription 4 décembre 2016 Dernière intervention - 21 nov. 2016 à 18:48
Oui ça marche aussi, enfin si tu en fait un >= et l'autre <= et pas les deux mêmes ;)
Après les traitement en 3 fois vient peut être introduire l'opérateur ou la fonction signe, qui retourne en general 1 pour un nombre positif, -1 pour un négatif et 0 pour 0
Répondre
Anna- 21 nov. 2016 à 19:26
Merci pour votre réponse, mais je m'excuse, il me reste un soucis:
D'une part, si j'adopte la ère correction avec les 3 conditions, le nombre de zéro va être dupliqué, autrement dit, à chaque fois qu' on trouve un zéro on va le mettre dans TP[j] et dans TN[k] à la fois, de ce fait, le nombre d'éléments par rapport au tableau initial va être augmenté.
D'autre part, si je garde ma proposition ( éviter la 3ème condition ) tous les zéros vont être stockés dans le premier tableau TP puisque la condition est vérifié, après ça, le compteur s'incrémente.
Pensez-vous qu'il y a un manque d'indice au niveau de l'énoncé d'exercice ? à votre avis quelle est la meilleure solution ?
Répondre
Whismeril 8473Messages postés mardi 11 mars 2003Date d'inscription 4 décembre 2016 Dernière intervention - 21 nov. 2016 à 21:15
D'autre part, si je garde ma proposition ( éviter la 3ème condition ) tous les zéros vont être stockés dans le premier tableau TP puisque la condition est vérifié, après ça, le compteur s'incrémente.
non pas comme l'algorithme est écrit

Pour i de 1 à n Faire 
  Si (T[i] > 0) Alors 
    TP[j] <- T[i] 
     j <- j + 1 
  FinSi 

  Si(T[i] < 0) Alors 
    TN[k] <- T[i] 
     k <- k + 1 
  FinSi 

  Si(T[i] = 0) Alors 
    TP[j] <- T[i] 
     j <- j + 1 
    TN[k] <- T[i] 
     k <- k + 1 
  FinSi
FinPour 'i n'est incrémenté qu'ici 


de même
Pour i de 1 à n Faire 
  Si (T[i] >= 0) Alors 
    TP[j] <- T[i] 
     j <- j + 1 
  FinSi 

  Si(T[i] <= 0) Alors 
    TN[k] <- T[i] 
     k <- k + 1 
  FinSi 
FinPour 'i n'est toujours incrémenté qu'ici


Dans les 2 cas la somme des nombres d'enregistrement dans les tableaux résultats sera plus grande que le nombre d'enregistrements d'origine dès l'ors qu'il y a des zéros

Par contre
Pour i de 1 à n Faire 
  Si (T[i] >= 0) Alors 
    TP[j] <- T[i] 
     j <- j + 1 
  Sinon Si(T[i] <= 0) Alors 'aucun 0 ne passera ici car il y a Sinon
    TN[k] <- T[i] 
     k <- k + 1 
  FinSi 
FinPour
Répondre
Anna- 22 nov. 2016 à 19:52
L'idée est claire maintenant, merci beaucoup.
Répondre
Ajouter un commentaire
Utile
+0
moins plus
Bonjour

si ça te convient, tu peux passer le sujet résolu, avec le lien dédié sous le titre de la discussion
Anna- 25 nov. 2016 à 22:16
Comment je peux faire ça ?
Répondre
Whismeril 8473Messages postés mardi 11 mars 2003Date d'inscription 4 décembre 2016 Dernière intervention - 26 nov. 2016 à 07:48
Il y a un lien "Marquer comme résolu" sous le titre de la discussion. Tu y a accès tant que le site te reconnais.
Évidemment comme tu est une utilisatrice non inscrite, il est possible qu'au bout d'un moment le site ne te reconnaisse plus.
Alors, il faut demander à la modération, par un signalement, de passer tes questions résolues.
Répondre
Anna- 26 nov. 2016 à 18:26
Je m'excuse, mais j'ai pas compris.. Tantque je ne suis pas inscrite, j'ai pas trouvé le lien "marquer comme résolu" donc, j'ai essayée de m'inscrire mais il me dit que le pseudo que j'ai choisi n'est pas disponible .. comment je peux utiliser le signalement ?
Répondre
Whismeril 8473Messages postés mardi 11 mars 2003Date d'inscription 4 décembre 2016 Dernière intervention - 26 nov. 2016 à 19:18
Pour les discussions existante, t'inscrire ne permettra pas de les marquer résolues.
Le site (comme beaucoup d'autres) utilise des cookies pour te reconnaitre, mais cela n'est pas parfait, tu peux venir depuis plusieurs ordinateurs / téléphones / tablettes, tu peux aussi nettoyer les cookies, ou encore celui-ci peut devenir obsolète.
Seul la personne reconnue comme le posteur initial (ou un modérateur) peut marquer un sujet résolu.
Voilà une capture sur une de mes discussions (non résolue)


Pour s'inscrire, il faut trouver un pseudo qui n'existe pas déjà, là ça se complique, on est plusieurs millions d'inscrits.

Pour le signalement c'est là
Répondre
Anna- 26 nov. 2016 à 19:31
D'accord, merci pour l'explication, c'est gentil de ta part :)
Répondre
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !