Bài Tập Tin Học Phần Lập Trình Pascal
#1
Đã gửi 11-10-2012 - 19:17
Viết chương trình tính tổng :
S=2012+4+6+....+2n
Với n là số nguyên $200\geq n \geq 2$ nhâp vào từ bàn phím.
P/s:Bài này được ra,sau khi mình học xong hết phần "lặp với số lần biết trước và câu lệnh for do "bài Cấu Trúc Lặp.Cảm ơn mọi người
#2
Đã gửi 11-10-2012 - 19:26
Theo mình là như sau:Mong các bạn và thầy cô giúp mình bài này
Viết chương trình tính tổng :
S=2012+4+6+....+2n
Với n là số nguyên $200\geq n \geq 2$ nhâp vào từ bàn phím.
P/s:Bài này được ra,sau khi mình học xong hết phần "lặp với số lần biết trước và câu lệnh for do "bài Cấu Trúc Lặp.Cảm ơn mọi người
program tinh; var S, i, n: integer; begin write ('nhap_so_n:'); readln (n); S:= 2012; for i: 2 to n do S:= S+2n; writeln ('ket_qua_la:' S); readln; end.
Bài viết đã được chỉnh sửa nội dung bởi Dramons Celliet: 11-10-2012 - 19:54
- L Lawliet, Karl Vierstein và subasa thích
Giá như... ai đó biết: Mình yêu ai đó thật nhiều...
#3
Đã gửi 11-10-2012 - 19:32
Cảm ơn bạn .Nhưng bạn có thể giải thích cái đề bài được không mình còn chưa hiểu đề nữa.Theo mình là như sau:
program tinh; var S, i, n: integer; begin write ('nhap_so_n:'); readln (n); S:= 2012; for i: 2 to n do S:= S+2n; writeln ('ket_qua_la:'); readln; end.
Lấy ví dụ n=6 chẳng hạn. cảm ơn bạn nhiều!
#4
Đã gửi 11-10-2012 - 19:36
Đầu tiên trong bài toán có số $2012$ là "bất quy tắc" trong dãy nên mình gán $S$ bằng $2012$ trước, sau đó dùng vòng lặp for thôi bạn à, trước đó ta đã nhập số nguyên $n$ nên ta tính được mà bạn.Cảm ơn bạn .Nhưng bạn có thể giải thích cái đề bài được không mình còn chưa hiểu đề nữa.
Lấy ví dụ n=6 chẳng hạn. cảm ơn bạn nhiều!
Mình không rành nhiều về cái này nên không biết giải thích sao cho dễ hiểu cả .
- L Lawliet, Karl Vierstein và subasa thích
Giá như... ai đó biết: Mình yêu ai đó thật nhiều...
#5
Đã gửi 11-10-2012 - 19:42
Chỉ cần sủa câu lệnh
writeln ('ket_qua_la:');
thành
writeln ('ket_qua_la:',S);
P/s: Cả chỗ này nữa nhé:
for i:= 2 to n do S:= S+2*i;
Đã sửa lại rồi đó. Chương trình viết nhầm, thảo nào bạn k hiểu.
Bài viết đã được chỉnh sửa nội dung bởi duongchelsea: 11-10-2012 - 20:10
- subasa và Dramons Celliet thích
#6
Đã gửi 11-10-2012 - 20:00
Bài của bạn Dramons Celliet về thuật toán là đúng rồi. Chỉ còn thiếu sót nhỏ đó là bạn quên không in kết quả ra màn hình:
Chỉ cần sủa câu lệnh
writeln ('ket_qua_la:');
thành
writeln ('ket_qua_la:',S);
P/s: Cả chỗ này nữa nhé:
for i:= 2 to n do S:= S+2n;
Thực sự mình vẫn không hiểu đề và cách làm của các bạn.mình học rất kém.Mong mọi người giải thích hộ mình.Cảm ơn các bạn!
Ví dụ như n=6 mọi người cso thể viết hẳn phép cộng này lại được không ạ!
#7
Đã gửi 11-10-2012 - 20:07
thiếu rồi kìa còn điều kiện của n nữa cơ.Nên bổ sung thêm :chữ màu đỏTheo mình là như sau:
program tinh;
var S, i, n: integer;
begin
write ('nhap_so_n:');
while (n<2) and ( n>200) do
begin
writeln(' nhap lại n= '); readln (n);
end;
S:= 2012;
for i:= 2 to n do S:= S+2n;
writeln ('ket_qua_la:' ,S);
readln;
end.
Bài viết đã được chỉnh sửa nội dung bởi caybutbixanh: 11-10-2012 - 20:08
- subasa yêu thích
KẺ MẠNH CHƯA CHẮC ĐÃ THẮNG
MÀ KẺ THẮNG MỚI CHÍNH LÀ KẺ MẠNH!.
(FRANZ BECKEN BAUER)
ÔN THI MÔN HÓA HỌC TẠI ĐÂY.
#8
Đã gửi 11-10-2012 - 20:15
while (n<2) or ( n>200) dothiếu rồi kìa còn điều kiện của n nữa cơ.Nên bổ sung thêm :chữ màu đỏ
begin
writeln(' nhap lại n= '); readln (n);
end;
- caybutbixanh và subasa thích
#9
Đã gửi 11-10-2012 - 20:25
Ở đây theo mình là biết trước được số nguyên $n$ rồi mà bạn? Và quan trọng là chỉ được sử dụng vòng lặp for - do thôi mà.thiếu rồi kìa còn điều kiện của n nữa cơ.Nên bổ sung thêm :chữ màu đỏ
- L Lawliet, Karl Vierstein và subasa thích
Giá như... ai đó biết: Mình yêu ai đó thật nhiều...
#10
Đã gửi 11-10-2012 - 20:34
Chương trình mang tên: "Phân tích phương trình bậc 4 thành hai phương trình bậc 2":
var i,p,q,r,s,UCLN,BCNN: integer; m,a,b,c,d,e,f,g,h,j,k,x,y,z,t,o: real; begin write('a='); readln(a); write('b='); readln(b); write('c='); readln(c); write('d='); readln(d); write('e='); readln(e); if a=1 then write('x^4') else begin if a>0 then write(a:0:0,'x^4'); if a=-1 then write('-x^4'); if a<0 then if a<>-1 then write('-',-a:0:0,'x^4'); end; if b=1 then write('+x^3') else begin if b>0 then write('+',b:0:0,'x^3'); if b=-1 then write('-x^3'); if b<0 then if b<>-1 then write('-',-b:0:0,'x^3'); end; if c=1 then write('+x^2') else begin if c>0 then write('+',c:0:0,'x^2'); if c=-1 then write('-x^2'); if c<0 then if b<>-1 then write('-',-c:0:0,'x^2'); end; if d=1 then write('+x') else begin if d>0 then write('+',d:0:0,'x'); if d=-1 then write('-x'); if d<0 then if b<>-1 then write('-',-d:0:0,'x'); end; if e>0 then write('+',e:0:0); if e<0 then write('-',-e:0:0); write('=0'); x:= 8*a*a*a ; y:=-4*a*a*c; z:=-8*e*a*a+2*a*d*b; t:=4*e*c*a-a*d*d-e*b*b; m:=0; begin for i:=1 to 100 do m:=m-(x*m*m*m+y*m*m+z*m+t)/(3*x*m*m+2*y*m+z); end; g:=2*sqrt(-4*c*a+8*a*a*m+b*b)*a; h:=sqrt(-4*c*a+8*a*a*m+b*b)*b-8*a*a*m-b*b+4*c*a; j:=2*sqrt(-4*c*a+8*a*a*m+b*b)*m*a+2*a*d-2*b*m*a; p:=trunc(g); q:=trunc(h); r:=trunc(j); begin BCNN:=p*q; s:= q mod p; While s <> 0 do Begin s:= p MOD q; p:= q; q:= s; End; BCNN:=p*r; s:= r mod p; While s <> 0 do Begin s:= p MOD r; p:= r; r:= s; End; end; g:=g/p; h:=h/p; j:=j/p; writeln(' '); write('('); if g=1 then write('x^2') else begin if g>0 then write(g:0:0,'x^2'); if g=-1 then write('-x^2'); if g<0 then if g<>-1 then write('-',-g:0:0,'x^2'); end; if h=1 then write('+x') else begin if h>0 then write('+',h:0:0,'x'); if h=-1 then write('-x'); if h<0 then if h<>-1 then write('-',-h:0:0,'x'); end; if j>0 then write('+',j:0:0); if j<0 then write('-',-j:0:0); write(')'); g:=2*sqrt(-4*c*a+8*a*a*m+b*b)*a; k:=sqrt(-4*c*a+8*a*a*m+b*b)*b+8*a*a*m+b*b-4*c*a; o:=2*sqrt(-4*c*a+8*a*a*m+b*b)*m*a-2*a*d+2*b*m*a; p:=trunc(g); q:=trunc(k); r:=trunc(o); begin BCNN:=p*q; s:= q mod p; While s <> 0 do Begin s:= p MOD q; p:= q; q:= s; End; BCNN:=p*r; s:= r mod p; While s <> 0 do Begin s:= p MOD r; p:= r; r:= s; End; end; g:=g/p; k:=k/p; o:=o/p; write('('); if g=1 then write('x^2') else begin if g>0 then write(g:0:0,'x^2'); if g=-1 then write('-x^2'); if g<0 then if g<>-1 then write('-',-g:0:0,'x^2'); end; if k=1 then write('+x') else begin if k>0 then write('+',k:0:0,'x'); if k=-1 then write('-x'); if k<0 then if k<>-1 then write('-',-k:0:0,'x'); end; if o>0 then write('+',o:0:0); if o<0 then write('-',-o:0:0); write(')=0'); readln; end.
Chương trình chạy được hầu hết các phương trình bậc 4 mà có thể phân tích thành hai cái bậc 2, nhưng lại không thể phân tích thành nhân tử phương trình:
$x^4-1=0$
__________
Có ai sửa giùm với !!! hoặc góp ý gì cũng được...
Bài viết đã được chỉnh sửa nội dung bởi nthoangcute: 11-10-2012 - 20:35
BÙI THẾ VIỆT - Chuyên gia Thủ Thuật CASIO
• Facebook : facebook.com/viet.alexander.7
• Youtube : youtube.com/nthoangcute
• Gmail : [email protected]
• SÐT : 0965734893
#11
Đã gửi 11-10-2012 - 21:31
Em nghĩ nên dùng phương pháp hệ số bất định, đưa về dạng $k(x^2+ax+b)(x^2+cx+d)$ rồi lập thuật toán giải hệ, để tìm các hằng số $k$, $a$, $b$, $c$, $d$. Còn cái chương trình của anh em không hiểu lắmNhân tiện topic này, ai có thể chỉnh sửa giùm Code mà mình tốn không biết bao nhiêu công sức để làm:
Chương trình mang tên: "Phân tích phương trình bậc 4 thành hai phương trình bậc 2":var i,p,q,r,s,UCLN,BCNN: integer; m,a,b,c,d,e,f,g,h,j,k,x,y,z,t,o: real; begin write('a='); readln(a); write('b='); readln(b); write('c='); readln(c); write('d='); readln(d); write('e='); readln(e); if a=1 then write('x^4') else begin if a>0 then write(a:0:0,'x^4'); if a=-1 then write('-x^4'); if a<0 then if a<>-1 then write('-',-a:0:0,'x^4'); end; if b=1 then write('+x^3') else begin if b>0 then write('+',b:0:0,'x^3'); if b=-1 then write('-x^3'); if b<0 then if b<>-1 then write('-',-b:0:0,'x^3'); end; if c=1 then write('+x^2') else begin if c>0 then write('+',c:0:0,'x^2'); if c=-1 then write('-x^2'); if c<0 then if b<>-1 then write('-',-c:0:0,'x^2'); end; if d=1 then write('+x') else begin if d>0 then write('+',d:0:0,'x'); if d=-1 then write('-x'); if d<0 then if b<>-1 then write('-',-d:0:0,'x'); end; if e>0 then write('+',e:0:0); if e<0 then write('-',-e:0:0); write('=0'); x:= 8*a*a*a ; y:=-4*a*a*c; z:=-8*e*a*a+2*a*d*b; t:=4*e*c*a-a*d*d-e*b*b; m:=0; begin for i:=1 to 100 do m:=m-(x*m*m*m+y*m*m+z*m+t)/(3*x*m*m+2*y*m+z); end; g:=2*sqrt(-4*c*a+8*a*a*m+b*b)*a; h:=sqrt(-4*c*a+8*a*a*m+b*b)*b-8*a*a*m-b*b+4*c*a; j:=2*sqrt(-4*c*a+8*a*a*m+b*b)*m*a+2*a*d-2*b*m*a; p:=trunc(g); q:=trunc(h); r:=trunc(j); begin BCNN:=p*q; s:= q mod p; While s <> 0 do Begin s:= p MOD q; p:= q; q:= s; End; BCNN:=p*r; s:= r mod p; While s <> 0 do Begin s:= p MOD r; p:= r; r:= s; End; end; g:=g/p; h:=h/p; j:=j/p; writeln(' '); write('('); if g=1 then write('x^2') else begin if g>0 then write(g:0:0,'x^2'); if g=-1 then write('-x^2'); if g<0 then if g<>-1 then write('-',-g:0:0,'x^2'); end; if h=1 then write('+x') else begin if h>0 then write('+',h:0:0,'x'); if h=-1 then write('-x'); if h<0 then if h<>-1 then write('-',-h:0:0,'x'); end; if j>0 then write('+',j:0:0); if j<0 then write('-',-j:0:0); write(')'); g:=2*sqrt(-4*c*a+8*a*a*m+b*b)*a; k:=sqrt(-4*c*a+8*a*a*m+b*b)*b+8*a*a*m+b*b-4*c*a; o:=2*sqrt(-4*c*a+8*a*a*m+b*b)*m*a-2*a*d+2*b*m*a; p:=trunc(g); q:=trunc(k); r:=trunc(o); begin BCNN:=p*q; s:= q mod p; While s <> 0 do Begin s:= p MOD q; p:= q; q:= s; End; BCNN:=p*r; s:= r mod p; While s <> 0 do Begin s:= p MOD r; p:= r; r:= s; End; end; g:=g/p; k:=k/p; o:=o/p; write('('); if g=1 then write('x^2') else begin if g>0 then write(g:0:0,'x^2'); if g=-1 then write('-x^2'); if g<0 then if g<>-1 then write('-',-g:0:0,'x^2'); end; if k=1 then write('+x') else begin if k>0 then write('+',k:0:0,'x'); if k=-1 then write('-x'); if k<0 then if k<>-1 then write('-',-k:0:0,'x'); end; if o>0 then write('+',o:0:0); if o<0 then write('-',-o:0:0); write(')=0'); readln; end.
Chương trình chạy được hầu hết các phương trình bậc 4 mà có thể phân tích thành hai cái bậc 2, nhưng lại không thể phân tích thành nhân tử phương trình:
$x^4-1=0$
__________
Có ai sửa giùm với !!! hoặc góp ý gì cũng được...
Bài viết đã được chỉnh sửa nội dung bởi thanhluong: 11-10-2012 - 21:32
Đổi mới là điều tạo ra sự khác biệt giữa người lãnh đạo và kẻ phục tùng.
STEVE JOBS
#12
Đã gửi 11-10-2012 - 21:52
Chương trình dài + rối quá, mình mới đọc qua đoạnNhân tiện topic này, ai có thể chỉnh sửa giùm Code mà mình tốn không biết bao nhiêu công sức để làm:
Chương trình mang tên: "Phân tích phương trình bậc 4 thành hai phương trình bậc 2":
.......................................
Chương trình chạy được hầu hết các phương trình bậc 4 mà có thể phân tích thành hai cái bậc 2, nhưng lại không thể phân tích thành nhân tử phương trình:
$x^4-1=0$
__________
Có ai sửa giùm với !!! hoặc góp ý gì cũng được...
if a=1 then write('x^4') else begin
if a>0 then write(a:0:0,'x^4');
if a=-1 then write('-x^4');
if a<0 then if a<>-1 then write('-',-a:0:0,'x^4'); end;
if b=1 then write('+x^3') else begin
if b>0 then write('+',b:0:0,'x^3');
if b=-1 then write('-x^3');
if b<0 then if b<>-1 then write('-',-b:0:0,'x^3'); end;
if c=1 then write('+x^2') else begin
if c>0 then write('+',c:0:0,'x^2');
if c=-1 then write('-x^2');
if c<0 then if b<>-1 then write('-',-c:0:0,'x^2'); end;
if d=1 then write('+x') else begin
if d>0 then write('+',d:0:0,'x');
if d=-1 then write('-x');
if d<0 then if b<>-1 then write('-',-d:0:0,'x'); end;
if e>0 then write('+',e:0:0);
if e<0 then write('-',-e:0:0);
write('=0');
Góp ý: Thay vì 1 hàng dài toàn những câu lệnh if..then..else lồng nhau chỉ để viết pt đó ra sao bạn Việt không viết luôn 1 câu:
write(a,'$x^4$',b,'$x^3$',c,'$x^2$',d,'$x$',e,'=0');
Như vậy tuy nhiều ,',' nhưng mà 1 dòng là xong, đỡ rối mắt ^^
I don't know what I want, so don't ask me
’Cause I'm still trying to figure it out
Don't know what's down this road, I'm just walking
Trying to see through the rain coming down
Even though I'm not the only one
Who feels the way I do
-----------=============----------Dân Anh Lanh Chanh Học Toán---------------------===========--------
#13
Đã gửi 11-10-2012 - 21:55
#14
Đã gửi 11-10-2012 - 22:41
Theo mình, dùng vòng lặp While .. do ... để kiểm tra điều kiện là hay nhất.Theo mình khi kiểm tra điều kiện để nhập lại cho đúng, các bạn nên dung vòng lặp repeat until thì hay hơn.
Nếu sử dụng repeat ... until ... thì chương trình sẽ chạy vòng lặp đó ít nhất 1 lần rồi mới kiểm tra điều kiện lặp.
#15
Đã gửi 11-10-2012 - 22:51
Cậu thử làm như vậy mà xem, VD:Góp ý: Thay vì 1 hàng dài toàn những câu lệnh if..then..else lồng nhau chỉ để viết pt đó ra sao bạn Việt không viết luôn 1 câu:
write(a,'$x^4$',b,'$x^3$',c,'$x^2$',d,'$x$',e,'=0');
Như vậy tuy nhiều ,',' nhưng mà 1 dòng là xong, đỡ rối mắt ^^
a=1, b=-2, c=1, d=5, e=9:
Máy hiện ra:
1x^4-2x^31x^25x9=0
Thế này làm sao hiểu được.
BÙI THẾ VIỆT - Chuyên gia Thủ Thuật CASIO
• Facebook : facebook.com/viet.alexander.7
• Youtube : youtube.com/nthoangcute
• Gmail : [email protected]
• SÐT : 0965734893
#16
Đã gửi 12-10-2012 - 12:56
Cậu thử làm như vậy mà xem, VD:
a=1, b=-2, c=1, d=5, e=9:
Máy hiện ra:
1x^4-2x^31x^25x9=0
Thế này làm sao hiểu được.
Lâu không mò pascal, thực ra có thể khắc phục được mà , mỗi tội PT sẽ "xấu xí" kiểu như:
$x^4+ -3x^3....$ chẳng hạn
P/s: vậy nên cho các từ khóa and, or vào cho đỡ rối
tiếp xúc với Pascal 2 năm rồi giờ mới biết nó kô hiểu $\sqrt{0} là gì
Vậy sao không if b=0..... thêm vài lần nữa cho hết lỗi đấy =.=
I don't know what I want, so don't ask me
’Cause I'm still trying to figure it out
Don't know what's down this road, I'm just walking
Trying to see through the rain coming down
Even though I'm not the only one
Who feels the way I do
-----------=============----------Dân Anh Lanh Chanh Học Toán---------------------===========--------
1 người đang xem chủ đề
0 thành viên, 1 khách, 0 thành viên ẩn danh