Advertisement
Norbi930523

LZW.cs

Nov 26th, 2013
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.10 KB | None | 0 0
  1. using System.IO;
  2.  
  3. class LZWBinFa{
  4.     public LZWBinFa(){
  5.         fa=gyoker;
  6.     }
  7.  
  8.     public void betesz(char b){
  9.         if(b=='0'){
  10.             if(fa.nullasGyermek() == null){
  11.                                 Csomopont uj = new Csomopont('0');
  12.                                 fa.ujNullasGyermek(uj);
  13.                                 fa=gyoker;
  14.                         }
  15.                         else{
  16.                                 fa = fa.nullasGyermek();
  17.                         }
  18.         }
  19.         else{
  20.                         if(fa.egyesGyermek() == null){
  21.                                 Csomopont uj = new Csomopont('1');
  22.                                 fa.ujEgyesGyermek(uj);
  23.                                 fa=gyoker;
  24.                         }
  25.                         else{
  26.                                 fa = fa.egyesGyermek();
  27.                         }
  28.                 }
  29.     }
  30.  
  31.     public void kiir(StreamWriter kiFile){
  32.         melyseg = 0;
  33.         kiir(gyoker, kiFile);
  34.     }
  35.  
  36.     public int getMelyseg(){
  37.         melyseg = maxMelyseg = 0;
  38.         rmelyseg(gyoker);
  39.         return maxMelyseg - 1;
  40.     }
  41.  
  42.     public double getAtlag(){
  43.                 melyseg = atlagosszeg = atlagdb = 0;
  44.                 ratlag(gyoker);
  45.                 atlag = ((double) atlagosszeg) / atlagdb;
  46.                 return atlag;
  47.         }
  48.  
  49.     public double getSzoras(){
  50.                 atlag = getAtlag();
  51.                 szorasosszeg = 0.0;
  52.                 melyseg = atlagdb = 0;
  53.  
  54.                 rszoras(gyoker);
  55.  
  56.                 if(atlagdb - 1 > 0)
  57.                         szoras = System.Math.Sqrt(szorasosszeg/(atlagdb-1));
  58.                 else
  59.                         szoras = System.Math.Sqrt(szorasosszeg);
  60.  
  61.                 return szoras;
  62.         }
  63.  
  64.     public class Csomopont{
  65.                 public Csomopont(char b){
  66.                         betu = b;
  67.                         balNulla = jobbEgy = null;
  68.                 }
  69.  
  70.                 public Csomopont nullasGyermek(){
  71.                         return balNulla;
  72.                 }
  73.  
  74.                 public Csomopont egyesGyermek(){
  75.                         return jobbEgy;
  76.                 }
  77.  
  78.                 public void ujNullasGyermek(Csomopont gy){
  79.                         balNulla = gy;
  80.                 }
  81.  
  82.                 public void ujEgyesGyermek(Csomopont gy){
  83.                         jobbEgy = gy;
  84.                 }
  85.  
  86.                 public char getBetu(){
  87.                         return betu;
  88.                 }
  89.  
  90.                 private char betu;
  91.                 private Csomopont balNulla;
  92.                 private Csomopont jobbEgy;
  93.         }
  94.  
  95.     private Csomopont fa;
  96.         private int melyseg, atlagosszeg, atlagdb;
  97.         private double szorasosszeg;
  98.  
  99.     private void kiir(Csomopont elem, StreamWriter kiFile){
  100.                 if(elem != null){
  101.                         melyseg++;
  102.                         kiir(elem.egyesGyermek(), kiFile);
  103.                         for(int i=0; i<melyseg; i++){
  104.                                 kiFile.Write("---");
  105.                         }
  106.                         kiFile.Write(elem.getBetu() + "(" + (melyseg-1) + ")\n");
  107.                         kiir(elem.nullasGyermek(), kiFile);
  108.                         melyseg--;
  109.                 }
  110.         }
  111.  
  112.     protected Csomopont gyoker = new Csomopont('/');
  113.         protected int maxMelyseg;
  114.         protected double atlag, szoras;
  115.  
  116.     protected void rmelyseg(Csomopont elem){
  117.                 if(elem != null){
  118.                         melyseg++;
  119.                         if(melyseg > maxMelyseg)
  120.                                 maxMelyseg = melyseg;
  121.                         rmelyseg(elem.egyesGyermek());
  122.                         rmelyseg(elem.nullasGyermek());
  123.                         melyseg--;
  124.                 }
  125.         }
  126.  
  127.     protected void ratlag(Csomopont elem){
  128.                 if(elem != null){
  129.                         melyseg++;
  130.                         ratlag(elem.egyesGyermek());
  131.                         ratlag(elem.nullasGyermek());
  132.                         melyseg--;
  133.                         if((elem.egyesGyermek() == null) && (elem.nullasGyermek() == null)){
  134.                                 atlagdb++;
  135.                                 atlagosszeg+=melyseg;
  136.                         }
  137.                 }              
  138.         }
  139.  
  140.     protected void rszoras(Csomopont elem){
  141.                 if(elem != null){
  142.                         melyseg++;
  143.                         rszoras(elem.egyesGyermek());
  144.                         rszoras(elem.nullasGyermek());
  145.                         melyseg--;
  146.                         if((elem.egyesGyermek() == null) && (elem.nullasGyermek() == null)){
  147.                                 atlagdb++;
  148.                                 szorasosszeg+= ((melyseg-atlag)*(melyseg-atlag));
  149.                         }
  150.                 }
  151.         }
  152. }
  153.  
  154. class LZWException : System.Exception{
  155.         public LZWException(){
  156.                 System.Console.WriteLine("Usage: lzwtree in_file -o out_file");
  157.         }
  158. }
  159.  
  160. public class LZW{
  161.     static void checkArgs(string[] args){
  162.         if(args.Length != 3){
  163.                         throw new LZWException();
  164.                 }
  165.                 if(!("-o" == args[1])){
  166.                         throw new LZWException();
  167.                 }
  168.     }
  169.  
  170.     public static void Main(string[] args){
  171.         try{
  172.             checkArgs(args);
  173.         } catch(LZWException lzwex){
  174.             System.Environment.Exit(-1);
  175.         }
  176.  
  177.         StreamWriter kiFile = new StreamWriter(args[2]);
  178.         FileStream beFile;
  179.  
  180.         try{
  181.             beFile = new FileStream(args[0], FileMode.Open, FileAccess.Read);
  182.  
  183.         } catch(FileNotFoundException fnfex){
  184.             System.Console.WriteLine("Input file not found!");
  185.             System.Environment.Exit(-2);
  186.         }
  187.  
  188.         beFile = new FileStream(args[0], FileMode.Open, FileAccess.Read);
  189.  
  190.         byte b;
  191.  
  192.         LZWBinFa binFa = new LZWBinFa();
  193.  
  194.         int counter = (int)beFile.Length;
  195.  
  196.         while(counter > 0){
  197.             b = (byte)beFile.ReadByte();
  198.             counter--;
  199.             if(b == 0x0a){
  200.                 break;
  201.             }
  202.         }
  203.  
  204.         bool kommentben = false;
  205.  
  206.         while(counter > 0){
  207.             b = (byte)beFile.ReadByte();
  208.             counter--;
  209.             //System.Console.Write("" + counter + "\r");
  210.  
  211.             if(b == 0x3e){
  212.                                 kommentben = true;
  213.                                 continue;
  214.                         }
  215.  
  216.                         if(b == 0x0a){
  217.                                 kommentben = false;
  218.                                 continue;
  219.                         }
  220.  
  221.                         if(kommentben)
  222.                                 continue;
  223.  
  224.                         if(b == 0x4e)
  225.                                 continue;
  226.  
  227.             for(int i=0; i<8; i++){
  228.                                 if((b & 0x80)!=0){
  229.                                         binFa.betesz('1');
  230.                                 }
  231.                                 else
  232.                                         binFa.betesz('0');
  233.                                 b<<=1;
  234.                         }
  235.         }
  236.  
  237.         binFa.kiir(kiFile);
  238.  
  239.                 kiFile.Write("depth = " + binFa.getMelyseg() + '\n');
  240.                 kiFile.Write("mean = " + binFa.getAtlag() + '\n');
  241.                 kiFile.Write("var = " + binFa.getSzoras() + '\n');
  242.  
  243.         beFile.Close();
  244.         kiFile.Close();
  245.        
  246.     }
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement