Forum programmation
 
AccueilPortailFAQRechercherS'enregistrerMembresGroupesConnexion

Partagez | 
 

 Un bon exercice

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
fighters
Nouveau
Nouveau
avatar

Nombre de messages : 24
Age : 29
Date d'inscription : 27/03/2007

MessageSujet: Un bon exercice   Mer 18 Avr - 16:01

Ecrire un programme Pascal qui permet de lire une chaine de character, le 1er character et le dernier character sont des lettres.Entre les mots il ya un seul espace. Puis afficher le mot qui contient le plus de voyelles
en cas d'ex aequo affiche tous les mots.


Exemples:

'Bonne chance au baccalaureat' --> 'baccalaureat'
'la belle fleur' --> 'belle fleur'
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: Un bon exercice   Ven 20 Avr - 17:55

voilà mon ami la solution de ton exercice, sauf que la résultat final donne le nombre des voiyelles dans toute la phrase

Code:
program bon_exercice;
uses wincrt;
var ch:string;
    voi:byte;

function test (ch:string):boolean;
var i:byte;
begin
  i:=0;
  repeat
    inc(i);
  until not(ch[i] in ['a'..'z']) or (i> length(ch)) or (ch[i] = ' ');
test:= (ch[i] in ['a'..'z']) or (i> length(ch))or (ch[i] = ' ');
end;

procedure saisie (var ch:string);
var c:byte;
begin
  repeat
    clrscr;
    writeln ('saisir une phrase');
    readln(ch);
  until (test(ch));

  repeat
    c:=(pos(' ',ch)+1);
    if (ch[c] = ' ') then
      delete (ch,(pos(' ',ch)),1);
  until (ch[c] <> ' ');
  ch:=ch;
end;

function voiyelle (ch:string):byte;
var i,nb:byte;
begin
nb:=0;
for i:=1 to length(ch) do
  if (ch[i]='a') or (ch[i] = 'e') or (ch[i]='i') or (ch[i] ='o') or (ch[i]='u') or (ch[i] = 'y') then
    nb:= nb+1;
voiyelle:= nb;
end;

begin
saisie(ch);
voi:= voiyelle (ch);
write ('il y a ',voi,' voiyelle(s) dans la phrase suivante:  ');
writeln (ch);
end.
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: Un bon exercice   Ven 20 Avr - 18:38

merci mohamed
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: Un bon exercice   Ven 20 Avr - 20:58

ya pas de quoi mon ami, mais cette exercice est incomplete, inchallah dans deux jours je vais le completer 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 : 106
Date d'inscription : 19/03/2007

MessageSujet: Re: Un bon exercice   Sam 21 Avr - 0:04

Merci mtcs. Je propose ma solution dans un lien.

Code:
program max_voyelles;
{ le nombre maximal de mots }
const MAX_MOTS = 100;
type tab_entier = array [1..MAX_MOTS] of integer;

procedure saisie_chaine(var ch : string);
begin
  repeat
    Write('Entrer une chaine (non vide) : ');
    Readln(Ch);
  until (Length(Ch) > 0);
end;

{
Decompose la phrase (ph) dans trois tableaux
  (dm)  : Début des mots
  (ncm)  : Nombre du caractères du mots
  (nvoy) : Nombre de voyelles des mots
  (n)    : Nombre de mots trouvés 
}
procedure Decomposer(ph : string ; var dm, ncm, nvoy : tab_entier ; var n : integer);
var i : integer;
begin
  n := 0;
  for i:=1 to Length(ph) do begin
    if (ph[i] <> ' ') then begin
      { Si le premier caractère de la phrase n'est pas un espace }
      { Si un carcatètre non espace est précédé par un espace    }
      { donc il s'agit du début d'un mot                        }
      if (i = 1) or ((i > 1) and (ph[i - 1] = ' ')) then begin
        n := n + 1;  { incrémenter le nombre de mots trouvés}
        dm[n] := i;  { début d'un mot }
        ncm[n] := 1;  { c'est le premier caractère du mot }
        nvoy[n] := 0; { ce n'est peut être pas une voyelle }
      end else
        { Si le caractère n'est pas un espace et que le caractère  }
        { qui le précède n'est pas un espace donc on est au milieu }
        { d'un mot.                                                }
        ncm[n] := ncm[n] + 1;
     
      { on compte le nombre de voyelles }
      if (ph[i] in ['A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u', 'Y', 'y']) then
        nvoy[n] := nvoy[n] + 1;
    end;
  end;
end;

{ détermine le nombre maximal de voyelles }
function NbreMaxVoyelles(n : integer ; var nvoy : tab_entier):integer;
var i : integer;
    max : integer;
begin
  max := nvoy[1];
  for i:=2 to n do
    if (nvoy[i] > max) then max := nvoy[i];
  NbreMaxVoyelles := max;
end;

{ afficher les mots dont le nombre de voyelles est maximal }
procedure AfficherMots(ph : string ; n : integer ; var dm, ncm, nvoy : tab_entier);
var i, max : integer;
begin
  max := NbreMaxVoyelles(n, nvoy);
  Writeln('Les mots contenant le nombre maximum de voyelles : ');
  for i:=1 to n do begin
    if (nvoy[i] = max) then
      Writeln(Copy(ph, dm[i], ncm[i]), ' contient ', nvoy[i], ' voyelles');
  end;
end;

{ programme principal }
var ph : string;
    n : integer ;
    dm, ncm, nvoy : tab_entier;
begin
  saisie_chaine(ph);
  decomposer(ph, dm, ncm, nvoy, n);
  AfficherMots(ph, n, dm, ncm, nvoy);
  readln;
end.


Dernière édition par le Sam 21 Avr - 23:32, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
makram
modérateur
modérateur
avatar

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

MessageSujet: Re: Un bon exercice   Sam 21 Avr - 12:04

la solution de anis est optimale
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 : 106
Date d'inscription : 19/03/2007

MessageSujet: Re: Un bon exercice   Sam 21 Avr - 14:08

Merci makram
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
makram
modérateur
modérateur
avatar

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

MessageSujet: Re: Un bon exercice   Sam 21 Avr - 17:51

je n'ai dis que la vérité Embarassed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
fighters
Nouveau
Nouveau
avatar

Nombre de messages : 24
Age : 29
Date d'inscription : 27/03/2007

MessageSujet: Re: Un bon exercice   Dim 22 Avr - 18:06

Voici la correction de cet exercice:

Citation :
program exercice;
uses wincrt;
var ch:string;
{Procedure Saisir qui permet de saisir une chaine selon les conditions}
procedure saisir (var ch:string);
begin
repeat write('donner la chaine: ');readln(ch) until (length(ch)>0)and(ch[1]<>' ')and(ch[1]<>' ');
end;
{fonction voyelle qui permet d'avoir le nombre de voyelle dans une chaine donné}
function voyelle(m:string):integer;
var r,i:integer;
begin
r:=0;
for i:=1 to length(m) do
if upcase(m[i]) in ['A','E','Y','U','I','O']then r:=r+1;
voyelle:=r;
end;

{Procedure afficher qui permet d'afficher le resultat de l'exercice}
procedure afficher(var ch:string);
var m,r:string; nv,max:integer;
begin
ch:=ch+' ';
r:='';
max:=0;
while pos(' ',ch)<>0 do
begin
m:=copy(ch,1,pos(' ',ch)-1);
nv:=voyelle(m);
if nv>max then begin max:=nv; r:=m;end else
if nv=max then r:=r+' '+m;
delete(ch,1,pos(' ',ch));
end;
writeln(r);
end;

{programme principale}
begin
repeat
saisir(ch);
afficher(ch);
readln;
clrscr;
until keypressed;
end.


Dernière édition par le Dim 22 Avr - 18:58, édité 1 fois
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: Un bon exercice   Dim 22 Avr - 18:33

merci mon ami
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 : 106
Date d'inscription : 19/03/2007

MessageSujet: Re: Un bon exercice   Lun 23 Avr - 13:52

Merci, pour ce beau code. Mais, expliques un peu ce qu'il fait.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
fighters
Nouveau
Nouveau
avatar

Nombre de messages : 24
Age : 29
Date d'inscription : 27/03/2007

MessageSujet: Re: Un bon exercice   Lun 23 Avr - 22:24

Explication du code:
ce programme permet d'extracter la 1ere mot du chaine (avant la position du 1er espace) puis calculer le nombre de voyelle dans cette mot ensuite on teste
* si nv(nombre de voyelle dans la mot) > max (nombre de voyelle max jusqu'a l'insant) alors le resultat c est cette mot(m)
*si nv=max alors (cas d'ex aequo) alors (r:=r+' '+m).
puis on efface la 1ere mot et on repete jusqu'a toute la chaine soit effacée.
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 : 106
Date d'inscription : 19/03/2007

MessageSujet: Re: Un bon exercice   Mar 24 Avr - 0:41

Merci pour l'explication.
Trés astucieux le programme.
J'essaye d'expliquer ton code :
Code:
{Procedure afficher qui permet d'afficher le resultat de l'exercice}
procedure afficher(var ch:string);
var m,r:string;
    nv,max,pe:integer;
begin
  { ajout d'un espace à la fin de la chaine car }
  { la chaine devra contenir au moins un mot    }
  ch:=ch+' ';
  { les mots ayant un nombre maximal de voyelles }
  r:='';
 
  max:=0;
  repeat
    { on recherche la position de la première espace }
    pe := pos(' ',ch);
   
    { on extrait le mot qui précède cet espace }
    m := copy(ch, 1, pe - 1);
   
    { on cherche le nombre de voyelles dans ce mot }
    nv := voyelle(m);
   
    { si le nombre de voyelles trouvé est supèrieur }
    { au maximum trouvé jusqu'à ici                }
    if (nv>max) then begin
      { le nombre de voyelles trouvés dans ce mot constituera }
      { la référence pour les recherches suivantes            }
      max:=nv;
      r:=m;
    end else if (nv=max) then
      { on concatène les mots qui ont un nombre maximal de voyelles }
      r:=r+' '+m;
   
    { le mot traité est supprimé de la chaine ch }
    delete(ch, 1, pe);
  until (pe = 0); 
  writeln(r);
end;
Si j'ai fais une erreur corrigez moi.
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 : 106
Date d'inscription : 19/03/2007

MessageSujet: Re: Un bon exercice   Mar 24 Avr - 0:46

fighters... J'ai copié ton code dans mon forum.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
fighters
Nouveau
Nouveau
avatar

Nombre de messages : 24
Age : 29
Date d'inscription : 27/03/2007

MessageSujet: Re: Un bon exercice   Mar 24 Avr - 14:30

Oui c'est bien t'a bien compri le code.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Un bon exercice   

Revenir en haut Aller en bas
 
Un bon exercice
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Exercice : faire une barre de scrolling
» Petit exercice autout du GRID
» Exercice d'arpèges et d'accords sur Coldplay
» exercice: logiciel de dessin (+ zoom)
» Exercice MG accordéon accompagnement Boléro

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