SLIDE1

Thursday, April 30, 2015

code c++ phần mềm split and join file part,001,002

code c++ phần mềm split and join file part,001,002

danh sách liên kết kép

danh sách liên kết kép, định nghĩa struct và các hàm thành phần có trong danh sách kép

Sunday, April 26, 2015

danh sách liên kết đơn

Mỗi phần tử liên kết với phần tử đứng liền sau trong danh sách
Mỗi phần tử trong danh sách liên kết đơn là một cấu trúc có hai thành phần
Thành phần dữ liệu: Lưu trữ thông tin về bản thân phần tử
Thành phần liên kết: Lưu địa chỉ phần tử đứng sau trong danh sách hoặc bằng NULL nếu là phần tử cuối danh sách.

sắp xếp trộn run sắp xếp ngoại

 Phương pháp trộn Run
Khái niệm cơ bản:
 Run là một dãy liên tiếp các phần tử được sắp thứ tự. Ví dụ 2  4  7  12  50 là một run gồm có 5 phần tử
 Chiều dài run chính là số phần tử trong Run. Chẳng hạn, run trong ví dụ trên có chiều dài là 5.
 7 8 5 3 9 12 4 23 78 90 45 54

thư viện vector STL C++

SỬ DỤNG STL VECTOR TRONG C++
Nguyễn Trí Hải
11520094
KHMT06

I) Giới thiệu:
Lớp mảng động vector<T>có sẵn trong thư viện chuẩn STL của C++ cho phép định nghĩa một mảng động các phần tử kiểu T, vector có các tính chất sau:
- Không cần phải khai báo kích thước của mảng vector có thể tự động cấp phát bộ nhớ, bạn sẽ không phải quan tâm đến quản lý kích thước của nó.
- Vector còn có thể cho bạn biết số lượng các phần tử mà bạn đang lưu trong nó.
- Vector có các phương thức của stack.
- Hỗ trợ tất cả các thao tác cơ bản như chèn ,xóa, sao chép ..

cơ bản thư viện vector STL C++

khai báo thư viện
#include<vector>
using namespace std;
vector <int> a; khai báo 1 vector kiểu int.không cần khai báo số phần tử của vector, nó sẽ tự nâng bộ nhớ lên. hoặc nếu muôn có thể khai bao như sau
vetor <int> a(10); khai báo 1 vector có 10 phần tử.mặc dù khai báo 10 phần tử như vậy nhưng nó hoàn toàn có thể tự nâng lên khi ta sử dụng hơn.
*các kiểu khai bai báo mặc định giá trị ban đầu cho vector:
vector <int> a(10,2); khai báo vector có 10 phần tử và các phần tủ có giá trị ban đầu là 2;
vector <int> a(vector b); tạo vector a là bản sao của vactor b
vector <int> a(vector b.begin(),b.begin()+5); sao chép vào vector a 5 phần tử dầu tiên của vector b;
[] : phép lấy chỉ số hoàn toàn giống với mảng

Friday, April 24, 2015

cơ bản về thư viện string - STL C++



khai báo thư viện string STL
#include<string>
using namespace std;
string s;
+,+= : phép nối chuỗi.
s="tran khanh toan" : phép gán chuỗi
==,!=,>=,>,<,<= : các phép so sánh chuỗi
[] : phép lấy chỉ số để duyệt các ký tự của chuỗi
s.length() : lấy chiều dài của chuỗi
cout<< và cin>> trong iostream để xuất chuỗi ra màn hình, riêng cin thì chỉ lấy chuỗi đến khi gặp khoản trắng thì dừng

tính giá trị biểu thức toán học bất kỳ, giống máy tính casio

lập trình c/c++ tính giá trị của 1 biểu thức bất kỳ, giông máy tính casio

#include<iostream>
#include<time.h>
using namespace std;
long tinh(char *s)
{
 char a[100],dau[100],b[100],e[100];
 int i,d=0;
 for(i=0;i<strlen(s);i++) if(s[i]=='+' || s[i]=='-' || s[i]=='*' || s[i]=='/' || s[i]=='(' || s[i]==')') dau[d++]=s[i];
 if(d==0) return atol(s);
 for(i=0;i<d;i++) 
 {
  if(dau[i]!='*' && dau[i]!='/') 
  {
   int m,j;
   char c;
   for(m=0;m<strlen(s);m++)
   {
    if(s[m]=='+' || s[m]=='-' || s[m]=='('){c=s[m]; break;}
    a[m]=s[m];
   }
   a[m]='\0';
   if(c=='+' || c=='-')
   {
    int dd=0;
    for(j=m+1;j<strlen(s);j++) b[dd++]=s[j];
    b[dd]='\0';
    if(c=='+') return tinh(a)+tinh(b);
    else
    {//doi dau chuoi b
     j=0;
     while(j<strlen(b))
     {
      while(b[j]!='(' && j<strlen(b))
      {
       if(b[j]=='+') b[j]='-';
       else if(b[j]=='-') b[j]='+';
       j++;
      }
      j++;dd=1;
      while(j<strlen(b))
      {
       if(b[j]=='(') dd++;
       if(b[j]==')') dd--;
       if(dd==0) break;
       j++;
      }
      j++;
     }
     return tinh(a)-tinh(b);
    }
   }
   else if(c=='(')
   {
    char c1,c2,c3,a1[100],a2[100],a3[100],a4[100];
    int p1,p2,p3,p4,dem=1;
    p1=m;p2=p1+1;
    while(p2<strlen(s))
    {
     if(s[p2]=='(') dem++;
     else if(s[p2]==')') dem--;
     if(dem==0) break;
     p2++;
    }
    p4=0;
    for(p3=p1+1;p3<p2;p3++) a2[p4++]=s[p3];
    a2[p4]='\0';

    p1--;
    c1=s[p1];
    for(p3=0;p3<p1;p3++) a1[p3]=s[p3];
    a1[p3]='\0';

    c2=s[p2+1];
    if(c2=='*' || c2=='/')
    {
     p2+=2;
     p4=0;
     loop:;
     while(p2<strlen(s) && s[p2]!='-' && s[p2]!='+' && s[p2]!='(') a3[p4++]=s[p2++];
     if(s[p2]=='(')
     {
      p3=p2+1;
      dem=1;
      while(p3<strlen(s))
      {
       if(s[p3]=='(') dem++;
       else if(s[p3]==')') dem--;
       if(dem==0) break;
       p3++;
      }
      for(p1=p2;p1<=p3;p1++) a3[p4++]=s[p1];
      p2=p3+1;
      goto loop;
     }
     a3[p4]='\0';
     c3=s[p2];
     p2++;p4=0;
     while(p2<strlen(s)) a4[p4++]=s[p2++];
     a4[p4]='\0';
    }
    else
    {
     c3=c2;
     a3[0]='\0';
     p4=0;p2+=2;
     while(p2<strlen(s)) a4[p4++]=s[p2++];
     a4[p4]='\0';
    }
    if(c3=='-')
    {
     p4=0;
     while(p4<strlen(a4))
     {
      while(a4[p4]!='(' && p4<strlen(a4))
      {
       if(a4[p4]=='+') a4[p4]='-';
       else if(a4[p4]=='-') a4[p4]='+';
       p4++;
      }
      p4++;dem=1;
      while(p4<strlen(a4))
      {
       if(a4[p4]=='(') dem++;
       if(a4[p4]==')') dem--;
       if(dem==0) break;
       p4++;
      }
      p4++;
     }
    }
    long k=tinh(a2);
    if(strlen(a1)>0)
    {
     if(c1=='*') k=tinh(a1)*k;
     else if(c1=='/') k=tinh(a1)/k;
    }
    if(strlen(a3)>0)
    {
     if(c2=='*') k=k*tinh(a3);
     else if(c2=='/') k=k/tinh(a3);
    }
    if(strlen(a4)>0)
    {
     if(c3=='+') k=k+tinh(a4);
     else if(c3=='-') k=k-tinh(a4);
    }
    return k;
   }
  }
 }
 char c;
 for(i=0;i<strlen(s);i++)
 {
  if(s[i]=='*' || s[i]=='/') break;
  a[i]=s[i];
 }
 a[i]='\0';
 long kq=atol(a);
 c=s[i];
 i++;
 while(i<strlen(s))
 {
  d=0;
  while(s[i]!='*' && s[i]!='/' && i<strlen(s)) a[d++]=s[i++];
  a[d]='\0';
  if(c=='*') kq*=atol(a);
  else kq/=atol(a);
  c=s[i];
  i++;
 }
 return kq;
}
void xuly(char *s,int x)
{
 char a[100],b[100];
 int i,j,m;
 ltoa(x,a,10);
 if(s[0]=='x')
 {
  for(i=0;i<strlen(a);i++) b[i]=a[i];
  for(j=1;j<strlen(s);j++) b[i++]=s[j];
  b[i]='\0';
  for(i=0;i<strlen(b);i++) s[i]=b[i];
  s[i]='\0';
 }
 for(i=1;i<strlen(s);i++)
 {
  if(s[i]=='x')
  {
   if(s[i-1]>='0' && s[i-1]<='9')
   {
    for(j=0;j<i;j++) b[j]=s[j];
    b[j++]='*';
    for(m=0;m<strlen(a);m++) b[j++]=a[m];
    for(m=i+1;m<strlen(s);m++) b[j++]=s[m];
    b[j]='\0';
    for(j=0;j<strlen(b);j++) s[j]=b[j];
    s[j]='\0';
   }
   else
   {
    for(j=0;j<i;j++) b[j]=s[j];
    for(m=0;m<strlen(a);m++) b[j++]=a[m];
    for(m=i+1;m<strlen(s);m++) b[j++]=s[m];
    b[j]='\0';
    for(j=0;j<strlen(b);j++) s[j]=b[j];
    s[j]='\0';
   }
  }
 }
}
void bang(char *a,char *b)
{
 int i;
 for(i=0;i<strlen(b);i++) a[i]=b[i];
 a[i]='\0';
}
void main()
{
 FILE *t1=fopen("bai1.inp","r");
 FILE *t2=fopen("bai1.out","w");
 if(t1==NULL || t2==NULL) exit(0);
 char s[1000],a[1000];
 long n,x,gt;
 fgets(s,100,t1);
 fscanf(t1,"%ld",&n);
 for(int i=1;i<=n;i++)
 {
  bang(a,s);
  fscanf(t1,"%ld",&x);
  xuly(a,x);
  gt=tinh(a);
  fprintf(t2,"%ld ",gt);
 }
 fcloseall();
}

Wednesday, April 22, 2015

tạo lập đối tượng trong c++

*tạo lập đối tượng
Khai báo và tạo đối tượng:
<tên lớp>  <tên đối tượng>;
Gọi hàm thành phần của lớp
<tên đối tượng>.<tên hàm thành phần> (<danh sách các tham số nếu có>);
<tên con trỏ đối tượng><tên hàm thành phần> (<danh sách các tham số nếu có>);

lớp class trong lập trình c++

Một lớp bao gồm các thành phần dữ liệu (thuộc tính) và các phương thức (hàm thành phần).
Lớp trong C++ thực chất là một kiểu dữ liệu do người sử dụng định nghĩa.
Trong C++, dùng từ khóa class để chỉ điểm bắt đầu của một lớp sẽ được cài đặt.
Lớp là một mô tả trừu tượng của nhóm các đối tượng cùng bản chất, ngược lại mỗi một đối tượng là một thể hiện cụ thể cho những mô tả trừu tượng đó.
Lớp là cái ta thiết kế và lập trình

Sunday, April 19, 2015

[C++] điều khiển robot trong bản đồ Oxy U-D-L-R-T-B


Robot đang đứng ở vị trí 0 0 trong bản đồ. Robot có thể nhận các lệnh L: về phía bên trái, R: về bên phải, U: tiến về phía trước, D: lùi ra sau, B: quay lại vị trí trước đó (lưu ý, nếu robot đã thực hiện lênh U, R, sau đó nhận lệnh B, B thì robot sẽ thực hiện lệnh L, D, còn nếu robot chưa thực hiện lệnh nào thì lệnh B sẽ không có tác dụng) và lệnh T (turn around, lệnh này sẽ đọc thêm lệnh tiếp theo và khiến robot quay 180 độ về phía sau nếu lệnh tiếp theo là D, quay 90 độ theo kim đồng hồ nếu lệnh tiếp theo là R, quay 90 độ ngược kim đồng hồ nếu lệnh tiếp theo là L, khiến robot đứng yên không di chuyển nếu lệnh tiếp theo là B hay U.)
Ban đầu robot đang quay lên trên
Hãy tìm tọa độ của robot sau khi thực hiện xong n chuỗi lệnh. (robot sẽ vẫn giữ nguyên vị trí và hướng quay sau khi thực hiện xong 1 chuỗi lệnh)
Input
N (N<100)
N dòng, mỗi dòng là 1 chuỗi lệnh cho robot (mỗi dòng <255 kí tự)
(40% test sẽ không có lệnh T)
Output
N dòng, mỗi dòng là tọa độ robot sau khi thực hiện chuỗi lệnh của dòng tương ứng
Ví Dụ:
Input:
4
UDLRTBBBBTUTRTLTDU
UUUU
TLUUUU
BBBB
Output:
0 0
0 -4
4 -4
0 -4

#include<iostream>
using namespace std;
struct diem{int x,y,z;};
void tinh(char *s,diem &x,char *a,int &j)
{
int i=0;
while(i<strlen(s))
{
if(s[i]=='U')
{
if(x.z==0)
{
x.y++;
a[j++]=s[i++];
}
else if(x.z==1)
{
x.x++;
a[j++]=s[i++];
}
else if(x.z==2)
{
x.y--;
a[j++]=s[i++];
}
else if(x.z==3)
{
x.x--;
a[j++]=s[i++];
}
}
else if(s[i]=='D')
{
if(x.z==0)
{
x.y--;
a[j++]=s[i++];
}
else if(x.z==1)
{
x.x--;
a[j++]=s[i++];
}
else if(x.z==2)
{
x.y++;
a[j++]=s[i++];
}
else if(x.z==3)
{
x.x++;
a[j++]=s[i++];
}
}
else if(s[i]=='L')
{
if(x.z==0)
{
x.x--;
a[j++]=s[i++];
}
else if(x.z==1)
{
x.y++;
a[j++]=s[i++];
}
else if(x.z==2)
{
x.x++;
a[j++]=s[i++];
}
else if(x.z==3)
{
x.y--;
a[j++]=s[i++];
}
}
else if(s[i]=='R')
{
if(x.z==0)
{
x.x++;
a[j++]=s[i++];
}
else if(x.z==1)
{
x.y--;
a[j++]=s[i++];
}
else if(x.z==2)
{
x.x--;
a[j++]=s[i++];
}
else if(x.z==3)
{
x.y++;
a[j++]=s[i++];
}
}
else if(s[i]=='T')
{
if(s[i+1]=='B' || s[i+1]=='U') i=i+2;
else
{
i++;
if(s[i]=='L')
{
x.z--;
if(x.z==-1) x.z=3;
}
else if(s[i]=='R')
{
x.z++;
if(x.z==4) x.z=0;
}
else if(s[i]=='D') x.z=(x.z+2)%4;
i++;
}
}
else if(s[i]=='B')
{
if(j==0) i++;
else if(j>0)
{
j--;
if(a[j]=='U')
{
if(x.z==0)
{
x.y--;
i++;

}
else if(x.z==1)
{
x.x--;
i++;

}
else if(x.z==2)
{
x.y++;
i++;

}
else if(x.z==3)
{
x.x++;
i++;

}
}
else if(a[j]=='D')
{
if(x.z==0)
{
x.y++;
i++;

}
else if(x.z==1)
{
x.x++;
i++;

}
else if(x.z==2)
{
x.y--;
i++;

}
else if(x.z==3)
{
x.x--;
i++;

}
}
else if(a[j]=='L')
{
if(x.z==0)
{
x.x++;
i++;

}
else if(x.z==1)
{
x.y--;
i++;

}
else if(x.z==2)
{
x.x--;
i++;

}
else if(x.z==3)
{
x.y++;
i++;

}
}
else if(a[j]=='R')
{
if(x.z==0)
{
x.x--;
i++;

}
else if(x.z==1)
{
x.y++;
i++;

}
else if(x.z==2)
{
x.x++;
i++;

}
else if(x.z==3)
{
x.y--;
i++;
}
}
}
}
else i++;
}
}
void main()
{
FILE *t1=fopen("bai2.inp","r");
FILE *t2=fopen("bai2.out","w");
if(t1==NULL || t2==NULL) exit(0);
char s[300],a[300];
int i,n,j=0;
fgets(s,4,t1);
n=atoi(s);
diem x;
x.x=x.y=x.z=0;
for(i=0;i<n;i++)
{
fgets(s,300,t1);
tinh(s,x,a,j);
fprintf(t2,"%d %d\n",x.x,x.y);
}
fcloseall();

}

Friday, April 10, 2015

Viết định nghĩa lớp TamGiac ,quay, tịnh tiến, phóng thu






Viết định nghĩa lớp TamGiac để biểu diễn khái niệm tam giác trong mặt phẳng với các phương thức thiết lập, huỷ bỏ (nếu có). Các hàm thành phần nhập, xuất, tịnh tiến, quay, phóng to, thu nhỏ và vẽ tam giác (tùy chọn).
Tịnh tiến theo vector v (a,b) : x’= x +a; y’=y+b;
Phép quay tâm O, góc quay α
x’ = xcosα – y sinα;

y’= xsinα  + ycosα;

diem.h

#pragma once
#include<iostream>
using namespace std;
class diem
{
private:
float x,y;
public:
diem();
diem(float,float);
~diem(void);
void nhap();
void xuat();
void setx(float);
void sety(float);
diem vector(diem);
float getx();
float gety();
void setxy(float,float);
void tinhtien(float=0,float=0);
void quay(float);
};


tamgiac.h

#pragma once
#include"diem.h"
class tamgiac
{
private:
diem A,B,C;
public:
tamgiac();
tamgiac(diem,diem,diem);
~tamgiac(void);
void nhap();
void xuat();
void tinhtien(float=0,float=0);
void quay(float);
void thuphong(float);
};


diem.cpp

#include "diem.h"
diem::diem()
{
}
void diem::setx(float a)
{
x=a;
}
void diem::sety(float a)
{
y=a;
}
float diem::getx()
{
return x;
}
float diem::gety()
{
return y;
}
void diem::setxy(float a,float b)
{
x=a;
y=b;
}
diem::diem(float a,float b)
{
x=a;y=b;
}
void diem::nhap()
{
cout<<"\nhoanh do x=";cin>>x;
cout<<"tung do y=";cin>>y;
}
void diem::xuat()
{
cout<<"( "<<x<<" , "<<y<<" )";
}
diem::~diem(void)
{
}
void diem::tinhtien(float a,float b)
{
x+=a;
y+=b;
}
void diem::quay(float rad)
{
x=x*cos(rad)+y*sin(rad);
y=x*sin(rad)+y*cos(rad);
}
diem diem::vector(diem a)
{
diem t;
t.setx(a.getx()-x);
t.sety(a.gety()-y);
return t;
}

tamgiac.cpp

#include "tamgiac.h"

tamgiac::tamgiac()
{
}
tamgiac::tamgiac(diem x,diem y,diem z)
{
A=x;B=y;C=z;
}
tamgiac::~tamgiac(void)
{
}
void tamgiac::nhap()
{
int kt;
do{
kt=0;
cout<<"\nnhap dinh A";
A.nhap();
cout<<"\nnhap dinh B";
B.nhap();
cout<<"\nnhap dinh C";
C.nhap();
diem d,e;
d=A.vector(B);
e=A.vector(C);
if(float(d.getx()*e.gety())==float(d.gety()*e.getx()))
{
kt=1;
cout<<"\ntam giac khong ton tai! nhap lai!";
}
cout<<"\n";
}while(kt);
}
void tamgiac::xuat()
{
cout<<"\ntam giac tao boi 3 diem: ";
A.xuat();cout<<" , ";B.xuat();cout<<" , ";C.xuat();
}
void tamgiac::tinhtien(float m,float n)
{
A.tinhtien(m,n);
B.tinhtien(m,n);
C.tinhtien(m,n);
}
void tamgiac::quay(float rad)
{
A.quay(rad);
B.quay(rad);
C.quay(rad);
}
void tamgiac::thuphong(float k)
{
A.setxy(A.getx()*k,A.gety()*k);
B.setxy(B.getx()*k,B.gety()*k);
C.setxy(C.getx()*k,C.gety()*k);
}

main.cpp

#include"tamgiac.h"
void main()
{
float x,y,rad,k;
tamgiac a;
a.nhap();
a.xuat();
cout<<"\n\ntinh tien theo vector v(x,y):\nx=";cin>>x;
cout<<"y=";cin>>y;
a.tinhtien(x,y);
a.xuat();
cout<<"\nquay goc: rad=";cin>>rad;
a.quay(rad);
a.xuat();
cout<<"\nnhap he so thu phong k=";cin>>k;
a.thuphong(k);
a.xuat();
system("pause");
}