Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: Chuyển từ Pascal qua C++ thuật toán này

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    10

    Mặc định Chuyển từ Pascal qua C++ thuật toán này

    Một vài thông tin cơ bản:
    - point là 1 cấu trúc dữ liệu gồm 2 số nguyên x,y được khai báo riêng.
    - theta(point 1, point 2) là hàm xét góc giữa 2 cạnh, khai bao riêng.
    - đây là chương trình được viết trong sách, mình thấy hay nhưng chỉ hiểu sơ về lý thuyết, còn code thì khó hiểu rõ được, chỉ khoảng 80%...
    Code:
     function	wrap : interger;
    	var	i, min, M : interger;
    		minangle, v : real;
    		t : point;
    	begin
    	min := 1;
    	for i:=2 to N do if p[i].y < p[min].y then min := i;
    	M:=0; p[N+1] := p[min]; minangle := 0.0;
    	repeat
    		M := M + 1; t:= p[M]; p[M] := p[min]; p[min] := t;
    		min := N+1; v = minangle; minangle := 360.0;
    		for i := M+1 to N+1 do
    			if theta(p[M],p[i]) > v then
    				if theta(p[M],p[i]) < minangle then
    					begin min := i; minangle := theta(p[M],p[i])
    					end;
    	until min = N+1;
    	wrap := M;
    	end;
    =_________=!

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Chuối, bạn đưa cái đầu bài lên, còn dễ làm hơn đọc cái chương trình không đầu không đuôi đó.

    Tôi học cả Pascal và C++ rồi đó, nhưng cũng chẳng hiểu thế nào mà dịch đc.

  3. #3
    Ngày gia nhập
    10 2008
    Bài viết
    2

    Tui có mấy bài tập viết bang pascal muốn chuyển qua C++ mà chuối quá mong mọi người giúp.

    vẽ đồ thị hình sin:
    Program Hinh_Sin;
    uses crt, graph;
    Type
    Point_2D = record
    x, y : real;
    end;
    const
    Xmin: real=0;
    Ymin: real=0;
    Xmax: real=639;
    Ymax: real=479;
    MaxX: integer=600;
    MaxY: integer=440;
    var
    Gd, Gm, m, n : integer;
    ch : char;
    CGx, CGy, x, b, Xgoc, Ygoc: real;
    p1, p2 : Point_2D;

    procedure WTV(p : Point_2D; var q : Point_2D);
    begin
    q.x:=p.x*CGx;
    q.y:=p.y*CGy;
    end;
    procedure VTS(p : Point_2D; var q : Point_2D);
    begin
    q.x:=Xgoc+p.x;
    q.y:=Ygoc-p.y;
    end;
    procedure He_Truc;
    begin
    line(round(Xgoc), 0, round(Xgoc), GetMaxY);
    line(0, round(Ygoc), GetMaxX, round(Ygoc));
    end;
    function bp(x:real) : real;
    begin
    bp:=Sin(x);
    {
    bp:=Cos(x);
    bp:=Sqr(x);
    }
    end;
    begin
    clrscr;
    Gd:=0;
    initgraph(Gd, Gm, 'C:\TP\BGI');
    m:=0;
    directvideo:=false;
    MaxX:=GetMaxX;
    MaxY:=GetMaxY;
    b:=2*pi/360;
    Xmin:=0; Xmax:=2*pi;
    Ymin:=-1; Ymax:=1;
    if Xmin>0 then Xmin:=0;
    if Ymin>0 then Ymin:=0;
    if Xmax<0 then Xmax:=0;
    if Ymax<0 then Ymax:=0;
    CGx:=MaxX/(Xmax-Xmin);
    CGy:=MaxY/(Ymax-Ymin);
    Xmin:=CGx*Xmin;
    Xmax:=CGx*Xmax;
    Ymin:=CGy*Ymin;
    Ymax:=CGy*Ymax;
    Xgoc:=0;
    if Xgoc>Xmin then Xgoc:=round(ABS(Xmin));
    Ygoc:=0;
    if Ygoc>Ymax then Ygoc:=round(ABS(Ymax));
    He_Truc;
    x:=Xmin;
    p1.x:=x; p1.y:=bp(x);
    WTV(p1, p2);
    p1:=p2;
    VTS(p2, p2);
    moveto(round(p2.x), round(p2.y));
    repeat
    p1.x:=x; p1.y:=bp(x);
    WTV(p1, p2);
    p1:=p2;
    VTS(p2, p2);
    lineto(round(p2.x), round(p2.y));
    x:=x+b;
    until x>2*pi-Xmin+b;
    readln;
    closegraph;
    end.

    Vẽ hình lập phương 3D:
    Program H3D;
    Uses crt, graph;
    type

    diem3D=record x,y,z : real;
    end;
    diem2Dt=record x,y : real;
    end;
    diem2Dn=record x,y : integer;
    end;
    canh=record c1,c2 : diem3d;
    end;
    var
    i : integer;
    a:array[1..8] of diem3d;
    c:array[1..12] of canh;

    r, fi, tt, d, tg1, tg2: real;
    gd,gm,tlx,tly,x0,y0 : integer;
    kt : boolean;

    procedure ChuyenTruc(m:diem3d; var n:diem3D);
    begin
    n.x:=-m.x*sin(tt) + m.y*cos(tt);
    n.y:=-m.x*cos(tt)*sin(fi) - m.y*sin(tt)*sin(fi) + m.z*cos(fi);
    n.z:=-m.x*sin(tt)*cos(fi) - m.y*cos(tt)*sin(fi) - m.z*sin(fi) + r;
    end;

    procedure ChuyenVe2Dpc(m:diem3D; var n:diem2Dt);
    begin
    n.x:=d*m.x/m.z;
    n.y:=d*m.y/m.z;
    end;

    procedure ChuyenVe2Dss(m:diem3D; var n:diem2Dt);
    begin
    n.x:=m.x;
    n.y:=m.y;
    end;

    procedure Chuyenmh(m:diem2Dt; var n:diem2Dn);
    begin
    n.x:=round(tlx*m.x) + x0;
    n.y:=round(tly*m.y) + y0;
    end;

    procedure Chuyenden(m:diem3D);

    var m1:diem2Dt;
    k:diem2Dn;
    begin
    ChuyenTruc(m,m);
    if kt then
    ChuyenVe2Dss(m,m1)
    else
    ChuyenVe2Dpc(m,m1);
    Chuyenmh(m1,k);
    moveto(k.x,k.y);
    end;

    procedure Veden(m:diem3D);

    var m1:diem2Dt;
    k:diem2Dn;
    begin
    ChuyenTruc(m,m);
    if kt then
    ChuyenVe2Dss(m,m1)
    else
    ChuyenVe2Dpc(m,m1);
    Chuyenmh(m1,k);
    lineto(k.x, k.y);
    end;

    var ch:char;

    BEGIN
    gd:=0;
    write('bam phim P ve phoi canh, bam S ve song song :');
    while keypressed do readkey;
    repeat
    ch := Upcase(readkey);
    until ch in ['S', 'P'];
    while keypressed do readkey;
    kt := ch = 'S';
    initgraph(gd, gm, 'C:\TP\BGI');
    tg1:=10;
    tg2:=45;
    repeat
    r:=4;
    fi:=tg1*pi/180;
    tt:=tg2*pi/180;
    d:=2;
    x0:=200;
    y0:=200;
    tlx:=100;
    tly:=100;

    a[1].x:=1;
    a[1].y:=0;
    a[1].z:=1;

    a[2].x:=0;
    a[2].y:=0;
    a[2].z:=1;

    a[3].x:=0;
    a[3].y:=1;
    a[3].z:=1;

    a[4].x:=1;
    a[4].y:=1;
    a[4].z:=1;

    a[5].x:=1;
    a[5].y:=1;
    a[5].z:=0;

    a[6].x:=0;
    a[6].y:=1;
    a[6].z:=0;

    a[7].x:=0;
    a[7].y:=0;
    a[7].z:=0;

    a[8].x:=1;
    a[8].y:=0;
    a[8].z:=0;

    c[1].c1:=a[1];
    c[1].c2:=a[2];
    c[2].c1:=a[2];
    c[2].c2:=a[3];

    c[3].c1:=a[3];
    c[3].c2:=a[4];
    c[4].c1:=a[4];
    c[4].c2:=a[1];

    c[5].c1:=a[7];
    c[5].c2:=a[8];
    c[6].c1:=a[6];
    c[6].c2:=a[7];

    c[7].c1:=a[6];
    c[7].c2:=a[5];
    c[8].c1:=a[5];
    c[8].c2:=a[8];

    c[9].c1:=a[4];
    c[9].c2:=a[5];
    c[10].c1:=a[3];
    c[10].c2:=a[6];

    c[11].c1:=a[2];
    c[11].c2:=a[7];
    c[12].c1:=a[1];
    c[12].c2:=a[8];

    setcolor(1);
    for i:=1 to 12 do
    begin
    Chuyenden(c[i].c1);
    Veden(c[i].c2);
    end;
    setcolor(4);
    Chuyenden(a[8]);
    Veden(a[7]);
    Veden(a[6]);
    Chuyenden(a[7]);
    Veden(a[2]);
    delay(80);
    cleardevice;
    tg1:=tg1 + 5;
    tg2:=tg2 + 2;
    until keypressed;
    readln;
    closegraph;
    end.

  4. #4
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    1.Khủng khiếp quá! Cho dùm vào tag code đi bạn.
    2.Nếu bạn học pascal và hiểu nó rồi thì việc chuyển sang C cũng không khó, bạn tự làm sẽ tốt hơn, chứ còn ngồi mà giúp bạn thế này .... chắc chết!

  5. #5
    Ngày gia nhập
    10 2008
    Bài viết
    10

    Vâng, rất tiếc là mình ko đc học chút jì về Pascal cả, toàn là coi mà tự hỉu nó làm thế nào (áp dụng những jì đã biết của C++) => đương nhiên là không thể hiểu hết được toàn bộ. Bài mình vừa đưa là thuật toán tìm bao lồi của 1 mảng các điểm. Như QuangHoang cũng đã nói, ông ấy học 2 language mà còn ko ra
    =_________=!

  6. #6
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Mặc định Chuyển từ Pascal qua C++ thuật toán này

    Tui có mấy bài tập viết bang pascal muốn chuyển qua C++ mà chuối quá mong mọi người giúp.
    Cái code Pascal kia chứa đồ họa trên môi trường Dos 16 bit, đâu thể đơn giản chuyển sang C++ được.

  7. #7
    Ngày gia nhập
    10 2008
    Bài viết
    10

    hehe làm jì có, nó đâu có xử lý đồ hoạ zì đâu...chỉ là tính toán rồi trả về tham số và mảng điểm thôi, point là 1 cấu trúc mình khai báo kiểu như struct trong C++ ey
    =_________=!

  8. #8
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Híc, bạn có thấy cái này không.

    initgraph(Gd, Gm, 'C:\TP\BGI');
    closegraph;

  9. #9
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Code:
    function	wrap : interger;
    	var	i, min, M : interger;
    		minangle, v : real;
    		t : point;
    	begin
    	min := 1;
    	for i:=2 to N do if p[i].y < p[min].y then min := i;
    	M:=0; p[N+1] := p[min]; minangle := 0.0;
    	repeat
    		M := M + 1; t:= p[M]; p[M] := p[min]; p[min] := t;
    		min := N+1; v = minangle; minangle := 360.0;
    		for i := M+1 to N+1 do
    			if theta(p[M],p[i]) > v then
    				if theta(p[M],p[i]) < minangle then
    					begin min := i; minangle := theta(p[M],p[i])
    					end;
    	until min = N+1;
    	wrap := M;
    	end;
    Mình dịch từng dòng giúp bạn nhé, đúng sai thì mình ko biết rõ vì mình chưa hiểu code của bạn viết gì và muốn làm gì:
    C++ Code:
    1. int wrap()
    2. {
    3.     int min := 1;
    4.     for (int i = 2; i <= n; ++i)
    5.     {
    6.         if (p[i].y < p[min].y)
    7.         {
    8.             min = i;
    9.         }
    10.     }
    11.     int M = 0;
    12.     p[n + 1] = p[min];
    13.     double minangle = 0.0;
    14.     do
    15.     {
    16.         ++m;
    17.         point t = p[m];
    18.         p[m] = p[min];
    19.         p[min] = t;
    20.         min = n + 1;
    21.         double v = minangle;
    22.         minangle = 360.0;
    23.         for (int i = m + 1; i <= n + 1; ++i)
    24.         {
    25.             if (theta(p[M], p[i]) > v)
    26.             {
    27.                 if (theta(p[M],p[i]) < minangle)
    28.                 {
    29.                         min = i;
    30.                         minangle = theta(p[M], p[i]);
    31.                 }
    32.             }
    33.         }
    34.     }
    35.     while (min != n + 1);
    36.     return M;
    37. }

  10. #10
    Ngày gia nhập
    10 2008
    Bài viết
    10

    @QuangHoang: sorry tui tưởng ông nói code tui có đồ hoạ, thì ra code bạn kia
    @huynguyen: Thanks ông trước, tui sẽ thử xem sao. Thật ra thì tui dịch ra đc rồi nhưng ko biết sao vừa chạy thì chương trình báo lỗi ngay dòng này
    Code:
    point t = p[m];
    nó ghi là phần tử lớn hơn chỉ số mảng...debug ko hiểu nó làm sao luôn
    =_________=!

Các đề tài tương tự

  1. Chuyển code pascal sang C++
    Gửi bởi minhthuyit85 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 10-04-2011, 11:49 PM
  2. Lập trình C Chuyển đổi ngôn ngử pascal sang ngôn ngữ C?
    Gửi bởi mtngan88 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 21-03-2011, 07:46 PM
  3. giúp chuyển đổi tù pascal sang c
    Gửi bởi quyen1991 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 11-05-2010, 07:43 PM
  4. chuyển từ pascal sang C hay C++
    Gửi bởi toanpv1989 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 03-05-2010, 10:13 AM
  5. Chuyển từ Pascal sang C.Help me!!!
    Gửi bởi dangthuan trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 23-04-2010, 06:25 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn