Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1167 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  Gestion d entree sortie

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Gestion d entree sortie

n°351999
theorie du​ chaos
morte et enterrée
Posté le 03-04-2003 à 19:57:01  profilanswer
 

c mal :cry:


Message édité par theorie du chaos le 14-04-2003 à 21:02:31
mood
Publicité
Posté le 03-04-2003 à 19:57:01  profilanswer
 

n°352010
chrisbk
-
Posté le 03-04-2003 à 20:16:49  profilanswer
 

[:rofl] [:rofl]
 
TDC Ze Strike Back !  
 
et ce second TP d'asm ? :D :D

n°352015
polo021
Posté le 03-04-2003 à 20:28:42  profilanswer
 

si je me souviens bien il s'agit d'associer un code a chaque lettre et chiffre en associant aux lettres les plus utilisées un petit code. Comme ca, le resultat est compressé.
 
exemple : le "e" sera codé par 0
le "a" par 1
le "r" par 01 en supposant que les a et les e sont les lettres les plus souvent rencontrées, suivit du r
 
mais une petite recherche sur google me semble appropriée

n°352018
polo021
Posté le 03-04-2003 à 20:31:28  profilanswer
 

polo021 a écrit :

si je me souviens bien il s'agit d'associer un code a chaque lettre et chiffre en associant aux lettres les plus utilisées un petit code. Comme ca, le resultat est compressé.
 
exemple : le "e" sera codé par 0
le "a" par 1
le "r" par 01 en supposant que les a et les e sont les lettres les plus souvent rencontrées, suivit du r
 
mais une petite recherche sur google me semble appropriée


 
 
EDIT : http://tcharles.developpez.com/Huffman/ sacré google

n°353138
theorie du​ chaos
morte et enterrée
Posté le 04-04-2003 à 17:00:00  profilanswer
 

l asm est a rendre une semaine apres le tp d ada...
un beau TP sur les listes...
alors priorite a Ada :d
meme si je prefere l asm :'(
 
le prof d algo nous a a moitie mache le travail pour Huffman...
le probleme c est qu on met plus de temps a lire et comprendre ses progs qu a les completer :mad:

n°353221
theorie du​ chaos
morte et enterrée
Posté le 04-04-2003 à 18:07:35  profilanswer
 

le prof a mis des private partout :cry:

n°353421
MagicBuzz
Posté le 05-04-2003 à 00:02:45  profilanswer
 

J'ai regardé ça, et ça a l'air marrant.
 
Je voudrais donc écrire un petit prog qui se base sur cet algo. (c'est bien mieu que le RLE :D)
 
Mais j'ai deux (très :sarcastic:) légers problèmes...
 
1) Comment écrire dans un array de bytes bit par bit ?
2) Comment, à partir d'un array de bytes, contenant le fichier compressé, relire bit par bit pour parcourir mon arbre ?
 
PS: j'utilise du C#, mais bon, un "algo" devrait me suffir


Message édité par MagicBuzz le 05-04-2003 à 00:15:48
n°353448
MagicBuzz
Posté le 05-04-2003 à 01:52:48  profilanswer
 

Bon, je me suis peut-être mal exprimé...
 
Mon problème :
 
En suivant l'algo Huffman, je me retrouve avec des séries de bits, de nombre indéfinis à écrire à la suite des autres.
 
 
Par exemple :
 
1110 = 'a'
01 = 's'
111101011 = 'c'
 
=> Pour écrire "sac" dans le fichier, je dois donc écrire les bits sous cette forme :
 
011110111101011.
 
(le '.' signifie que c'est un bit vide, je me fout de sa valeur, j'en ai pas besoin)
 
Bon, alors comment gérer ça ?
 
Actuellement, j'ai par exemple : (nombres binaires convertis en bytes)
 
tab[0] = 14
tab[1] = 1
tab[2] = 491
 
Comment faire pour les concaténer ?
 
Deplus, le stockage en byte me pose problème, puisque si mes séries de bits commencent par des 0, alors ils ne sont pas reconnaissables, puisque par défaut tous les bits d'un byte sont à 0, hors la présence de ces 0 est vitale, sinon je suis incapable de relire le fichier.
 
Pour relire bit par bit le fichier, c'est bon, je vois comment faire.
Mais là, pour écrire dedans, j'ai du mal... Je vois vraiment pas du tout comment faire :sweat:
J'ai bien une vague idée, mais c u truc de fou, je sens que je vais passer 20 nuits blanches dessus avant de réussir à le mettre en place... Il doit bien y avoir une méthode "simple" (genre la bidouille à deux balles du bon bidouilleur...)

n°353454
schnapsman​n
Zaford Beeblefect
Posté le 05-04-2003 à 02:22:36  profilanswer
 

Je vais vous donner le truc de porc quand j'avais fait ça en DEUG :whistle: .
 
J'avais un char tabOctet[8], dans lequel je notais les octets "incomplets" (si vous suivez pas dites le).  
 
Ensuite dès que ce tableau tabOctet est plein --> transformation dans un vrai octet compact (cad dans un char) [:tinostar]  
 
C'est clairement pas le plus rapide, mais c'est ultra facile à implémenter comme ça  ;)


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°353458
MagicBuzz
Posté le 05-04-2003 à 03:07:46  profilanswer
 

Je pensais faire un truc genre : (c'est pas mieu :D)
 

Code :
  1. // getTabBool() retourne un array de bool pour un caractère donné de taille égale au nombre de bits conteant les bits ordonnés du plus fort = 0 au plus faible = size - 1
  2. int position = 0;
  3. int index = 0;
  4. byte[] fluxDeBits;
  5. byte temp;
  6. for (int j = 0; j < tabChar.length; j++)
  7. {
  8.   bool[]  tabBool;
  9.   tabBool = getTabBool(tabChar[j]);
  10.   for (int i = 0; i < tabBool.length; i++)
  11.   {
  12.     fluxDeBits[index] += Maths.pow(((tabBool[i])?1:0), 7 - (position mod 8));
  13.     position++;
  14.     if (position mod 8 == 0)
  15.     {
  16.         index++;
  17.     }
  18.   }
  19. }


 
Ou un truc du genre.
 
Mais là, c la grillade de cervelle de MagicBuzz assurée le temps de débuger cet algo :D
 
Pis alors le jour où il faut repasser derrière, laisse béton :D


Message édité par MagicBuzz le 05-04-2003 à 03:23:00
mood
Publicité
Posté le 05-04-2003 à 03:07:46  profilanswer
 

n°353459
MagicBuzz
Posté le 05-04-2003 à 03:21:16  profilanswer
 

Après une vingtaine d'édits, il m'a l'air pas si mal cet algo :)
 
Un peu pas rapide mais bon :D

n°353460
schnapsman​n
Zaford Beeblefect
Posté le 05-04-2003 à 03:44:20  profilanswer
 

MagicBuzz a écrit :

Après une vingtaine d'édits, il m'a l'air pas si mal cet algo :)
 
Un peu pas rapide mais bon :D


 
il est pas terrible en fait, parce ce que tu stoque indépendement le code de hufmann de chacun des caratères de ton texte initial dans le tableau tabChar, a raison d'un par case de ce tableau.
 
Or il arrive souvent que le codage de hufmann d'un caractère dépasse 8 bits, et là ton code foire lamentablement  [:fear]


Message édité par schnapsmann le 05-04-2003 à 03:45:15

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°353504
MagicBuzz
Posté le 05-04-2003 à 11:58:38  profilanswer
 

Non au contraire.
 
Vu que je bosse en C#, j'utilise une grammaire un peu plus compréhensible que le Java, ce qui a pu te dérouter.
 
En C#, un octet est un "byte" et non un "char" (ce qui est 1000 fois plus logique car un char ASCII = 7 bits, et un char UNICODE = 16 bits, alors y'a mieu pour nommer le type "8 bits"...
 
Je reprends mon algo ligne par ligne. Son seul défaut à priori, c'est sa relative lenteur, car pour chaque bit je suis obligé de faire pas mal de calculs.
 
Le code :
 

Code :
  1. /*
  2. ----- Recette de la cervelle grillée -----
  3. Admettons un array de bytes "tabData" qui contient le contenu du fichier à compresser (enfin, un buffer pointant sur le fichier)
  4. Soit une fonction "bool[] getTabBool(byte ori)" qui à partir d'un byte passsé en paramètre, retourne un tableau de booléens contenant le code associé généré par Huffman. Le tableau en retour est correctement dimensionné.
  5. -----  Temps de cuissons 50 minutes  -----
  6. */
  7. int position = 0;       // Position générale dans le flux de bits.
  8. int index = 0;          // Position dans le flux de bytes (concaténation des bits)
  9. byte[] fluxDeBits;      // Tableau contenant le flux de bytes
  10. for (int j = 0; j < tabData.length; j++) // Parcours des données du fichier
  11. {
  12. bool[] tabBool = getTabBool(tabData[j]);  // Récupération de l'encodage Huffman pour le byte courant
  13. for (int i = 0; i < tabBool.length; i++)  // Parcours du code Huffman bit par bit
  14. {
  15.    fluxDeBits[index] += ((tabBool[i])?1:0) * Maths.pow(2, 7 - (position mod 8));
  16.    // Alors...
  17.    // (tabBool[i])?1:0) permet de retrouver si le bit traîté est un 0 ou un 1
  18.    // (position mod 8) permet de récupérer le poids du bit traîté par rapport au byte en cours de génération parmis le flux de bytes générés. En effet, "position" est incrémenté indifférement ors du taîtement de chaque bit, sans se soucier si on a changé de byte original à traîter.
  19.    // Maths.pow(2, 7 - (position mod 8)) permet de retrouver la valeur associée au poids du bit en cours de traîtement. Puisque tabBool est ordonné dans l'ordre inverse (poids le plus fort = plus petit index) on utilise la bidouille du "7 - position" pour retrouver la position par rapport au byte en cours de génération (et non pas le byte en cours de traîtement !)
  20.    position++;  // On passe au bit suivant dans le byte en cours de génération.
  21.    if (position mod 8 == 0)
  22.    {
  23.        index++;    // Si la position courante dans le byte en cours de génération revient à 0, alors on incrémente l'index dans le flux de bytes en cours de génération
  24.    }
  25. }
  26. }
  27. /*
  28. -----      Servez c'est prêt !       -----
  29. */


 
PS: j'ai apporté quelques modifications au code, il y avait quelques grosses coquilles


Message édité par MagicBuzz le 05-04-2003 à 12:01:15
n°353615
schnapsman​n
Zaford Beeblefect
Posté le 05-04-2003 à 15:24:37  profilanswer
 

MagicBuzz a écrit :


En C#, un octet est un "byte" et non un "char" (ce qui est 1000 fois plus logique car un char ASCII = 7 bits, et un char UNICODE = 16 bits, alors y'a mieu pour nommer le type "8 bits"...


 
Ouais admettons, mais tu limites quand même la longueur d'un code de hufmann à la taille en bits de ton char C#. C'est mal :ange: : dans un texte ou de nombreux caractères peu fréquents sont présents, il se produit facilement des codes du hufmann de lg > 16.


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°353619
MagicBuzz
Posté le 05-04-2003 à 16:23:30  profilanswer
 

Mais je vois pas où tu vois que je limite quoi que ce soit :sarcastic:
 
Je copie les codes de huffman dans un array de bytes, au contraire, si j'ai un code sur 1024 bits ça marchera sans aucun problème mon algo.
 
Je crois que tu confonds remplir un byte bit par bit et remplir mon tableau... ce dernière n'a aucune limite de taille, et ne gêne en aucun cas le nombre de bits à encoder à la fois, regarde mieu l'algo, fait-le tourner, tu verras.
 
Même si getTabBool() retourne un array de 20 millions de lignes, ça marchera toujours.
 
J'utilise un tableau de bytes au lieu d'un tableau d'autrechose (Int64 ?) simplement parceque c'est sous ce format que je peux l'enregistrer sur le disque, puisque les fonctions d'accès aux fichier prennent en paramètre un tableau de bytes. Après, que les bits soient à cheva sur plusieurs lignes, je m'en fout.


Message édité par MagicBuzz le 05-04-2003 à 16:25:20
n°354318
theorie du​ chaos
morte et enterrée
Posté le 07-04-2003 à 09:01:28  profilanswer
 

Hey c est la cat Ada :o

n°354322
drasche
Posté le 07-04-2003 à 09:13:08  profilanswer
 

Theorie du chaos a écrit :

Hey c est la cat Ada :o


édite ton premier msg pour changer la cat :o


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°354323
theorie du​ chaos
morte et enterrée
Posté le 07-04-2003 à 09:19:58  profilanswer
 

drasche a écrit :


édite ton premier msg pour changer la cat :o

nan c est mon topic :'(
et c est un TP Ada que je fais :o

n°354339
drasche
Posté le 07-04-2003 à 09:37:00  profilanswer
 

Theorie du chaos a écrit :

nan c est mon topic :'(
et c est un TP Ada que je fais :o


oops j'avais loupé la mention "C#" [:fear]
 
:D


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°354351
MagicBuzz
Posté le 07-04-2003 à 09:49:54  profilanswer
 

bah ça change rien à l'algo, et d'après mes souvenirs, convertir e code que j'ai mis en ADA y'en a pas pour 2 heures. même en QBASIC je sais le traduire, ainsi qu'en JavaScript alors l'ADA qui est quand même un peu plus puissant devrait s'en sortir quand même ;)

n°354593
theorie du​ chaos
morte et enterrée
Posté le 07-04-2003 à 13:39:22  profilanswer
 

de toute facon je dois completer un prog de mon prof deja existant...
je comptais pas copier :d

n°359481
theorie du​ chaos
morte et enterrée
Posté le 12-04-2003 à 12:21:45  profilanswer
 

je crois que g fini :sweat:
reste a debugger :/

n°359484
simogeo
j'ai jamais tué de chats, ...
Posté le 12-04-2003 à 12:31:26  profilanswer
 

Theorie du chaos a écrit :


 
sujet: compression et decompression de fichiers - Huffman  
 


 
 
[:volta]  i was here ..... c'etait un de mes projets en C l'année dernière .....pointeurs de pointeurs ... ca fait reflechir  :whistle:  .. et ca rend fou aussi ......
 
compression ok --> décompression un peu plus dur .. pas eu le temps de finir  :whistle:  ....


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°359485
theorie du​ chaos
morte et enterrée
Posté le 12-04-2003 à 12:33:24  profilanswer
 

moi c le contraire :d
 
la compression est montrueuse et la decompression c tout court...
 
mais moi c de l Ada :cry:

n°359486
simogeo
j'ai jamais tué de chats, ...
Posté le 12-04-2003 à 12:36:35  profilanswer
 

Theorie du chaos a écrit :

moi c le contraire :d
 
la compression est montrueuse et la decompression c tout court...
 
mais moi c de l Ada :cry:


 
ben si tu veux .. tu rends la compression en C et la decomp en ADA  :lol:  :lol:


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°360785
theorie du​ chaos
morte et enterrée
Posté le 14-04-2003 à 19:00:20  profilanswer
 

il va etre content le prof :d
 
bon... ca compile...
si ca pouvait compresser aussi... :ange:
 
faut que je trouver la syntaxe...

n°360801
theorie du​ chaos
morte et enterrée
Posté le 14-04-2003 à 19:15:10  profilanswer
 

a la base il faut que je lance  
Compresser
 
j aimerais savoir comment faire pour l appeler sur un fichier donne...
 
j aurais bien utilise un Get
et declare le nom du fichier en string
mais le compilateur gueule parce que la longueur de String n est pas contrainte
en plus je ne connais pas le nom exact de la librairie qui fait un Get(String)... si elle existe...

n°360914
theorie du​ chaos
morte et enterrée
Posté le 14-04-2003 à 21:03:00  profilanswer
 

merci de lire le post precedent :d

n°360921
nraynaud
lol
Posté le 14-04-2003 à 21:08:24  profilanswer
 

Theorie du chaos a écrit :

a la base il faut que je lance  
Compresser
 
j aimerais savoir comment faire pour l appeler sur un fichier donne...
 
j aurais bien utilise un Get
et declare le nom du fichier en string
mais le compilateur gueule parce que la longueur de String n est pas contrainte
en plus je ne connais pas le nom exact de la librairie qui fait un Get(String)... si elle existe...


regarde du coté des "unbounded strings"

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  Gestion d entree sortie

 

Sujets relatifs
[PHP] Sortie statistique ??[C, C++] Programme qui compte les caractères en entrée
Servlet :Gestion des sessions différente selon client IE6/Mozilla1.2.1Entrée clavier avec PHP en ligne de commande ?
[XML XSL] Gestion de tableau[MySQL] optimisation (2 requêtes en une...) [4.0.12 final sortie]
[OpenGL]Gestion de la souris en glut pour faire une caméra[VB] gestion des process / parallélisation de procédures
Gestion TWAIN et TIFF[MouseListener] gestion trop précise...
Plus de sujets relatifs à : Gestion d entree sortie


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR