Petit soucis avec les fonctions

Résolu
arsenik360 Messages postés 13 Date d'inscription jeudi 16 décembre 2010 Statut Membre Dernière intervention 24 mai 2011 - 26 janv. 2011 à 10:23
 f0xi - 30 janv. 2011 à 03:21
Bonjour a tous,

J'ai créé un code :
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...

Une idée ?

Merci bcp :)

Arsenik

26 réponses

fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
26 janv. 2011 à 17:50
Bonjour

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.
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
26 janv. 2011 à 23:24
Parce que si c'est le code de la page précedente que tu essayes de faire fonctionner, il me semble bien qu'il manque le code ci-dessous :

{$APPTYPE CONSOLE}

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
3
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
26 janv. 2011 à 11:56
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,'".');
0
arsenik360 Messages postés 13 Date d'inscription jeudi 16 décembre 2010 Statut Membre Dernière intervention 24 mai 2011
26 janv. 2011 à 12:02
Tout d'abord, merci pour ta réponse :)

inttostr ? A quoi me sert-elle ?

J'ai revu un peur, et j'avais changé :

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 ? :)

Dsl de posé autant de question :D ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
26 janv. 2011 à 15:27
Essaye 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
0
arsenik360 Messages postés 13 Date d'inscription jeudi 16 décembre 2010 Statut Membre Dernière intervention 24 mai 2011
26 janv. 2011 à 15:39
Quel est l'interet de "inttostr" ? je dois avoir un resultat chiffré, je ne comprend pas bien... :/
0
arsenik360 Messages postés 13 Date d'inscription jeudi 16 décembre 2010 Statut Membre Dernière intervention 24 mai 2011
26 janv. 2011 à 18:27
Merci beaucoup pour tes explications qui me sont d'une grande utilité :)

J'ai juste un mesasge d'erreur lors de la compilation, c'est possible que se soit du au code ? :/
0
fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
26 janv. 2011 à 18:58
oui comme je l'ai expliqué "nblettre(result)" génère forcement une erreur lors de la compilation
0
arsenik360 Messages postés 13 Date d'inscription jeudi 16 décembre 2010 Statut Membre Dernière intervention 24 mai 2011
26 janv. 2011 à 19:05
ben oui mais ds ton code, il y a n'y a pas de "nblettre(result)"
0
fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
26 janv. 2011 à 19:18
oups j'avais pas bien lu la question
çà plante à quel ligne ?
0
arsenik360 Messages postés 13 Date d'inscription jeudi 16 décembre 2010 Statut Membre Dernière intervention 24 mai 2011
26 janv. 2011 à 19:23
En fait il m'annonce que la compilation a réussie mais j'ai droit a l'affiche de "Runtime 105 00406E4" :/
0
fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
26 janv. 2011 à 21:55
Avec quel soft vous compilez
Turbo pascal, delphi ....
0
fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
26 janv. 2011 à 21:59
Si c'est avec Turbo pascal
il faut ajouter WinCRT à la clause Uses
0
arsenik360 Messages postés 13 Date d'inscription jeudi 16 décembre 2010 Statut Membre Dernière intervention 24 mai 2011
26 janv. 2011 à 22:22
non, j'ai delphi 2010 :)
avec la ligne il est mis qu'il est impossible de résoudre le nom d'unité...

Je vais regarder après ca sur internet :) sauf si mnt tu sais, autant me le dire ^^ :p

merci en tout cas :p
0
arsenik360 Messages postés 13 Date d'inscription jeudi 16 décembre 2010 Statut Membre Dernière intervention 24 mai 2011
26 janv. 2011 à 22:37
Avec "uses SysUtils;" j'ai un message d'erreur toujours 105 mais un différent :/
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
26 janv. 2011 à 22:38
Bonsoir

Runtime Error 105 = File not open for output

N.B. C'est une application console ?

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
0
arsenik360 Messages postés 13 Date d'inscription jeudi 16 décembre 2010 Statut Membre Dernière intervention 24 mai 2011
26 janv. 2011 à 22:50
oui :)
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
26 janv. 2011 à 23:16
Et si tu fais Menu Fichier > Nouveau > Application console. En compilant ce nouveau projet, tu obtiens la même erreur ?

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
0
arsenik360 Messages postés 13 Date d'inscription jeudi 16 décembre 2010 Statut Membre Dernière intervention 24 mai 2011
26 janv. 2011 à 23:30
fantastique !! :p
ca fonctionne a la perfection ! :) merci pour tout :D
0
Utilisateur anonyme
27 janv. 2011 à 13:52
Salut

var
phrase:string;
result:integer;
lettre:char;
nbchar:integer;


Attention Result est un mot réservé donc à ne pas utiliser (Surtout dans une fonction)
0
Rejoignez-nous