Petit soucis avec les fonctions [Résolu]

Messages postés
13
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
24 mai 2011
- - Dernière réponse :  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
Afficher la suite 

20/26 réponses

Meilleure réponse
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de fbalien
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de WhiteHippo
Messages postés
1649
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
7
0
Merci
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,'".');
Commenter la réponse de jlen100
Messages postés
13
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
24 mai 2011
0
Merci
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 ^^
Commenter la réponse de arsenik360
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
0
Merci
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
Commenter la réponse de dubois77
Messages postés
13
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
24 mai 2011
0
Merci
Quel est l'interet de "inttostr" ? je dois avoir un resultat chiffré, je ne comprend pas bien... :/
Commenter la réponse de arsenik360
Messages postés
13
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
24 mai 2011
0
Merci
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 ? :/
Commenter la réponse de arsenik360
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016
0
Merci
oui comme je l'ai expliqué "nblettre(result)" génère forcement une erreur lors de la compilation
Commenter la réponse de fbalien
Messages postés
13
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
24 mai 2011
0
Merci
ben oui mais ds ton code, il y a n'y a pas de "nblettre(result)"
Commenter la réponse de arsenik360
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016
0
Merci
oups j'avais pas bien lu la question
çà plante à quel ligne ?
Commenter la réponse de fbalien
Messages postés
13
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
24 mai 2011
0
Merci
En fait il m'annonce que la compilation a réussie mais j'ai droit a l'affiche de "Runtime 105 00406E4" :/
Commenter la réponse de arsenik360
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016
0
Merci
Avec quel soft vous compilez
Turbo pascal, delphi ....
Commenter la réponse de fbalien
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016
0
Merci
Si c'est avec Turbo pascal
il faut ajouter WinCRT à la clause Uses
Commenter la réponse de fbalien
Messages postés
13
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
24 mai 2011
0
Merci
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
Commenter la réponse de arsenik360
Messages postés
13
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
24 mai 2011
0
Merci
Avec "uses SysUtils;" j'ai un message d'erreur toujours 105 mais un différent :/
Commenter la réponse de arsenik360
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
0
Merci
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
Commenter la réponse de WhiteHippo
Messages postés
13
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
24 mai 2011
0
Merci
oui :)
Commenter la réponse de arsenik360
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
0
Merci
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
Commenter la réponse de WhiteHippo
Messages postés
13
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
24 mai 2011
0
Merci
fantastique !! :p
ca fonctionne a la perfection ! :) merci pour tout :D
Commenter la réponse de arsenik360
0
Merci
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)
Commenter la réponse de Utilisateur anonyme