[Pascal] Help

Adil -  
 sam -
Salut procedure en c il compte pas j juste les m
il les voles dicertement (le 2 emme compteur :j) c'est bizare
merci de me faire savoire pas avance _

program enseignat;
type
enr=record
nom:string[25];
prenom:string[25];
ddn:string[8];
lieu:string[15];
grade:char;
situation_f:char;
nbre_enf:integer;
diplome:array[1..3] of Record
titre:char;
annee_o:string[4];
mention:string[15];
end;
end;
var
enseignant:file of enr; v:enr; choix:integer;
procedure creat;
var k,i,j,nb:integer;
begin
rewrite (enseignant);
write ('entrer le nb d''enseignant:');
readln(nb);
for i:=1 to nb do
begin
write('entrer le nom:');
readln(v.nom);
write('entrer le prenom:');
readln (v.prenom);
write ('entrer ddn:');
readln (v.ddn);
write ('entrer le lieu n:');
readln (v.lieu);
write ('entrer le grade:a/m/c/f/p? ');
readln (v.grade);
write ('entrer la situation de famille:');
write('c/m/v/d?:');
readln (v.situation_f);
write ('entrer le nb enfant');
readln (v.nbre_enf);
write ('entrer le nbre de diplome:');
readln (j);
for k:=1 to j do begin
v.diplome[j].titre:=' ';
v.diplome[j].annee_o:=' ';
v.diplome[j].mention:=' ';
end;
for k:=1 to j do begin
write ('entrer le titre:b/i/m/d');
readln(v.diplome[j].titre);
write ('enter l''annee d''ob');
readln (v.diplome[j].annee_o);
write ('entrer la mention');
readln (v.diplome[j].mention);end; WRITE (ENSEIGNANT,V);
END; (*FOR*)
CLOSE (ENSEIGNANT); END;
PROCEDURE B;
var i,j:integer;
BEGIN
RESET (ENSEIGNANT);
if IORESULT <>0 then BEGIN
WRITE ('FICHIER INEXISTANT');

EXIT; END; j:=0;
FOR I:=1 TO filesize(enseignant) DO
Begin
read (enseignant,v);
if (v.situation_f='m') and (v.nbre_enf<=2) then
j:=j+1;
end;writeln (j); close (enseignant);
end;
procedure c; (*problem c*)
var j,i:integer;
begin
reset (enseignant);j:=0;
while not eof (enseignant) do
begin
read (enseignant,v);
for i:=1 to 3 do begin (*svp ici mon problem*)
(*compteur pas juste de m*)
if v.diplome[i].titre='m'then
if v.diplome[i].annee_o<'1996' then
j:=j+1;

end;
end;write ('le nbres enseig. ayant magister<96:');
writeln (j);close (enseignant);
end;
procedure d;
var
i,j:integer;begin
reset (enseignant); j:=0;
for i:=1 to filesize (enseignant) do
begin
read (enseignant,v);

if v.diplome[3].titre<>' ' then
j:=j+1;
end;
write (j); CLOSE (ENSEIGNANT);end;

procedure d2;
var
N,F,i,j:integer;
begin
reset (enseignant); j:=0;
for i:=1 to filesize (enseignant) do
begin
F:=0;
read (enseignant,v);
FOR N:=1 TO 3 DO BEGIN

if v.diplome[N].titre<>' ' then F:=F+1;
IF F>3 THEN
j:=j+1;
end;
end; write ('LE NOMBRE ENS>2 DIP=',j)

close (enseignant); END; begin
assign(enseignant,'c:\texte2.exe');
writeln ('entrer choix:1:creat,2:nbre enf.marier<2');
writeln('entrer choix : 3:magister avant 96,4:exit,5 OU 6:nbre dp.');

readln (choix);
case choix of
1:creat;
2:b;
3:c; (*ici ? il compte pas juste Le j (delicat ERR.ATRAVER)*)
4:exit;
5:d;
end;readln;readln; end.

(*et pourtant c'est juste (structure) "j" s'il vous plais corriger moi*)

18 réponses

  1. rirififiloulou
     
    excuse mais c un peu le bordel donne juste le code qui est necessaire et essai de le rendre plus lisble.
    explique aussi mieux se qui va pas.

    ps: il est le C la dedan?
    0
  2. adil
     
    oui .
    end;
    procedure c; (*problem c*)
    var j,i:integer;
    begin
    reset (enseignant);j:=0;
    while not eof (enseignant) do
    begin
    read (enseignant,v);
    for i:=1 to 3 do begin (*svp ici mon problem*)
    (*compteur pas juste de m*)
    if v.diplome[i].titre='m'then
    if v.diplome[i].annee_o<'1996' then
    j:=j+1;

    end;
    end;write ('le nbres enseig. ayant magister<96:');
    writeln (j);close (enseignant);
    end;
    procedure d;
    0
  3. adil
     
    les caractere 'm' il les voles meme suivant cond.<1996
    0
  4. Adil
     
    La question pour quoi il comptes pas correctement les M souvent j-1 je passer des nuit est j'ai cmpris pourquoi il les voles' M' J+1.
    Pour faire bien ses modele relationnelle
    entrer les m est vous alles voir
    Merci par avance
    bonne nuit
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mohammed
     
    salut adil,
    pourquoi for i:=1 to 3 do begin
    Bon courage
    Merci
    0
    1. Adil
       
      Salut,chere frere comment sava ?
      j'ai compris mon erreure c'etait un probleme d'entrer des donnees apres axecution
      puisse que je respecter pas les zone memoire alouez ,strictemet
      conforme comme par exemple la taille des zonnes allouez
      je contenter par le stricte minimum,est evidament tous des donnees aleatoires qui ne restepectes pas la taille ,afin de faire un raccourci du temp
      puise que l'ordinateur est une machine inteligente est bete a lafois
      dans mon cas.
      mais j'ai constater cette fois si qui'il est tres exigent,des zonne memoirs allouez est leur type complet,pour que ça marche;ces betes par ce que j'ai perdu des nuits juste a cause de ça

      correction a dans p.creat:
      for k:=1 to j do begin
      v.diplome[k].titre:=' ';
      v.diplome[k].annee_o:=' ';
      v.diplome[k].mention:=' ';
      end;
      for k:=1 to j do begin
      write ('entrer le titre:b/i/m/d');
      readln(v.diplome[k].titre);
      write ('enter l''annee d''ob');
      readln (v.diplome[k].annee_o);
      write ('entrer la mention');
      readln (v.diplome[k].mention);end; WRITE (ENSEIGNANT,V);
      END; (*FOR*)
      CLOSE (ENSEIGNANT); END;
      PROCEDURE B;
      0
  7. Adil
     
    salut,comment sava ?Merci infiniment pour le message

    C'est par ce que c'est un enregistrement diplome tablaux qui se repete 3 fois donc
    to j or 3 c'est perse que paraille plus exact c'est 3 pour arriver ou dernier enregistrement est prenne la valeur vide ' ' complete garantie de la val determiner est pour pas tomber dans le piege
    read (j) par ce que cette derniere change en f° du nombre de diplomes
    0
  8. Adil
     
    Salut,j'ai compris mon erreure c'etait un probleme d'entrer des donnees apres axecution
    puisse que je respecter pas les zone memoire alouez ,strictemet
    conforme comme par exemple la taille des zonnes allouez
    je contenter par le stricte minimum,est evidament tous des donnees aleatoires qui ne restepectes pas la taille ,afin de faire un raccourci du temp
    puise que l'ordinateur est une machine inteligente est bete a lafois
    dans mon cas.
    mais j'ai constater cette fois si qui'il est tres exigent,des zonne memoirs allouez est leur type complet,pour que ça marche;ces betes par ce que j'ai perdu des nuits juste a cause de ça

    correction a dans p.creat:
    for k:=1 to j do begin
    v.diplome[k].titre:=' ';
    v.diplome[k].annee_o:=' ';
    v.diplome[k].mention:=' ';
    end;
    for k:=1 to j do begin
    write ('entrer le titre:b/i/m/d');
    readln(v.diplome[k].titre);
    write ('enter l''annee d''ob');
    readln (v.diplome[k].annee_o);
    write ('entrer la mention');
    readln (v.diplome[k].mention);end; WRITE (ENSEIGNANT,V);
    END; (*FOR*)
    CLOSE (ENSEIGNANT); END;
    PROCEDURE B;
    0
  9. mohammed
     
    salut chère frère,
    pourriez vous m'envoier l'éxo.
    Bon courage.
    Avec mes vœux de réussite
    Merci.
    0
    1. Adil
       
      Salut,sava?
      EXO:3 Soit un fichier enseignant. Un enreg est identifie par:

      Nom:----25c------ | Titre:------------
      prenom:----25c--- | Annee d'obtention :---4c--
      Date de naiss :---8c | Mention:-----15c------
      Lieu de naiss :---15c-- | Titre:------------
      grade:-------------- | Annee d'obtention :---4c--
      Situation de famille:---------| Mention:-----15c------
      Nbre d'enfanrs :----Entier- | Annee d'obtention :---4c--
      |
      |

      Avec : A M C
      *grade: Assistant,Maitre assitant,charger de cours,
      Maitre de conférence,Professeur
      F P
      *Situation de famille :Célibataire,Marié,Veuf,divorce
      C M V D
      *Titre : Bac,Ingeniorat,Magister,Doctorat
      B I M D
      Utilser le langage pascal pour:
      1/Crées ce fichier; 2/Ecrire une procédure de saisie
      3/Donner les procédures qui nous informent sur :
      a/Le nbre d'enseignants marieés avec 2 enfants au plus
      b/Le nbre d'enseignants ayant obtenu le magiter avant 1996.
      c/Le nbre d'enseignants possédant plus de deux diplômes.
      0
  10. Mohammed
     
    Salut frère,
    1- déclaration de dimplôme
    préférable avant enr = record
    dipl=Record
    titre:char;
    annee_o:string[4];
    mention:string[15];
    end;
    et ds ENR
    diplome:array[1..3] of dipl;
    sachant que d'après [1..3] l'enseignant ne peut avoir + de 3 diplôme(?)
    2- vous avez commis des érreures ds votre prog:
    dans la proc B
    if IORESULT <>0 then BEGIN
    WRITE ('FICHIER INEXISTANT');
    EXIT; END; (else) (erreure légère qui peut te couter chère ds un autre prg)

    if (v.situation_f='m') and (v.nbre_enf<=2) then
    l'ens qui a un M et 2 enfants pourquoi <=2 normalement =2
    3- if v.diplome[N].titre<>' ' then f=f+1
    {IF F>3 THEN
    j:=j+1; }
    la condition de F vien après le end de for en plus la condition n'est pas correcte f=le nbre de diplômes non obtenues
    donc pour que l'ense aurai obtenu +2 qui est 3 diplômes f restera =0
    pour le grand prblème que vous avez eu et bein c'est parceque la solution de l'exo est + complexe quel' on à l'ère.
    expl si au cours de la saisie vous entrez 2 ou 3 fois M pour le titre d'un enseignant là vous aurez un pblème dans le résultat de la proc C car même si vous n'avez que 3 enseignant qui ont le M mais après une erreure vous le tappez 2ou3 fois pour le titre d'un enseignant
    votre résultat sera 4 ou 5 pour seulement 3 enseignant.
    Bon courage.
    Merci.
    end;
    0
  11. Adil
     
    Salut,chere frere comment sava ?
    j'ai reçu votre message
    Merci.
    et Merci pour l'ecouragement
    le 2 emme module en est en basse de donnees relationnel

    bye A+
    0
  12. mohamed
     
    Salut chère frère,
    tu te trouve dans le module bdd relationnelle.
    A+.
    Bon courage
    Merci.
    0
  13. Adil
     
    Salut chere frere merci pour votre message c'est gentille de votre part

    Merci bye abiento j'aispere

    A+

    Votre frere et ami Adil
    0
  14. Vrais Nom Adil pas une immitation
     
    Salut mon frère bien aimé comment sava ?
    c'est moi le vrais Adil
    s'il vous plait j'ai un problème mon ordinateur

    se plante après que j'ai modifier un programme en
    lui ajoutant une boucle while en langage c
    il se plante automatiquement dés que je initialise i =0;
    ce que je doit faire s’il vous plait pour optimisé ?

    Merci dans l'attente d'une suite favorable

    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    main()
    {float x,y ;
    int i=0; (*il se plante ici=0 pourqoi svp +l’image reste figée? *)
    while (x!=2&&i<=10); (*rappel tant que x <>2 and i<=10 ;Merci*)
    {
    printf ("saisir x: ");
    scanf ("%f",&x);
    y=log(x);
    printf("log(x)=%f\n",y);
    i++;}
    }
    source qui marche :
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    voix

    void main()
    {
    float x,y ;
    {
    printf ("saisir x: ");
    scanf ("%f",&x);
    y=log(x);
    printf("log(x)=%f\n",y);
    }
    0
  15. ADIL le varais
     
    MERCI,svp j'ai besoin de ton email

    MERCI
    0
    1. mohamed
       
      Salut chère frère,
      je ne peut pas vous aider, je n'ai pas étudier le langage c.
      mais je crois qu'il y a 2 possibilité ou bien l'initialisation de i à 0 est innacceptable ou bien vous n'incrémentez pas le i dans la boucle donc c'est une boucle infinie.
      Bon courage.
      Merci.
      0
  16. Adil le vrais
     
    Salut,mon chere frére
    c'est pas imporatant en generale la boucle while se fait en bas,avec le langage c;
    est pour i il est comme tant que pour pascal avec compteur i,
    c'est une imprevus en utilisant au debut (while).
    stp t'as dejas programmer avec Ada ?

    Merci c ton vrais frére Adil
    0
    1. mohamed
       
      Salut chère frère,
      je ne suis pas sûr mais change la boucle while par do..while car en C++ elle s'écrit de 2 façon ou ajoute void avant Main()
      void main()
      {float x,y ;
      int i=0;
      DO
      printf ("saisir x: ");
      scanf ("%f",&x);
      y=log(x);
      printf("log(x)=%f\n",y);
      i++;}
      while (x!=2&&i<=10);
      {
      }
      0
  17. mohamed
     
    Salut chère frère,
    même chose pour ADA, concernant votre pblème fait des essais d'affichage avant l'initialisation de i, après l'init de i après le while expl afficher (1) afficher(2) .....
    donc après l'exec de votre pg où il se déclanche.
    pour la pgmmation delphi, c++,... j'attend le mois de septempbre pour débuter.
    Bon Courage.
    votre frère.
    Merci.
    0
  18. Adil
     
    Salut ,mon frere j'ai trouve ou est l'erreure

    Merci @+
    0
  19. sam
     
    Please help me to solve this exercise:
    A/ Nous avons aujourd'hui des codes numériques pour obtenir de l'argent, pour nous inscrire à un cours, pour activer un system d'alarme ou pour utiliser une photocopieuse. Le plus souvent la validité des ces codes est déterminée par ordinateur. On propose dans ce TP d'étudier le contrôle de la validité des codes destinés à une photocopieuse et de construire en conséquence un programme en Pascal.
    Le programme doit inviter l'utilisateur à entrer un code d'indentification de quatre chiffres, lire le code et vérifier s'il est correct. Les codes corrects ont un chiffre de contrôle. Le chiffre de contrôle d'un code d'identification est son chiffre le plus à droite: un chiffre de contrôle correct est égal au reste de la division par 7 de la somme des trois autres chiffres.
    Le programme doit afficher l'un des messages suivant après en avoir vérifier le code:
    - "ce code est correct. Prêt à photocopier".
    - "ERREUR: ce code n'est pas correct pour cette photocopieuse".
    B/ Nous allons ensuite concevoir et écrire un programme qui permit de casser le code en question (envisager toutes les combinaison possible dans un premier temps, ensuite réfléchir à optimiser ceci).
    0