Matris (Kısa Kod)

Soru
1      2      4      8 

3      4      6    10 

7      8    10   14

13    14    16    20

Yukarıdaki matrisi ekrana yazan C++ programı yazınız.

Cevap

for(int i=1,j=0;i<13;i+=j,j+=2,cout<<i+0<<i+1<<i+3<<i+7<<endl);

 

Hüseyin Bora ABACI

Dizideki Karekterin Sayısı.(En Kısa) Bora Usulu

Soru

Tek boyutlu bir karakter dizisindeki ( String ) Harf,sayı ve sembollerin boşluk “Space” hariç adetini bulan programı yazınız.

Cevap

for(int  i=sizeof(ch), j=0;i>1;i–,ch[i]!=”?j++:0);

Hüseyin Bora ABACI

 

 

C++ ile dosya dizin işlemleri için sınıf örneği CFile.h

/*———————————————————————-

File        :CFile.H  Test

Author            :Huseyin Bora Abaci

Last Update     :24.01.2005

Platform    :Windows

Compiler    :Borland C++Builder

———————————————————————–*/

#ifndef _CFile_H_

#define _CFile_H_

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

#include “stdio.h”

#include “stdlib.h”

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

#include “dos.h”

#include “dir.h”

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

#define     _MAX_FILE_NAME    (500)

#define _MAX_COPY_FNAME (260)

class CFile {

protected:

FILE *In ,*Out;

__int64 Size;

public:

CFile(){Size=0;}//Kurucu

int FileCopy(char CopyFile[],char NewFile[]);

int FileByte(char ReadFile[],char WriteFile[],long Byte);

int FileSize(char FileName[]);

 void __fastcall CopyTree(char FolderName[_MAX_PATH],char Asterik[],char FolderCopy[_MAX_PATH]);

 void __fastcall Deltree(char FolderName[]);

 void __fastcall MoveTree(char DeleteFolder[_MAX_PATH],char FolderCopy[_MAX_PATH]);

  bool FileDelete(char FileName[]);

  bool NewFolder(char FolderName[]);

  bool DeleteFolder(char FolderName[]);

  bool MoveFile(char DeleteFile[],char CopyFile[]);

 };

/*—————————————————————————-

Dosyanın Bir kopyasını oluşturmak için yazdığım fonksiyon

kopyalama işlemi başarılı olduğunda kopyalanan byte kadar geri döşüş değeri alır

hata durumunda sıfır  inline ile  yerel fonksiyon gibi gösterilip performas yükseltildi

—————————————————————————-*/

inline int CFile::FileCopy(char CopyFile[],char NewFile[])

{

if((In=fopen(CopyFile,“rb”))==NULL)return 0;

if ((Out=fopen(NewFile,“wb”))==NULL)return 0;

Size=0;

while(!feof(In))

{

if(!feof(In))putc(getc(In),Out);

Size++;

}

fclose(In);

fclose(Out);

return Size;

}

/*—————————————————————————-

Dosyanın Belirtilen Byte ına kadar kopyalayan fonksiyon

kopyalama işlemi başarılı olduğunda kopyalanan byte kadar geri döşüş değeri alır

hata durumunda sıfır

—————————————————————————-*/

 inline int CFile::FileByte(char ReadFile[],char WriteFile[],long Byte)

{

if((In=fopen(ReadFile,“rb”))==NULL)return 0 ;

if((Out=fopen(WriteFile,“wb”))==NULL)return 0 ;

Size=0;

while(!feof(In))

{

Size++;

putc(getc(In),Out);

if(Size==Byte)break;

}

fclose(In);

fclose(Out);

return Size;

 }

/*—————————————————————————-

Dosyanın byte cinsinden boyutunu döndüren fonksiyon

—————————————————————————-*/

inline int CFile::FileSize(char FileName[])

{

if((In=fopen(FileName,“r+”))==NULL)

return 0;

fseek(In,0L,SEEK_END);

return ftell(In);

fclose(In);

}

//Klasik Dosya işlemleri

//—————————————————————————

bool  CFile::FileDelete(char FileName[])

{

if(remove(FileName))

return true;

}

//—————————————————————————-

bool CFile::NewFolder(char FolderName[])

{

if(mkdir(FolderName))

return true;

}

//—————————————————————————-

bool CFile::DeleteFolder(char FolderName[])

{

if(rmdir(FolderName))

return true;

}

//Dosya Taşı

//—————————————————————————-

bool CFile::MoveFile(char DeleteFile[],char CopyFile[])

{

FileCopy(DeleteFile,CopyFile);

if(remove(DeleteFile))

return true;

}

/*—————————————————————————-

Dizin yapısını olduğu gibi kopyalayan fonksiyon

—————————————————————————-*/

void __fastcall CFile:: CopyTree(char FolderName[_MAX_PATH],char Joker[],char FolderCopy[_MAX_PATH])

{

struct ffblk fp;

int States;

char NextNewFolder[_MAX_FILE_NAME],Files1[_MAX_FILE_NAME],Files2[_MAX_FILE_NAME],FA[_MAX_FILE_NAME],Folder[_MAX_FILE_NAME],NextSourceFolder[_MAX_FILE_NAME];

sprintf(FA,“%s%s”,FolderName,Joker);

States =findfirst(FA,&fp,0|FA_DIREC|FA_HIDDEN);

while(!States)

{

if(fp.ff_attrib & 0×10) /*FA_DIREC    0×10        Directory */

{

sprintf(Folder,“%s%s”,FolderCopy,fp.ff_name);

if((strcmp(fp.ff_name,“.”)>1) && (strcmp(fp.ff_name,“..”)>1))

{

mkdir(Folder);

sprintf(NextSourceFolder,“%s%s%s”,FolderName,fp.ff_name,“\\”);

sprintf(NextNewFolder,“%s%s%s”,FolderCopy,fp.ff_name,“\\”);

CopyTree(NextSourceFolder,Joker,NextNewFolder);

}

}

sprintf(Files1,“%s%s”, FolderName,fp.ff_name);

sprintf(Files2,“%s%s”,FolderCopy,fp.ff_name);

FileCopy(Files1,Files2);

States=findnext(&fp);

}

findclose(&fp);

}

//————————————————————————

/*Verilen Dizin yapısını olduğu gibi kaldıran fonksiyon*/

//————————————————————————

void __fastcall CFile::Deltree(char FolderName[])

{

struct ffblk *fd=new ffblk;

char files[_MAX_FILE_NAME],FA[_MAX_FILE_NAME],Folder[_MAX_FILE_NAME]=“”;

sprintf(FA,“%s%s”,FolderName,“*.*”);

findfirst(FA,fd,0|FA_DIREC|FA_HIDDEN);

do

{

if(fd->ff_attrib & 0×10) /*FA_DIREC    0×10        Directory */

if((strcmp(fd->ff_name,“.”)>1) && (strcmp(fd->ff_name,“..”)>1))

{

sprintf(Folder,“%s%s%s”,FolderName,fd->ff_name,“\\”);

Deltree(Folder);

if(rmdir(Folder));  //Burda Bir Gecikme Gerikyordu if(rmdir(Folder)) ile gecikme sağlandı

if(rmdir(Folder));

}

if((strcmp(fd->ff_name,“.”)>1) && (strcmp(fd->ff_name,“..”)>1))

{

sprintf(files,“%s%s”,FolderName,fd->ff_name);

if(remove(files));

}

}

while(!findnext(fd));

findclose(fd);

}

//Verilen Dizin yapısını taşıyan fonksiyon

void __fastcall CFile::MoveTree(char DeleteFolder[_MAX_PATH],char FolderCopy[_MAX_PATH])

{

NewFolder(FolderCopy);

CopyTree(DeleteFolder,“*.*”,FolderCopy);

Deltree(DeleteFolder);

rmdir(DeleteFolder);

}

#endif

Uzaktan Metot Çağrımı (RMI – Remote Method Invocation)

RMI nedir ? 

 Bir cihaz üzerinde çalışan Java nesnelerinin, başka bir cihaz üzerinde çalışan diğer Java nesnesinin metodunu çağırmasını sağlar. Bu önemli özellik dağıtık uygulamalar geliştirilmesine izin verir.

 

RMI Sunucu, İstemci mimarisi üzerine kurulu olup, arabirimler ve serileştirme ile uzak metot çağrımı başarıya ulaşır.

rmi

RMI’ uygulamak genellikle 4 adım kullanılır

1-     Sunucu tarafından sağlanan uzak arabirim

2-     Uzak Arabirimi uygulayan uzak sınıf

3-     Sunucu cihazın ana programı

4-     İstemci cihaz tarafı

Buradaki örnek sunucu tarafında List arabirimini uygulayan bir List nesnesini istemci tarafına uzak metot çağırımı ile Gerçekleştireceğiz. Yani sunucu tarafında oluşturduğumuz bir listeyi istemciye göndericeğiz.

Adım 1- Sunucu tarafından sağlanan uzak arabirimi gerçekleştirmek. Tüm uzak arabirimler Remote Arabirimini genişletmek zorundadır Remote üye tanımlamaz, tüm uzak metotlar bir RemoteException fırlatabilir.

 
/**
 * ServerIntf.java
 * @author Hüseyin Bora
 */
import java.rmi.*;
import java.util.*;
public interface ServerIntf extends Remote {
    public List getList()throws RemoteException;
}
 

Adım 2 -  ServerIntf uzak arabirimi uygulayıp uzak nesnelere uygunluğu sağlayan UnicastRemoteObject sınıfını genişletmek zorundadır.

 
/**
 * ServerImpl.java
 * @author Hüseyin Bora
 */
import java.rmi.*;
import java.rmi.server.*;
import java.util.*;
public class ServerImpl extends UnicastRemoteObject
implements ServerIntf{
    public ServerImpl()throws RemoteException{
    }
public List getList() throws RemoteException {
        ArrayList al = new ArrayList();
        for(int i= 1 ; i<10; i++)
        al.add(i);
        return al;
    }

}

Adım 3- Sunucu ana programının yazılması ana program şu adımları takip eder.

1-     ServerImpl nesnesi oluşturmak.

2-     RMI kayıdını güncellemek.

Kayıt işlemi Naming sınıfının rebind() metodu kullanılarak gerçekleştirilir. Bu metot bir adı bir nesne referansı ile ilişkilendirir.ilk parametre sunucuyu , ikinci parametre nesne referansını alır.

/**
 * Main.java
 * @author Hüseyin Bora
 */
import java.rmi.*;
import java.net.*;
public class Main{
    public static void main(String[] args) {
        try
        {
            ServerImpl serverobject = new ServerImpl();
            Naming.rebind("Main", serverobject);
        } 
        catch (Exception ex) {
           ex.printStackTrace();
        }
    }

Adım 4- İstemci tarafının gerçekleştirilmesi istemci tarafı rmi protokolünü kullanır Naming sınıfının lookup() metodunu çağırır bu metot bir rmi URL’si alır ve  uzak nesneye bir referans döndürür. 

/**
 * Client.java
 * @author Bora
 */
 
import java.rmi.*;
import java.util.*;
public class Client {
    public static void main(String[] args) {
        try {
            String rmiUrl = "rmi://localhost/Main";
            ServerIntf remote = (ServerIntf) Naming.lookup(rmiUrl);
            ArrayList al = (ArrayList) remote.getList();
            Iterator it = al.iterator();
            while (it.hasNext()) 
                System.out.println(it.next().toString());
            
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

RMI uygulamasının çalıştırması

Adımlar

1-     Javac kullanarak Java kaynak dosyalarının derlenmesi.

2-     Rmic kullanarak İkame ve iskelet kodları üretmek. Java2 iskelet kodlara gerek duymaz. rmic ile ikame kod üretecekseniz classpath’te geçerli dizinin ekli olması gereklidir.

3-     Rmiregistr servisini yürütmek :  komut satırından : start rmiregistry

4-     Uygulamayı yürütmek : istemci  cihazda bulunacak class dosyaları Client.class Oluşturulmuşsa ServerImpl_Stub.class ve ServerIntf.class sunucu tarafında bulunacak dosyalar : Main.class , ServerIntf.class , ServerImpl.class oluşturmuşsa iskelet kod ServerImpl_Skel.class.

Uygulamanın istemci cihaz izerinde çalıştığında 1-9 arası sayıları ekrana yazacaktır.

Hüseyin Bora ABACI

     

Sonraki Sayfa »


 

Temmuz 2009
M T W T F S S
« May    
 12345
6789101112
13141516171819
20212223242526
2728293031  

Popüler Yazılar

  • Hiçbiri

Top Clicks

  • Hiçbiri