Programmation en Pascal
Fermé
renedel
Messages postés
10
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
25 novembre 2008
-
31 juil. 2008 à 16:58
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 10 déc. 2008 à 12:41
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 10 déc. 2008 à 12:41
A voir également:
- Programmation en Pascal
- Turbo pascal - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Dev pascal - Télécharger - Édition & Programmation
- Application de programmation - Guide
- Mettre en veille un programme - Guide
13 réponses
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
15 août 2008 à 11:18
15 août 2008 à 11:18
J'ai effectué quelques simplifications, qui ne change rien au fond du programme, mais qui le rend plus efficace à l'éxecution...
Toutefois il manquait un bout de code dans la procédure Decision (l'instruction else) et je ne suis pas sûr de l'avoir complété comme il le fallait...
Personnellement je n'ai toujours pas compris le but du programme : il créé un fichier qui ne contient que "1;" ???
Remarque : j'ai combiné les deux premières procédures comme je l'avait proposé ici, ça évite l'utilisation d'un fichier intermédiaire !
Toutefois il manquait un bout de code dans la procédure Decision (l'instruction else) et je ne suis pas sûr de l'avoir complété comme il le fallait...
Personnellement je n'ai toujours pas compris le but du programme : il créé un fichier qui ne contient que "1;" ???
Remarque : j'ai combiné les deux premières procédures comme je l'avait proposé ici, ça évite l'utilisation d'un fichier intermédiaire !
program Valeurs; uses Crt; const Nmax=100; // par exemple type Element=real; Tableau=array[1..Nmax] of Element; procedure FichierAvecPointsVirgulesVersTableau(var t:Tableau;var n:integer;Chemin:string); var f:Text; s,aux:string; i,j:integer; begin writeln('Importation depuis ',Chemin); assign(f,Chemin); reset(f); readln(f,s); close(f); n:=0; j:=1; aux:=''; for i:=1 to length(s) do if s[i]=';' then begin n:=n+1; val(aux,t[n]); if n=Nmax then exit; aux:=''; j:=i; end else aux:=aux+s[i]; if j<>i then begin // au cas où il n'y est pas de ';' après le dernier entier n:=n+1; val(aux,t[n]); end; writeln; end; procedure Decision(var t:Tableau;var rep_sal:string); begin if (t[1]>t[2]) and (t[4]>(t[6]*0.3)) and (t[6]>(t[3]*1.5)) and (t[5]>t[1]+t[3]) then rep_sal := '1;' else rep_sal := '0;'; // ????? end; procedure ReponseVersFichier(Chemin,rep_sal:string); var f :Text; begin write('Reponse vers ',Chemin,' : '); assign(f,Chemin); rewrite(f); writeln(f,rep_sal); writeln(rep_sal); close(f); end; procedure Main(FichierAvecPointsVirgules,FichierReponse:string;r:real); var t:Tableau; n:integer; rep_sal:string; begin ClrScr; FichierAvecPointsVirgulesVersTableau(t,n,FichierAvecPointsVirgules); Decision(t,rep_sal); ReponseVersFichier(FichierReponse,rep_sal); writeln; write('Programme en cours (iteration ',r:0:0,')... Appuyer sur Entree'); readln; Main(FichierAvecPointsVirgules,FichierReponse,r+1); end; begin Main('D:\write.txt','D:\read.txt',1); //Main('C:\Program Files\TEST\write.txt','C:\Program Files\TEST\Read.txt',1); writeln; write('Fin du programme ... Appuyer sur Entree'); readln; end.
watou
Messages postés
199
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
19 avril 2013
28
1 août 2008 à 00:40
1 août 2008 à 00:40
c'est quoi au juste " fichier X ecris sous la formes suivante : "10;20;25;258;500;-50" "?
mais bon;
pour récupérer les données tu utilises :
assign(x,le_chemin_du_fichier_x); // le chemin dot être une chaine de caractère
reset(x);
read(x,variable_tompon); // variable tompon doit être du même type des composants du fichier x
{ puis tu fas le traitement que veux }
la suite :
y:file of boolean;
result:boolean;
tu fais l'assignation ( assign(y,le_chemin_de_y) ) puis l'ouverture ( reset(f) )
seek(filepos(y)); //pour se positionner a la fin du fichier y
write(y,result); // result est le résultat obtenu du traitement
n'oublie pas de fermer les deux fichier a la fin:
close(x);
close(y);
mais bon;
pour récupérer les données tu utilises :
assign(x,le_chemin_du_fichier_x); // le chemin dot être une chaine de caractère
reset(x);
read(x,variable_tompon); // variable tompon doit être du même type des composants du fichier x
{ puis tu fas le traitement que veux }
la suite :
y:file of boolean;
result:boolean;
tu fais l'assignation ( assign(y,le_chemin_de_y) ) puis l'ouverture ( reset(f) )
seek(filepos(y)); //pour se positionner a la fin du fichier y
write(y,result); // result est le résultat obtenu du traitement
n'oublie pas de fermer les deux fichier a la fin:
close(x);
close(y);
renedel
Messages postés
10
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
25 novembre 2008
1 août 2008 à 08:30
1 août 2008 à 08:30
le fichier X contient une chaine de chiffres separés par un ';'.
comment fait on pour récupérer les chiffres et les affecter chacun a une variable ?
Merci,
comment fait on pour récupérer les chiffres et les affecter chacun a une variable ?
Merci,
watou
Messages postés
199
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
19 avril 2013
28
>
renedel
Messages postés
10
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
25 novembre 2008
1 août 2008 à 15:07
1 août 2008 à 15:07
tu veux dire " un fichier de d'entier " ou " file of integer "?
dans ce cas, il faut repeter la lecture n fois ( n etant le nombre de variables que tu veux traiter )
read(x,a);
read(x,b);
read(x,c);
...etc
dans ce cas, il faut repeter la lecture n fois ( n etant le nombre de variables que tu veux traiter )
read(x,a);
read(x,b);
read(x,c);
...etc
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
1 août 2008 à 18:34
1 août 2008 à 18:34
Regarde ce code et dis moi ce que tu en penses, ça devrait correspondre à ton problème de fichier
C'est absurde de dire if ((a>b) and (b<c) and (a>d)) then result:=True else result:=False;
En effet cela revient au même que dire m:=(a>b) and (b<c) and (a>d);
program Valeurs; const Nmax=100; // par exemple type Element=integer; Tableau=array[1..Nmax] of Element; Fichier=file of Element; procedure SaisirValeurs(var t:Tableau;n:integer); var i:integer; begin writeln('Saisie des valeurs'); writeln; for i:=1 to n do begin write('Valeur ',i:2,' = '); readln(t[i]); end; writeln; end; procedure LireValeurs(var t:Tableau;n:integer); var i:integer; begin writeln('Lecture des valeurs'); writeln; for i:=1 to n do writeln('Valeur ',i:2,' = ',t[i]); writeln; end; procedure TableauVersFichier(var t:Tableau;n:integer;Chemin:string); var i:integer; f:Fichier; begin writeln('Exportation vers ',Chemin); assign(f,Chemin); rewrite(f); for i:=1 to n do write(f,t[i]); close(f); writeln; end; procedure FichierVersTableau(var t:Tableau;var n:integer;Chemin:string); var i:integer; f:Fichier; begin writeln('Importation depuis ',Chemin); assign(f,Chemin); reset(f); i:=0; while (not eof(f)) and (i<Nmax) do begin i:=i+1; read(f,t[i]); end; n:=i; close(f); writeln; end; var t:Tableau; n:integer; begin write('Nombre de valeurs a entrer = '); readln(n); writeln; if n>Nmax then n:=Nmax; SaisirValeurs(t,n); TableauVersFichier(t,n,'C:\Valeurs.txt'); FichierVersTableau(t,n,'C:\Valeurs.txt'); LireValeurs(t,n); writeln; write('Fin du programme. Appuyer sur Entree'); readln; end.PS :
C'est absurde de dire if ((a>b) and (b<c) and (a>d)) then result:=True else result:=False;
En effet cela revient au même que dire m:=(a>b) and (b<c) and (a>d);
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
1 août 2008 à 19:38
1 août 2008 à 19:38
Remarque : dans le programme que j'ai fait juste avant, le fichier n'est pas lisible par un simple mortel...
Pour ce faire voici un petit rajout : les entiers sont affichés les uns en dessous des autres
Pour ce faire voici un petit rajout : les entiers sont affichés les uns en dessous des autres
procedure TableauVersFichierLisible(var t:Tableau;n:integer;Chemin:string); var i:integer; f:Text; begin writeln('Exportation lisible vers ',Chemin); assign(f,Chemin); rewrite(f); for i:=1 to n do writeln(f,t[i]); close(f); writeln; end; procedure FichierLisibleVersTableau(var t:Tableau;var n:integer;Chemin:string); var i:integer; f:Text; begin writeln('Importation lisible depuis ',Chemin); assign(f,Chemin); reset(f); i:=0; while (not eof(f)) and (i<Nmax) do begin i:=i+1; readln(f,t[i]); end; n:=i; close(f); writeln; end; // Modification du programme principal var t:Tableau; n:integer; begin write('Nombre de valeurs a entrer = '); readln(n); writeln; if n>Nmax then n:=Nmax; SaisirValeurs(t,n); TableauVersFichier(t,n,'C:\Valeurs.txt'); FichierVersTableau(t,n,'C:\Valeurs.txt'); TableauVersFichierLisible(t,n,'C:\ValeursLisibles.txt'); FichierLisibleVersTableau(t,n,'C:\ValeursLisibles.txt'); LireValeurs(t,n); writeln; write('Fin du programme. Appuyer sur Entree'); readln; end.Si il est vraiment imposé de faire un traitement du fichier avec des ";" entre chaque entier plutôt que des sauts de lignes on pourrait bien entendu faire une procédure de conversion d'un format à l'autre, mais si tu débutes la méthode te paraitra relativement plus dur à comprendre que faire des sauts de lignes (mais c'est faisable)
renedel
Messages postés
10
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
25 novembre 2008
2 août 2008 à 21:23
2 août 2008 à 21:23
je vais essayer de comprendre votre programme et de le tester.
Vous etes vraiment tres sympa.
A+
Vous etes vraiment tres sympa.
A+
renedel
Messages postés
10
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
25 novembre 2008
2 août 2008 à 23:20
2 août 2008 à 23:20
le programme est super.
Il me reste juste a resoudre comment importer d'un fichier vers un tableau, une chaine de chiffres avec comme separateur ';' (ex: 12;5;500;25;58)
A+
Il me reste juste a resoudre comment importer d'un fichier vers un tableau, une chaine de chiffres avec comme separateur ';' (ex: 12;5;500;25;58)
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
2 août 2008 à 23:47
2 août 2008 à 23:47
Comme je l'ai dit c'est faisable mais cela nécessite un peu plus d'informations...
1. Tous les entiers séparés par des ';' sont ils sur une unique ligne dans le fichier ou y a-t-il une succession de lignes d'entiers ?
2. N'y a t-il que des lignes d'entiers ou y a-t-il également d'autre sorte de données ?
1. Tous les entiers séparés par des ';' sont ils sur une unique ligne dans le fichier ou y a-t-il une succession de lignes d'entiers ?
2. N'y a t-il que des lignes d'entiers ou y a-t-il également d'autre sorte de données ?
renedel
Messages postés
10
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
25 novembre 2008
3 août 2008 à 06:42
3 août 2008 à 06:42
les chiffres sont sur 1 ligne.
ils peuvent etre positifs ou negatifs, entiers ou decimals.
A+
ils peuvent etre positifs ou negatifs, entiers ou decimals.
A+
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
3 août 2008 à 00:55
3 août 2008 à 00:55
Le plus probable serait de n'avoir qu'une seule ligne dans le fichier auquel cas on aurait ceci :
procedure ConvertirFichier(Chemin1,Chemin2:string); var f:Text; i,j:integer; s,aux:string; begin writeln('Conversion depuis ',Chemin1,' vers ',Chemin2); assign(f,Chemin1); reset(f); readln(f,s); close(f); assign(f,Chemin2); rewrite(f); j:=1; aux:=''; for i:=1 to length(s) do if s[i]=';' then begin writeln(f,aux); aux:=''; j:=i; end else aux:=aux+s[i]; if j<>i then writeln(f,aux); // cas où il n'y est pas de ';' après le dernier entier close(f); writeln; end; // Modification du programme principal var t:Tableau; n:integer; begin ConvertirFichier('D:\ValeursAvecPointsVirgules.txt','D:\ValeursAvecSautsDeLignes.txt'); FichierLisibleVersTableau(t,n,'D:\ValeursAvecSautsDeLignes.txt'); LireValeurs(t,n); writeln; write('Fin du programme. Appuyer sur Entree'); readln; end.
watou
Messages postés
199
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
19 avril 2013
28
3 août 2008 à 10:51
3 août 2008 à 10:51
salut
je te remercies kx, mais...
il ya quelque problèmes:
-f:fichier ....?
-t:tableau de quoi ? " surement de chaine de caractères "
autre chose, pour la procedure convertirfichier, pourquoi ne pas le convertir en fichier d'entier ? pour faciliter le traitement !!!!
je te remercies kx, mais...
il ya quelque problèmes:
-f:fichier ....?
-t:tableau de quoi ? " surement de chaine de caractères "
autre chose, pour la procedure convertirfichier, pourquoi ne pas le convertir en fichier d'entier ? pour faciliter le traitement !!!!
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
3 août 2008 à 12:31
3 août 2008 à 12:31
Pour Watou :
Vas voir au début du post 4 où j'ai défini les types Fichier et Tableau.
Que la procedure ConvertirFichier travaille sur un fichier Text ou un fichier d'élément revient au même si tu regardes les différences mineures entre FichierLisibleVersTableau et FichierVersTableau
Pour Renedel :
Il y a un problème, tu avais toujours parlé d'entiers, pas de nombre décimaux !
Fort heureusement j'avais pris mes précautions, tu auras juste à changer le type Element=real;
Et éventuellement dans LireValeur modifier cette ligne : writeln('Valeur ',i:2,' = ',t[i]:0:10); où 10 est le nombre de chiffres après la virgule !
Vas voir au début du post 4 où j'ai défini les types Fichier et Tableau.
Que la procedure ConvertirFichier travaille sur un fichier Text ou un fichier d'élément revient au même si tu regardes les différences mineures entre FichierLisibleVersTableau et FichierVersTableau
Pour Renedel :
Il y a un problème, tu avais toujours parlé d'entiers, pas de nombre décimaux !
Fort heureusement j'avais pris mes précautions, tu auras juste à changer le type Element=real;
Et éventuellement dans LireValeur modifier cette ligne : writeln('Valeur ',i:2,' = ',t[i]:0:10); où 10 est le nombre de chiffres après la virgule !
watou
Messages postés
199
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
19 avril 2013
28
3 août 2008 à 23:41
3 août 2008 à 23:41
désolé je ne l'ai pas vu!!!
et pour la question:
autre chose, pour la procedure convertirfichier, pourquoi ne pas le convertir en fichier d'entier ou de reel ? pour faciliter le traitement !!!! ?
et pour la question:
autre chose, pour la procedure convertirfichier, pourquoi ne pas le convertir en fichier d'entier ou de reel ? pour faciliter le traitement !!!! ?
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
4 août 2008 à 13:49
4 août 2008 à 13:49
Comme je l'ai dit ça reviendrai au même car les procedures de traitements FichierLisibleVersTableau et FichierVersTableau sont quasi-identiques.
En fait l'avantage d'utiliser un fichier binaire (file of) plutôt qu'un fichier text est de pouvoir utiliser les procédures et fonctions seek, filepos ou filesize... mais je ne m'en sers pas donc le choix du type de fichier importe peu !
La vraie amélioration que je puisse apporter ce serait d'écrire une procédure qui passerait directement du fichier d'origine vers le tableau sans passer par un fichier secondaire :
En fait l'avantage d'utiliser un fichier binaire (file of) plutôt qu'un fichier text est de pouvoir utiliser les procédures et fonctions seek, filepos ou filesize... mais je ne m'en sers pas donc le choix du type de fichier importe peu !
La vraie amélioration que je puisse apporter ce serait d'écrire une procédure qui passerait directement du fichier d'origine vers le tableau sans passer par un fichier secondaire :
procedure FichierAvecPointsVirgulesVersTableau(var t:Tableau;var n:integer;Chemin:string); var f:Text; s,aux:string; i,j:integer; begin writeln('Importation avec '';'' depuis ',Chemin); assign(f,Chemin); reset(f); readln(f,s); close(f); n:=0; j:=1; aux:=''; for i:=1 to length(s) do if s[i]=';' then begin n:=n+1; val(aux,t[n]); if n=Nmax then exit; aux:=''; j:=i; end else aux:=aux+s[i]; if j<>i then begin // au cas où il n'y est pas de ';' après le dernier entier n:=n+1; val(aux,t[n]); end; writeln; end; // Programme principal var t:Tableau; n:integer; begin FichierAvecPointsVirgulesVersTableau(t,n,'D:\ValeursAvecPointsVirgules.txt'); LireValeurs(t,n); writeln; write('Fin du programme. Appuyer sur Entree'); readln; end.
watou
Messages postés
199
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
19 avril 2013
28
4 août 2008 à 17:26
4 août 2008 à 17:26
en fait pour ce qui concerne la procedure val .... il te manque un parametre !!!!!
val(chaine_de_caractère,nombre,code);
code:integer;
c'est dans le cas ou il y une erreur!!! si il n'ya aucune erreur code=0 !!!
val(chaine_de_caractère,nombre,code);
code:integer;
c'est dans le cas ou il y une erreur!!! si il n'ya aucune erreur code=0 !!!
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
4 août 2008 à 17:30
4 août 2008 à 17:30
Oui je sais et plus exactement la valeur de code correspond à l'emplacement de l'erreur.
Cependant je le met rarement quand je n'ai pas besoin car mon compilateur autorise cette variante (j'utilise Dev-Pascal).
Mais ce n'est qu'une pseudo-erreur mineure qui ne change rien au reste du programme...
Cependant je le met rarement quand je n'ai pas besoin car mon compilateur autorise cette variante (j'utilise Dev-Pascal).
Mais ce n'est qu'une pseudo-erreur mineure qui ne change rien au reste du programme...
renedel
Messages postés
10
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
25 novembre 2008
>
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
7 août 2008 à 08:18
7 août 2008 à 08:18
salut,
Grace a vous tous mon programme fonctionne super.
Je voudrais maintenant que ce programme tourne 24H/24.
J'ai essaye de mettre le programme dans une boucle sans fin du type :
begin
repeat
procedure_1();
procedure_2();
until 1 =2
end;
Le probleme est que le programme s'arrete apres quelques minutes .
Existe il d'autres solutions pour faire tourner le programme 24H/24 en tache de fond de facon stable ?
Merci d'avance
Grace a vous tous mon programme fonctionne super.
Je voudrais maintenant que ce programme tourne 24H/24.
J'ai essaye de mettre le programme dans une boucle sans fin du type :
begin
repeat
procedure_1();
procedure_2();
until 1 =2
end;
Le probleme est que le programme s'arrete apres quelques minutes .
Existe il d'autres solutions pour faire tourner le programme 24H/24 en tache de fond de facon stable ?
Merci d'avance
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
>
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
7 août 2008 à 11:44
7 août 2008 à 11:44
Essaye une autre boucle du genre
D'autant que l'écriture sur fichier te permet d'ajouter des valeurs même après avoir fermer le programme...
PS. Toute procedure sans paramètre peut s'écrire procedure_1(); mais on préfère écrire procedure_1;
while true do begin procedure_1; procedure_2; end;Mais j'avouerai qu'il n'est pas naturel de laisser un programme tourner indéfiniment...
D'autant que l'écriture sur fichier te permet d'ajouter des valeurs même après avoir fermer le programme...
PS. Toute procedure sans paramètre peut s'écrire procedure_1(); mais on préfère écrire procedure_1;
renedel
Messages postés
10
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
25 novembre 2008
>
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
13 août 2008 à 08:49
13 août 2008 à 08:49
C'est toute la finalité de ce petit programme : un programme de gestion génére de facon reguliére un fichier contenant des chiffres qui sont ensuite sauvegardé sous forme d'un fichier dans un dossier . Notre programme doit donc etre a l'affu de ce fichier car dés qu'il est créé nous devons effectuer a l'aide de notre programme un controle des donneées fournies pour ensuite renvoyer notre réponse(0 ou 1) sous forme d'un fichier. Suite a notre réponse le programme de gestion peut continuer son travail.
J'ai essayé de mettre notre programme sous forme de boucle (while... do) mais ce n'est pas tres stable.
Existe il une meilleure facon de proceder pour que notre programme fonctionne 24h/24 sans interruption ?
J'ai essayé de mettre notre programme sous forme de boucle (while... do) mais ce n'est pas tres stable.
Existe il une meilleure facon de proceder pour que notre programme fonctionne 24h/24 sans interruption ?
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
13 août 2008 à 19:25
13 août 2008 à 19:25
En bidouillant un peu avec Delphi tu pourras adapter ton programme en mode fenêtre plutôt que console, ton programme attendra alors indéfiniment que tu confirmes l'entrée d'une nouvelle donnée, il n'y aura alors plus besoin de faire de boucle, car le programme ne fera rien tant que tu n'appuieras pas sur le bouton.
PS. Dans ce cas là il vaudrait mieux fermer le fichier après chaque ajout de donnée (avant qu'il se mette à attendre) pour ne le garder ouvert que le temps nécessaire à sa modification...
PS. Dans ce cas là il vaudrait mieux fermer le fichier après chaque ajout de donnée (avant qu'il se mette à attendre) pour ne le garder ouvert que le temps nécessaire à sa modification...
renedel
Messages postés
10
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
25 novembre 2008
14 août 2008 à 08:54
14 août 2008 à 08:54
Je ne veus pas que le programme se declenche manuellement, mais qu'il sache detecter automatiquement l'arrivee d'un nouveau fichier.
Autre solution: qu'il traite sans interrruption le fichier qu'il trouve. C'est pour cela que j'avais cree une boucle mais le programme se ferme tout seul sans raison apparente ....
Autre solution: qu'il traite sans interrruption le fichier qu'il trouve. C'est pour cela que j'avais cree une boucle mais le programme se ferme tout seul sans raison apparente ....
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
14 août 2008 à 10:19
14 août 2008 à 10:19
Ton programme a l'air d'avoir bien changé par rapport à la contribution que j'avais apporté.
Pour que je t'aide, il faudrait que tu me donnes le code complet de ton programme actuel.
Comme ça je pourrais voir exactement ce que tu veux faire et comment, parce que là j'avoue que je comprends plus trop ce que tu veux faire...
Après j'essayerai de le modifier pour qu'il ne se ferme plus...
Pour que je t'aide, il faudrait que tu me donnes le code complet de ton programme actuel.
Comme ça je pourrais voir exactement ce que tu veux faire et comment, parce que là j'avoue que je comprends plus trop ce que tu veux faire...
Après j'essayerai de le modifier pour qu'il ne se ferme plus...
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
26 nov. 2008 à 09:00
26 nov. 2008 à 09:00
Je ne sais pas pourquoi tu parles de DLL, je n'en ai jamais parlé...
Ce que je t'ai proposé nécessite que tu compile (une fois) un programme avec la fonction VerifierCode qui dispose de deux clés, et à chaque fois que tu veux changer de code, tu execute la fonction GenererCode avec les deux même clés...
Et à chaque fois que le programme se lance il te demandera d'entrer ton code pour vérifier ton identité...
Bien sûr ce n'est qu'une idée pour protéger ton programme, mais les solutions que tu proposais ne permettait pas réellement d'empêcher quelqu'un d'autre de l'utiliser...
Ce que je t'ai proposé nécessite que tu compile (une fois) un programme avec la fonction VerifierCode qui dispose de deux clés, et à chaque fois que tu veux changer de code, tu execute la fonction GenererCode avec les deux même clés...
Et à chaque fois que le programme se lance il te demandera d'entrer ton code pour vérifier ton identité...
Bien sûr ce n'est qu'une idée pour protéger ton programme, mais les solutions que tu proposais ne permettait pas réellement d'empêcher quelqu'un d'autre de l'utiliser...
watou
Messages postés
199
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
19 avril 2013
28
9 déc. 2008 à 11:20
9 déc. 2008 à 11:20
je ne vois pas pourquoi tu comliques les choses; parceque si quelqu'un te vole le code source de ton programme, il pourra l'executer quoi que tu faces ! il n'a qu'à supprimer la partie de verification du mot de passe et ton programme s'executera le plus normalement possible !!
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
>
watou
Messages postés
199
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
19 avril 2013
10 déc. 2008 à 10:39
10 déc. 2008 à 10:39
Bien sûr, mais quelque soit l'algorithme que tu utilises pour crypter un programme, si on te vole le code source tu peux le décrypter... mais à moins que Renedel ne travailles pour la CIA, je pense que la solution que j'ai proposé peut l'aider à résoudre son problème, ou du moins l'aider à créer son propre algorithme...
Après tout je ne suis pas cryptographe... Si tu l'es watou (et même si tu l'es pas) propose ta solution au lieu de critiquer la mienne qui n'est certes pas digne des grands programmeurs mais qui assure une sécurité suffisante au quotidien !
Après tout je ne suis pas cryptographe... Si tu l'es watou (et même si tu l'es pas) propose ta solution au lieu de critiquer la mienne qui n'est certes pas digne des grands programmeurs mais qui assure une sécurité suffisante au quotidien !
rened
>
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
10 déc. 2008 à 12:33
10 déc. 2008 à 12:33
Faisons le point :
1 je n'appartient pas a la CIA
2 la solution proposant de créer un nouveau mot de passe a chaque appel du programme est bonne mais m'oblige a insérer manuellement un mot de passe. Je voulais que le programme tourne seul sans aucune intervention "humaine" tout en étant sécurisé.
3 après avoir compilé le programme j'efface le fichier source et je ne laisse que le fichier exe sur ma machine.
4 En résumé je recherche une solution permettant de protéger un programme qui tourne 24h/24. Dans le cas ou il serait dérobé il ne pourrait pas fonctionner sur une autre machine.
A+
1 je n'appartient pas a la CIA
2 la solution proposant de créer un nouveau mot de passe a chaque appel du programme est bonne mais m'oblige a insérer manuellement un mot de passe. Je voulais que le programme tourne seul sans aucune intervention "humaine" tout en étant sécurisé.
3 après avoir compilé le programme j'efface le fichier source et je ne laisse que le fichier exe sur ma machine.
4 En résumé je recherche une solution permettant de protéger un programme qui tourne 24h/24. Dans le cas ou il serait dérobé il ne pourrait pas fonctionner sur une autre machine.
A+
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
10 déc. 2008 à 12:41
10 déc. 2008 à 12:41
C'était de l'humour pour la CIA, juste pour dire que ça devait suffire à ce que tu avais besoin...
En fait la meilleure solution serait qu'au lieu de taper un code manuellement, il génère lui même le code à partir des propriétés de ta machine (son numéro de série, son adresse IP ou autre) mais je ne sais pas faire...
En fait la meilleure solution serait qu'au lieu de taper un code manuellement, il génère lui même le code à partir des propriétés de ta machine (son numéro de série, son adresse IP ou autre) mais je ne sais pas faire...
19 nov. 2008 à 22:25
J'ai un probleme que je n'arrive pas a resoudre : apres avoir ecrit un petit programme en pascal, comment faire en sorte que si on me derobe le fichier et que l'on fait tourner mon petit programme sur un autre ordinateur, il ne puisse pas fonctionner ?
Merci d'avance,
Rene
20 nov. 2008 à 12:10
20 nov. 2008 à 14:10
Ce que je desirais c'est un programme qui va lire le mot de passe dans un fichier texte residant dans mon ordinateur.
Si quelqu'un s'empare de mon programme et l'installe sur un autre ordinateur, mon programme, ne trouvant pas le fichier texte contenant le mot de passe, ne fonctionnera pas.
Merci d'avance,
Rene
22 nov. 2008 à 12:29
Mais en fait n'importe qui pourra faire marcher le programme si il créé lui aussi un fichier Code.ini avec son propre code dedans En fait aucune des deux méthodes n'est réellement dissuasive, il suffirait de lire le contenu du programme (avec un fichier texte) pour trouver dans le code soit ton mot de passe, soit le chemin d'accès du fichier contenant le mot de passe...
22 nov. 2008 à 14:10
Dans un premier temps tu utilises GenererCode pour crypter ton mot de passe dans le fichier Code.ini
Puis tu utilises VerifierCode (et Codage) dans le programme que tu veux protéger.
Pour plus de sécurité, tu peux changer param1 et param2 dans les appels à Codage mais il faut que ce soit les même dans les deux procédures GenererCode et VerifierCode.
Ainsi même si quelqu'un te prends ton programme, il pourra voir dans le code (en cherchant bien) où il doit créer le fichier Code.ini, mais il n'arrivera pas à faire coïncider son code avec le contenu de Code.ini qui ne peut être générer qu'avec l'algorithme Codage, qui dépend de param1 et param2...