[Pascal] Help

Fermé
Adil - 15 mars 2004 à 22:18
 sam - 30 mai 2008 à 15:17
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*)
A voir également:

18 réponses

rirififiloulou
15 mars 2004 à 22:37
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
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
les caractere 'm' il les voles meme suivant cond.<1996
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
salut adil,
pourquoi for i:=1 to 3 do begin
Bon courage
Merci
0
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
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
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
salut chère frère,
pourriez vous m'envoier l'éxo.
Bon courage.
Avec mes vœux de réussite
Merci.
0
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
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
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
Salut chère frère,
tu te trouve dans le module bdd relationnelle.
A+.
Bon courage
Merci.
0
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
Vrais Nom Adil pas une immitation
9 juil. 2004 à 00:35
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
ADIL le varais
9 juil. 2004 à 02:58
MERCI,svp j'ai besoin de ton email

MERCI
0
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
Adil le vrais
9 juil. 2004 à 21:21
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
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
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
Salut ,mon frere j'ai trouve ou est l'erreure

Merci @+
0
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