Forum programmation
 
AccueilPortailFAQRechercherS'enregistrerMembresGroupesConnexion

Partagez | 
 

 Fonction

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Fonction   Mer 2 Mai - 21:20



C'est un nouveau exercice pour aujourd'hui Wink



Ecrire une fonction qui reçoit deux entiers A et B et un tableau d'entiers T et qui permet de rechercher A et B dans T. Le résultat de cette fonction dit être 0,1 ou 2 respectivementsi aucune des deux valeurs A et B n'existe dans T, si l'une seulement des valeurs A et B existe dans T ou si les deus valeurs A et B existent dans T. Dans cette fonction, le tableau T ne doit être parcouru qu'une seule et unique fois

travaille travaille travaille



Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Fonction   Jeu 3 Mai - 12:51

Facile l'exercice merci mtcs.
Code:

{ recherche (a) et (b) dans le tableau (t) de (n) cases }
function recherche(a, b, n : integer ; var t : tab_entier):integer;
var i, r1, r2 : integer;
begin
  r1 := 0; r2 := 0;
  i := 1;
  repeat
    if (t[i] = a) then r1 := 1;
    if (t[i] = b) then r2 := 1;
    i:=i+1
  until ((r1 + r2) = 2) or (i >= n);
  recherche := (r1 + r2);
end;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Fonction   Jeu 3 Mai - 21:15

manianis a écrit:
Facile l'exercice merci mtcs.
Code:

function recherche(a, b, n : integer ; var t : tab_entier):integer;


merci manianis;

je crois que les paramètres d'une fonction sont tout passer par valeur et non pas par variable
Citation :
var t : tab_entier
alors il faut changer la fonction recherche par une procedure
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Fonction   Jeu 3 Mai - 21:28



Un autre exercice pour aujourd'hui: La valeur la plus fréquente


Ecrire une fonction qui permet de trouver la valeur la plus fréquente dans un tableau d'entiers qu'elle reçoit comme paramètre. S'il y a ambiguïté, donner la valeur qui apparaît la première dans le tableau.

Exemple:
1 | 5 | 4 | 2 | 9 | 8 | 5 | 4 | 5 | 4 | 6 | 2 |

Le résultat de la fonction devrait être:5
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Fonction   Ven 4 Mai - 10:30

mtcs a écrit:
manianis a écrit:
Facile l'exercice merci mtcs.
Code:

function recherche(a, b, n : integer ; var t : tab_entier):integer;


merci manianis;

je crois que les paramètres d'une fonction sont tout passer par valeur et non pas par variable
Citation :
var t : tab_entier
alors il faut changer la fonction recherche par une procedure

Oui, c'est vrai théoriquement. Mais pratiquement le passage par valeur ce fait sur la pile du programme càd que le module devra copier le contenu du tableau dans la pile ce qui peut dans certaines conditions causer le débordement de la pile (Stack overflow). Là viens le passage par variable en aide car en cas de passage par variable uniquement une adresse sur 32 bits est passée au module d'où le risque de débordement de pile est évité.

Conernant la fonction c'est une ancienne convention encore supportée par plusieurs enseignants qui stipule d'éviter l'usage des paramètres par variable dans les fonctions. Mais, cette méthode de passage de paramètres est totalement supporté par PASAL pour les raisons sus-indiqués (ci-dessus).

Tu pourras quand même tester la fonction et tu verras qu'elle fonctionne bien. Et surtout mettez vous en tête qu'on interdit le passage par variable dans les fonctions pour les débutants pour éviter les erreurs et les confusions (Quelle est la différence entre une procédure et une fonction si la fonction supporte aussi le passage des paramètres par variable ? La réponse est que la fonction doit retourner une valeur alors qu'une procédure ne retourne aucune valeur j'explique mieux).

Pour une fonction on pourra écrire :
if ValExiste(v, n, t, pos) then Writeln(pos);

Cette fonction retourne une valeur booléenne True/False qui indique l'existence de v dans le tableau t et pos est sa position. Vous pouvez remarquer qu'il est possible d'utiliser un appel à une fonction dans une structure if ... then ...; chose non permise pour les procédures puisqu'elles ne retournent pas de valeurs mais elle retourne des paramètres.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Fonction   Ven 4 Mai - 14:26

merci manianis king pour l'explication mnt j'ai compri, hier j'ai tester votre fonction, et ça me pose bcp des question sur le passage d'une variable dans une fonction, mais après votre explication ça sera plus clair que jamais. Merci encore.

Pour la fonction j'ai une autre mèthode mais je ne compris pas pourquoi ne me donne pas la bonne résultat
voilà :
Code:

function recherche(a, b : integer ; var t : tab_entier; n : byte):byte;
var i,Nb: byte;
begin
  i := 0;
  Nb := 0;
  repeat
    INC(i);
    if (t[i] = a) then
          Nb := Nb + 1;
    if (t[i] = b) then
          Nb := Nb + 1;
  until (Nb = 2) or (i >= n);
  recherche := Nb;
end;


Dernière édition par le Ven 4 Mai - 14:35, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
makram
modérateur
modérateur
avatar

Nombre de messages : 549
Age : 28
Date d'inscription : 29/12/2006

MessageSujet: Re: Fonction   Ven 4 Mai - 14:31

exellent travail les amis.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Fonction   Ven 4 Mai - 14:38

j'ai trouvé mon faute

Code:
function recherche(a, b : integer ; var t : tab_entier; n : byte):byte;
var i,Nb: byte;
begin
  i := 0;
  Nb := 0;
  repeat
    INC(i);
    if (t[i] = a) then
          Nb := 1;
    if (t[i] = b) then
          Nb :=1;
  until (Nb = 2) or (i >= n);
  recherche := Nb;
end;


j'ai modifer mon code :

Code:
function recherche(a, b : integer ; var t : tab_entier; n : byte):byte;
var i,Nb: byte;
begin
  i := 0;
  Nb := 0;
  repeat
    INC(i);
    if (t[i] = a) then
          Nb := Nb + 1;
    if (t[i] = b) then
          Nb := Nb + 1;
  until (Nb = 2) or (i >= n);
  recherche := Nb;
end;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Fonction   Sam 5 Mai - 14:13

Contre exemple : Et si a et b se trouvent plusieurs fois dans le tableau ?
ta fonction est entrain de rechercher le nombre d'occurence de a et b mais s'arrête lorsque tu trouve 2 fois a ou 2 fois b ou une fois a et une fois b. donc tu n'as pas répondu à la question.

je propose une petite modification :
Code:
function recherche(a, b : integer ; var t : tab_entier; n : byte):byte;
var i,Nb: byte;
begin
  i := 0;
  Nb := 0;
  repeat
    INC(i);
    if (t[i] = a) then Nb := Nb or 1;
    if (t[i] = b) then Nb := Nb or 2;
  until (Nb = 3) or (i >= n);
  recherche := (Nb div 2) + (Nb  mod 2);
end;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Fonction   Sam 5 Mai - 19:02

manianis a écrit:
Contre exemple : Et si a et b se trouvent plusieurs fois dans le tableau ?
ta fonction est entrain de rechercher le nombre d'occurence de a et b mais s'arrête lorsque tu trouve 2 fois a ou 2 fois b ou une fois a et une fois b. donc tu n'as pas répondu à la question.

je propose une petite modification :
Code:
function recherche(a, b : integer ; var t : tab_entier; n : byte):byte;
var i,Nb: byte;
begin
i := 0;
Nb := 0;
repeat
INC(i);
if (t[i] = a) then Nb := Nb or 1;
if (t[i] = b) then Nb := Nb or 2;
until (Nb = 3) or (i >= n);
recherche := (Nb div 2) + (Nb mod 2);
end;


Vous avez une raison manianis, merci pour tout Embarassed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Fonction   Sam 5 Mai - 22:37

Merci les amis, vous faites de l'exellent travail Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Fonction   Sam 5 Mai - 23:22

mtcs a écrit:


Un autre exercice pour aujourd'hui: La valeur la plus fréquente


Ecrire une fonction qui permet de trouver la valeur la plus fréquente dans un tableau d'entiers qu'elle reçoit comme paramètre. S'il y a ambiguïté, donner la valeur qui apparaît la première dans le tableau.

Exemple:
1 | 5 | 4 | 2 | 9 | 8 | 5 | 4 | 5 | 4 | 6 | 2 |


Le résultat de la fonction devrait être:5


Code:
function recherche (T:TAB ; n:byte):byte;
var i,j,m,max,f:byte;
begin
max:=0; f:= 0;
  for i:= 1 to n do
  begin
    for j:= 2 to n do
    begin
      if (T[i] = T[j]) then
        begin
          F:= F +1;
        end;
    end;
    if (F>max) then
      begin
        max:= F;
        m:= t[i];
       
      end;
    end;
recherche := m;
end;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Fonction   Dim 6 Mai - 12:33

Merci mtcs tu es trop rapide. donner la question puis la réponse !!! Tu es trop pressé ou quoi ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Fonction   Dim 6 Mai - 22:38

non mon ami, je ne suis pas tres rapide, mais j'ai posté l'enoncé depuis 3 mai à 20:28, j'ai citer l'enoncé dans ma réponse pour ne pas confonfre entre les exercices
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Fonction   Jeu 10 Mai - 13:46

Je propose quand même une solution :
Code:
{ rechercher la valeur la plus fréquente dans un tableau }
function valeur_frequente(n : integer ; t : tab_entier):integer;
var i, j, k, mf, mv, freq : integer;
begin
  i := 1;
  mf := 0;
  while (i <= n) do begin
    freq := 1;      { freq : la fréquence de l'élément t[i] }
    k := i;        { k    : le nombre d'éléments restants dans le tableau }
    for j:=i+1 to n do begin
      if (t[j] = t[i]) then 
        freq := freq + 1 { on compte les occurences de t[i] }
      else begin
        k := k + 1;      { tout en éliminant les doublons }
        t[k] := t[j];
      end;
    end;
   
    { on recherche l'élément dont la fréquence est maximale }
    if (freq > mf) then begin
      mf := freq;
      mv := t[i];
    end;
   
    i := i + 1; { aprés suppression des doublons il ne reste }
    n := k;    { que k éléments à rechercher                }
  end;
  valeur_frequente := mv;
end;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Fonction   Jeu 10 Mai - 13:52

J'aimerai noter que comme je suis un débutant j'utilise une méthode d'écriture qui permet d'éviter les erreurs de syntaxe au maximum lors de l'écriture d'un programme .

exemple :
Cette méthode d'écriture permet d'éviter les erreurs d'abus de ; et celles associées au begin et end.
* affiche les valeurs de 1 à 10...
Code:
for i:=1 to 10 do begin;
Writeln(i);
end;

* affiche une erreur lors de la compilation et en supprimant end; il affiche 11.
Code:
for i:=1 to n do;
    Writeln(i);
end;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Fonction   Jeu 10 Mai - 17:50

merci manianis
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Fonction   

Revenir en haut Aller en bas
 
Fonction
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum programmation :: Programmation :: Delphi & Pascal :: Pascal :: Exercices-
Sauter vers: