Thứ Hai, 30 tháng 9, 2013

Code C-C++: Các bài toán xử lý chuỗi (string) - (Phần 1)


1. Đếm có bao nhiêu khoảng trắng trong chuỗi (string)
int demkhoangtrang(char *s){
int d=0;
while(strstr(s," ")!=NULL){
   d++;
   s=strstr(s," ")+1;
}
return d;

}
2. Nhập vào một chuỗi, hãy loại bỏ những khoảng trắng thừa trong chuỗi (string).
void xoakhoangtrang(char *s){   
char *c=strstr(s,"  "); 
while(c!=NULL){
int t=strlen(s)-strlen(c);
for(int i=t;i<strlen(s);i++)
   s[i]=s[i+1];
   c=strstr(s,"  ");
}
if(s[0]==' ')
   s=s+1; //xoa khang trang dau chuoi
   int n=strlen(s);
   if(s[n-1]==' ')
   s[n-1]='\0';//xoa khoang trang cuoi chuoi
       cout<<s;  //for(int i=0;i<n;i++)

//cout<<s[i];
3. Nhập vào hai chuỗi s1 và s2, nối chuỗi s2 vào s1. Xuất chuỗi (string) s1 ra màn hình
void noichuoi(char *a,char *b){
   strcat(a,b);
   puts(a); 
}
4. Đổi tất cả các kí tự (string) có trong chuỗi thành chữ thường (không dùng hàm strlwr).
void chuthuong(char *a)
{
    for(int i=0;i<strlen(a);i++)
        if(a[i]>=65 && a[i]<=90)
            a[i]=a[i]+32;
        puts(a);                        
}
5. Đổi tất cả các kí tự (char) trong chuỗi sang chữ in hoa (không dùng hàm struppr).
void chuhoa(char *a)
{
for(int i=0;i<strlen(a);i++)
a[i]=toupper(a[i]); 
puts(a);                       
}

Code C-C++: Các bài toán sử dụng mảng 1 chiều


Các bài toán thao tác với mảng 1 chiều:
- Nhập vào 1 dãy số nguyên có n số (1<=n<=100)
- In ra màn hình các số lớn hơn 0
- Tìm max
- Tính tổng các số lớn hơn 10

#include<iostream.h> 
#include<conio.h> 
void main(){
        int a[100],n;
// Nhap so phan tu n
        do{ 
        cout<<"\n n= "; cin>>n; 
        if(n<1||n>100)   cout<<"\n Nhap lai n!";
        }while (n<1||n>100);
 // Nhap day so
        cout<<"\n Nhap day so:";
        for (int i=0; i<n;i++){
         cout<<"\n a["<<i<<"]= "; 
        cin>>a[i];  }
 // In ra cac so >=0
         cout<<"\n In ra so khong am: ";
        for (i=0;i<n;i++)
        if (a[i]>=0)
        cout<<a[i]<<", ";
 // Tim max
        int max=a[0];
        for (i=0;i<n;i++)
               if (a[i]>max) max=a[i];
               cout<<"\n Max= "<<max;
 // Tinh tong so >10
        long s=0;
        for (i=0;i<n;i++)
               if (a[i]>10) s+=a[i];  cout<<"\n Tong= "<<s;
         getch();

} 

Chủ Nhật, 29 tháng 9, 2013

Code C-C++: Tính giá trị của biểu thức: S = 2! + 4! + 6! + … + n! (với n nguyên, nhập vào từ bàn phím).


Tính giá trị của biểu thức: S = 2! + 4! + 6! + … + n! (với n nguyên, nhập vào từ bàn phím).
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
void main(){
    int n;
    cout<<"\n Nhap n="; cin>>n;
    int gt=1,s=0;
    for(int i=2; i<=n;i=i+2){
for (int j=1;j<=i;j++) gt=gt*j;
     s=s+gt;
     gt=1;
   }
    cout <<"\n Tong S="<<s;
    getch();
}

Thứ Năm, 29 tháng 8, 2013

Giải thuật sinh đường Ellipse


#include <graphics.h>
#include <conio.h>
#define ROUND(a) ((long)(a+0.5))
void plot(int xc, int yc, int x, int y, int color){
      putpixel(xc+x, yc+y, color);
      putpixel(xc-x, yc+y, color);
      putpixel(xc+x, yc-y, color);
      putpixel(xc-x, yc-y, color);
}
void Mid_ellipse(int xc, int yc, int a, int b, int color){
     long x, y, fx, fy, a2, b2, p;
     x = 0;
     y = b;
     a2 = a * a;
     b2 = b * b;
     fx = 0;
     fy = 2 * a2 * y;  
     plot(xc, yc, x,y, color);
     p = ROUND(b2-(a2*b)+(0.25*a));
     while (fx < fy){
         x++;
         fx += 2*b2;
         if (p<0)
              p += b2*(2*x +3);
        else{
              y--;
              p+= b2*(2*x +3) + a2*(-2*y +2);
              fy -= 2*a2;
       }
       plot(xc, yc, x, y, color);
       }
       p = ROUND(b2*(x+0.5)*(x+0.5) + a2*(y-1)*(y-1) - a2*b2);
       while (y>0){
              y--;
              fy -= 2*a2;
              if (p>=0)
              p+=a2*(3 - 2*y);
             else{
                x++;
                fx += 2*b2;
                p += b2*(2*x+2) + a2*(-2*y +3);
            }
        plot(xc, yc, x, y, color);
       }
}
void main(){
       int gr_drive = DETECT, gr_mode;
       initgraph(&gr_drive, &gr_mode, "");
       Mid_Ellipse(getmaxx() / 2, getmaxy() / 2, 150, 80, 4);
       getch();
       closegraph();
}

Các giải thuật sinh đường tròn trong C/C++


1. Giải thuật sinh đường tròn Bresenham:
void Bre_circle(int xc, int yc, int Radius, int color) 
     int x, y, p; 
     x = 0; 
     y = Radius; 
     p = 3 - 2 * Radius; 
while (x <= y) 
     putpixel(xc + x, yc + y, color); 
     if (p < 0) 
           p += 4 * x + 6; 
     else 
           p += 4 * (x-y) + 10; 
           y--; 
     } 
     x++;} 
}
2. Giải thuật sinh đường tròn Midpoint :
void Mid_circle(int xc, int yc, int Radius, int color) 
    int x, y, d; 
    x = 0; 
    y = Radius; 
    d = 1- Radius; 
    while (x <= y) 
    putpixel(xc + x, yc + y, color); 
         if (d< 0) 
         d +=2 * x + 3; 
        else 
           d += 2 * (x-y) + 5; 
           y--; 
        } 
       x++; 
       } 
}

Thứ Bảy, 17 tháng 8, 2013

Các thuật toán vẽ đoạn thẳng trong C/C++


1. Thuật toán vẽ đoạn thẳng thông thường: 
void dline(int x1,int y1, int x2,int y2, int color) { 
   float y; 
   int x; 
   for (x=x1; x<=x2; x++) { 
         y = y1 + (x-x1)*(y2-y1)/(x2-x1) ; 
         putpixel(x, Round(y), color ); 
   } 

2. Thuật toán DDA (Digital Differential Analizer):
void ddaline (int x1,int y1,int x2,int y2,int c){ 
   int x=x1; 
   float y=y1; 
   float k=(float)(y2-y1)/(x2-x1); 
   putpixel(x,round(y),c); 
   for(int i=x1;i<=x2;i++) { 
       x++; 
       y=y+k; 
   putpixel(x,round(y),c); 
   } 

3. Thuật toán Bresenham
/*Thuat toan Bresenham ve dthang (0<k<1) */ 
void Bre_line(int x1, int y1, int x2, int y2, int c) 
{int x, y, dx, dy,p,const1,const2; 
     y = y1; 
    dx = x2 - x1; 
    dy = y2 - y1; 
    p = 2*dy - dx; 
    const1 = 2*dy; 
    const2 = 2*(dy-dx); 
    for (x=x1; x<=x2; x++) { 
           putpixel(x, y, c); 
           if (p < 0) 
               p += const1; // p=p + 2dy 
          else { 
               p +=const2; //p=p+2dy-2dx 
               y++; 
   } 

}
4. Thuật toán Trung điểm - Midpoint 
/* Thuat toan Midpoint de ve doan thang  (0<k<1) */ 
void Mid_line(int x1, int y1, int x2, int y2, int c){ 
        int x, y, dx, dy,d; 
        y = y1; 
       dx = x2 - x1; 
       dy = y2 - y1; 
       d= dy - dx/2; 
       for (x=x1; x<=x2; x++){ 
           putpixel(x, y, c); 
           if (d <= 0) 
                d = d + dy; 
          else { 
                y ++; 
               d = d + dy - dx; 
          }} 
}

Thứ Năm, 8 tháng 8, 2013

Ly kỳ chuyện giải cứu 2 "người rừng" sau... 40 năm

Sáng 7.8, lực lượng chức năng huyện miền núi Tây Trà (Quảng Ngãi) sau nhiều giờ đồng hồ vượt khoảng 40 km đường rừng mới phát hiện, giải cứu hai "người rừng".

Theo xác định ban đầu của cơ quan chức năng, hai "người rừng" là ông Hồ Văn Thanh (82 tuổi) và con ruột Hồ Văn Lang (khoảng 41 tuổi, ở thôn Trà Kem, xã Trà Xinh, H.Tây Trà). 

Người rừng" Hồ Văn Lang dùng vỏ cây khô làm khố che thân

Do tuổi cao nên sức khỏe ông Thanh rất yếu, lực lượng chức năng phải dùng võng khiêng


Cha con ông Thanh làm nhà như tổ chim trên thân cây cổ thụ

Được biết, vào năm 1971, sau khi ngôi nhà bị trúng bom trong chiến tranh làm 3 người thân trong gia đình chết, ông Thanh quá hoảng loạn nên bỏ làng, ôm con trai Hồ Văn Lang trốn biệt vào rừng sâu. 

Để đề phòng thú dữ, cha con ông Thanh làm "nhà" giống như tổ chim treo trên thân cây cổ thụ, cách mặt đất khoảng 6 m, để trú ngụ vào ban đêm. Họ còn dùng vỏ cây khô làm khố che thân, tự chế ra các vật dụng như rìu, dao và hằng ngày ăn củ mì, bắp và lá rừng. 

Suốt 40 năm sống biệt lập với cộng đồng, ông Thanh và anh Lang không biết nói tiếng Kinh mà chỉ nói đuợc một ít tiếng Cor. 

Mới đây, trong lúc lên rừng, người dân địa phương phát hiện hai "người rừng" nên báo với chính quyền địa phương tổ chức tìm kiếm, đưa họ trở về nhà. 

Hiển Cừ

Bài đăng phổ biến