Archive for the ‘جاوا’ Category

هافمن

آگوست 25, 2008

در زمینه ی فشرده سازی در علوم رایانه روش های زیادی از جمله (( Lempel Ziv Welch)) و ((هافمن)) وجود دارد. اولی در 7zip به کار رفته که نرم افزار فشرده سازی تحت لیسانس ((LGPL)) است. در روش هافمن ابتدا (مثلا برای فشرده سازی در یک متن ) نسبت تعداد حروف الفبا به کل حروف متن بدست آمده سپس به هر حرف یک کد اختصاص می یابد. شیوه ی اختصاص این کد به این شکل است که هر حرفی تعداد وقوع بیشتری در کل متن را دارد کد کوچکتری به آن داده می شود.

در برنامه ی زیر که به زبان جاوا نوشته شده است از سه پکیج و 5 فایل جاوا که شامل پکیجی برای مواقع وفوع خطا و  پکیج binarytree که شامل 3 کلاس binarynode و tree و queue   است. و در پکیج کد که شامل کلاس form  می باشد که تعداد تکرار حروف را بررسی کرده و شروع به ساخت درحت هافمن از طریق بررسی احتمال وقوع حروف و سپس merg کردن درخت ها و گره های ایجاد شده تا در نهایت درخت هافمن اصلی ساخته شده و آن را در جدولی مه بر حسب حروف آمده در متن داده شده است؛ قرار می دهد .

برای دادن نشانی فایل متنی به برنامه ابتدا دکمه ی<<نمایش کد هافمن>> فشارد داده و سپس در پیغام ظاهر شده در صفحه آدرس فایل به صورت کامل نوشته شود. در نهایت جدولی آماده!

در لینک زیر فایل zip که با اجرای آن خود به خود از حالت zip خارج می شود (متشکرم 7zip) و شما می توانید در یک محیط مانند netbeans آن را تغییر دهید و با استفاده از امکان build فایل jar قابل اجرا را بسازید.

http://www.adrive.com/public/6ddb730fd1bcd3fccf2ad525d850678c2f951556af92c918fcc033363f5173a3.html

منابع :آب! ، ویکی پدیا و خودم برای نوشتن کد .

BST

ژوئن 1, 2008

در قسمت زیر کد یکی از مهمترین قسمت های ساختمان داده نوشته شده به زبان جاوا (چندان فرقی با سی++ ندارد به جز کلاس BinaryNode که باید لینک های چپ و راست در سی++ از نوع اشاره گر باشند)

این کلاس شامل متدهایی برای حذف /اضافه و جستجو و می توان با اضافه کردن متدی که درخت را به صورت میان ترتیب(inorder) طی می کند یک جستجو و مرتب سازی بسیار سریع را داست چراکه در حالت متوسط و در بدترین حالت تنها دارای هزینه ی nlogn است و تنها بدی آن مقدار حافظه ی مصرفی یعنی n،تعداد گره ها، می باشد .

 

class BinaryNode<T> {
BinaryNode right;
BinaryNode left;
T value;
BinaryNode parent;

BinaryNode(T value,BinaryNode left,BinaryNode right,BinaryNode parent){
    this.right=right;
    this.left=left;
    this.value=value;
    this.parent=parent;
}
BinaryNode(){
    this(null,null,null,null);
}
}
public class BSTree {
   private BinaryNode root;
   public  BSTree(){
        root=null;
    }
   public void insert(Comparable x){
       root=insert(x,root,root);
      
   }
   private Object find(Comparable x, BinaryNode root) {
        if(root==null)
            return null;
        Object p = null;
        if(x.compareTo(root.value)>0)
            p=find(x,root.right);
        else if(x.compareTo(root.value)<0)
            p=find(x,root.left);
        else if(x.compareTo(root.value)==0)
            p=root.value;
            else
                System.out.print(“Item not founs!”);
        return p;
    }
   private BinaryNode insert(Comparable x, BinaryNode root,BinaryNode p) {
    if(root==null)
        root=new BinaryNode(x,null,null,p);
    else if(x.compareTo(root.value)>0)
        root.right=insert(x,root.right,root);
    else if(x.compareTo(root.value)<0)
        root.left=insert(x,root.left,root);
   
   
    return root;
    }
   private void remove(Comparable x){
        root=remove(x,root);
    }
   private BinaryNode remove(Comparable x, BinaryNode root) {
    if(root==null)
        return root;
    else if(x.compareTo(root.value)>0)
        root.right=remove(x,root.right);
    else  if(x.compareTo(root.value)<0)
        root.left=remove(x,root.left);
    else if(x.compareTo(root.value)==0){
        if(root.left==null)
            root=root.right;
        if(root.right==null)
            root=root.left;
        else{
        root.value=rightmost(root.left);
            root.left=removmost(root.left);
       }
    }
    return root;
   
    }
   private BinaryNode removmost(BinaryNode root) {
       if(root.right==null)
           return root.left;
       else
           root=removmost(root.right);
       return root;
    }
   private Object rightmost(BinaryNode root) {
    if(root.right==null)
        return root.value;
    else
        return rightmost(root.right);
    }
   public Object find(Comparable x){
        return find(x,root);
    }public void print(){
        print(root, 1);
    }
    private void print(BinaryNode root, int depth){
       
        for(int i=1; i<depth; i++)
            System.out.print(“  “);
        if(root == null){
            System.out.println(“null”);
            return;
        }
        if(root.parent!=null)
        System.out.println(root.value+ ” , parent”+root.parent.value);
        else
            System.out.println(root.value);
        print(root.left, depth+1);
        print(root.right, depth+1);
          }
        //System.out.println(“1111″);
  public static void  main(String []args){
        BSTree t=new BSTree();
        for(int i=0;i<10;i++)
        t.insert(Math.round(Math.random()*1000));
        t.print();
       
       
    }
   
}
 

انواع روش های خواندن/ نوشتن ، از/در یک فایل در سی++ و جاوا

می 10, 2008

انواع روش های خواندن/ نوشتن ، از/در یک فایل در سی++ و جاوا:

1.        در   سی++ :

ابتدا باید Header File ، fstream.h را وارد نموده و سپس می توان از موارد زیر به تناسب استفاده کرد:

ftream  <یک اسم برای جریان>)”<اسم و مسیر فایل>,mode_open | attribute);

Mode_open :

                ios::binary         //اینکه فایل در مد باینری باز شود

            ios::in             //اینکه جریان در مد ورودی باز شود

            ios::nocreat //اگر فایل وجود دارد عمل باز کردن با شکست مواجه شود

            ios::out      //جریان در مد خروجی باز می شود

ios::trunk    //اگر فایل محتوی اطلاعات باشد (در مد نوشتن)،اطلاعات پاک شده و از ابتدا در فایل اطلاعات را می ریزد               ios::app     //در(مد نوشتن)در ادامه ی فایل شروع به نوشتن می کند

برای مثال :

fsream  file(“help.txt” , ios::out | ios::app |ios::in);

که در آن یک جریان خروجی در یک فایل باز نموده و در ادامه ی فایل شروع به نوشتن (با استفاده از دستورات پیش رو) مینماید توجه داشته باشد که علامت | برای OR نمودن حالت  مختلف می باشد.

 برای نوشتن/خواندن می توان از عملگر های >> و << استفاده کرد و یا از دستورات write و read  استفاده نمود.

istream & read(unsigned char *buff,int num);

ofstream& write(unsigned char* buff,int num);

که در آن buff آرایه ای از کاراکترهاست که می توان با استفاده از آن خواند یا نوشت و num تعداد بایت خوانده/نوشته شده می باشد .

مثال :

char buffer[1024];تعریف یک آرایه از کاراکتر ها//

file.read(buff,1024);قرار دادن 1024بایت اول فایل در آرایه ی فوق//

استفاده از دستورات put() و get() برای نوشتن به صورت تک کاراکتری:

file.put(‘k’);

char ch= file.get();

 جاوا بعدا!

 

 

                                                                                                                                                                     

 

برنامه نمایش عکس با جاوا

آوریل 22, 2008

درباره برنامه گرافیکی با جاوا فیلا صحبت کردم این یک نمونه از این برنامه هاست :

با استفاده از یک کلاس که با استفاده از خاصیت ارث بری در جاوا از فوق کلاس  JFrame ارث برده و ایجاد یک کلاس panel که این نیز از کلاس JPanel ارث برده و یک آرایه ی رشته ای از نام فایلهایی که می خواهیم نمایش دهیم؛ کار به آسانی انجام می شود :( برای آشنایی با کلاس ها نام آنها در Import ذکر شده است )

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Timer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author eprogrammer
 */
public class NewClass extends JFrame {
    public NewClass(){
        try {
            final panel p = new panel();
            this.add(p);
            this.setSize(800, 600);
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            for(int i=0;i<16;i++)
            {p.start(i);
            p.updateUI();
            Thread.sleep(1000 / 15);
            }
        } catch (InterruptedException ex) {
            Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
        }
       
    }
    public static void main(String []args) throws IOException{
       NewClass n=new NewClass();
    }
}
class panel extends JPanel{
    String str1;
    int counter=0;
    Image img;
    private Timer timer = new Timer();
    private BufferedImage i;
    panel(){
      
        this.setSize(10,10);
        this.setMaximumSize(new Dimension(100,100));
      }
  @Override
    public void paint(final Graphics g){
        g.clearRect(0,0, 800, 800);
        g.drawImage(img, 0, 0, null);
    }
   public void st(String str){
        try {
            Image image = ImageIO.read(new File(str));
            img = image;
            this.repaint();
        } catch (IOException ex) {
            Logger.getLogger(panel.class.getName()).log(Level.SEVERE, null, ex);
        }
   }
   public void start(int i) {
       String ImageArray[]={
           “001″,”002″,”003″,”004″,”005″,”006″,”007″,”008″,”009″,”010″,”011″,”012″,”013″,”014″,”015″,”016″,
           “017″,”018″,”019″,”020″,”021″,”022″,”023″,”024″,”025″,
       };
       try {
            Image image = ImageIO.read(new File(“DriveLetter:/FolderName/”+ImageArray[i]+/*extension*/”.jpg”));
            img=image;
            this.repaint();
        } catch (IOException ex) {
            Logger.getLogger(panel.class.getName()).log(Level.SEVERE, null, ex);
        }
     
    }
}

جاوای گرافیکی

آوریل 16, 2008

زمان زیادی از ارایه ی جاوا گذشته و خیلی ها علاقه دارند که برنامه هاشون رو به صورت گرافیکی بنویسند . در جاوا می توانیم از دو روش برای ایجاد برنامه های گرافیکی استفاده کینیم یکی اینکه از محیطهای برنامه نویسی گرافیکی مثل NetBeans,Eclipse,Borland استفاده کنیم یا  اینکه به صورت دستی تمام کد های لازم رو بنویسیم (سخته ، نه؟!).

در روش اول شما بهد از تعیین نوع برنامه از قبیل(Application,Panel,Frame,…) فقط نماد های Component هایی  رو که می خواهید  داخل برنامه باشه رو می کشید و می اندازید توی صفحه (+یک لیوان آب از نوع خنک) و با کلیک راست روی اونها و انتخاب Event فعالیت مناسب رو برای اون در نطر می گیرید  و ویژگی های هر یک را تعیین می کنید.

در روش دوم اولا باید صفحه ی اصلی و سپس تمام Component  ها را طراحی و با استفاده از کد طرز قرار گیری آنها و اندازه و … را تعیین کنید .(اوووووووه خسته شدم ).مثلا:

public class MyFrame extens JFrame{

public MyFrame(){

setSize(300,300);
setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setTitle(“MyFrame”);

}

public static void main(String []args){

MyFrame my=new MyFrame():

}

}

یکی از محیط های مناسب برای روش آول استفاه از http://www.netbeans.org هست .امتحان کنید.

یک منبع خوب برای یادگیری زبان جاوا :

http://www.amazon.com/s?ie=UTF8&field-keywords=%26%2334%3Bcore%20java%26%2334%3B&page=1

 

Vevtor

نوامبر 23, 2007

 

سلام !
با وجود اینکه  جاوا کلاس Vector  را دارا می باشد اما خب پیاده سازی آن به روش دلخواه مفید است .
(زیاد حرف نمی زنم برنامه ببنید :)

/*package Matrix*/
import java.lang.Exception;
import java.lang.NullPointerException;
public class Vector<T> {
    private int size=80;
    protected T [] cont;
     protected int low=0,high=0,pos=0;
 
    //=================init with no parameter===============
   protected void init(){
       low=pos=0;
       high=size;
       high++;
       try{
                cont=(T[])new Object[high];
          }catch(NullPointerException exc){
        System.out.println(“nul pointer Exception”);
      }
        for(Integer i=low;i<high;i++)
            cont[i]=null;
   }
   
   //===================init with low par.=================
    protected void init(int l){
    low=pos=l;
   
    high=size;
    high++;
    if(low>high)
            throw new  NullPointerException();
        try{
         cont=(T[])new Object[high];
           }catch(NullPointerException exc){
        System.out.println(“nul pointer Exception”);
           }
        for(Integer i=low;i<high;i++)
            cont[i]=null;
    }
//===================int with two parameter===================
    protected void init(int l,int h){
       low=pos=l;
      
       high=h;
       high++;
        if(low>high)
            throw new  NullPointerException();
       if(high>size)
           size=high;
    try{
          cont=(T[])new Object[high];
       }catch(NullPointerException exc){
        System.out.println(“nul pointer Exception”);
       }
        for(Integer i=low;i<high;i++)
            cont[i]=null;
    }
//====================add element at pos i=====================   
    public T addelement(T e,int p)
    {
     //  if(p > pos || p < low)
    if(p<low)      
       throw new ArrayIndexOutOfBoundsException(p);
      // else
        //{ 
             cont[p]=e;
             pos++;
        //}
       return e;
       
    }
   
    public int currentsize(){
        return this.size;
    }
   
   
    /** Creates a new instance of Vector */
 
   
   
    public Vector(int l,int h) {
    try{
    init(l,h);
    }catch(NullPointerException exc){
        exc.printStackTrace();
        return ;
    }

    }
    public Vector(int l){
    
     init(l);
    }
   
    //=======================contstructor===============
    public Vector(){
    
         init();
    }
    //=====================constructor====================
   
    public  Vector(Vector<T> ob){
        this.high=ob.high;
        this.low=ob.low;
        for(int i=low;i<=high;i++)
        {
      try{
             this.cont[i]=ob.cont[i];
         }catch(NullPointerException exc){
          exc.printStackTrace();return ;  
         }
        }
       
    }
//——————low and high————————–   
   public  int hi(){
        return this.high;
   }
   public int lo(){
       return this.low;
   }
//——————return element at i pos—————————–
   public T reap(int i) throws ArrayIndexOutOfBoundsException//return element at position i;
   {
      if(i>this.high || i<this.low)
          throw new ArrayIndexOutOfBoundsException();
      return cont[i];
   }
  
    public T reap(int i,T e) throws ArrayIndexOutOfBoundsException//return element at position i;
   {
      if(i>this.high || i<this.low)
          throw new ArrayIndexOutOfBoundsException();
      return cont[i];
   }

   public int size()
   {
       return this.size;
   }

}

class Grater extends Exception{
   public  Grater(){
         System.out.println(“your Domain have Error!\n The low is Grater Than High “);
   }
 
}

4 !

نوامبر 19, 2007

سلام !
اول بگم که پست قبلی برنامه ی اصلی ایراد داشت که من درستش کردم و نوشتم .
حالا :

برنامه ی BST : با شیوه ی جالبی پیاده سازی شده  و با تکنیک Generic  نوشته شده که از کلاس Comparable ارث برده .
متد های insert , remove را اینجا می نویسم . متهد های عمومی insert , remove  برعهده ی خواننده ی متن .

 import java.io.*;
import java.util.NoSuchElementException;
class BinaryNode<T extends Comparable> {
  T data;
  protected int Visited;
   BinaryNode<T> right,left;
  BinaryNode ( ) {
    this.data =null;
    right=left=null;
    Visited=0;
    }
}

class BinaryTree<T extends Comparable> {
 
    private  BinaryNode root;
    public  BinaryTree(){
       root=null;
}
  
  private static<T extends Comparable> 
  BinaryNode<T> insert ( BinaryNode tree, T data ) throws DuplicatItem {
    if ( tree == null ) {
      tree = new BinaryNode<T> ( data,null,null );
   
    }
    else {
      int dir = data.compareTo ( tree.data ) > 0 ? 1 : 0;
     
      if(dir<0)
          tree.left=insert(tree.left,data);
      
      else if(dir>0)
          tree.right=insert(tree.right,data);
      else
          throw new DuplicatItem(“Search Tree : insert”);
    }
    return tree;
 }
 
  private<T extends Comparable>
  BinaryNode<T> remove( BinaryNode tree, T data ) {
    if ( tree == null )
            throw new NoSuchElementException(“” +
                    “remove: No element to remove”);
  if(data.compareTo(tree.data)<0)
      tree.left=remove(tree.left,data);
  else if(data.compareTo(tree.data)>0)
      tree.right=remove(tree.right,data);
  else if(data.compareTo(tree.data)==0){
      if(tree.left==null)
        tree=tree.right;
      else if(tree.right==null)
          tree=tree.left;
  }
  else{
        Comparable replacewithvalue=rightMax(tree.left);
        tree.data = (T) replacewithvalue;
        tree.left= deletetrightMax(tree.left);
  }
    return tree;
   
  }

2 !

نوامبر 5, 2007

سلام !

اولین برنامه ای که می خوام اینجا بذارم یک پشته به زبان جاوا با استفاده از اینترفیسه و با استفاده از یک استک آرایه ای  از اون استفاده کردم و در نهایت اجرای آن .

نکته : این برنامه به طور کلی از اپلت استفاده نمی کند (فقط برای نشان دادن قدرت آن و همچنین زیبایی هرچند  اندک برنامه)و فقط برای گرفتن عدد مورد استفاده قرار گرفته .

نکته 2:هر فایل public در فایل جداگانه و با نام آن کلاس ذخیره شود .(اگر در محیط netbeans اجرا شود که چه بهتر):

this is a java programm that creat a Generic Stack (In Array Model). 

package Data;

import java.io.IOException;

/**
 *
 * @author eprogrammer

*/

public interface Stack {
    public void push(Object x);
    public Object pop() throws UnderFlow;
    public boolean isEmpty();
    public void MakeEmpty();
   
}

//————————————–

/*
 * ArrayStack.java
 *
 * 
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

import java.io.IOException;
import java.util.*;
import javax.swing.*;
import java.lang.*;

/**
 *
 * @author eprogrammer
 */

public class ArrayStack implements Stack {
   
    private int capacity=100;
    private Object []data;
    private int topindex=0;

    private Object []data2;
   
    /** Creates a new instance of ArrayStack */
    public ArrayStack(int capacity) {
        this.capacity=capacity;
        data = new Object[capacity+1];
 
    }
   
    public ArrayStack(){
        this(101);
         }
   
    public void push(Object x){
   /* if(topindex==this.capacity-1)
        {
            this.capacity*=2;
            data2=new Object[this.capacity];
            for(int i=0;i<topindex;i++)
              data2[i]=data[i];
            data=data2;                                       
        } */
          try{
       data[topindex++]=x;
      }catch(ArrayIndexOutOfBoundsException ex){
          System.out.println(“Out of boounds”);
      }
     
    }
   
   
    public Object pop()throws UnderFlow{
        if(this.isEmpty())
             throw  new UnderFlow(“The stack is empty”);
       
      else
          data[topindex--]=null;
     return data[topindex+1];
     }
        public void MakeEmpty(){
        topindex=-1;
    }
    public Object  rtop(){
        return data[topindex];
       
    }
   
    public Object retrieve(int i){
        return data[i];
    }
    public boolean isEmpty(){
        if(topindex==-1)
            return true;
        else
            return false;
       
    }

        
    public int returnsize(){
        return topindex;
    }
   
public static void main(String[] args)
{
  
  //  Scanner in=new Scanner(System.in);
    ArrayStack mystack=new ArrayStack();
   int num=0;
 
 for(;num==0;)
 {
       try{
 
     num=Integer.parseInt(JOptionPane.showInputDialog(null,”Enter size of Stack “)); 
   }catch(NumberFormatException ex){
       JOptionPane.showMessageDialog(null,”Must Enter a Number !”);
      
   }
   
}
   
   
    for(int i=0;i<num;i++)
    {
    String str=JOptionPane.showInputDialog(“Enter “+(i+1) + “th Object : “);
    try{
        mystack.push(new String(str));
        }catch(ArrayIndexOutOfBoundsException ex)
        {
            System.out.println(“Out Of Bound”);
        }
    }
    String str = null;
        try {
            str=(String) mystack.pop();
            } catch (UnderFlow ex) {
            ex.printStackTrace();
        }catch(ArrayIndexOutOfBoundsException ex)
        {
            JOptionPane.showMessageDialog(null,”Out of bounds “);
        }
    if (!mystack.isEmpty())
    JOptionPane.showConfirmDialog(null,str+” Poped”)     ;
      
    for(int i=0;i<mystack.returnsize();i++)
    System.out.println(mystack.retrieve(i));
       
}

   
}

class UnderFlow extends IOException{
   
    /** Creates a new instance of UnderFlow */
    public UnderFlow() {
    }
    public UnderFlow(String message)
    {
        super(message);
    }
   
}