logo

Programme en Pascal


maths supProgramme en Pascal

#msg2740644 Posté le 29-11-09 à 15:01
Posté par ProfilNostalGeek NostalGeek

Bonjour je sollicite votre aide pour la création d'un programme en Pascalqui calcule la somme

1/|i-j|'
1ijn,
pour un entier n supérieur ou égal à deux, choisi par l'utilisateur.
re : Programme en Pascal#msg2740774 Posté le 29-11-09 à 15:28
Posté par Profilinfophile infophile

Bonjour

Tu fais 2 boucles for imbriquées, une qui somme sur i et l'autre sur j.
re : Programme en Pascal#msg2740879 Posté le 29-11-09 à 15:51
Posté par ProfilNostalGeek NostalGeek

PROGRAM Nostal;
VAR n:INTEGER;
    i,j,S:REAL;
BEGIN;
WRITELN('Donner un nombre entier supérieur à 2');
READLN(n);
i=1
FOR 1 to i DO
BEGIN
  i=i+1
  S:=1/|i-j|'
  1/|i-j|'
  FOR j TO n DO 1/|i-j|'
END;
WRITELN('La solution est' S)
READLN;
END.

Je suis pas du tout sur de moi là ... Je pense que le programme va planter car il connait pas la valeur de j . De plus je ne sais pas écrire ni la dérivé, ni la valeur absolue en pascal :x

  
re : Programme en Pascal#msg2740915 Posté le 29-11-09 à 15:59
Posté par ProfilNostalGeek NostalGeek

Edit : Il n'y a pas de dérivé dans la somme j'ai mal lu l'énoncé, la virgule anonçait le "
pour un entier n supérieur ou égal à deux, choisi par l'utilisateur."
re : Programme en Pascal#msg2741051 Posté le 29-11-09 à 16:26
Posté par Profilinfophile infophile

Beaucoup d'erreurs, de logique comme de syntaxe.

si tu affectes 1 à i puis que tu fais une boucle de 1 à i ça va pas aller bien loin
re : Programme en Pascal#msg2741057 Posté le 29-11-09 à 16:28
Posté par ProfilNostalGeek NostalGeek

Effectivement j'ai voulu répondre trop vite ... ^^
re : Programme en Pascal#msg2741192 Posté le 29-11-09 à 16:49
Posté par Profilinfophile infophile

Ensuite comme tu dis "il ne connait pas la valeur de j", c'est normal vu que ton j est en dehors (plus exactement au dessus) de ta boucle portant sur j.

La valeur absolue est abs() en pascal.

Et puis tu as déclaré i,j de type réel, je veux bien, mais dans ce cas une boucle for comme tu l'as fait ne fonctionne pas.

Enfin ton S n'est pas incrémenté.

Bon corrige déjà tout ça
re : Programme en Pascal#msg2741218 Posté le 29-11-09 à 16:54
Posté par Profilinfophile infophile

Attention également à ne pas confondre l'affectation := avec le test d'égalité = !

Pense aussi aux points virgules et tout ce qui concerne la syntaxe Pascal.

Le mieux serait que tu testes ton code sous Turbo-Pascal, il y a des logiciels gratuits sur le net qui permettent de le compiler (je possède dev-Pascal).

J'ai pas mal de boulot je reviens demain !
re : Programme en Pascal#msg2741355 Posté le 29-11-09 à 17:18
Posté par Profilinfophile infophile

Bon finalement j'ai trouvé 2 minutes pour te programmer ça, imprègne toi du code et surtout comprends sa structuration.

Citation :
Program somme;

function calcul(n:integer):real;
var i,j:real; S:Real;
begin
S:=0;
i:=1;
j:=1;
while i<=n do
begin
    while j<=n do
          begin
          if j<>i then S:=S+(1/abs(i-j));
          j:=j+1;
          end;
i:=i+1;
j:=1;
end;
calcul:=S;
end;

var n:integer;

begin
writeln('Entrez un entier');
readln(n);
writeln('Le resultat est',calcul(n));
readln;
end.


Si tu as des questions n'hésite pas
re : Programme en Pascal#msg2742310 Posté le 29-11-09 à 20:14
Posté par ProfilNostalGeek NostalGeek

Re,
Voilà après avoir repris le programme à plusieurs, nous sommes arrivés à ça :
PROGRAM Nostal;

VAR n:INTEGER;
    i,j,S:REAL;
    
BEGIN;
WRITELN('Donner un nombre entier supérieur à 2');
READLN(n);
i=1
FOR i:=1 to n-1 DO
BEGIN
   FOR j:=i+1 to n DO
   BEGIN
      S:= S + 1/abs(i - j)
   END;
END;
WRITELN('La solution est' S)
READLN;
END.

J'aurais voulu savoir ce que tu en pensais.

En revanche dans ton programme, tu poses au départ i:=1 et j:=1 alors que i et j sont différents.
re : Programme en Pascal#msg2742342 Posté le 29-11-09 à 20:26
Posté par Profilinfophile infophile

Bonsoir,

Votre programme ne répond pas au problème, il suffit de tester à la main, vous oubliez plein de termes.

Le mien fonctionne, je l'ai compilé sous dev-Pascal

Citation :

En revanche dans ton programme, tu poses au départ i:=1 et j:=1 alors que i et j sont différents.


Oui mais peu importe j'ai pris soin d'imposer la condition j <> i dans ma boucle intérieure avant d'évaluer 1/abs(i-j).

re : Programme en Pascal#msg2742374 Posté le 29-11-09 à 20:34
Posté par ProfilNostalGeek NostalGeek

Pourtant je viens de tester ton programme sous FreePascal ( le logiciel que l'on utilise en cours ) et il ne fonctionne pas :x
re : Programme en Pascal#msg2742395 Posté le 29-11-09 à 20:39
Posté par Profilinfophile infophile

Je t'assure, il fonctionne

Maintenant je ne sais pas si la syntaxe de FreePascal est la même que celle de dev-Pascal.

Télécharge dev-Pascal et teste mon code si tu as un doute.
re : Programme en Pascal#msg2742396 Posté le 29-11-09 à 20:39
Posté par ProfilNostalGeek NostalGeek

Ce que l'on doit faire c'est bien :
1°) Pour i de 1 à n-1 # Condition 1 <= i et i < n (car i != j <= n)
2°) Pour j de i+1 à n # Condition i != j et j <= n
3°) s = s + 1/|i-j| # On fait la somme ?
re : Programme en Pascal#msg2742425 Posté le 29-11-09 à 20:44
Posté par Profilinfophile infophile

Non là tu oublies tous les termes où j < i !

Par exemple si n = 5 et i = 3 ton programme ajoute 1/|3-4| + 1/|3-5|, alors qu'il devrait ajouter 1/|3-1| + 1/|3-2| + 1/|3-4| + 1/|3-5|.

re : Programme en Pascal#msg2742453 Posté le 29-11-09 à 20:49
Posté par Profilinfophile infophile

Pourquoi tu ne testes pas ton code informatiquement ?

Tu te rendrais compte que certaines choses ne collent pas.

Sous dev-Pascal il y a un debugger très pratique qui t'indique où sont les erreurs de compilations en t'indiquant leur nature.

Répondre à ce sujet

réservé Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster
attention Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.



maths haut de pagehaut Retrouvez cette page sur ilemaths l'île des mathématiques
© Tom_Pascal & Océane 2012