thetwo c'est pas "il" mais "elle" me concernant :)
Version imprimable
thetwo c'est pas "il" mais "elle" me concernant :)
Je ne te crois pas stupide, et j'ai dis plusieurs fois que c'est gentil d'aider les autres.
Mais pour l'exemple que tu donnes, si personne de plus expérimenté n'était passé par là, tu ne te serais peut-etre pas rendu compte que ta phrase pouvait être interprétée différement, tu ne l'aurais pas modifié, et des gens auraient pris ce que tu disais comme une vérité. Ce qui peut poser des problèmes.
Bonjour,
ok, vuCitation:
Envoyé par Maxence45
Tout le monde se calme s'il vous plait ! C'est un forum où l'entraide doit rester cordiale, et une bonne ambiance est appréciée, notamment sur les "petits forums" comme le nôtre ;) Rien n'empêche les uns et les autres de donner leurs avis, mais ceci doit se faire dans le calme. Tout le monde est ici soit pour progresser, soit dans le but de donner des conseils, et de transmettre un peu de son savoir.
Pour en revenir au sujet initial, j'espère que maxence a compris. J'ajoute un grain de sel à l'édifice, ma version de l'explication :
Imagine, ma chère Maxence, que tu veuilles calculer la somme des n premiers entiers. Tu vas pour cela utiliser une fonction, à laquelle tu vas passer une valeur, dans un paramètre n. cetet valeur va te donner la limite du calcul, donc tu effectueras la somme des entiers de 1 jusqu'à cette valeur (de 1 à n donc). Tu a besoin d'un variable locale i qui te serviras pour "dérouler" la boucle for. La fonction retournera le résultat, voici son code :
Comme tu le vois la variable Resultat est une variable locale, car seule la fonction la connait, elle n'existe pas pour le programme principal. Elle sert de variable intermédiaire pour calculer la somme. Ici n est juste la valeur qui sert à délimiter la fin de la somme.Code:
1
2
3
4
5
6
7
8
9
10
11 function Somme(N: Integer): Integer; var I: Integer; Resultat: Integer; begin Resultat := 0; for I := 1 to N do begin Resultat := Resultat + I; end; Somme := Resultat; end;
Voici le programme appelant :
La variable SommeEntiers est une variable globale au programme, ce qui signifie que la fonction la connait également, puisque la fonction est un sous-programme du programme princpale (elle est incluse dedans donc). On affectue à la variable SommeEntiers le résultat de la fonction Somme. On a passé à la fonction la valeur 15, ainsi la fonction fera la somme des 15 premiers entiers. Ensuite on écrit le résultat avec writeln(SommeEntiers).Code:
1
2
3
4
5
6 var SommeEntiers: Integer; begin SommeEntiers := Somme(15); writeln(SommeEntiers); readln; end.
Bon j'espère que tu as compris cette fois !
Bonjour,
Avant de vous vexer, une petite précision :
Tout le monde peut se tromper, même moi (si, si), généralement cela se produit suite à une lecture un peu trop rapide, et/ou par manque d'attention.
Cela dit, voyons voir
Cela n'a rien détrange, il faut entendre "valeur" au sens général.Citation:
Envoyé par Maxence45
Une chaîne de caractère prend une valeur, ce qu'elle contient, comme n'importe quel type.
C'est faux, si, comme le code que tu as posté me le fait pensé, tu écris dans l'ordreCitation:
Envoyé par wormful_sickfoot
PUISCode:
1
2
3
4
5
6
7
8
9
10
11 function Somme(N: Integer): Integer; var I: Integer; Resultat: Integer; begin Resultat := 0; for I := 1 to N do begin Resultat := Resultat + I; end; Somme := Resultat; end;
Dans ce cas, la fonction Somme ne connaît pas la variable globale SommeEntiers.Code:
1
2
3
4
5
6 var SommeEntiers: Integer; begin SommeEntiers := Somme(15); writeln(SommeEntiers); readln; end.
Démonstration par l'exemple:
Si tu écris
Ça ne compilera pas, utiliseUneVariableGlobale, déclarée AVANT la variable globale jeSuisUneVariableGlobale ne la connaît pas !Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 ... { function simple, qui se contente de renvoyer la valeur d'une variable globale +1 } function utiliseUneVariableGlobale; begin utiliseUneVariableGlobale := jeSuisUneVariableGlobale+1; end; { variable globale } var jeSuisUneVariableGlobale : integer; { programme principal } begin jeSuisUneVariableGlobale := 0; writeln('avant : jeSuisUneVariableGlobale = ',jeSuisUneVariableGlobale); jeSuisUneVariableGlobale := utiliseUneVariableGlobale; writeln('apres : jeSuisUneVariableGlobale = ',jeSuisUneVariableGlobale); readln; end.
Alors que
compilera, et marchera, utiliseUneVariableGlobale, déclarée APRÈS la variable globale jeSuisUneVariableGlobale la connaît !Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 ... { variable globale } var jeSuisUneVariableGlobale : integer; { function simple, qui se contente de renvoyer la valeur d'une variable globale +1 } function utiliseUneVariableGlobale; begin utiliseUneVariableGlobale := jeSuisUneVariableGlobale+1; end; { programme principal } begin jeSuisUneVariableGlobale := 0; writeln('avant : jeSuisUneVariableGlobale = ',jeSuisUneVariableGlobale); jeSuisUneVariableGlobale := utiliseUneVariableGlobale; writeln('apres : jeSuisUneVariableGlobale = ',jeSuisUneVariableGlobale); readln; end.
Cela n'a rien à voir avec une quelconque initialisation automatique par TP, la fonction div_ise, par construction, renvoie toujours 0.Citation:
Envoyé par Ultima
Voilà.
Comme on m'a reproché d'être agressif, alors que je suis au plus une peu acide de-ci de-là, je vous tire ma révérence, et vous laisse à vos petites misères (là, c'est agressif).
Bonjour
oulalala il me semble que j'ai raté pas mal de choses ces derniers temps,
Calmons nous les gars,on est ici tous pour s'entraider :yaisse2:
juste pour confirmer certains propos de thewho en ce qui concerne les variables globales par les fonctions placées avant ou apres les declarations de ces variables thewho a tout a fait raison
N'oublions pas qu'on est en Pascal et non en C ou Java ou autre chose ,je rapele juste que notre compilo pascal fait une lecture sequentielle des instructions ....
@ on garde en tete ce pour quoi on est sur site et on est calme ...............
Oui c'est bien vrai, mais ce n'était qu'un exemple... La fonction Somme ne connaitra la variable SommeEntiers que si elle est déclarée avant... Ceci dit, comme j'avais séparé la présentation en deux, ce détail ne m'était pas venu à l'esprit.
Ceci étant, comme je te l'ai déjà expliqué thewho, si c'est pour être aggressif envers tout le monde, ce n'est pas la peine de venir ici. De même, traiter le travail des autres de misère n'est pas convenable, et c'est irrespectueux envers ceux qui maintiennent le forum et ceux qui y viennent. C'est un lieu de bonne humeur à l'origine, et il n'est pas question que ce coin du web devienne un champ de bataille. ;)
Bonjour,
je me demande si une bonne explication sur les procédures et/ou les fonctions ne serait pas la bienvenue, sachant que c'est quand même une des caractéristiques du langage Pascal d'être procédural (si je ne me trompe pas.)
Je pense au risque de me tromper qu'il y a assez souvent des confusions à plusieurs niveaux:
paramètres à passer, résultats ou action retounée, type de variables, etc.
Donc je ne sais pas si il y a un petit tutorial clair qui existe (je n'ai pas cherché sur ce site ni dans la Faq ) avec quelques exemples, car il me semble, que le sujet n'est pas simple pour tout le monde (moi y compris).
Un bon rappel de base serait sympa :)
bonne journée
JoseF
bonjour
tu pense que un site comme celui la n'aura pas de tuto et fac sur de telles chose?Citation:
Envoyé par JoseF
voila juste un simple lien pour toi ici
cherche le reste et tu trouveras
@+
Bonjour,
non je n'ai jamais pensé celaCitation:
tu pense que un site comme celui la n'aura pas de tuto et fac sur de telles chose?
je disais que je n'avais pas cherché.. voila la nuance :)
alors t'a trouvé ce que tu cherchais?
@+
Mais je n'ai pas trouvé puisque je ne cherche pas. Je [re]chercherai quand j'aurais le besoin de creuser un peu, mais pour l'instant pas je n'ai pas de besoins.
ma contribution était de dire que procédures et fonctions sont souvent mal comprises. paramétres passées par valeurs ou adresses valueurs retournées etc..
voila à mon niveau je clos ce post :)
:mouarf: :) :) :) :) :) 8-) 8-) 8-)