Révisions
3 participants
Page 1 sur 1
Révisions
Chers élèves,
Ici, vous pouvez réviser la matière Algorithmique et programmation..
Posez vos questions, vos demandes, vos essais...
Plusieurs enseignants seront à votre écoute et seront prêts à vous répondre.
En espérant une bonne réussite à tous.
Ici, vous pouvez réviser la matière Algorithmique et programmation..
Posez vos questions, vos demandes, vos essais...
Plusieurs enseignants seront à votre écoute et seront prêts à vous répondre.
En espérant une bonne réussite à tous.
Re: Révisions
Sami a écrit:Chers élèves,
Ici, vous pouvez réviser la matière Algorithmique et programmation..
Posez vos questions, vos demandes, vos essais...
Plusieurs enseignants seront à votre écoute et seront prêts à vous répondre.
En espérant une bonne réussite à tous.
toutaonline- Modérateur
- Messages : 572
Points : 758
Réputation : 45
Date d'inscription : 10/10/2009
Age : 111
Localisation : Ici
Re: Révisions
salut pour tous mes profs et mes collegues
je chercher comment inserer
au position de de l'entier 0 le caractére " " dans cette matrice
pour avoir la forme de calendrier
program bilele;
uses wincrt;
type
mat=array[1..7,1..7 ]of integer;
var m:mat;
n,jour:integer;
procedure saisir(var n:integer;var jour:integer);
begin
repeat
write('jour=');
read(jour);
until (jour in [1..7]);
repeat
write('nomber de jour=');
read(n);
until (n>=28) and(n<=31);
end;
procedure remplir ( var m :mat; n,jour:integer );
var
i,j,f:integer;
k:integer;
begin
for f := 1 to jour-1 do
begin
m[f,1]:= 0;
end;
k:=1;
begin
for j := jour to 7 do
begin
m[1,j]:=k;
k:=k+1;
end;
end;
k:=m[1,7];
for i := 2 to 5 do
for j := 1 to 7 do
begin
m[i,j]:=k+1;
k:=k+1 ;
while (m[i,j])>n do
m[i,j]:=0;
end;
end;
procedure affiche ;
var i,f ,j:integer;
begin
for i := 1 to 5 do
begin
for j := 1 to 7 do
write(m[i,j]:5);
writeln;
end;
end;
begin
saisir(n,jour);
remplir(m,n,jour);
affiche;
end.
je chercher comment inserer
au position de de l'entier 0 le caractére " " dans cette matrice
pour avoir la forme de calendrier
program bilele;
uses wincrt;
type
mat=array[1..7,1..7 ]of integer;
var m:mat;
n,jour:integer;
procedure saisir(var n:integer;var jour:integer);
begin
repeat
write('jour=');
read(jour);
until (jour in [1..7]);
repeat
write('nomber de jour=');
read(n);
until (n>=28) and(n<=31);
end;
procedure remplir ( var m :mat; n,jour:integer );
var
i,j,f:integer;
k:integer;
begin
for f := 1 to jour-1 do
begin
m[f,1]:= 0;
end;
k:=1;
begin
for j := jour to 7 do
begin
m[1,j]:=k;
k:=k+1;
end;
end;
k:=m[1,7];
for i := 2 to 5 do
for j := 1 to 7 do
begin
m[i,j]:=k+1;
k:=k+1 ;
while (m[i,j])>n do
m[i,j]:=0;
end;
end;
procedure affiche ;
var i,f ,j:integer;
begin
for i := 1 to 5 do
begin
for j := 1 to 7 do
write(m[i,j]:5);
writeln;
end;
end;
begin
saisir(n,jour);
remplir(m,n,jour);
affiche;
end.
bilele- membre
- Messages : 23
Points : 26
Réputation : 0
Date d'inscription : 12/03/2010
Age : 32
Localisation : benguerdane
Re: Révisions
Bravo Bilel pour l'effort,
Tout simplement, tu peux au niveau de l'affichage utiliser la structure conditionnelle pour afficher des espaces à la place du 0 (car on ne peut pas insérer des caractères dans une matrice d'entiers)
Tout simplement, tu peux au niveau de l'affichage utiliser la structure conditionnelle pour afficher des espaces à la place du 0 (car on ne peut pas insérer des caractères dans une matrice d'entiers)
- Code:
if (m[i,j]<>0) then
write(m[i,j]:5)
else
write(' ':5);
Re: Révisions
merci mr sami
bilele- membre
- Messages : 23
Points : 26
Réputation : 0
Date d'inscription : 12/03/2010
Age : 32
Localisation : benguerdane
Re: Révisions
mr sami
est ce que il ya une solution pour eviter toujours de tomber dans les runtime error
surtout 105
est ce que il ya une solution pour eviter toujours de tomber dans les runtime error
surtout 105
bilele- membre
- Messages : 23
Points : 26
Réputation : 0
Date d'inscription : 12/03/2010
Age : 32
Localisation : benguerdane
Re: Révisions
L'erreur 105 concerne les fichiers textes,
Elle se produit lorsque vous voulez effectuer une opération d'écriture sur un fichier texte qui n'est pas ouvert en écriture.
Par exemple:
Soit la déclaration: F : text;
si au cours du programme, il existe l'instruction: writeln (F, ch);
Cette instruction ne fonctionnerait correctement que si elle est précédée déjà par Append(F) ou par Rewrite(F) qui permettent d'ouvrir le fichier en mode écriture.
Si par faute, on a ecrit Reset(F) à la place de Append(F), on va avoir un arrêt brutal de l'exécusion avec le message d'erreur: "Runtime Error 105"
Pour éviter de tomber dans des telles erreurs Bilele, il faut tout d'abord essayer de vérifier qu'un fichier est ouvert en écriture avant d'y enregistrer
Mais pour éviter l'arrêt brutal de l'exécution (Le programme continuera à s'exécuter), on peut utiliser les directives de compilation.
Il suffit de mettre la séquence qui peut causer le problème entre {$I-} et {$I+}, c'est à dire lors de l'exécution de cette séquence, s'il y aura une erreur, l'exécution ne s'arrête pas et le code de l'erreur sera retourné par la fonction prédéfinie IOResult (Résultat d'entrée/sortie)
Voilà un exemple qui explique l'utilisation de ces directives:
Exemple 1: L'exécution de ce programme génère l'erreur 105
Exemple2: L'exécution de ce programme génère l'erreur 105 mais sans arrêt de l'exécution
Dans le cas général maintenant: En utilisant les directives on va avoir deux possibilités:
* IOResult = 0 : l'instruction s'est bien exécuter et aucune erreur n'est générée.
* IOResult <> 0: l'instruction ne s'est pas bien exécuter, elle a causée une erreur système
On peut alors écrire:
N.B: Si on écrit {$I-}: $I- ne sera pas considéré comme commentaire
Elle se produit lorsque vous voulez effectuer une opération d'écriture sur un fichier texte qui n'est pas ouvert en écriture.
Par exemple:
Soit la déclaration: F : text;
si au cours du programme, il existe l'instruction: writeln (F, ch);
Cette instruction ne fonctionnerait correctement que si elle est précédée déjà par Append(F) ou par Rewrite(F) qui permettent d'ouvrir le fichier en mode écriture.
Si par faute, on a ecrit Reset(F) à la place de Append(F), on va avoir un arrêt brutal de l'exécusion avec le message d'erreur: "Runtime Error 105"
Pour éviter de tomber dans des telles erreurs Bilele, il faut tout d'abord essayer de vérifier qu'un fichier est ouvert en écriture avant d'y enregistrer
Mais pour éviter l'arrêt brutal de l'exécution (Le programme continuera à s'exécuter), on peut utiliser les directives de compilation.
Il suffit de mettre la séquence qui peut causer le problème entre {$I-} et {$I+}, c'est à dire lors de l'exécution de cette séquence, s'il y aura une erreur, l'exécution ne s'arrête pas et le code de l'erreur sera retourné par la fonction prédéfinie IOResult (Résultat d'entrée/sortie)
Voilà un exemple qui explique l'utilisation de ces directives:
Exemple 1: L'exécution de ce programme génère l'erreur 105
- Code:
program test;
uses wincrt;
var
F: text;
Begin
Assign(F,'d:\a.txt');
Rewrite(f);
close(F);
Reset(f);
writeln(F,'bonjour');
end.
Exemple2: L'exécution de ce programme génère l'erreur 105 mais sans arrêt de l'exécution
- Code:
program test;
uses wincrt;
var
F: text;
Begin
Assign(F,'d:\a.txt');
Rewrite(f);
close(F);
Reset(f);
{$I-}
writeln(F,'bonjour');
{$I+}
If(IORESULT=105) then
writeln('erreur 105 générée: Ecriture dans le fichier texte impossible')
else
writeln('pas d''erreur');
end.
Dans le cas général maintenant: En utilisant les directives on va avoir deux possibilités:
* IOResult = 0 : l'instruction s'est bien exécuter et aucune erreur n'est générée.
* IOResult <> 0: l'instruction ne s'est pas bien exécuter, elle a causée une erreur système
On peut alors écrire:
- Code:
program......;
......
Begin
....
{$I-}
...... (** l'instruction qui risque de générer l'erreur **)
{$I+}
If (IOresult <> 0) then
writeln ( '.................') (** c'est à vous de choisir le message d'erreur personnel**)
Else
begin
........ (** Continuer le reste du programme **)
end;
End.
N.B: Si on écrit {$I-}: $I- ne sera pas considéré comme commentaire
Re: Révisions
merci mr sami enfin sa fonctionne correctement.
bilele- membre
- Messages : 23
Points : 26
Réputation : 0
Date d'inscription : 12/03/2010
Age : 32
Localisation : benguerdane
Re: Révisions
salut pour tous mes proffeseur et mes collegues je trouve un petit probléme pendant la resoulution de de ce probléme
Un nombre vilain est un nombre qui a au moins dux pairs de facteurs telle que la somme des facteursd'une paire équivaut a la différence des facteur
de l'autre .
le nombre 6 est un nombre vilain puisque 6*1=2*3=6 et 6-1=2+3
Aussi 24 est un nombre vilain puisque 12-2=6+4
Ecrire un programme qui ,lit saisie une liste d'entiers positifs dans un fichier textef1.txt ,creé un second fichier f2.txt en inscrivant devant chaque entier s'il est vilain ou pas
-l'arret de saisie de la liste dabs f1 est validé en repondant par O(oui) a la question "voulez vous continuez"
[i][b]
Un nombre vilain est un nombre qui a au moins dux pairs de facteurs telle que la somme des facteursd'une paire équivaut a la différence des facteur
de l'autre .
le nombre 6 est un nombre vilain puisque 6*1=2*3=6 et 6-1=2+3
Aussi 24 est un nombre vilain puisque 12-2=6+4
Ecrire un programme qui ,lit saisie une liste d'entiers positifs dans un fichier textef1.txt ,creé un second fichier f2.txt en inscrivant devant chaque entier s'il est vilain ou pas
-l'arret de saisie de la liste dabs f1 est validé en repondant par O(oui) a la question "voulez vous continuez"
[i][b]
bilele- membre
- Messages : 23
Points : 26
Réputation : 0
Date d'inscription : 12/03/2010
Age : 32
Localisation : benguerdane
Re: Révisions
c'est ma solution mais je crois qu"elle n'est pas la plus elegante aussi il ya un petit erreur je vous remercie pour le corriger
program bilel;
uses wincrt;
type tab1=array[1..20]of integer;
var n:integer;
i,j,k:integer;test:boolean;
t1,t2:tab1; ch:string; f1,f:text;
c:char;
procedure remplir(var n:integer;var t1,t2:tab1;var k:integer);
begin
k:=0;
for i:=1 to n do
begin
if n mod i=0 then
begin
for j:=1 to n do
if i*j=n then
begin
k:=k+1;
t1[k]:=i;
t2[k]:=j;
end;
end;
end;
end;
function vilain(n:integer;t1,t2:tab1;k:integer):boolean;
begin
for i:=1 to k do
for j:=1 to k-1 do
begin
if (t2[i]-t1[i]=t2[j+1]+t1[j+1])or (t1[i]-t2[i]=t2[j+1]+t1[j+1])
then test:=true
end;
vilain:=test;
end;
begin
assign(f,'c:\vilain.txt');
rewrite(f);
assign(f1,'c:\psv.txt');
rewrite(f1);
writeln(f,'les nombres vilain');
repeat
writeln('n=');readln(n);
str(n,ch);
writeln(f1,ch);
remplir(n,t1,t2,k);
if vilain (n,t1,t2,k) then
begin
str(n,ch);
ch:=ch+' ce nombre est vilain';
writeln(f,ch) ;
end
else
begin
str(n,ch);
ch:=ch+' ce nombre n''est pas vilain';
writeln(f,ch)
end ;
repeat
writeln('voulez continue?:');readln(c);
until upcase(c) in['O','N'];
until upcase(c)='N';
close(f1);
close(f);
end.
program bilel;
uses wincrt;
type tab1=array[1..20]of integer;
var n:integer;
i,j,k:integer;test:boolean;
t1,t2:tab1; ch:string; f1,f:text;
c:char;
procedure remplir(var n:integer;var t1,t2:tab1;var k:integer);
begin
k:=0;
for i:=1 to n do
begin
if n mod i=0 then
begin
for j:=1 to n do
if i*j=n then
begin
k:=k+1;
t1[k]:=i;
t2[k]:=j;
end;
end;
end;
end;
function vilain(n:integer;t1,t2:tab1;k:integer):boolean;
begin
for i:=1 to k do
for j:=1 to k-1 do
begin
if (t2[i]-t1[i]=t2[j+1]+t1[j+1])or (t1[i]-t2[i]=t2[j+1]+t1[j+1])
then test:=true
end;
vilain:=test;
end;
begin
assign(f,'c:\vilain.txt');
rewrite(f);
assign(f1,'c:\psv.txt');
rewrite(f1);
writeln(f,'les nombres vilain');
repeat
writeln('n=');readln(n);
str(n,ch);
writeln(f1,ch);
remplir(n,t1,t2,k);
if vilain (n,t1,t2,k) then
begin
str(n,ch);
ch:=ch+' ce nombre est vilain';
writeln(f,ch) ;
end
else
begin
str(n,ch);
ch:=ch+' ce nombre n''est pas vilain';
writeln(f,ch)
end ;
repeat
writeln('voulez continue?:');readln(c);
until upcase(c) in['O','N'];
until upcase(c)='N';
close(f1);
close(f);
end.
bilele- membre
- Messages : 23
Points : 26
Réputation : 0
Date d'inscription : 12/03/2010
Age : 32
Localisation : benguerdane
Re: Révisions
Bravo Bilel pour l'effort, c'est très bien fait
Ci-dessous votre programme avec des petites modifications et des commentaires pour l'explication:
Ci-dessous votre programme avec des petites modifications et des commentaires pour l'explication:
- Code:
program bilel;
uses wincrt;
type tab1=array[1..20]of integer;
var n:integer;
i,j,k:integer;test:boolean;
t1,t2:tab1; ch:string; f1,f:text;
c:char;
(******** recherche des diviseurs ****************************)
procedure remplir(var n:integer;var t1,t2:tab1;var k:integer);
begin
k:=0;
for i:=1 to n do
begin
if n mod i=0 then
begin
{-------
for j:=1 to n do
if (i*j = n) then
begin
k:=k+1;
t1[k]:=i;
t2[k]:=j;
end;
-------le j que vous cherché ici c'est: n div i , car si i*j=n alors n mod i = 0 et n div i = j -----}
k:=k+1;
t1[k]:=i;
t2[k]:= n div i;
end;
end;
end;
(*********** vérification de la condition ****************************)
function vilain(n:integer;t1,t2:tab1;k:integer):boolean;
begin
{---------------------
Vous chercher à vérifier si le nombre est vilain oun non, on n'a pas besoin
de parcourir tout le tableau, c'est un traitement avec condition d'arrêt
En utilisant la même idée, voilà une proposition:
----------------------}
i:=1;
test:= false;
Repeat
j:=1;
Repeat
if ((t1[i]-t2[i]) = (t1[j]+t2[j])) OR ((t1[i]+t2[i]) = (t1[j]-t2[j])) then
test := true
else
j:= j+1;
Until (j > k) or (test);
i:= i+1;
until (i=k) OR (test);
vilain:= test;
end;
{___________________ programme principal __________________________}
begin
assign(f,'d:\vilain.txt');
rewrite(f);
assign(f1,'d:\psv.txt');
rewrite(f1);
writeln(f,'les nombres vilain');
repeat
write('n=');readln(n);
str(n,ch);
writeln(f1,ch);
remplir(n,t1,t2,k);
if vilain (n,t1,t2,k) then
begin
str(n,ch);
ch:=ch+' ce nombre est vilain';
writeln(ch);
writeln(f,ch) ;
end
else
begin
str(n,ch);
ch:=ch+' ce nombre n''est pas vilain';
writeln(ch);
writeln(f,ch)
end ;
repeat
write('voulez-vous continue?:(O/N)');readln(c);
until upcase(c) in['O','N'];
until upcase(c)='N';
close(f1);
close(f);
end.
{------------ remarque: ----------------------
le traitement:
str(n,ch);
ch:=ch+' ce nombre est vilain';
writeln(f,ch) ;
peut être remplacé tout simplement par:
writeln(f,n,' ce nombre est vilain');
-----------------------------------------------}
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|