Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.IO;
- class LZWBinFa{
- public LZWBinFa(){
- fa=gyoker;
- }
- public void betesz(char b){
- if(b=='0'){
- if(fa.nullasGyermek() == null){
- Csomopont uj = new Csomopont('0');
- fa.ujNullasGyermek(uj);
- fa=gyoker;
- }
- else{
- fa = fa.nullasGyermek();
- }
- }
- else{
- if(fa.egyesGyermek() == null){
- Csomopont uj = new Csomopont('1');
- fa.ujEgyesGyermek(uj);
- fa=gyoker;
- }
- else{
- fa = fa.egyesGyermek();
- }
- }
- }
- public void kiir(StreamWriter kiFile){
- melyseg = 0;
- kiir(gyoker, kiFile);
- }
- public int getMelyseg(){
- melyseg = maxMelyseg = 0;
- rmelyseg(gyoker);
- return maxMelyseg - 1;
- }
- public double getAtlag(){
- melyseg = atlagosszeg = atlagdb = 0;
- ratlag(gyoker);
- atlag = ((double) atlagosszeg) / atlagdb;
- return atlag;
- }
- public double getSzoras(){
- atlag = getAtlag();
- szorasosszeg = 0.0;
- melyseg = atlagdb = 0;
- rszoras(gyoker);
- if(atlagdb - 1 > 0)
- szoras = System.Math.Sqrt(szorasosszeg/(atlagdb-1));
- else
- szoras = System.Math.Sqrt(szorasosszeg);
- return szoras;
- }
- public class Csomopont{
- public Csomopont(char b){
- betu = b;
- balNulla = jobbEgy = null;
- }
- public Csomopont nullasGyermek(){
- return balNulla;
- }
- public Csomopont egyesGyermek(){
- return jobbEgy;
- }
- public void ujNullasGyermek(Csomopont gy){
- balNulla = gy;
- }
- public void ujEgyesGyermek(Csomopont gy){
- jobbEgy = gy;
- }
- public char getBetu(){
- return betu;
- }
- private char betu;
- private Csomopont balNulla;
- private Csomopont jobbEgy;
- }
- private Csomopont fa;
- private int melyseg, atlagosszeg, atlagdb;
- private double szorasosszeg;
- private void kiir(Csomopont elem, StreamWriter kiFile){
- if(elem != null){
- melyseg++;
- kiir(elem.egyesGyermek(), kiFile);
- for(int i=0; i<melyseg; i++){
- kiFile.Write("---");
- }
- kiFile.Write(elem.getBetu() + "(" + (melyseg-1) + ")\n");
- kiir(elem.nullasGyermek(), kiFile);
- melyseg--;
- }
- }
- protected Csomopont gyoker = new Csomopont('/');
- protected int maxMelyseg;
- protected double atlag, szoras;
- protected void rmelyseg(Csomopont elem){
- if(elem != null){
- melyseg++;
- if(melyseg > maxMelyseg)
- maxMelyseg = melyseg;
- rmelyseg(elem.egyesGyermek());
- rmelyseg(elem.nullasGyermek());
- melyseg--;
- }
- }
- protected void ratlag(Csomopont elem){
- if(elem != null){
- melyseg++;
- ratlag(elem.egyesGyermek());
- ratlag(elem.nullasGyermek());
- melyseg--;
- if((elem.egyesGyermek() == null) && (elem.nullasGyermek() == null)){
- atlagdb++;
- atlagosszeg+=melyseg;
- }
- }
- }
- protected void rszoras(Csomopont elem){
- if(elem != null){
- melyseg++;
- rszoras(elem.egyesGyermek());
- rszoras(elem.nullasGyermek());
- melyseg--;
- if((elem.egyesGyermek() == null) && (elem.nullasGyermek() == null)){
- atlagdb++;
- szorasosszeg+= ((melyseg-atlag)*(melyseg-atlag));
- }
- }
- }
- }
- class LZWException : System.Exception{
- public LZWException(){
- System.Console.WriteLine("Usage: lzwtree in_file -o out_file");
- }
- }
- public class LZW{
- static void checkArgs(string[] args){
- if(args.Length != 3){
- throw new LZWException();
- }
- if(!("-o" == args[1])){
- throw new LZWException();
- }
- }
- public static void Main(string[] args){
- try{
- checkArgs(args);
- } catch(LZWException lzwex){
- System.Environment.Exit(-1);
- }
- StreamWriter kiFile = new StreamWriter(args[2]);
- FileStream beFile;
- try{
- beFile = new FileStream(args[0], FileMode.Open, FileAccess.Read);
- } catch(FileNotFoundException fnfex){
- System.Console.WriteLine("Input file not found!");
- System.Environment.Exit(-2);
- }
- beFile = new FileStream(args[0], FileMode.Open, FileAccess.Read);
- byte b;
- LZWBinFa binFa = new LZWBinFa();
- int counter = (int)beFile.Length;
- while(counter > 0){
- b = (byte)beFile.ReadByte();
- counter--;
- if(b == 0x0a){
- break;
- }
- }
- bool kommentben = false;
- while(counter > 0){
- b = (byte)beFile.ReadByte();
- counter--;
- //System.Console.Write("" + counter + "\r");
- if(b == 0x3e){
- kommentben = true;
- continue;
- }
- if(b == 0x0a){
- kommentben = false;
- continue;
- }
- if(kommentben)
- continue;
- if(b == 0x4e)
- continue;
- for(int i=0; i<8; i++){
- if((b & 0x80)!=0){
- binFa.betesz('1');
- }
- else
- binFa.betesz('0');
- b<<=1;
- }
- }
- binFa.kiir(kiFile);
- kiFile.Write("depth = " + binFa.getMelyseg() + '\n');
- kiFile.Write("mean = " + binFa.getAtlag() + '\n');
- kiFile.Write("var = " + binFa.getSzoras() + '\n');
- beFile.Close();
- kiFile.Close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement