Inscription / Connexion Nouveau Sujet
Niveau calculatrices
Partager :

help algorithmique

Posté par
Marc75017
28-10-05 à 20:51

JE dois créer des algorithmes sauf que je ne trovue pas tout : pourriez vous m'aider pour ceux que je n'ai pas trouvé?

On considére un tableau a contenant des entiers. On appelle n le nombre d'éléments de a. le i-ème élément de a est noté a.

* Soit m . algorithle dqui retourne vrai si et seulement si tous les éléments du tableau sont coimlpris entre 1 et m
je propose :

Validité < -- faux
Tant que a>1 (supérieur ou égal bien sur ) fais :
Si a <n alors vvalidité <--vrai sinon validitié <--faux ;
fait ;
vrai


* donner le plus grand élément de a (algorithme).

Pour i de 1 à n, fais
si max<a alors max <-- a fait
max



a partir de la je suis bloqué:

En n'utilisant pas le calcul précédent et en ne faisant que une seule boucle : trouver (sachant que les nombres du tableau sont tous distincts (pour simplifier) les deux plus grands éléments du tableau ... je ne sais absolument pas faire ...



Et la suite est encore pire :
On veut écrire un algorithme qui teste si le tableau contient des entiers distincs deux a deux . Si c'est le cas alors faux sinon vrai. Deux méthodes sont proposées :

* prendre des éléments de a un par un et examiner si l'élément considéré se retrouve ou non ailleurs dans le talbeau. On metrea faux si on le rertrouve ailleurs.
* On supopseque que tous les entiers du tableau sont compris entre 1et m. On construit un tabelau [1...m] dont tous les éléments sont mis initialement a faux. On examine les éléments du tableau a un par un, si le contenuè de la case a est faux alors la valeur a [i ] n,'a pas encore été rencontrée et on met vrai..., par contre si le contenu est vrai, cela signifie que la valeur a [i a déja ete rencontrée et odnc que le tableu contient deux fois une meme valeur (au secours!



Voila je n'y comprends vraiement rien pourriez vous m'aider merci d'avance

Posté par
enzo
re : help algorithmique 29-10-05 à 00:36

Salut Marc,

1) Vérifier que ts les entiers entre 1 et m

tableauFaux <-- faux
j<--0
Tant que non (tableaufaux et j>=n) faire
Si (aj<1) ou (aj>m) alors
tableauFaux<--vrai
FinSi
j<--j+1
Fin Tant que

2) OK

3)
Max1<--a1
Max2<--a2
Pour i=3 à n faire
Si ai>Max1 alors
Max1<--ai
Sinon
     Si ai>Max2 alors
      Max2<--ai
     FinSi
FinSi
FinPour

4)
1ère méthode
NonDistinct<--faux
i<--1
Tant que non (NonDistinct et i>n) faire
   j<--2
   Tant que non (NonDistinct et j>=n-i) faire
      Si ai=aj alors
         NonDistinct<--vrai
      FinSi
   j<--j+1
   Fin tant que
i<--i+1
Fin Tant que

Bon, je te laisse le dernier.....je vais faire une overdose sinon....

A+

Posté par
enzo
re : help algorithmique 29-10-05 à 00:59

Erratum :

ds le dernier algo: j<--i+1; le reste ne bouge pas;

A+

Posté par
Marc75017
re : help algorithmique 29-10-05 à 11:59

MErci beaucoup de votre réponse.. néanmoins n'ayant psas envie de recopier sans comprendre je me permets de poser des questions (le dernier algorithme non traité etant donné que j'ai déja du mal avec l'énoncé... je ny arrive pas mais passons)

ALors l'algorithme 3 est clair parfait
l'algorithme 2 je ne comprends pâs... paske cdapres celui ci , si a<1 ou >m alorrs VRAI sauf que le tableau devrait retourner vrai seulement si tout les nombres sont compris entre 1 et m ...  ? mais peut etre suis je a coté du coup

De meme pour le dernier, il est écrit si ai = aj alors =vrai ... mais il me semble que c'est justement faux on n'a vrai que si quel que soit i et j a i et aj ne sont pas égaux..
Voila merci d'avance

Posté par
enzo
re : help algorithmique 29-10-05 à 13:19

Rebonjour Marc,

Effectivement, j'ai inversé vrai et faux. Il suffit alors de changer les paramètres de la variable booléenne (faux devient vrai et vice versa). La condition du "tant que" change alors :

Tant que non (NonDistinct=faux et ...) faire

Voilà tout.

Posté par
Marc75017
re : help algorithmique 29-10-05 à 15:55

a ca me rassure j'ai donc au moins partiellement compris bon il m'en reste encore un je crois que je vais devoir laisser tomber lol parceque il mle semble vriament dur comparé aux  deux premiers! merci bcp en zo

Posté par cocopolo (invité)re : help algorithmique 29-10-05 à 18:06

personne n'a trouvé le dernier
merci d'avance

Posté par
enzo
re : help algorithmique 29-10-05 à 19:56

bon allez, le dernier vite fait

//initialisation du tableau à faux
Pour i de 1 à m faire
b[i]=faux  //b est le nom du tableau de booléens
FinPour

Verif<--faux
j<--1
Tant que non (Verif ou j>n) faire
k<--a[j] //k est la valeur de la j-ème valeur du tableau a
Si b[k]=vrai alors //signifie que la j-ème valeur du tableau a déjà été rencontrée--> si la j-ème valeur de a vaut k alors elle est au rang k dans le tableau b
Verif<--vrai
FinSi
b[k]<--vrai
//on signale que l'on a rencontré la j-ème valeur
j<--j+1
Fin Tant que


A+

Posté par
Marc75017
re : help algorithmique 30-10-05 à 14:51

merci bcp Enzo , néanmoins je rencontre un probleme avec l'algorithe 3 que vous avez fait ; il me semble qu'il ne fonctionne pas  

Par ex!
Soit le tableau :
4;3;5;2;1;

on cherche les deux plus grands nombres  j'applique votre algorithme
max 1 = 4 ; max 2 = 3

5 > max 1 donc max 1 = 5

Et on va finir avec max 1 = 5 et max 2 = 3 alors que max 2 = 4 ...
donc voila

Posté par
Pookette Correcteur
re : help algorithmique 30-10-05 à 14:56

[/i] je ferme la balise italique

Pookette

Posté par
enzo
re : help algorithmique 30-10-05 à 16:33

En effet, mon algo ne marche pas. En voici un autre qui fonctionne lui:

Max1<--0
Max2<--0

Pour i de 1 à n faire

   Si ai>Max1 alors
      Max2<--Max1
      Max1<--ai
   Sinon
         Si ai>Max2 alors
            Max2<--ai
         FinSi
   FinSi

FinPour



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !