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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 10 déc. 2008 à 12:41
Bonjour,

je debute en programmation et j'ai du mal a trouver de l'aide pour avancer dans mon programme :

le programme se compose de 2 etapes :

1 - recuperer les donnees(chiffres) d'un fichier X ecris sous la formes suivante : "10;20;25;258;500;-50"
et les enregistrer sous formes de variables dans le programmes afin de les traiter .
Ex : if (a>b and b<c and a>d) then True else False
a,b,c,d sont les variables recus du fichier X

2 - apres le traitement des donnees le programme doit renvoyer le resultat (True or False) et l'ecrire dans un fichier Y.

Merci d'avance pour votre aide.

Rene
A voir également:

13 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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 !
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.
1
salut,

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
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > rene
20 nov. 2008 à 12:10
Met un code...
const CODE='CCM';

procedure VerifierCode;
var s:string;
begin
write('Code : ');
readln(s);
if s=CODE
then writeln('Code bon')
else halt; // termine le programme
end;
0
renedel Messages postés 10 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 25 novembre 2008 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
20 nov. 2008 à 14:10
Tout d'abord merci pour ta reponse rapide.

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
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > renedel Messages postés 10 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 25 novembre 2008
22 nov. 2008 à 12:29
Tout d'abord il faut que tu créé le fichier ('C:\ProgramFiles\Code.ini' par exemple) et que tu écrive ton code dedans (sur la première ligne).
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
procedure VerifierCode;
var s1,s2:string; t:text;
begin
write('Code : ');
readln(s1);
assign(t,'C:\ProgramFiles\Code.ini'); // par exemple
reset(t);
readln(t,s2);
close(t);
if s1<>s2 then halt; // termine le programme
end;
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...
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > renedel Messages postés 10 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 25 novembre 2008
22 nov. 2008 à 14:10
Voici comment on pourrait faire ça bien même si c'est un peu plus lourd...
program renedel;

const fichier='C:\Program Files\Code.ini'; // par exemple

function Codage(s:string;param1,param2:integer):real;
var i,n:integer;
begin
result:=1;
for i:=1 to length(s) do
    begin
    n:=(ord(s[i])-param1) mod 256;
    if n=0 then result:=sqr(result)
           else result:=n*(result+param2)
    end;
end;

procedure GenererCode;
var s:string; r:real; t:text;
begin
write('Creation du code : ');
readln(s);
r:=Codage(s,47,3); // par exemple
assign(t,fichier);
rewrite(t);
writeln(t,r);
close(t);
end;

procedure VerifierCode;
var s:string; r1,r2:real; t:text;
begin
{$I-}
assign(t,fichier);
reset(t);
{$I+}
if IOresult>0 then begin
                   writeln('Impossible de verifier le code');
                   writeln('Appuyer sur Entree pour quitter');
                   readln; halt;
                   end;
write('Verification du code : ');
readln(s); writeln;
r1:=Codage(s,47,3); // par exemple
readln(t,r2);
close(t);
if r1<>r2 then begin
               writeln('Code incorrect');      
               writeln('Appuyer sur Entree pour quitter');
               readln; halt;
               end
          else begin
               writeln('Code correct');
               writeln('Appuyer sur Entree pour continuer');
               readln;
               end;
end;

begin
GenererCode;
VerifierCode;
end.

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...
0
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
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);
0
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
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,
0
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
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
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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
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);
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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
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)
0
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
je vais essayer de comprendre votre programme et de le tester.

Vous etes vraiment tres sympa.

A+
0
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
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+
0

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

Posez votre question
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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 ?
0
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
les chiffres sont sur 1 ligne.
ils peuvent etre positifs ou negatifs, entiers ou decimals.

A+
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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.
0
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
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 !!!!
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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 !
0
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
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 !!!! ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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 :
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.
0
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
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 !!!

0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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...
0
renedel Messages postés 10 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 25 novembre 2008 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
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
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
7 août 2008 à 11:44
Essaye une autre boucle du genre
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;
0
renedel Messages postés 10 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 25 novembre 2008 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
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 ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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...
0
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
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 ....
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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...
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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...
0
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
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 !!
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > 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
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 !
0
rened > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
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+
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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...
0