Nhờ tư vấn - Viết code pascal cho một chương trình? | VN-Zoom | Cộng đồng Chia Sẻ Kiến Thức Công Nghệ và Phần Mềm Máy Tính

Adblocker detected! Please consider reading this notice.

We've detected that you are using AdBlock Plus or some other adblocking software which is preventing the page from fully loading.

We need money to operate the site, and almost all of it comes from our online advertising.

If possible, please support us by clicking on the advertisements.

Please add vn-z.vn to your ad blocking whitelist or disable your adblocking software.

×

Nhờ tư vấn Viết code pascal cho một chương trình?

Hacker1602

Gà con
Xin mọi người giúp mình viết code về chương trình nhập vào 2 cạnh và góc ở giữa 2 cạnh ấy của một tam giác rồi in ra tam giác ấy (dùng đồ họa). Xin ad duyệt ạ
 

dammage

Rìu Chiến
bài này cũng dễ nhưng mà tui quên hết pascal rồi, up lên cho bạn nào biết vô trả lời vậy
 

dammage

Rìu Chiến
Cho mình xin thuật toán được không ạ?
cái này là toán thôi hông có thuật gì ghê gớm đâu, trước hết vẽ ra 1 tam giác như vầy đi
Untitled.jpg

nhập a, b, α từ bàn phím, tính c bằng công thức
Untitled.jpg

bài này không yêu cầu phương hướng của tam giác nên tui vẽ 1 cạnh nằm ngang cho dễ, ở đây tui chọn đại cạnh a đi

điểm K: bạn cho tọa độ xK, yK bất kì, bao nhiêu cũng được
điểm L: cạnh a nằm ngang nên xL = xK + a, yL = yK
điểm M hơi khó hơn chút:
xM = xK + KH = xK + b.cos(α)
yM = yK - HM = yK - b.tan(α)

có tọa độ 3 điểm K, L, M xong rồi vẽ ra thôi

<<----------<<> o0o <>>---------->>

cải tiến hơn chút, ở trên tọa độ điểm K là bạn cho đại, mỗi lần nhập tam giác là có khi bạn phải chỉnh lại tọa độ K nếu không có thể vẽ bị hụt khỏi màn hình, ở đây tui cho K mặc định là 0, 0 xong mình chơi phép tịnh tiến, bảo đảm tam giác luôn luôn nằm trong màn hình (trừ khi bạn cho cạnh quá dài)

cũng như trên, nhập a, b từ bàn phím, tính c, cho K(0, 0), tính tọa độ L, M cũng như trên luôn

tìm xmin = giá trị nhỏ nhất trong 3 số xK, xL, xM
tìm ymin = giá trị nhỏ nhất trong yK, yM

tịnh tiến điểm:
xK = xK - xmin, yK = yK - ymin
xL = xL - xmin, yL = yL - ymin
xM = xM - xmin, yM = yM - ymin

xong, vẽ ra thôi

viết thử mã giả nè

Mã:
a = read()
b = read()
alpha = read()
c = sqrt(a*a + b*b - 2*a*b*cos(alpha))

xK = 0;
yK = 0;

xL = xK + a;
yL = yK;

xM = xK + b*cos(alpha)
yM = yK - b*tan(alpha)

xmin = min(xK, xL, xM)
ymin = min(yK, yM)

tịnh tiến
xK = xK - xmin
yK = yK - ymin

xL = xL - xmin
yL = yL - ymin

xM = xM - xmin
yM = yM - ymin

xong, vẽ
 

Hacker1602

Gà con
cái này là toán thôi hông có thuật gì ghê gớm đâu, trước hết vẽ ra 1 tam giác như vầy đi

nhập a, b, α từ bàn phím, tính c bằng công thức

bài này không yêu cầu phương hướng của tam giác nên tui vẽ 1 cạnh nằm ngang cho dễ, ở đây tui chọn đại cạnh a đi

điểm K: bạn cho tọa độ xK, yK bất kì, bao nhiêu cũng được
điểm L: cạnh a nằm ngang nên xL = xK + a, yL = yK
điểm M hơi khó hơn chút:
xM = xK + KH = xK + b.cos(α)
yM = yK - HM = yK - b.tan(α)

có tọa độ 3 điểm K, L, M xong rồi vẽ ra thôi

<<----------<<> o0o <>>---------->>

cải tiến hơn chút, ở trên tọa độ điểm K là bạn cho đại, mỗi lần nhập tam giác là có khi bạn phải chỉnh lại tọa độ K nếu không có thể vẽ bị hụt khỏi màn hình, ở đây tui cho K mặc định là 0, 0 xong mình chơi phép tịnh tiến, bảo đảm tam giác luôn luôn nằm trong màn hình (trừ khi bạn cho cạnh quá dài)

cũng như trên, nhập a, b từ bàn phím, tính c, cho K(0, 0), tính tọa độ L, M cũng như trên luôn

tìm xmin = giá trị nhỏ nhất trong 3 số xK, xL, xM
tìm ymin = giá trị nhỏ nhất trong yK, yM

tịnh tiến điểm:
xK = xK - xmin, yK = yK - ymin
xL = xL - xmin, yL = yL - ymin
xM = xM - xmin, yM = yM - ymin

xong, vẽ ra thôi

viết thử mã giả nè

Mã:
a = read()
b = read()
alpha = read()
c = sqrt(a*a + b*b - 2*a*b*cos(alpha))

xK = 0;
yK = 0;

xL = xK + a;
yL = yK;

xM = xK + b*cos(alpha)
yM = yK - b*tan(alpha)

xmin = min(xK, xL, xM)
ymin = min(yK, yM)

tịnh tiến
xK = xK - xmin
yK = yK - ymin

xL = xL - xmin
yL = yL - ymin

xM = xM - xmin
yM = yM - ymin

xong, vẽ
thanks bạn nhiều
 

Hacker1602

Gà con
cái này là toán thôi hông có thuật gì ghê gớm đâu, trước hết vẽ ra 1 tam giác như vầy đi

nhập a, b, α từ bàn phím, tính c bằng công thức

bài này không yêu cầu phương hướng của tam giác nên tui vẽ 1 cạnh nằm ngang cho dễ, ở đây tui chọn đại cạnh a đi

điểm K: bạn cho tọa độ xK, yK bất kì, bao nhiêu cũng được
điểm L: cạnh a nằm ngang nên xL = xK + a, yL = yK
điểm M hơi khó hơn chút:
xM = xK + KH = xK + b.cos(α)
yM = yK - HM = yK - b.tan(α)

có tọa độ 3 điểm K, L, M xong rồi vẽ ra thôi

<<----------<<> o0o <>>---------->>

cải tiến hơn chút, ở trên tọa độ điểm K là bạn cho đại, mỗi lần nhập tam giác là có khi bạn phải chỉnh lại tọa độ K nếu không có thể vẽ bị hụt khỏi màn hình, ở đây tui cho K mặc định là 0, 0 xong mình chơi phép tịnh tiến, bảo đảm tam giác luôn luôn nằm trong màn hình (trừ khi bạn cho cạnh quá dài)

cũng như trên, nhập a, b từ bàn phím, tính c, cho K(0, 0), tính tọa độ L, M cũng như trên luôn

tìm xmin = giá trị nhỏ nhất trong 3 số xK, xL, xM
tìm ymin = giá trị nhỏ nhất trong yK, yM

tịnh tiến điểm:
xK = xK - xmin, yK = yK - ymin
xL = xL - xmin, yL = yL - ymin
xM = xM - xmin, yM = yM - ymin

xong, vẽ ra thôi

viết thử mã giả nè

Mã:
a = read()
b = read()
alpha = read()
c = sqrt(a*a + b*b - 2*a*b*cos(alpha))

xK = 0;
yK = 0;

xL = xK + a;
yL = yK;

xM = xK + b*cos(alpha)
yM = yK - b*tan(alpha)

xmin = min(xK, xL, xM)
ymin = min(yK, yM)

tịnh tiến
xK = xK - xmin
yK = yK - ymin

xL = xL - xmin
yL = yL - ymin

xM = xM - xmin
yM = yM - ymin

xong, vẽ
Cho mình hỏi chút, làm sao để xác định điểm H ở phần chưa tịnh tiến vậy bạn?
 

dammage

Rìu Chiến
Cho mình hỏi chút, làm sao để xác định điểm H ở phần chưa tịnh tiến vậy bạn?
tọa độ điểm H hông quan trọng, quan trọng là độ dài KH và MH thôi, mấy cái này xài công thức lượng giác tính dễ dàng, còn nếu bạn muốn tính luôn tọa độ H như trong hình thì cũng dễ thôi
xH = xK + KH = xK + b.cos(α)
yH = yK
 

Hacker1602

Gà con
tọa độ điểm H hông quan trọng, quan trọng là độ dài KH và MH thôi, mấy cái này xài công thức lượng giác tính dễ dàng, còn nếu bạn muốn tính luôn tọa độ H như trong hình thì cũng dễ thôi
xH = xK + KH = xK + b.cos(α)
yH = yK
Nhưng làm sao để tính KH hả bạn? Nãy giờ bạn chưa đề cập, mình mới học lớp 8 nên chưa biết :)
 

Hacker1602

Gà con
tọa độ điểm H hông quan trọng, quan trọng là độ dài KH và MH thôi, mấy cái này xài công thức lượng giác tính dễ dàng, còn nếu bạn muốn tính luôn tọa độ H như trong hình thì cũng dễ thôi
xH = xK + KH = xK + b.cos(α)
yH = yK
mình hiểu rồi bạn, cám ơn bạn nhiều
 

dammage

Rìu Chiến
xin công thức tính h được không bạn? Viết nhưng tính sai
công thức rồi bạn (
à sorry, coi kỹ lại hình như sai, sin = đối chia huyền mới đúng, như vậy h = b.sin α

xM = xK + KH = xK + b.cos α
yM = yK - MH = yK - b.sin α
 
Sửa lần cuối:

Hacker1602

Gà con
V
à sorry, coi kỹ lại hình như sai, sin = đối chia huyền mới đúng, như vậy h = b.sin α

xM = xK + KH = xK + b.cos α
yM = yK - MH = yK - b.sin α
Vẫn sai bạn ơi, bạn xem giúp code mình với:

Uses crt,graph;
label dc1,dc2,dc3;
var gm,gd,xA,yA,xB,yB,xC,yC,AB,BC,code,b,AC: integer;
ACt2,ACt,AHt: real;
bt,ABt,BCt: string;
BEGIN
dc1: clrscr;
Writeln(' Ve tam giac voi hai canh va goc tao boi hai canh ay duoc nhap vao boi ban phim');
writeln(' 1 don vi = 1 cham');
writeln('________________________________________________________________________________________________________________________');
write('Nhap vao do dai canh thu nhat: '); readln(ABt);
Val(ABt,AB,code);
If AB>1360 then
Begin
WRiteln('Do dai canh vuot qua do dai man hinh (<=1360)!');
readln;
goto dc1;
End;
If (code<>0) or (AB<1) then
Begin
Writeln('Do dai canh phai la mot so tu nhien lon hon 0!');
readln;
goto dc1;
End;
dc2: clrscr;
Writeln(' Ve tam giac voi hai canh va goc tao boi hai canh ay duoc nhap vao boi ban phim');
writeln(' 1 don vi = 1 cham');
writeln('________________________________________________________________________________________________________________________');
writeln('Nhap vao do dai canh thu nhat: ',AB);
write('Nhap vao do dai canh thu hai: '); readln(BCt);
Val(BCt,BC,code);
If BC>30000 then
Begin
Writeln('Do dai canh vuot qua do dai man hinh (<=30000)!');
readln;
goto dc2;
End;
If (code<>0) or (BC<1) then
Begin
Writeln('Do dai canh phai la mot so tu nhien lon hon 0!');
readln;
goto dc2;
End;
dc3: clrscr;
Writeln(' Ve tam giac voi hai canh va goc tao boi hai canh ay duoc nhap vao boi ban phim');
writeln(' 1 don vi = 1 cham');
writeln('________________________________________________________________________________________________________________________');
writeln('Nhap vao do dai canh thu nhat: ',AB);
writeln('Nhap vao do dai canh thu hai: ',BC);
Write('Nhap vao so do cua goc: '); readln(bt);
Val(bt,b,code);
If (code<>0) or (b<1) then
Begin
Writeln('So do goc phai lon hon 1');
readln;
goto dc3;
End;
If b>178 then
Begin
Writeln('So do goc phai be hon 179');
readln;
goto dc3;
End;
ACt:=AB*AB+BC*BC-2*AB*AC*cos(b);
ACt2:=Sqrt(ACt);
AC:=round(ACt2);
xB:=10;
yB:=704;
xC:=xB+BC;
yC:=yB;
xA:=round(xB+Ab*cos(b));
yA:=round(yB-AB*sin(B));
writeln(xA,'.',yA,'.',AC);
Writeln(AHt:0:0);
initgraph(gd,gm,'');
moveto(xB,yB);
lineto(xC,yC);
delay(500);
moveto(xC,yC);
lineto(xA,yA);
delay(500);
moveto(xA,yA);
lineto(xB,yB);
readkey;
readln;
End.
 

dammage

Rìu Chiến
Vẫn sai bạn ơi, bạn xem giúp code mình với:

Mã:
Uses crt,graph;

label dc1,dc2,dc3;
var
    gm,gd,xA,yA,xB,yB,xC,yC,AB,BC,code,b,AC: integer;
    ACt2,ACt,AHt: real;
    bt,ABt,BCt: string;

BEGIN
dc1:    clrscr;
    Writeln(' Ve tam giac voi hai canh va goc tao boi hai canh ay duoc nhap vao boi ban phim');
    writeln(' 1 don vi = 1 cham');
    writeln('________________________________________________________________________________________________________________________');
    write('Nhap vao do dai canh thu nhat: '); readln(ABt);
    Val(ABt,AB,code);
    If AB>1360 then
    Begin
        WRiteln('Do dai canh vuot qua do dai man hinh (<=1360)!');
        readln;
        goto dc1;
    End;

    If (code<>0) or (AB<1) then
    Begin
        Writeln('Do dai canh phai la mot so tu nhien lon hon 0!');
        readln;
        goto dc1;
    End;

dc2:    clrscr;
    Writeln(' Ve tam giac voi hai canh va goc tao boi hai canh ay duoc nhap vao boi ban phim');
    writeln(' 1 don vi = 1 cham');
    writeln('________________________________________________________________________________________________________________________');
    writeln('Nhap vao do dai canh thu nhat: ',AB);
    write('Nhap vao do dai canh thu hai: '); readln(BCt);
    Val(BCt,BC,code);
    If BC>30000 then
    Begin
        Writeln('Do dai canh vuot qua do dai man hinh (<=30000)!');
        readln;
        goto dc2;
    End;

    If (code<>0) or (BC<1) then
    Begin
        Writeln('Do dai canh phai la mot so tu nhien lon hon 0!');
        readln;
        goto dc2;
    End;

dc3:    clrscr;
    Writeln(' Ve tam giac voi hai canh va goc tao boi hai canh ay duoc nhap vao boi ban phim');
    writeln(' 1 don vi = 1 cham');
    writeln('________________________________________________________________________________________________________________________');
    writeln('Nhap vao do dai canh thu nhat: ',AB);
    writeln('Nhap vao do dai canh thu hai: ',BC);
    Write('Nhap vao so do cua goc: '); readln(bt);
    Val(bt,b,code);
    If (code<>0) or (b<1) then
    Begin
        Writeln('So do goc phai lon hon 1');
        readln;
        goto dc3;
    End;

    If b>178 then
    Begin
        Writeln('So do goc phai be hon 179');
        readln;
        goto dc3;
    End;

    ACt:=AB*AB+BC*BC-2*AB*AC*cos(b);
    ACt2:=Sqrt(ACt);
    AC:=round(ACt2);
    xB:=10;
    yB:=704;
    xC:=xB+BC;
    yC:=yB;
    xA:=round(xB+Ab*cos(b));
    yA:=round(yB-AB*sin(B));
    writeln(xA,'.',yA,'.',AC);
    Writeln(AHt:0:0);

    initgraph(gd,gm,'');

    moveto(xB,yB);
    lineto(xC,yC);
    delay(500);

    moveto(xC,yC);
    lineto(xA,yA);
    delay(500);

    moveto(xA,yA);
    lineto(xB,yB);

    readkey;
    readln;
End.
bạn bỏ trong tag code cho dễ đọc nè, nhìn 2 dòng này hình như thấy sai rồi nè
xA:=round(xB+Ab*cos(b));
yA:=round(yB-AB*sin(B));

mấy hàm lượng giác trong pascal hình như là tính bằng radian mà, bạn phải đổi góc ra radian rồi mới gọi hàm sin cos chứ

hông nhớ pascal có phân biệt hoa thường hay không, nếu có thì chỗ sin(B) phải là sin(b) chứ
 

dammage

Rìu Chiến
cái của tui đúng rồi đó, test thử bằng c nè

a = b, góc 60, vẽ ra được tam giác đều
1.jpg


b = a * căn 2, góc 45 ra được tam giác vuông cân
2.jpg


cho thử góc lớn hơn 90 ra được tam giác này nè
4.jpg


code c nhưng mà chắc cũng dễ nhìn ha bạn, chỗ alpha = 60 * (3.1415926 / 180) là đổi từ 60 độ qua radian đó
 
Sửa lần cuối:

Hacker1602

Gà con
bạn bỏ trong tag code cho dễ đọc nè, nhìn 2 dòng này hình như thấy sai rồi nè
xA:=round(xB+Ab*cos(b));
yA:=round(yB-AB*sin(B));

mấy hàm lượng giác trong pascal hình như là tính bằng radian mà, bạn phải đổi góc ra radian rồi mới gọi hàm sin cos chứ

hông nhớ pascal có phân biệt hoa thường hay không, nếu có thì chỗ sin(B) phải là sin(b) chứ
không phân biệt chữ hoa thường bạn ơi, cám ơn bạn nha, mình thấy lỗi code rồi.
 

Hacker1602

Gà con
cái của tui đúng rồi đó, test thử bằng c nè

a = b, góc 60, vẽ ra được tam giác đều

b = a * căn 2, góc 45 ra được tam giác vuông cân

cho thử góc lớn hơn 90 ra được tam giác này nè

code c nhưng mà chắc cũng dễ nhìn ha bạn, chỗ alpha = 60 * (3.1415926 / 180) là đổi từ 60 độ qua radian đó
cám ơn bạn nhiều nhé!
 


Top