program fonction_nb_lettre_phrase;
var
phrase:string;
result:integer;
lettre:char;
nbchar:integer;
Function nblettre ( phrase : string; lettre :char ) : integer ;
var
x:integer;
begin
result:=0;
nbchar:=0;
for x:=1 to length(phrase) do
begin
if (upcase(phrase[x])>='A') and (upcase(phrase[x])<='Z')
then inc(result);
if (upcase(phrase[x])=lettre)
then inc(nbchar);
nblettre:=result;
nblettre:=nbchar;
end;
end;
begin
Write('Entrez une phrase : ');
Readln(phrase);
Write('Entrez une lettre : ');
Readln(lettre);
writeln('Il y a : ', nblettre(result), 'dans la phrase :"', phrase, '".');
writeln('Dans cette phrase, il y a ', nblettre(nbchar), 'la lettre "',
lettre,'".');
readln;
end.
La fonction a pour but de compter les nombres de lettres dans la phrase ET de compter le nombre de fois que la lettre demande par l'utilise se trouve ds cette phrase.
Mon probleme est le suivant, je ne comprend pas comment récuperer ses infos..
Lorsque je compile on me dit que 'String' et 'Integer' sont incompatible...
le Intotstr permet de convertir un chiffre en chaine de caractère
cela peut être utile pour afficher le résultat
En l'occurrence ici le WRITE ou WRITELN fait la conversion tout seul
En fait l'erreur de compilation vient du fait qu'il y a une grosse erreur dans le code suivant
writeln('Il y a : ', nblettre(result), 'dans la phrase :"', phrase, '".');
Vous appeler la fonction nblettre avec en paramètre result qui est un integer alors
que la fonction attend deux variable une type string et l'autre de type char
une autre petite erreur dans la fonction
if (upcase(phrase[x])=lettre)
ne marchera pas à si lettre est minuscule
donc il faudrait remplacer par
if (upcase(phrase[x])=upcase(lettre))
de plus dans la fonction il y a une ligne qui ne sert à rien (la première)
nblettre:=result;
nblettre:=nbchar;
Donc voici le code qui fonctionne
var
phrase:string;
result:integer;
lettre:char;
nbchar:integer;
function nblettre ( phrase : string; lettre :char ) : integer;
var
x:integer;
begin
nbchar := 0;
result := 0;
for x:=1 to length(phrase) do
begin
if (upcase(phrase[x])>='A') and (upcase(phrase[x])<='Z')
then inc(result);
if (upcase(phrase[x])=upcase(lettre))
then inc(nbchar);
end;
end;
begin
Write('Entrez une phrase : ');
Readln(phrase);
Write('Entrez une lettre : ');
Readln(lettre);
writeln('Il y a : ', nblettre(phrase,lettre), ' lettre dans la phrase :"', phrase, '".');
writeln('Dans cette phrase, il y a ',nbchar , ' fois la lettre "',lettre,'".');
readln;
end.
dans
writeln('Il y a : ', nblettre(result), 'dans la phrase :"', phrase, '".');
writeln('Dans cette phrase, il y a ', nblettre(nbchar), 'la lettre "',
mettre:
writeln('Il y a : ',inttostr( nblettre(result)), 'dans la phrase :"', phrase, '".');
writeln('Dans cette phrase, il y a ', inttostr(nblettre(nbchar)), 'la lettre "',
lettre,'".');
writeln('Il y a : ', nblettre(result), 'dans la phrase :"', phrase, '".');
writeln('Dans cette phrase, il y a ', nblettre(nbchar), 'la lettre
en
writeln('Il y a : ', nblettre(result, lettre), 'dans la phrase :"', phrase, '".');
writeln('Dans cette phrase, il y a ', nblettre(phrase, nbchar), 'la lettre "',
Car dans ma fonction j''envois deux données. Ca me semble mieux, mais bon, ca ne compile tjrs pas...
Une fonction peut-elle sortir plusieurs résultat ? Une procédure ne serait-elle pas plus adapter ?
Une derniere chose, est-ce-que je peux afficher les resultats de ma fonction comme cela ? :)
program fonction_nb_lettre_phrase;
var
phrase:string;
result:integer;
lettre:char;
nbchar:integer;
nLettres:integer;
Procedure nblettre ( phrase : string; lettre :char );
var
x:integer;
begin
nblettres:=0;
nbchar:=0;
for x:=1 to length(phrase) do
begin
if (upcase(phrase[x])>='A') and (upcase(phrase[x])<='Z')
then inc(nblettres);
if (upcase(phrase[x])=lettre)
then inc(nbchar);
end;
end;
begin
Write('Entrez une phrase : ');
Readln(phrase);
Write('Entrez une lettre : ');
Readln(lettre);
nblettre(phrase,lettre);
writeln('Il y a : ', inttostr(nblettres), 'dans la phrase :"', phrase, '".');
writeln('Dans cette phrase, il y a ', inttostr(nbchar), ' lettre "',
lettre,'".');
readln;
end.
Il faudra peut être rajouter un uses pour l'utilisation de inttostr qui comme son nom l'indique transforme un integer en string.
(bien que le writeln accepte peu être directement les integer, (j'utilise rarement (voir jamais) ce genre de programmation)
Dubois77