Problème: Calcul du kième plus petit élément d'un tableau
+2
Napoléon
sasouki
6 participants
Forum INFOMATH :: Enseignement de l'informatique :: Informatique - Collège & Lycée :: Exercices Pascal
Page 1 sur 1
Problème: Calcul du kième plus petit élément d'un tableau
bonjour, s.v.p j'essaie de résoudre un problème pascal
g arrive a écrire une solution qui me parait raisonnable en faisant une exécution manuelle mais l'exécution sur machine donne un résultat erroné.
énonce:
soit un tableau t de n entiers positifs(on suppose que n >=2), on veut déterminer et afficher le k-ieme plus petit élément (1<=k<=n) et l'indice de sa première apparition dans le tableau.
exemple: soit le tableau t suivant:
5 2 7 2 1 4 9 4 1 1
le programme doit afficher: le 3ème élément minimal est 4 et l'indice de sa première apparition est 6.
voila le code que g trouvé:
g arrive a écrire une solution qui me parait raisonnable en faisant une exécution manuelle mais l'exécution sur machine donne un résultat erroné.
soit un tableau t de n entiers positifs(on suppose que n >=2), on veut déterminer et afficher le k-ieme plus petit élément (1<=k<=n) et l'indice de sa première apparition dans le tableau.
exemple: soit le tableau t suivant:
5 2 7 2 1 4 9 4 1 1
le programme doit afficher: le 3ème élément minimal est 4 et l'indice de sa première apparition est 6.
voila le code que g trouvé:
- Code:
program ex2;
uses wincrt;
type tab=array[1..100] of integer;
var n,nb,pos,k:integer;
t:tab;
procedure saisie(var n,k :integer; var t:tab);
var i :integer;
begin
repeat
write('n='); readln(n);
until n>=2;
writeln('**** les elements de t ****');
repeat
for i:=1 to n do readln(t[i]);
until t[i]>=0;
write('k='); readln(k);
end;
function cherche_min(t:tab; n:integer):integer;
var
min,i:integer;
begin
min:=1;
for i:=1 to n do
begin
if (t[i] <> -1)then
min:=i;
end;
cherche_min:=min;
end;
procedure recherche( t:tab; n,k:integer;var nb,pos:integer);
var m,j:integer;
begin
nb:=0;
repeat
m:=cherche_min(t,n);
for j:=1 to n do if t[j]=t[m] then t[j] :=-1;
nb:=nb+1;
until (nb=k)
pos:=m;
end;
procedure affiche(nb,pos:integer; t:tab);
begin
if nb=k then
writeln('le', k,'eme plus petie element est: ',t[pos], ' et la positionde sa premiere apparitionest ', pos)
else writeln('pas de ',k,' eme element minimal');
end;
begin
saisie(n,k,t);
recherche(t,n,k,nb,pos);
affiche(nb,pos,t);
end.
sasouki- Entier Naturel
-
Nombre de messages : 16
Localisation : tunisie
Réputation : 1
Points : 5439
Date d'inscription : 03/02/2010
Re: Problème: Calcul du kième plus petit élément d'un tableau
Bien que l'idée de ton algorithme soit intuitive et logique, ce dernier n'est pas correct. Il ne traite pas tous les cas. Il devrait te retourner de faux résultats dans certains cas.
Soit par exemple un tableau t=[1, 1, 1], alors quel est le 2ème minimum?!
Par contre, l'idée la plus simple (mais pas nécessairement la meilleure!) consiste à trier le tableau dans l'ordre croissant en éliminant les doublons. Soit "tR" ce tableau, et "m" le nombre d'éléments qu'il contient. Alors, le "k"-ième minimum de "t" est "tR[k]" avec "k<=m".
Cette méthode est sûre, mais pour les doués d'algorithmique et surtout ceux qui cherchent non pas "un algorithme qui marche" mais plutôt le "meilleur algorithme" en terme de complexité, il existe d'autres méthodes plus élaborées et plus dures que les deux propositions qu'on a citées jusqu'à maintenant.
A toi de creuser d'avantage d'abord...
Soit par exemple un tableau t=[1, 1, 1], alors quel est le 2ème minimum?!
Par contre, l'idée la plus simple (mais pas nécessairement la meilleure!) consiste à trier le tableau dans l'ordre croissant en éliminant les doublons. Soit "tR" ce tableau, et "m" le nombre d'éléments qu'il contient. Alors, le "k"-ième minimum de "t" est "tR[k]" avec "k<=m".
Cette méthode est sûre, mais pour les doués d'algorithmique et surtout ceux qui cherchent non pas "un algorithme qui marche" mais plutôt le "meilleur algorithme" en terme de complexité, il existe d'autres méthodes plus élaborées et plus dures que les deux propositions qu'on a citées jusqu'à maintenant.
A toi de creuser d'avantage d'abord...
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7871
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Problème: Calcul du kième plus petit élément d'un tableau
il faut plutôt stocker le numéro de l'indicePar contre, l'idée la plus simple (mais pas nécessairement la
meilleure!) consiste à trier le tableau dans l'ordre croissant en
éliminant les doublons. Soit "tR" ce tableau, et "m" le nombre
d'éléments qu'il contient. Alors, le "k"-ième minimum de "t" est
"tR[k]" avec "k<=m".
skah- Entier Naturel
-
Nombre de messages : 21
Localisation : oran
Réputation : 0
Points : 5673
Date d'inscription : 03/06/2009
Re: Problème: Calcul du kième plus petit élément d'un tableau
"sasouki":
si ton tableau "t" est rempli de "-1" par la procédure "recherche"... alors, la fonction "cherche_min" que va-t-elle retourner ??
si ton tableau "t" est rempli de "-1" par la procédure "recherche"... alors, la fonction "cherche_min" que va-t-elle retourner ??
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7871
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Re: Problème: Calcul du kième plus petit élément d'un tableau
L'algorithme proposé par "Sasouki", même s'il fonctionne pour quelques cas, il doit échouer pour dans d'autres. Mais c'est une bonne tentative.
Tu es encore intéressé par la solution? il faut participer dans la discussion au moins !!!
Tu es encore intéressé par la solution? il faut participer dans la discussion au moins !!!
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7253
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Problème: Calcul du kième plus petit élément d'un tableau
sasouki a écrit:bonjour, svp j'essaie de résoudre un problème pascal
g arrive a écrire une solution qui me parait raisonnable en faisant une exécution manuelle mais l'exécution sur machine donne un résultat erroné.enonce:
soit un tableau t de n entiers positifs(on suppose que n >=2), on veut determiner et afficher le k ieme plus petit element (1<=k<=n) et l'indice de sa premiere apparition dans le tableau.
exemple: soit le tableau t suivant:
5 2 7 2 1 4 9 4 1 1
le programme doit afficher: le 3 ème élément minimal est 4 et l'indice de sa première apparition est 6.
voila le code que g trouvé:
- Code:
program ex2;
uses wincrt;
type tab=array[1..100] of integer;
var n,nb,pos,k:integer;
t:tab;
procedure saisie(var n,k :integer; var t:tab);
var i :integer;
begin
repeat
write('n='); readln(n);
until n>=2;
writeln('**** les elements de t ****');
repeat
for i:=1 to n do readln(t[i]);
until t[i]>=0;
write('k='); readln(k);
end;
function cherche_min(t:tab; n:integer):integer;
var
min,i:integer;
begin
min:=1;
for i:=1 to n do
begin
if (t[i] <> -1)then
min:=i;
end;
cherche_min:=min;
end;
procedure recherche( t:tab; n,k:integer;var nb,pos:integer);
var m,j:integer;
begin
nb:=0;
repeat
m:=cherche_min(t,n);
for j:=1 to n do if t[j]=t[m] then t[j] :=-1;
nb:=nb+1;
until (nb=k)
pos:=m;
end;
procedure affiche(nb,pos:integer; t:tab);
begin
if nb=k then
writeln('le', k,'eme plus petie element est: ',t[pos], ' et la positionde sa premiere apparitionest ', pos)
else writeln('pas de ',k,' eme element minimal');
end;
begin
saisie(n,k,t);
recherche(t,n,k,nb,pos);
affiche(nb,pos,t);
end.
c'est juste comme solution, mais répondant au commentaire de Mr Nabil que je remercie, on peut remplir le tableau T par des éléments distincts pour remédier a ce problème et avoir une solution optimale.
mouna marouane- Entier Naturel
-
Nombre de messages : 6
Localisation : tunisie
Réputation : 0
Points : 5413
Date d'inscription : 04/02/2010
Re: Problème: Calcul du kième plus petit élément d'un tableau
la fonction cherche_min cherche les minimum autre que -1 (a condition que t[i] soit différent de -1)
mouna marouane- Entier Naturel
-
Nombre de messages : 6
Localisation : tunisie
Réputation : 0
Points : 5413
Date d'inscription : 04/02/2010
Re: Problème: Calcul du kième plus petit élément d'un tableau
salut, pardon si g pas participe a la discussion mais c juste paske j'avais pas de connexion, mr nabil merci pour la réponse g déjà pensé a ca mais c pas la methode demandee, et puisque le programme ne doit pas prendre en consideration le cas des doublons alors g supposé moi que les elements du tableaux sont positifs et remplacer tous les elements egaux au minimum par -1, et la fonction cherche_min quand elle cherche le min:
function cherche_min(t:tab; n:integer):integer;
var
min,i:integer;
begin
min:=1;
for i:=1 to n do
begin
if (t[i] -1)then
min:=i;
end;
cherche_min:=min;
end;
anisi pour l'exemple que g donné et a la premiere iteration la fonction doit trouver le min est 1 a la position 5
par la suite le prog remplacera les 1 par -1
et dans la deuxieme iteration la fonction doit retourner le min 2 a la position 2 et ainsi de suite jusk'a ce ke le nb=k,
le probleme c ke le programme ne remplace que le premier 1 par -1 et ne modifie pas les autres de telle sorte que la fonction kan elle cherche le min pour la deuxieme fois elle va retouner le 2 eme 1 du tableau et la troisieme iteratio elle retournera le 3 eme 1 dans le tableau et ainsi de suite
je sais en plus que g pas traite ts les cas des tableaux, j'essaierai encore une fois
function cherche_min(t:tab; n:integer):integer;
var
min,i:integer;
begin
min:=1;
for i:=1 to n do
begin
if (t[i]
min:=i;
end;
cherche_min:=min;
end;
anisi pour l'exemple que g donné et a la premiere iteration la fonction doit trouver le min est 1 a la position 5
par la suite le prog remplacera les 1 par -1
et dans la deuxieme iteration la fonction doit retourner le min 2 a la position 2 et ainsi de suite jusk'a ce ke le nb=k,
le probleme c ke le programme ne remplace que le premier 1 par -1 et ne modifie pas les autres de telle sorte que la fonction kan elle cherche le min pour la deuxieme fois elle va retouner le 2 eme 1 du tableau et la troisieme iteratio elle retournera le 3 eme 1 dans le tableau et ainsi de suite
je sais en plus que g pas traite ts les cas des tableaux, j'essaierai encore une fois
sasouki- Entier Naturel
-
Nombre de messages : 16
Localisation : tunisie
Réputation : 1
Points : 5439
Date d'inscription : 03/02/2010
Re: Problème: Calcul du kième plus petit élément d'un tableau
"si ton tableau "t" est rempli de "-1" par la procédure "recherche"... alors, la fonction "cherche_min" que va-t-elle retourner ??"
g pas de reponse exacte mais il faut dans ce cas prevoire 2 resultats pour la fonction selon le cas, si ts les elements du tab sont des -1 dans ce cas elle retournera par exemple une valeur negative et kan la fonction retourne cette valeur la boucle repeter s'arrete
et enfin pour afficher le resultat on teste si nb=k alors on affiche le k ieme element minimal, sinon afficher que il n'existe pas de k ieme element dans t
c logique non?
g pas de reponse exacte mais il faut dans ce cas prevoire 2 resultats pour la fonction selon le cas, si ts les elements du tab sont des -1 dans ce cas elle retournera par exemple une valeur negative et kan la fonction retourne cette valeur la boucle repeter s'arrete
et enfin pour afficher le resultat on teste si nb=k alors on affiche le k ieme element minimal, sinon afficher que il n'existe pas de k ieme element dans t
c logique non?
sasouki- Entier Naturel
-
Nombre de messages : 16
Localisation : tunisie
Réputation : 1
Points : 5439
Date d'inscription : 03/02/2010
Re: Problème: Calcul du kième plus petit élément d'un tableau
sasouki a écrit:"si ton tableau "t" est rempli de "-1" par la procédure "recherche"... alors, la fonction "cherche_min" que va-t-elle retourner ??"
g pas de reponse exacte mais il faut dans ce cas prevoire 2 resultats pour la fonction selon le cas, si ts les elements du tab sont des -1 dans ce cas elle retournera par exemple une valeur negative et kan la fonction retourne cette valeur la boucle repeter s'arrete
et enfin pour afficher le resultat on teste si nb=k alors on affiche le k ieme element minimal, sinon afficher que il n'existe pas de k ieme element dans t
c logique non?
Effectivement.
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7253
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Problème: Calcul du kième plus petit élément d'un tableau
Est-ce que vous êtes encore intéressés par la correction de cet excellent exercice ?
methodiX- Admin
-
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 7253
Date d'inscription : 22/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Re: Problème: Calcul du kième plus petit élément d'un tableau
bien sure que oui, en fait g une idee de ce que je dois faire mais l'execution sur machine ca ne marche tjrs pas
sasouki- Entier Naturel
-
Nombre de messages : 16
Localisation : tunisie
Réputation : 1
Points : 5439
Date d'inscription : 03/02/2010
Re: Problème: Calcul du kième plus petit élément d'un tableau
c'est un exercice dur... mais faisable. Il existe plusieurs versions simplifiées de ce problèmes sur Internet.
informix- Nombre Rationnel
- Nombre de messages : 399
Réputation : 4
Points : 6525
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(1000/1000)
Sujets similaires
» Exercice: le kième minimum d'un tableau
» BAC INFO: Problème sur les fichiers + Corrigé: Calcul de similarité
» petit probléme de bissectrice ...
» calcul d'une limite
» Calcul d'une intégrale
» BAC INFO: Problème sur les fichiers + Corrigé: Calcul de similarité
» petit probléme de bissectrice ...
» calcul d'une limite
» Calcul d'une intégrale
Forum INFOMATH :: Enseignement de l'informatique :: Informatique - Collège & Lycée :: Exercices Pascal
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum