Tổng hợp bài tập và bài giải C/C++ (P3)

Print

1:Chuyển số La Mã sang số Ả rập

Code:

#include <iostream>

#include <conio.h>

#include <string.h>

int doigt(char chuoi[],int i);

void loi();

 

void main()

{

        char chuoi[20];

        cout<<"Nhap chuoi:";

        cin.get(chuoi,20);

        int nam=0;

        for(int i=0;i<strlen(chuoi);i++)

        nam+=doigt(chuoi,i);

        cout<<nam<<endl;

   getch();

}

int doigt(char chuoi[],int i)

{

        if(!(chuoi[i]=='I'||chuoi[i]=='V'||chuoi[i]=='X'||chuoi[i]=='L'||chuoi[i]=='C'||chuoi[i]=='D'||chuoi[i]=='M'))

               loi();

   if(chuoi[i]==chuoi[i+1]&&chuoi[i]==chuoi[i+2]&&chuoi[i]==chuoi[i+3])

        loi();

   if(chuoi[i]=='I')

        if(chuoi[i+1]=='V'||chuoi[i+1]=='X')

      {

        if(chuoi[i+2]=='V'||chuoi[i+2]=='X')

               loi();

         else

               return -1;

      }

      else

        return 1;

        if(chuoi[i]=='V')

        return 5;

        if(chuoi[i]=='X')

        if(chuoi[i+1]=='L'||chuoi[i+1]=='C')

         {

               if(chuoi[i+2]=='L'||chuoi[i+2]=='C')

                loi();

            else

                       return -10;

         }

          else

             return 10;

     if(chuoi[i]=='L')

               return 50;

     if(chuoi[i]=='C')

               if(chuoi[i+1]=='D'||chuoi[i+1]=='M')

               {

             if(chuoi[i+2]=='D'||chuoi[i+2]=='M')

                loi();

             else

                 return -100;

         }

         else

               return 100;

       if(chuoi[i]=='D')

               return 500;

        if(chuoi[i]=='M')

               return 1000;

   }

void loi()

{

    cout<<"Day so tren khong hop le."<<endl;

}

2:Chuyển năm sang số La Mã

Code:

#include <iostream>

#include <math.h>

void viet(char a,char b,char c,int so);

void kytu(char &a,char &b,char &c,int so);

void main()

{

        char x,y,z;

        int nam;

        do

        {

               cout<<"Nhap nam(nho hon 4000): ";

               cin>>nam;

        } while(nam>=4000||nam<0);

        cout<<"Nam "<<nam<<" viet trong he La Ma la: ";

        int tam=nam;

        int i=3;

        while(tam!=0)

        {

               tam=tam/pow(10.0,i);

               kytu(x,y,z,i);

               viet(x,y,z,tam);

               tam=fmod(nam,pow(10.0,i));

               i--;

        }

        cout<<endl;

}

void kytu(char &a,char &b,char &c,int i)

{

        if(i==0)

        {

               a='I';b='V';c='X';

        }

        else if(i==1)

        {

               a='X';b='L';c='C';

        }

        else if(i==2)

        {

               a='C';b='D';c='M';

        }

        else if(i==3)

        a='M';

}

void viet(char a,char b,char c,int so)

{

        if(so==1||so==2||so==3)

        for(int i=1;i<=so;i++)

        cout<<a;

        if(so==4)

               cout<<a<<b;

        if(so==5)

               cout<<b;

        if(so==6||so==7||so==8)

        {

               cout<<b;

               for(int i=1;i<=so-5;i++)

                       cout<<a;

        }

        if(so==9)

        cout<<a<<c;

}

 

3:Thuật toán sắp xếp bẳng Radix sort

Code:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <conio.h>

////Radix sort

int getMax(int a[],int n)

{

        int max=a[0];

        for(int i=1;i<n;i++)

               if(max<a[i])

                       max=a[i];

        return max;

}

int countDigit(int n)

{

        int count=0;

        while(n)

        {

               count++;

               n/=10;

        }

        return count;

}

int getDigit(int n,int t)

{

        int tt=1;

        for(int i=0;i<t;i++)tt*=10;

        return ((n/tt)%10);

}

void send2Box(int a[],int n,int *b[10],int num[10],int t)

{

        for(int i=0;i<n;i++)

        {

               int tt=getDigit(a[i],t);

               b[tt][num[tt]++]=a[i];

        }

}

void getValue(int a[],int *b[10],int nn[10])

{

        int j=0;

        for(int i=0;i<10;i++)

        {

               if(nn[i]!=0)

               {

                       for(int k=0;

                       k<nn[i];

                       k++)a[j++]=b[i][k];

                       nn[i]=0;

               }

        }

}

void radixsort(int a[],int n)

{

        int *Box[10];

        int number[10];

        for(int i=0;i<10;i++)

        {

               Box[i]=new int [n];

               if(Box[i]==NULL)

               {

                       printf("Not enough");

                       exit(0);

               }

               number[i]=0;

         }

        int nn=countDigit(getMax(a,n));

        for(int i=0;i<nn;i++)

        {

               send2Box(a,n,Box,number,i);

               getValue(a,Box,number);

        }

}

void xuat(int a[], int n)

{

        int i=0;

        printf("\n\t");

        for (i=0;i<n;i++)

        {

               printf("%-6d",a[i]) ;

               if ((i+1) % 10 == 0)

               printf("\n\t");

        }

}

void main()

{

        clrscr();

        int i,n,A[100];

        do

        {

               printf("\n\tNhap so phan tu mang\n\t( n>0 va n<=100) : ");

               scanf("%d",&n);

               }while (n<0||n>100);

        for (i=0;i<n;i++)

        {

               printf("Nhap A[%d]=",i);

               scanf("%d",&A[i]);

        }

        printf("\n\tMang moi nhap vao:\n");

        xuat(A,n);

        printf("\n\n\tMang da sap xep :\n");

        radixsort(A,n);

        xuat(A,n);

 getch();

}

4:Danh sách liên kết đơn (Thuật toán vừa chèn vừa sắp xếp)

PHP Code:

#include <iostream.h>
#include <conio.h>

class Node
{
    private:
        
float data;   
        
Node *next;
    public:
        
Node()
        {
            
data 0;
            
next NULL;
        }
        
Node(float x)
        {
            
data x;
            
next NULL;
       }
        
void setnext(Node *p)
        {
            
next p;
        }
        
Node getnext()
        {
            return 
next;
        }
        
void setdata(float x)
        {
           
data x;
        }
      
float getdata()
        {
            return 
data;
        }
};

class List
{
    private:
        
Node *head;
    public:
        List()
        {
head NULL;}
        List(
Node *x)
        {
head x;}

    
void chensapxep(float x)
        
Node *p,*q;
        
= new Node(x);
        
head;
        if(
head == NULL)
        
head p;
        else
        {
            if(
p->getdata() < head->getdata())
            {
                
p->setnext(head);
                
head p;
            }
            else
            {
                while ( 
q->getnext()!= NULL)
                {
                    if ((
q->getdata()< p->getdata() && q->getnext()->getdata() >p->getdata())
                    || (
q->getdata()==p->getdata() && q->getnext()->getdata() >=p->getdata()))
                    {

                        
p->setnext(q->getnext());
                        
q->setnext(p);
                        break;
                    }
                    else
                   
q->getnext();
                }
                if (
q->getnext()==NULL)
                    
q->setnext(p);

            }
        }
    }

    
void show()
    {
        
Node *head;
       
p->getnext();
        if( 
head != NULL)
       {
            while(
!= NULL)
            {
                
cout<<p->getdata()<<" ";
                
p->getnext();
            }
        }
    }
};
void main()
{
    
float so;
    List 
p;
    do
    {
        
cout<<"Nhap vao so (nhap 0 de thoat):";
        
cin>>so;
        
p.chensapxep(so);
    }while(
so != 0);
    
p.show();
    
getch();

5:Quá tải toàn tử nhập xuất và sử dụng template

PHP Code:

/*Chuong trinh nay duoc viet de phuc vu va on tap lai cac kien thuc sau:
 qua tai toan tu nhap xuat ,su dung template de nhan moi kieu tra ve duoc
 truyen vao ,viet lop tuong trung cho tat ca cac lop can su dung khong can phai goi truc tiep .
To viet duoi dang tong quat va de hinh dung hon .Truoc qua tai toan
tu nhap xuat voi doi tuong mang gia tri thi khong co gi nhung nay qua tai
toan tu nhap xuat voi mot mang ki tu thi lai khac va duoi day la mot bai nhu the . */

#include <iostream.h>
#include <conio.h>

//viet lop cat
class cat
{
    private :
        
char name[20];
        
int age;
    public:
        
cat ()
        {
          for (
int i=0;i<20;i++)
            
name[i]='\0';
            
age=0;
        }
    
cat (char ten[] ,unsigned int tuoi)
    {
        for (
int i=0;i<20;i++)
        {
           
name[i]=ten[i];
            if (
ten[i]=='\n')
                break;
        }
        
age=tuoi;
    }
    
friend ostream operator << (ostream & ,cat &);
    
friend istream operator >> (istream & ,cat &);
};

ostream operator << (ostream out ,cat &a)
{
    
out<<a.age<<endl;
    
out<<a.name<<endl;
    return 
out;
}
istream operator >> (istream in,cat &a)
{
    
cout<<"nhap tuoi :";
    
in>>a.age;
    
in.ignore();
    
cout<<"nhap ten:";
    
in.getline(a.name,20);
    return 
in;
}

//viet lop dog
class dog
{
    private :
        
char name[20];
        
unsigned int age;
    public:
        
dog ()
        {
            for (
int i=0;i<20;i++)
            
name[i]='\0';
            
age=0;
        }
        
dog (char ten[],unsigned int tuoi)
        {
            for (
int i=0;i<20;i++)
            {
                
name[i]=ten[i];
                if (
ten[i]=='\n')
                break;
           }
            
age=tuoi;
       }
   
friend ostream operator << (ostream & ,dog &);
    
friend istream operator >> (istream & ,dog &);
};
ostream operator << (ostream out ,dog &a)
{
    
out<<a.age<<endl;
    
out<<a.name<<endl;
    return 
out;
}
istream operator >> (istream in,dog &a)
{
    
cout<<"moi nhap tuoi:";
    
in>>a.age;
    
in.ignore();
    
cout<<"moi nhap ten:";
    
in.getline(a.name,20);
    return 
in;
}

//viet lop tuong trung]
//thu qua tai toan tu nhap va xuat cho lop total nay
template <class T>
class 
total
{
    private :
        
T data;
    public:
        
total (total<T> &b)
        {
            
data=b.data;
        }
        
total (T b)
        {
            
data=b;
        }
    
friend ostream operator << (ostream & ,total<T> &);
    
friend istream operator >> (istream & ,total<T> &);
};

    
template <class T>
    
ostream operator << (ostream out ,total<T> &x)
   {
        
out<<x.data<<endl;
        return 
out;
    }
    
template <class T>
      
istream operator >> (istream in,total<T> & x)
    {
        
in>>x.data;
        return 
in;
    }

//viet phan main() cho chuong trinh

void main()
{
//truong hop 1 : thu truyen mot doi tuong khong thuoc cung lop vao cho lop tuong trung
//va su dung ham in va nhap cho no
//khai bao 1 con cat va nhap du lieu ,truyen cho doi tuong lop tuong trung sau do in ra man hinh
    
cat a;
   
cout<<"moi nhap du lieu cho cat :"<<endl;
        
cin>>a;
    
total<catb(a);
    
cout<<b;
    
//OK khong loi
    //truong kop 2: truyen vao mot doi la dog cung ra ket qua tuong tu
    //truong hop 3: truyen vao cung kieu la total
    
cat x;
    
cout<<"moi nhap du lieu cho cat:"<<endl;
    
cin>>x;
    
total<catc(x);
    
cout<<"thuc hien phep sao chep :"<<endl;
    
total<catd(c);
    
cout<<d<<endl;
    
//OK khong loi vay da thanh cong hoan toan
    
getch();
}
//Kinh nghiem rut ra tu bai nay la:
/* khi su dung template de dinh nghia toan tu nhap va xuat ta can de y rang luc xuat ra
la xuat du lieu cua doi tuong .Phai nho doi tuong duoc goi den .Khong duoc xuat ra ngay du lieu
du no la ham friend
- Khi su dung qua tai toan tu ta thay bien "in" su dung y het cin o ngoai khi goi duoc ham
get() or getline () de lay ca ki tu trong' ke ca ham ignore() cung the
- Khi qua tai ta van su dung duoc ham cout or cin o trong qua tai toan tu xuat hay nhap
Dac biet la cho nhap ten can phai tao ra mot mang dinh san khong the de mang dong ,khi khai bao mang
dong ta se bi sai khi xuat ra man hinh .Do khi do di lieu ta nhap vao nam o vung nho buffer
khi chay chuong trinh se vet het tat ca va gan cho bien hoac doi tuong khi ta goi do do'
khong lam gi duoc .
*/ 

6:Chương trình đếm số ký tự trong một chuỗi ASCII

Code:

#include <stdio.h>

#include <ctype.h>

#include<conio.h>

void main()

{

  char chuoi[80];

  int i = 0, count = 0;

 

  printf("\nNhap vao mot chuoi bat ky : ");

  gets(chuoi);

 

  while (chuoi[i] != 0)

  {

    if (isalpha(chuoi[i++]))

      count++;

  }

 

  printf("So ky tu trong chuoi = %d", count);

  getch();

}

7:Biểu diễn số dưới dạng bit

Code:

#include <stdio.h>

#include <conio.h>

void main()

{

  unsigned int mang[24], i;

  int bit[16], k, index;

  printf("\nNhap vao 23 gia tri nguyen : ");

  for (i=0; i<23; i++)

    scanf("%d",&mang[i]);

  printf("       FEDCBA9876543210");

  for (i=0; i<23; i++)

  {

     k = mang[i];

     for (index = 0; index < 16; index++)

       bit[index] = 0;

     index = 15;

     while (k)

     {

       bit[index--] = k%2;

       k /= 2;

     }

     printf("\n%5d  ",mang[i]);

     for (index=0; index<16; index++)

       if (bit[index] == 1)

         printf("*");

       else

         printf("-");

  }

  getch()

8:Đảo chuỗi

Code:

char *dnchuoi(char *s)

{

  char *tmp, i;

 

  i = 0;

  tmp = (char *)malloc(strlen(s)+1);

  while (i<strlen(s))

    *(tmp+i) = *(s + strlen(s) - i++ - 1);

    *(tmp+i) = 0;

  return tmp;

}

 

void main()

{

  char hello[] = "Hello World";

  char *s;

 

  printf("\nChuoi ban dau = %s", hello);

  s = dnchuoi(hello);

  printf("\nChuoi dao nguoc = %s", s);

  getch();

}

9:Chương trình xem tập tin

Code:

#include <stdio.h>

#include <conio.h>

 

void main()

{

  FILE *fp;

  char filename[50], s[255], *hang[1000], c;

  int nline = 0, line = 0, i;

 

  printf("\nNhap ten tap tin muon xem : ");

  gets(filename);

  if ((fp = fopen(filename,"r")) == NULL)

    printf("\nKhong the mo tap tin %s", filename);

  else

  {

    while (!feof(fp))

    {

      fgets(s, 255, fp);

      hang[nline] = (char *)malloc(strlen(s));

      strcpy(hang[nline], s+1);

      nline++;

    }

    do {

      clrscr();

      i = line;

      while (i<line+26 && i<nline)

        printf("%s", hang[i++]);

      c = getch();

      if (c == 0)

      {

        c = getch();

        switch(c)

        {

          case 72 : if (line > 0)

                      line--;

                    break;

          case 80 : if (line+25 < nline)

                      line++;

                    break;

        }

      }

    } while (c != 27);

    fclose(fp);

  }

}

10:Giải bài toán trâu ăn cỏ

PHP Code:

/* Giai bai toan co :
   Tram trau tram co
   Trau dung an nam
   Trau nam an ba
   Trau gia an mot
*/

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

void main()
{
  
int tdungtnamtgiaphuongan=0;

  for (
tdung 1tdung <= 98tdung ++)
    for (
tnam 1tnam 99 tdungtnam ++)
      for (
tgia 1tgia 99 - (tdung tnam); tgia++)
        if ((
tdung*tnam*tgia) == 100)
        {
           
printf("\nTrau dung : %5d ; Trau nam : %5d ; Trau gia : %5d",
                  
tdungtnamtgia);
           
phuongan++;
        }
  
printf("\nTong cong co %d phuong an."phuongan);
  
getch();

 

Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn

đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON

  HotLine: 0972 800 931 Ms Duyên