Petit soucis avec les fonctions [Résolu]

arsenik360 13 Messages postés jeudi 16 décembre 2010Date d'inscription 24 mai 2011 Dernière intervention - 26 janv. 2011 à 10:23 - 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 

Votre réponse

26 réponses

Meilleure réponse
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 26 janv. 2011 à 17:50
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.

Merci fbalien 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 123 internautes ce mois-ci

Commenter la réponse de fbalien
Meilleure réponse
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 26 janv. 2011 à 23:24
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

Merci WhiteHippo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 123 internautes ce mois-ci

Commenter la réponse de WhiteHippo
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 26 janv. 2011 à 11:56
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
arsenik360 13 Messages postés jeudi 16 décembre 2010Date d'inscription 24 mai 2011 Dernière intervention - 26 janv. 2011 à 12:02
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
dubois77 691 Messages postés jeudi 17 avril 2008Date d'inscription 19 juin 2018 Dernière intervention - 26 janv. 2011 à 15:27
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
arsenik360 13 Messages postés jeudi 16 décembre 2010Date d'inscription 24 mai 2011 Dernière intervention - 26 janv. 2011 à 15:39
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
arsenik360 13 Messages postés jeudi 16 décembre 2010Date d'inscription 24 mai 2011 Dernière intervention - 26 janv. 2011 à 18:27
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
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 26 janv. 2011 à 18:58
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
arsenik360 13 Messages postés jeudi 16 décembre 2010Date d'inscription 24 mai 2011 Dernière intervention - 26 janv. 2011 à 19:05
0
Merci
ben oui mais ds ton code, il y a n'y a pas de "nblettre(result)"
Commenter la réponse de arsenik360
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 26 janv. 2011 à 19:18
0
Merci
oups j'avais pas bien lu la question
çà plante à quel ligne ?
Commenter la réponse de fbalien
arsenik360 13 Messages postés jeudi 16 décembre 2010Date d'inscription 24 mai 2011 Dernière intervention - 26 janv. 2011 à 19:23
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
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 26 janv. 2011 à 21:55
0
Merci
Avec quel soft vous compilez
Turbo pascal, delphi ....
Commenter la réponse de fbalien
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 26 janv. 2011 à 21:59
0
Merci
Si c'est avec Turbo pascal
il faut ajouter WinCRT à la clause Uses
Commenter la réponse de fbalien
arsenik360 13 Messages postés jeudi 16 décembre 2010Date d'inscription 24 mai 2011 Dernière intervention - 26 janv. 2011 à 22:22
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
arsenik360 13 Messages postés jeudi 16 décembre 2010Date d'inscription 24 mai 2011 Dernière intervention - 26 janv. 2011 à 22:37
0
Merci
Avec "uses SysUtils;" j'ai un message d'erreur toujours 105 mais un différent :/
Commenter la réponse de arsenik360
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 26 janv. 2011 à 22:38
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
arsenik360 13 Messages postés jeudi 16 décembre 2010Date d'inscription 24 mai 2011 Dernière intervention - 26 janv. 2011 à 22:50
0
Merci
oui :)
Commenter la réponse de arsenik360
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 26 janv. 2011 à 23:16
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
arsenik360 13 Messages postés jeudi 16 décembre 2010Date d'inscription 24 mai 2011 Dernière intervention - 26 janv. 2011 à 23:30
0
Merci
fantastique !! :p
ca fonctionne a la perfection ! :) merci pour tout :D
Commenter la réponse de arsenik360
Utilisateur anonyme - 27 janv. 2011 à 13:52
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Petit soucis avec les fonctions - page 2