The BOTTOM LINE Quote Of The Day

The BOTTOM LINE Quote Of The Day

Don't Ever Tell GOD How BIG Your Problems are.
Just Tell Your Problems How BIG your GOD is ;)
Showing posts with label C++. Show all posts
Showing posts with label C++. Show all posts

Monday, December 10, 2012

Implement TCP Client-Server


TCP Client.cpp

#include<stdio.h>
#include<sys/socket.h>
#include<iostream.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<netbd.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<errno.h>
#define MAX 100

main(int argc.char*argv)
{
int sockfd,n;
char buff[100];
struct sockaddr_in serv;

if(argc!=3)
{
printf("\n Error ! usage:./a.out<IP ADDRESS><PORT>\n");
exit(0);
}

if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("\n Error ! Socket not created...\n");
exit(0);
}

bzero(&serv,sizeof(serv));
serv.sin_family=AF_INET;
serv.sin_port=htons(atoi9argv[2]));

if(inet_pton(AF_INET,argv[1],&serv.sin_addr)<0)
{
printf("\n Errorin conversion of IP address from string to num\n");
exit(0);
}

if(connect(sockfd,(struct sockaddr*)&serv,sizeof(serv))<0)
{
printf("\n Error ! can not established...\n");
exit (0);
}

printf("\n connected..\n");
strcpy(buff,"abc");





while(strcmp(buff,"bye")!=0)
{
cout<<"\n Client:";
gets(buff);
write(sockfd,buff,strlen(buff));
cout<<"\n Server:";
n=read(sockfd,buff,100);
buff[n]='\0';
cout<<buff;

if(n<0)
{
cout<<"\n Read Error";
exit (0);
}
}
cout<<"\n";
return 0;
}

TCP Server.cpp

#include<iostream.h>
#include<stdio.j>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<time.h>

int main()
{
int listenfd,connfd,n;
struct sockaddr_in serv;
char buff[100];
int port=1058;
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&serv,sizeof(serv));
serv.sin_family=AF_INET;
serv.sin_addr.s_addr=htonl(INADDR_ANY);
serv.sin_port=htons(port);
bind(listenfd,(struct sockaddr*)&serv,sizeof(serv));
listen(listenfd,15);

while(1)
{
connfd=accept(listenfd,(struct sockaddr*)NULL,NULL);
cout<<"\nConx.Open!]n";
int child;

if((child=fork())<0)
{
cout<<"\nChild disaster!";
exit(1);
}




else if(child==0)
{
close(listenfd);
strcpy(buff,"abc");

while(strcmp(buff,"bye")!=0)
{
if(strcmp(buff,"bye")==0) break;
n=read(connfd,buff,100);
buff[n]='\0';
cout<<"\nClient:"<<buff;
cout<<"Server:";
gets(buff);
write(connfd,buff,strlen(buff));
}

cout<<"\n\n Conx closed!";
close(connfd);
exit(0);
}

close(connfd);
}
return 0;
}

OUTPUT SCREEN:-

Server side:

[cseb58@localhost cseb58]$ TCPserver.cpp
[cseb58@localhost cseb58]$ ./a.out
conx open!
Client : hai server!
cliebt : bye

Client side:

[cseb58@localhost cseb58]$ TCPclient.cpp
[cseb58@localhost cseb58]$ ./a.out 127.0.0.1 1858
connected
server:hai
server:see you


Sunday, December 9, 2012

Implement UDP Client-Server


UDP Client.c

#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<time.h>
#include<errno.h>
#define MAX 100

int main(int argc,char* argv[])
{
int sockfd;
char str[100];
struct sockaddr_in serv_addr;

if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
printf("client:can't open datagram socket");

bzero((char *) &serv_addr,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(argv[1]);;
serv_addr.sin_port=htons(atoi(argv[2]));;

/*if(bind(sockfd,(struct sockaddr*) &cli_addr,sizeof(cli_addr))<0)
printf("client:can't bind the local address");*/

printf("enter message to server:");
gets(str);

if(sendto(sockfd,str,100,0,(struct sockaddr*) &serv_addr,sizeof(serv_addr))<0)
{
printf("\nError connection not established...\n");
exit(0);
  }
  printf("\nconnected\n");
close(sockfd);
exit(0);
return 0;
}

UDP Server.c

#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<time.h>
#define MAX 100

int cwork(int);

int main()
{
int sockmain,sockclient,child,n;
struct sockaddr_in serv;
char str[100];
int port=4055;
if((sockmain=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("server cannot open main socket!");
exit(0);
}
bzero(&serv,sizeof(serv));
serv.sin_family=AF_INET;
serv.sin_addr.s_addr=htonl(INADDR_ANY);
serv.sin_port=htons(port);

for(;;)
{
n=sizeof(serv);
sockclient=recvfrom(sockmain,str,100,0,(struct sockaddr*)&serv,&n);
if(sockclient<0)
{
printf("bad client socket");
exit(0);
}
if((child=fork())<0)
{
printf("failed to create child");
exit(0);
}
else if (child==0)
{
close(sockmain);
n=cwork(sockclient);
close(sockclient);
exit(0);
}
close(sockclient);
}
return 0;
}






#define LEN 100

int cwork(int sockclient)
{
char buf[LEN];
int msglen;
bzero(buf,LEN);
if((msglen=recv(sockclient,buf,LEN,0))<0)
{
printf("Bad recv by child");
exit(1);
}
printf("\nsocket used: %d",sockclient);
buf[msglen]='\0';
printf("\nmessage : %s",buf);
strcpy(buf,"message received ...");
send(sockclient,buf,strlen(buf),0);
return 0;
}


OUTPUT SCREEN:-

cc UDPserver.c
./a.out

UDP socket created……...listening port 4001
Server received the message: hello
From client: hello
Server: hey
Server received the message: HowRU?
From client: HowRU?
Server: fine.
Server received the message: bye
From client: bye
Server: bye

Saturday, December 8, 2012

Implement FTP Client-Server


FTP Client.c

#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<time.h>
#define MAX 100;

main(int argc,char**argv)
{
int sockfd,n,connfd;
char str[100],str1[100],s[2];
struct sockaddr_in serv;
if(argc!=5)
{
exit(0);
}
if(sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("\n Error ! Socket not created...\n");
exit (0);
}
bzero(&serv,sizeof(serv));
serv.sin_family=AF_INET;
serv.sin_port=htons(atoi(argv[2]));
if(inet_pton(AF_INET,argv[1],&serv.sin_addr)<=0)
{
printf("\n error in conversion of IP address from string to num\n"),
exit(0);
}
if(connect(sockfd,(struct sockaddr*)&serv,sizeof(serv))<0)
{
printf("\n Error!Conx not established...\n);
exit(0);
}
printf("\n connected...sending file name%s\n",argv[3]);
write(sockfd,argv[],strlen(argv[3]));    read(sockfd,s,3);
write(sockfd,argv[4],strlen(argv[4]));
str1[0]='\0';
while((n=read(sockfd,str,100))>0)
{
str[n]='\0';
printf("%s\n",str);
write(sockfd,str,strlen(str));
}
if(n<0)
printf("\n Read error...\n");
exit (0);
}


FTP Server.c

#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<time.h>
#define MAX 100;

int main ()
{
int listenfd,connfd,n,nl;
struct sockaddr_in serv;
char str1 [100],str2[100],fname[20],fname1[20],s[2],
int port=9999;
FILE*f1*f2;
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&serv,sizeof(serv);
serv.sin_family=AF_INET;
serv.sin_addr.s_addr=htonl(INADDR_ANY);
serv.sin_port=htons(port);
bind(listenfd,(struct sockaddr*)&serv,sizeof(serv));
"serftp4.cpp"54L, 1518C
listen(listenfd,5);
for(;;)
{
connfd=accept(listenfd,(struct sockaddr*)NULL,NULL);
printf("\nClient requesting");
n=read(connfd,fname,20);
fname(n)='\0';
printf("\n Received:%s\n",fname);
f1=fopen(fname)."r");
strcpy(s,"ab");
write(connfd,s,strlen(s));
n1=read(connfd,fname1,20);
fname1[n1]=;\0';
printf("stored in:%s\n"'fname 1);
f2=fopen(fname1,"w");
while(!feof(f1))
{
fgets(str1,50f1);
write(connfd,str,1,strlen(str1));
n=read(connfd,str,2,100);
str2[n]='\0';
fputs(str2,f2);
}
fclose(f1);
fclose(f2);
close(connfd);
}
return 0;
}


OUTPUT SCREEN:-

Server Side:

[cseb17@localhost cseb 17]$ cc FTPserver.c
[cseb17@localhost cseb 17]$.a/out
Client requesting
Received:new.c
Stored in : thanga.c

Client side:

[cseb17@localhost cseb 17]$cc FTPclient.c
[cseb17@localhost cseb 17]$./a.out 127.0.0.1 6142 new.c.thanga.c

connected...sending filename new.c
hai how are you?

Friday, December 7, 2012

Implement Multicast Communication


Sender.cpp

#include <iostream>
#include <sstream>
#include <string>
#include <boost/asio.hpp>
#include "boost/bind.hpp"
#include "boost/date_time/posix_time/posix_time_types.hpp"

const short multicast_port = 30001;
const int max_message_count = 10;

class sender
{
public:
  sender(boost::asio::io_service& io_service,
      const boost::asio::ip::address& multicast_address)
    : endpoint_(multicast_address, multicast_port),
      socket_(io_service, endpoint_.protocol()),
      timer_(io_service),
      message_count_(0)
  {
    std::ostringstream os;
    os << "Message " << message_count_++;
    message_ = os.str();

    socket_.async_send_to(
        boost::asio::buffer(message_), endpoint_,
        boost::bind(&sender::handle_send_to, this,
          boost::asio::placeholders::error));
  }

  void handle_send_to(const boost::system::error_code& error)
  {
    if (!error && message_count_ < max_message_count)
    {
      timer_.expires_from_now(boost::posix_time::seconds(1));
      timer_.async_wait(
          boost::bind(&sender::handle_timeout, this,
            boost::asio::placeholders::error));
    }
  }

  void handle_timeout(const boost::system::error_code& error)
  {
    if (!error)
    {
      std::ostringstream os;
      os << "Message " << message_count_++;
      message_ = os.str();

      socket_.async_send_to(
          boost::asio::buffer(message_), endpoint_,
          boost::bind(&sender::handle_send_to, this,
            boost::asio::placeholders::error));
    }
  }

private:
  boost::asio::ip::udp::endpoint endpoint_;
  boost::asio::ip::udp::socket socket_;
  boost::asio::deadline_timer timer_;
  int message_count_;
  std::string message_;
};

int main(int argc, char* argv[])
{
  try
  {
    if (argc != 2)
    {
      std::cerr << "Usage: sender <multicast_address>\n";
      std::cerr << "  For IPv4, try:\n";
      std::cerr << "    sender 239.255.0.1\n";
      std::cerr << "  For IPv6, try:\n";
      std::cerr << "    sender ff31::8000:1234\n";
      return 1;
    }

    boost::asio::io_service io_service;
    sender s(io_service, boost::asio::ip::address::from_string(argv[1]));
    io_service.run();
  }
  catch (std::exception& e)
  {
    std::cerr << "Exception: " << e.what() << "\n";
  }

  return 0;
}

Receiver.cpp

#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include "boost/bind.hpp"

const short multicast_port = 30001;

class receiver
{
public:
  receiver(boost::asio::io_service& io_service,
      const boost::asio::ip::address& listen_address,
      const boost::asio::ip::address& multicast_address)
    : socket_(io_service)
  {
    // Create the socket so that multiple may be bound to the same address.
    boost::asio::ip::udp::endpoint listen_endpoint(
        listen_address, multicast_port);
    socket_.open(listen_endpoint.protocol());
    socket_.set_option(boost::asio::ip::udp::socket::reuse_address(true));
    socket_.bind(listen_endpoint);


    // Join the multicast group.
    socket_.set_option(
        boost::asio::ip::multicast::join_group(multicast_address));

    socket_.async_receive_from(
        boost::asio::buffer(data_, max_length), sender_endpoint_,
        boost::bind(&receiver::handle_receive_from, this,
          boost::asio::placeholders::error,
          boost::asio::placeholders::bytes_transferred));
  }

  void handle_receive_from(const boost::system::error_code& error,
      size_t bytes_recvd)
  {
    if (!error)
    {
      std::cout.write(data_, bytes_recvd);
      std::cout << std::endl;

      socket_.async_receive_from(
          boost::asio::buffer(data_, max_length), sender_endpoint_,
          boost::bind(&receiver::handle_receive_from, this,
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred));
    }
  }

private:
  boost::asio::ip::udp::socket socket_;
  boost::asio::ip::udp::endpoint sender_endpoint_;
  enum { max_length = 1024 };
  char data_[max_length];
};

int main(int argc, char* argv[])
{
  try
  {
    if (argc != 3)
    {
      std::cerr << "Usage: receiver <listen_address> <multicast_address>\n";
      std::cerr << "  For IPv4, try:\n";
      std::cerr << "    receiver 0.0.0.0 239.255.0.1\n";
      std::cerr << "  For IPv6, try:\n";
      std::cerr << "    receiver 0::0 ff31::8000:1234\n";
      return 1;
    }

    boost::asio::io_service io_service;
    receiver r(io_service,
        boost::asio::ip::address::from_string(argv[1]),
        boost::asio::ip::address::from_string(argv[2]));
    io_service.run();
  }
  catch (std::exception& e)
  {
    std::cerr << "Exception: " << e.what() << "\n";
  }

  return 0;
}

Thursday, December 6, 2012

Implement Producer-Consumer Problem


Producer.c

#include "shared.h"

void insert_item(int item, int semid, int *shared_buffer) {
  int index = get_buffer_size(shared_buffer);
  shared_buffer[index] = item;
}

int produce_item() {
  return 0xFF; // nothing dynamic just write a static integer a slot
}

int main(int argc, const char *argv[])
{
  int *shared_buffer = create_shared_mem_buffer();
  int semid = create_semaphore_set();

  clear_buffer(shared_buffer); // prepare buffer for jobs

  int item = 0;

  while(1) {
    item = produce_item();
    semop(semid, &downEmpty, 1);
    semop(semid, &downMutex, 1);
    insert_item(item, semid, shared_buffer);
    debug_buffer(shared_buffer);
    semop(semid, &upMutex, 1);
    semop(semid, &upFull, 1);
  }

  return EXIT_SUCCESS;
}

Consumer.c

#include "shared.h"

void consume_item(int item) {
  // do something with item
}

int remove_item(int semid, int *shared_buffer) {
  int index = get_buffer_size(shared_buffer) - 1;
  int item = shared_buffer[index];
  shared_buffer[index] = 0x00;
  return item;
}

int main(int argc, const char *argv[])
{
  int *shared_buffer = create_shared_mem_buffer();
  int semid = create_semaphore_set();



  int item = 0;

  while(1) {
    semop(semid, &downFull, 1);
    semop(semid, &downMutex, 1);
    item = remove_item(semid, shared_buffer);
    debug_buffer(shared_buffer);
    semop(semid, &upMutex, 1);
    semop(semid, &upEmpty, 1);
    consume_item(item);
  }

  return EXIT_SUCCESS;
}


Shared.h

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

#define BUFFER_SIZE 5
#define EMPTY_ID 0
#define FULL_ID 1
#define MUTEX_ID 2
#define NSEM_SIZE 3

#define SHM_KEY 9
#define SEM_KEY "."

static struct sembuf downEmpty = { EMPTY_ID, -1, 0 };
static struct sembuf upEmpty = { EMPTY_ID, 1, 0 };
static struct sembuf upFull = { FULL_ID, 1, 0 };
static struct sembuf downFull = { FULL_ID, -1, 0 };
static struct sembuf downMutex = { MUTEX_ID, -1, 0 };
static struct sembuf upMutex = { MUTEX_ID, 1, 0 };

int *create_shared_mem_buffer();
int create_semaphore_set();
int get_buffer_size(int *sbuff);
void clear_buffer(int *sbuf);


Shared.c

#include "shared.h"

/**
 * returns current size of shared buffer
 */

int get_buffer_size(int *sbuff) {
  int i = 0;
  int counter = 0;



  for (i = 0; i < BUFFER_SIZE; ++i) {
    if (sbuff[i] == 0xFF) {
      counter++;
    }
  }
  return counter;
}

void debug_buffer(int *sbuff) {
  int i = 0;
  for (i = 0; i < BUFFER_SIZE; ++i) {
    if (sbuff[i] == 0xFF) printf("1");
  }
  printf("\n");
}

/**
 * returns a pointer to a shared memory buffer that the
 * producer can write to.
 */

int *create_shared_mem_buffer() {
  int *shmaddr = 0; /* buffer address */
  key_t key = SHM_KEY; /* use key to access a shared memory segment */

  int shmid = shmget(key, BUFFER_SIZE, IPC_CREAT | SHM_R | SHM_W); /* give create, read and write access */
  if (errno > 0) {
    perror("failed to create shared memory segment");
    exit (EXIT_FAILURE);
  }

  shmaddr = (int*)shmat(shmid, NULL, 0);
  if (errno > 0) {
    perror ("failed to attach to shared memory segment");
    exit (EXIT_FAILURE);
  }

  // clean out garbage memory in shared memory
  return shmaddr;
}

/**
 * only used in the producer to clean out garbage memory when
 * constructing initial buffer.
 */

void clear_buffer(int *sbuff) {
  int i = 0;
  for (i = 0; i < BUFFER_SIZE; ++i) sbuff[i] = 0x00;
}

/**
 * create FULL and EMPTY semaphores
 */

int create_semaphore_set() {
  key_t key = ftok(SEM_KEY, 'E');




  int semid = semget(key, NSEM_SIZE, 0600 | IPC_CREAT);
  if (errno > 0) {
    perror("failed to create semaphore array");
    exit (EXIT_FAILURE);
  }

  semctl(semid, FULL_ID, SETVAL, 0);
  if (errno > 0) {
    perror("failed to set FULL semaphore");
    exit (EXIT_FAILURE);
  }

  semctl(semid, EMPTY_ID, SETVAL, BUFFER_SIZE);
  if (errno > 0) {
    perror("failed to set EMPTY sempahore");
    exit (EXIT_FAILURE);
  }

  semctl(semid, MUTEX_ID, SETVAL, 1);
  if (errno > 0) {
    perror("failed to create mutex");
  }

  return semid;
}

Monday, November 26, 2012

Generate Three Address Code For Selected Statements


CODING :-

#include<stdio.h>
#include<string.h>

main()
{      
char str[10];
int i,j;
char op;
  printf(“\nEnter the expression:”);
scanf("%s",str);
op=str[0];
i=0;

while((op!='0')||(op!='+')||(op!='-')||(op!=’*’)||(op!=’/’))
{
op=str[++i];
}

switch(op)
{
case '+':printf("MOV R2,%c\n",str[i-1]);
printf("MOV R3,%c\n",str[i+1]);
printf("ADD R1,R2,R3\n");
printf("STORE R1,%c\n",str[i-3]);
break;
case '-':printf("MOV R2,%c\n",str[i-1]);
printf("MOV R3,%c\n",str[i+1]);
printf("SUB R1,R2,R3\n");
printf("STORE R1,%c\n",str[i-3]);
break;
                case '*':printf("MOV R2,%c\n",str[i-1]);
                         printf("MOV R3,%c\n",str[i+1]);
                         printf("MUL R1,R2,R3\n");
                         printf("STORE R1,%c\n",str[i-3]);
                         break;
                case '/':printf("MOV R2,%c\n",str[i-1]);
                         printf("MOV R3,%c\n",str[i+1]);
                         printf("DIV R1,R2,R3\n");
                         printf("STORE R1,%c\n",str[i-3]);
                         break;
default:printf("ERROR\n");
                break;
}
}

Output :-

Enter the expression: x=a+b

MOV R2,a
MOV R3,b
ADD R1,R2,R3
STORE R1,x


Thursday, November 22, 2012

Create a 2-Pass 8085 Assembler


CODING :-

#include<stdio.h>
#include<conio.h>

void gethex(int v,char*str)
{ str[3]=(v%16>9)?((v%16-10)+'A'):(v%16+'0');
  v=v/16;
  str[2]=(v%16>9)?((v%16-10)+'A'):(v%16+'0');
  v=v/16;
  str[1]=(v%16>9)?((v%16-10)+'A'):(v%16+'0');
  v=v/16;
  str[0]=(v%16>9)?((v%16-10)+'A'):(v%16+'0');
  str[4]='\0';
}

int main()
{
  char codes[100][2][100];
  int csize[100];
  int opos[100];
  int codemem[100];
  int tot=0,num=0,l=0;
  char str[100]="",ch;
  char*ptr=NULL;
  int i=0,j=0,k=0,fpos=0;

  for(i=1;i<=5;i++)
  for(j=1;j<=5;j++)
  if(i!=j)
  { strcpy(str,"MOV ");
    str[4]='A'+i-1;
    str[5]=',';
    str[6]='A'+j-1;
    str[7]='\0';
    strcpy(codes[tot][0],str);
    str[0]='A'+i-1;
    str[1]='A'+j-1;
    str[2]='\0';
    strcpy(codes[tot][1],str);
    csize[tot]=1;
    opos[tot]=0;
    tot++;
  }

  for(i=1;i<=5;i++)
  { strcpy(str,"ADD ");
    str[4]='A'+i-1;
    str[5]='\0';
    strcpy(codes[tot][0],str);
    str[0]='1';
    str[1]='A'+i-1;
    str[2]='\0';
    strcpy(codes[tot][1],str);
    csize[tot]=1;
    opos[tot]=0;
    tot++;
  }




  for(i=1;i<=5;i++)
  { strcpy(str,"LOAD ");
    str[5]='A'+i-1;
    str[6]='\0';
    strcpy(codes[tot][0],str);
    str[0]='2';
    str[1]='A'+i-1;
    //str[4]='H';
    str[2]='\0';
    strcpy(codes[tot][1],str);
    csize[tot]=2;
    opos[tot]=7;
    tot++;
  }  

  for(i=1;i<=5;i++)
  { strcpy(str,"SUB ");
    str[4]='A'+i-1;
    str[5]='\0';
    strcpy(codes[tot][0],str);
    //str[0]='0';
    //str[1]='4';
    str[0]='3';
    str[1]='A'+i-1;
    //str[4]='H';
    str[2]='\0';
    strcpy(codes[tot][1],str);
    csize[tot]=1;
    opos[tot]=0;
    tot++;
  }

  int jump=tot;
  strcpy(str,"JMP ");
  strcpy(codes[tot][0],str);
  strcpy(str,"06");
  strcpy(codes[tot][1],str);
  csize[tot]=3;
  opos[tot]=4;
  tot++;

  strcpy(str,"JNZ ");
  strcpy(codes[tot][0],str);
  strcpy(str,"07");
  strcpy(codes[tot][1],str);
  csize[tot]=3;
  opos[tot]=4;
  tot++;

  strcpy(str,"JZ ");
  strcpy(codes[tot][0],str);
  strcpy(str,"08");
  strcpy(codes[tot][1],str);
  csize[tot]=3;
  opos[tot]=3;
  tot++;

  strcpy(str,"JNC ");
  strcpy(codes[tot][0],str);
  strcpy(str,"09");
  strcpy(codes[tot][1],str);


  csize[tot]=3;
  opos[tot]=4;
  tot++;

  strcpy(str,"JC ");
  strcpy(codes[tot][0],str);
  strcpy(str,"0A");
  strcpy(codes[tot][1],str);
  csize[tot]=3;
  opos[tot]=3;
  tot++;
 
  char code[100][100];
  printf("\nTo end the code enter END\n");
  int size=0;
  while(1)
  { gets(code[size]);
    if(strcmp(code[size],"END")==0)
    break;
    size++;
  }

  char symb[100][2][100];
  int symbsize=0;
  int mempos=8192;

  for(i=0;i<size;i++)
  { int type=-1;
    int islabel=-1;
    for(j=0;code[i][j]!='\0';j++)
    if(code[i][j]==':')
    { islabel=j;
      break;
    }
    if(islabel!=-1)
    {
      for(j=0;j<islabel;j++)
      str[j]=code[i][j];
      str[j]='\0';
      strcpy(symb[symbsize][0],str);
      sprintf(str,"%d",mempos);
      strcpy(symb[symbsize][1],str);
      symbsize++;
    }
    else
    { for(j=0;j<tot;j++)
      { ptr=strstr(code[i],codes[j][0]);
        if(ptr!=NULL)
        { type=j;
         
          break;
        }
      }
      if(type==-1)
      { printf("\nIllegal Code\n");
        getch();
        exit(0);
      }
      mempos+=csize[type];
    }      
  }  



  mempos=8192;
  char output[100][100];
  int curs=0;

  for(i=0;i<size;i++)
  { int type=-1,islabel=-1;
    for(j=0;code[i][j]!='\0';j++)
    if(code[i][j]==':')
    { islabel=j;
      break; }
    if(islabel==-1)
    {
      for(j=0;j<tot;j++)
      { ptr=strstr(code[i],codes[j][0]);
        if(ptr!=NULL)
        { type=j;
          if(opos[j]==0)
          { strcpy(output[curs],codes[j][1]);
            codemem[curs]=mempos;
            mempos+=csize[j];
            curs++;
          }
          else if(opos[j]==7)
          { strcpy(output[curs],codes[j][1]);
            strcat(output[curs]," ");
            str[0]=code[i][opos[j]];
            str[1]=code[i][opos[j]+1];
            str[2]='\0';
            strcat(output[curs],str);
            codemem[curs]=mempos;
            mempos+=csize[j];
           
            curs++;
          }  
          else if(j>=jump)
          { strcpy(output[curs],codes[j][1]);
            strcat(output[curs]," ");
            for(k=opos[j];code[i][k]!='\0';k++)
            str[k-opos[j]]=code[i][k];
            str[k-opos[j]]='\0';
            fpos=-1;
            for(k=0;k<symbsize;k++)
            if(strcmp(symb[k][0],str)==0)
            { fpos=k;
              break;
            }
            if(fpos==-1)
            { printf("\nLabel named %s not defined\n",str);
              getch();
              exit(0);
            }
            num=0;
            for(l=0;l<4;l++)
            num=num*10+symb[k][1][l]-'0';
            gethex(num,str);
            ch=str[0];
            str[0]=str[2];
            str[2]=ch;
            ch=str[1];
            str[1]=str[3];
            str[3]=ch;
            strcat(output[curs],str);



            codemem[curs]=mempos;
            mempos+=csize[j];
            curs++;
          }
          break;  
        }
      }
    }
  }

  printf("\nMachine Code is\nMemory  Opcode+Operand\n");
  for(i=0;i<curs;i++)
  { gethex(codemem[i],str);
    printf("%s        %s\n",str,output[i]);
  }
  getch();
}


Input File:-

MOV A,B
MOV C,D
LOAD E,10H
MOV A,E
TEST:
ADD C
SUB D
JMP TEST
RUN:
ADD B
JC RUN
MOV D,E
JNC RUN
SUB A
JZ TEST
JNZ RUN
END

OUTPUT SCREEN:-

Machine Code is
Memory  Opcode+Operand
2000        AB
2001        CD
2002        2E 10
2004        AE
2005        1C
2006        3D
2007        06 0520
200A        1B
200B        0A 0A20
200E        DE
200F        09 0A20
2012        3A
2013        08 0520
2016        07 0A20


Friday, June 15, 2012

Finding Vertical Histogram of given set of data


#include<conio.h>
#include<stdio.h>

int main()
  {
     clrscr();
     int i,j,k,c,num,mrk[10],max,tmp;
     do
     {
     printf("Enter the no. of cases (max. 10): ");
     scanf("%d",&num);
     }while(num<=0 || num>10);
     printf("\n\n");

     max = 0;
     for(i=0;i<num;i++)
     {
 do
      {
printf("\nEnter frequency for Case #%d : ",i+1);
   scanf("%d",&mrk[i]);
 }while( mrk[i]>32766 || mrk[i]<0 );
  if(max < mrk[i])
    max = mrk[i];
     }
     printf("\n\n All data has been collected !!");
     getch();
     clrscr();
     for(i=0;i<num;i++)
     {
      c = (mrk[i]*25)/max;
      //gotoxy(5+(5*i),0);
      for(k=0;k<c;k++)
      {
for(j=0;j<3;j++)
{
gotoxy(5+(5*i)+j,k);
printf("*");

}
      }
      gotoxy(5+(5*i),k);
      printf("%d",mrk[i]);

     }

     getch();
     return 0;
  }

Wednesday, June 13, 2012

Finding Horizontal Histogram of given set of data


#include<conio.h>
#include<stdio.h>

int main()
  {
     int i,j,k,c,num,mrk[100],max;
     printf("Enter the no. of cases : ");
     scanf("%d",&num);
     printf("\n\n");
   
     max = 0;
     for(i=0;i<num;i++)
     {
 do
      {
        printf("\nEnter frequency for Case #%d : ",i+1);
   scanf("%d",&mrk[i]);
 }while( mrk[i]>32767 || mrk[i]<0 );
  if(max < mrk[i])
    max = mrk[i];
     }
     printf("\n\n All data has been collected !!");
     getch();
   
     printf("\n\n\t\t\t\t HISTOGRAM \n");
     for(i=0;i<num;i++)
     {
      c = (mrk[i]*50)/max;
   
      for(k=0;k<3;k++)
      {
  if(k==1)
  { printf("\n Case #%d      ||  ",i+1); }
  else
  { printf("\n              ||  "); }

  for(j=0;j<c;j++)
    printf("*");

  if(k==1)
   printf("  %d",mrk[i]);
      }
      printf("\n");
      getch();            
     }  
     getch();
     return 0;
  }

Monday, June 11, 2012

Finding Norm of Matrix


#include<conio.h>
#include<stdio.h>
#include<math.h>

int main()
  {
    int i,j,m,n;
    int mat[10][10];
    double s,nm;
    printf("\n Enter the no. of rows and columns : ");
    scanf("%d %d",&m,&n);
    s = 0;
    for(i=0;i<m;i++)
    {
      printf("Row %d : ",i+1);    
       
      for(j=0;j<n;j++)
      {
        scanf("%d",&mat[i][j]);    
        s += pow(mat[i][j],2);                  
      }              
    }
    nm = sqrt(s);
    printf("\n\nThe Norm of this matrix : %lf",nm);  
    getch();
    return 0;
  }

Saturday, June 9, 2012

Finding the Saddle Point of Matrix


#include<conio.h>
#include<stdio.h>
#include<math.h>

int main()
  {
    int i,j,m,n,min;
    int mat[10][10];
    printf("\n Enter the no. of rows and columns : ");
    scanf("%d %d",&m,&n);

    for(i=0;i<m;i++)
    {
      printf("Row %d : ",i+1);            
      for(j=0;j<n;j++)
       scanf("%d",&mat[i][j]);  
    }
   
    for(i=0;i<m;i++)
    {
      min = 0;        
      for(j=1;j<n;j++)
      {
        if(mat[i][min] > mat[i][j])
         min = j;            
      }    
      for(j=0;j<m;j++)
      {
        if(mat[j][min] > mat[i][min])
         break;                            
      }
      printf("\n Row %d : ",i+1);
      if(j == m)
       printf("Saddle point exists at Column %d",min+1);
      else
       printf("Saddle point doesn't exists");    
    }    
    getch();
    return 0;
  }

Wednesday, June 6, 2012

Finding Skew-Symmetric Matrix


#include<conio.h>
#include<stdio.h>
#include<math.h>

int main()
  {
    int i,j,m,n,min;
    int mat[10][10];
    do
    {
    printf("\n Enter the no. of rows and columns : ");
    scanf("%d %d",&m,&n);
    }while(m!=n);

    for(i=0;i<m;i++)
    {
      printf("Row %d : ",i+1);          
      for(j=0;j<n;j++)
       scanf("%d",&mat[i][j]);  
    }
 
    for(i=1;i<m;i++)
    {        
     for(j=0;j<i;j++)
     {
       if(mat[i][j] != -mat[j][i])
        break;            
     }  
    }  
 
    if(i == m && j+1 == i)
     printf("\n\nIt is a Skew-Symmetric Matrix");
    else
     printf("\n\nIt is not a Skew-Symmetric Matrix");
    getch();
    return 0;
  }

Monday, June 4, 2012

Finding Symmetric Matrix


#include<conio.h>
#include<stdio.h>
#include<math.h>

int main()
  {
    int i,j,m,n,min;
    int mat[10][10];
    do
    {
    printf("\n Enter the no. of rows and columns : ");
    scanf("%d %d",&m,&n);
    }while(m!=n);

    for(i=0;i<m;i++)
    {
      printf("Row %d : ",i+1);          
      for(j=0;j<n;j++)
       scanf("%d",&mat[i][j]);  
    }
 
    for(i=1;i<m;i++)
    {        
     for(j=0;j<i;j++)
     {
       if(mat[i][j] != mat[j][i])
        break;            
     }  
    }  
 
    if(i == m && j+1 == i)
     printf("\n\nIt is a Symmetric Matrix");
    else
     printf("\n\nIt is not a Symmetric Matrix");
    getch();
    return 0;
  }

Thursday, May 31, 2012

Finding the Equivalent Number at the Given Base


#include<stdio.h>
#include<conio.h>
#include<math.h>

int main()
{
  int i,b,e,tmp,nod=0;
  scanf("%d %d",&b,&e);
  tmp = b;
  while(tmp)
  {
    nod++;      
    tmp = tmp/e;          
  }
  printf("\n");
  while(nod>0)
  {  
   nod--;  
   tmp = 1;      
   for(i=0;i<nod;i++)
    tmp *= e;
   if(e != 16)
    printf("%d",b/tmp);
   else
   printf("%X",b/tmp);
 
   b %= tmp;      
  }
  getch();
  return 0;
}

Tuesday, May 29, 2012

Writing the Given Number in alphabets


#include<stdio.h>
#include<conio.h>
#include<math.h>

int main()
{
  int i,b,tmp,nod=0;
  scanf("%d",&b);
  tmp = b;
  while(tmp)
  {
    nod++;      
    tmp = tmp/10;          
  }
  printf("\n");
  while(nod>0)
  {  
   nod--;  
   tmp = 1;      
   for(i=0;i<nod;i++)
    tmp *= 10;
   switch(b/tmp)
   {
     case 0 : printf("Zero "); break;
     case 1 : printf("One "); break;
     case 2 : printf("Two "); break;
     case 3 : printf("Three "); break;
     case 4 : printf("Four "); break;
     case 5 : printf("Five "); break;
     case 6 : printf("Six "); break;
     case 7 : printf("Seven "); break;
     case 8 : printf("Eight "); break;
     case 9 : printf("Nine "); break;
     default: break;              
   }  
   b %= tmp;      
  }
  getch();
  return 0;
}

Sunday, May 27, 2012

Finding a 4-Digit Perfect Square Number of order AABB


#include<stdio.h>
#include<conio.h>
#include<math.h>

int main()
{
  int a=1,b=0,i,nm,nms;
  while(1)
  {
   
    nm = 0;
    for(i=1;i<=4;i++)
    {
     if(i<=2)              
      nm = nm*10 + a;
     else
      nm = nm*10 + b;
    }      
    nms = sqrt(nm);
    if(nm==(nms*nms))
    {
     printf("%d is Perfect Square Number of order AABB",nm);                    
     break;  
    }
    else
    {
     b = (++b)%10;
    if(b == a)
     b = (++b)%10;  
    if(b==0)
     ++a;  
    }
  }
  getch();
  return 0;
}

Sunday, May 13, 2012

Shamir's Secret Algorithm


#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#define max 6


int coef[max];
int mat[max][max];
int m;
int r;
int n;
int t;

struct key
{
 int x;
 int y;
}ky[max];

struct lag_poly
{
 float xc[max];
 int y;
 int x;
}lp[max+1];

int tmpx[max+1][max];
int tmp;

void in_dat()
{
 n = max;
 printf("\n Enter 't' : ");
 scanf("%d",&t);
 printf("\n Enter the secret 'm' : ");
 scanf("%d",&m);
 coef[0] = m;
 for(int i=1;i<t;i++)
 {
  printf("\n Enter coefficient for x^%d : ",i);
  scanf("%d",&coef[i]);
 }
}


void make_ply()
{
 int pw;
 for(int i=0;i<n;i++)
 {
  ky[i].y = 0;
  printf("\n\t Key %d\n Enter 'x%d': ",i+1,i);
  scanf("%d",&ky[i].x);
  for(int j=0;j<t;j++)
   ky[i].y += (coef[j]*pow(ky[i].x,j));
  printf("\n\t Key (x%d,y%d) : (%d,%d)",i,i,ky[i].x,ky[i].y);
 }
 getch();
}

void obt_ply(int opt)
{
 tmp=0;
 for(int i=0;i<t;i++)
 {
  if(i != opt)
  {
   tmpx[tmp][0] = (-1)*lp[i].x;
   tmpx[tmp][1] = 1;
   tmpx[tmp][2] = 0;
   for(int j=3;j<max;j++)
     tmpx[tmp][j] = 0;
   printf("\n%d\n",tmp);
   for(j=0;j<max;j++)
    printf(" %d",tmpx[tmp][j]);
   tmp++;
  }
 }
 for(int j=0;j<max;j++)
  tmpx[max][j] = 0;

 printf("\n tmp=%d\n",tmp);
 int in=0;
 while(in < tmp-1)
 {
  for(i=0;i<max;i++)
  {
   for(j=0;j<max;j++)
   {
    tmpx[max][i+j] +=  (tmpx[in][i] * tmpx[in+1][j]);
   }
  }
   printf("\n .. \n");
   for(j=0;j<max;j++)
    printf(" %d",tmpx[max][j]);
   getch();

  ++in;

   for(i=0;i<max;i++)
   {
    tmpx[in][i] = tmpx[max][i];
    tmpx[max][i] = 0;
   }
 }

  int prd = 1;
  for(i=0;i<t;i++)
  {
   if(i != opt)
    prd *= (lp[opt].x-lp[i].x);
  }

  printf("\n ..... res .......\n");
  for(j=0;j<max;j++)
  {
   lp[opt].xc[j] = (float) tmpx[in][j]/prd;
   printf(" %f",lp[opt].xc[j]);
  }
}

void lagrange()
{
 clrscr();
 int op;
 for(int i=0;i<t;i++)
 {
  printf("\n Enter Key to be regenerated :");
  scanf("%d",&op);
  lp[i].y = ky[op-1].y;
  lp[i].x = ky[op-1].x;

  for(int j=0;j<max;j++)
   lp[i].xc[j] = 0.0;
 }


 for(i=0;i<t;i++)
  obt_ply(i);

 for(int j=0;j<max;j++)
   lp[t].xc[j] = 0.0;

 for(i=0;i<t;i++)
 {
  for(j=0;j<max;j++)
   lp[t].xc[j] += (lp[i].y*lp[i].xc[j]);
 }

  getch();
  printf("\n\n\n\n .. Ans ...\n\n");
  for(j=0;j<max;j++)
   printf(" %f",lp[t].xc[j]);

 r = (int) (lp[t].xc[0]+0.5);
 printf("\n %d\n",r);
}

void main()
{
 clrscr();
 in_dat();
 make_ply();
 lagrange();
 getch();
}

Tuesday, May 8, 2012

Haar Wavelet Image Compression





#include <iostream>
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <graphics.h>
#define PI 3.14

using namespace std;

void paint(int a,int b,int value)
{
     for(int i=0;i<20;i++)
     {
          for(int j=0;j<20;j++)
             putpixel(20*a+i,20*b+j,COLOR(int(value)%255,int(value)%255,int(value)%255));
     }
}

 void haar(int imgdata[][8],int wt,int ht,int numlevel)
    {
        int htrnsr[ht][wt], htrnsc[ht][wt], htindex;
        for(int level=1;level<=numlevel ;level++)
        {
            for(int i=0;i<ht;i++)
            {
                htindex=0;
                for(int j=0;j<wt;j+=2)
                {
                    htrnsr[i][htindex]=(imgdata[i][j]+imgdata[i][j+1])/2;
                    htrnsr[i][htindex+wt/2]=imgdata[i][j]-imgdata[i][j+1];
                    htindex++;
                }
            }
            for(int i=0;i<wt;i++)
            {
                htindex=0;
                for(int j=0;j<ht;j+=2)
                {
                    htrnsc[htindex][i]=(htrnsr[j][i]+htrnsr[j+1][i])/2;
                    htrnsc[htindex+ht/2][i]=htrnsr[j][i]-htrnsr[j+1][i];
                    htindex++;
                }
            }
            for(int i=0;i<ht;i++)
                for(int j=0;j<wt;j++)
                    imgdata[i][j]=htrnsc[i][j];
            wt=wt>>1;            ht=ht>>1;
        }
    initwindow(160,160,"HWT");         cout<<"\n";
    cout<<"\n HWT IMAGE DATA \n";      
    for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++)
        {
            paint(i,j,imgdata[i][j]);            cout<<imgdata[i][j]<<"\t";
        }
        cout<<"\n";
    }
    }
      
int main()
{
    initwindow(160,160,"INPUT");
    
    int P[8][8]={ 12,25,21,26,20,21,24,23,
                    63,59,55,90,109,85,69,72,
                    42,49,48,143,144,144,46,43,
                    13,58,71,122,154,106,90,69,
                    67,61,68,164,166,68,68,60,
                    79,35,60,70,77,68,58,75,
                    85,81,84,89,85,81,85,83,
                    87,79,69,68,65,76,78,94};

    float F[8][8];
    
    cout<<"\n INPUT IMAGE DATA \n";   
    for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++)
        {
            paint(i,j,P[i][j]);            cout<<P[i][j]<<"\t";
        }
        cout<<"\n";
    }    
    haar(P,8,8,1);    
    while( !kbhit() ); 
    closegraph( );
    getch();
    return 0;
}


DCT Image Compression


#include <iostream>
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <graphics.h>
#define PI 3.14


using namespace std;


void paint(int a,int b,int value)
{
     for(int i=0;i<20;i++)
     {
             for(int j=0;j<20;j++)
               putpixel(20*a+i,20*b+j,COLOR(value%255,value%255,value%255));
     }
}
  
int main()
{
    initwindow(160,160,"INPUT IMAGE");
    
    float P[8][8]={ 12,25,21,26,20,21,24,23,
                    63,59,55,90,109,85,69,72,
                    42,49,48,143,144,144,46,43,
                    13,58,71,122,154,106,90,69,
                    67,61,68,164,166,68,68,60,
                    79,35,60,70,77,68,58,75,
                    85,81,84,89,85,81,85,83,
                    87,79,69,68,65,76,78,94};


    float F[8][8];
   
    cout<<"\n INPUT IMAGE DATA \n");
    for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++)
        {
            paint(i,j,P[i][j]);
            P[i][j]-=128;
            cout<<P[i][j]<<"\t";
        }
        cout<<"\n";
    }
    cout<<"\n\n NORMALIZED IMAGE DATA \n");
    initwindow(160,160,"NORMALIZED IMAGE");
    for(int i=0;i<8;i++)
        for(int j=0;j<8;j++)
            paint1(i,j,P[i][j]);
    cout<<"\n\n DCT IMAGE DATA \n");
    initwindow(160,160,"DCT IMAGE");
    for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++)
        {
            float temp=0;
            float alpha1,alpha2;
            for(int k=0;k<8;k++)
                for(int l=0;l<8;l++)
                    temp+=P[k][l]*cos((PI/8)*(k+0.5)*i)*cos((PI/8)*(l+0.5)*j);




            if(i==0)
                alpha1=0.707;
            else
                alpha1=1.0;
            if(j==0)
                alpha2=0.707;
            else
                alpha2=1.0;
            F[i][j]=0.25*alpha1*alpha2*temp;
            cout<<int(F[i][j])<<"\t";
            paint(i,j,F[i][j]);
        }
        cout<<"\n";
    }    
    while( !kbhit() ); 
    closegraph( );
    return( 0 );
}

String Comparison


#include<fstream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define TMAX 100 // Maximum Length of Text in a Text File
#define MAX 12 // Maximum Length of Text File Name


void create_file()
{
 FILE *fp;
 char fn[MAX];
 char ch;
 char text[TMAX];
 printf("Enter a filename (.txt): ");
 scanf("%s",fn);
 fflush(stdin);
 fp = fopen(fn,"w+");
 if(fp == NULL)
  printf("\n ERROR in Opening File \n");
 else
 {
 printf("\n\n Enter the text : ");
 gets(text);
 fflush(stdin);
 for(int i=0;i<strlen(text);i++)
  fputc(text[i],fp);
 printf("\n\n The Text has been written on '%s'",fn);
 }
 fclose(fp);
}


void display_file()
{
 FILE *fp;
 char fn[MAX];
 char text[TMAX];
 char ch;
 printf("Enter a filename (.txt): ");
 gets(fn);
 fflush(stdin);
 fp = fopen(fn,"r+");
 if(fp == NULL)
  printf("\n ERROR in Opening File \n");
 else
 {
 printf("\n\n The Text has been read on '%s'",fn);
 printf("\n\n The Text : ");
 while(!feof(fp))
 {
  ch = fgetc(fp);
  printf("%c",ch);
 }
 fflush(stdin);
 }
 fclose(fp);
}










void compare_files()
{
 FILE *fp1,*fp2;
 char fn1[MAX];
 char fn2[MAX];
 char ch1,ch2;
 printf("Enter a 1st filename (.txt): ");
 gets(fn1);
 fflush(stdin);
 printf("Enter a 2nd filename (.txt): ");
 gets(fn2);
 fflush(stdin);


 fp1 = fopen(fn1,"r+");
 fp2 = fopen(fn2,"r+");


 if(fp1 == NULL || fp2 == NULL || strcmp(fn1,fn2) == 0)
  printf("\n ERROR in Opening either Files \n");
 else
 {
 int ind = 0;
 printf("\n\n The Texts can be read and compared from '%s' and '%s' ",fn1,fn2);
 while((!feof(fp1)) || (!feof(fp2)))
 {
  ch1 = fgetc(fp1);
  ch2 = fgetc(fp2);
  if(ch1 != ch2)
  {
   ind = 1;
   break;
  }
 }
 if(ind == 1)
  printf("\n\n The Text of both files are distinct. ");
 else
  printf("\n\n The Text of both files are same. ");
 }
 fclose(fp1);
 fclose(fp2);
}


void main()
{
 int cho;
 do
 {
 clrscr();
 printf("\n... MENU ...\n");
 printf("\n1. Create a file ");
 printf("\n2. Display a file ");
 printf("\n3. Compare the files ");
 printf("\n Hit '0' to exit ");
 printf("\n\n Enter the option : ");
 scanf("%d",&cho);
 switch(cho)
 {
  case 1 : create_file();
     break;
  case 2 : display_file();
     break;
  case 3 : compare_files();
     break;
  default: break;
 }
 getch();
 }while(cho != 0);
}