Đến nội dung

Hình ảnh

Bài Tập Tin Học Phần Lập Trình Pascal

- - - - -

  • Please log in to reply
Chủ đề này có 15 trả lời

#1
subasa

subasa

    Binh nhất

  • Thành viên
  • 31 Bài viết
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 :mellow: :mellow:

#2
Dramons Celliet

Dramons Celliet

    Hạ sĩ

  • Thành viên
  • 59 Bài viết

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 :mellow: :mellow:

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:' S);
readln;
end.

Bài viết đã được chỉnh sửa nội dung bởi Dramons Celliet: 11-10-2012 - 19:54

Giá như... ai đó biết rằng: Mình nhớ ai đó lắm...
Giá như... ai đó biết: Mình yêu ai đó thật nhiều...

#3
subasa

subasa

    Binh nhất

  • Thành viên
  • 31 Bài viết

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.

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!

#4
Dramons Celliet

Dramons Celliet

    Hạ sĩ

  • Thành viên
  • 59 Bài viết

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!

Đầ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.
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ả :(.
Giá như... ai đó biết rằng: Mình nhớ ai đó lắm...
Giá như... ai đó biết: Mình yêu ai đó thật nhiều...

#5
duongchelsea

duongchelsea

    Trung sĩ

  • Thành viên
  • 142 Bài viết
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+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


#6
subasa

subasa

    Binh nhất

  • Thành viên
  • 31 Bài viết

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
caybutbixanh

caybutbixanh

    Trung úy

  • Thành viên
  • 888 Bài viết

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.

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 đỏ

Bài viết đã được chỉnh sửa nội dung bởi caybutbixanh: 11-10-2012 - 20:08

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
duongchelsea

duongchelsea

    Trung sĩ

  • Thành viên
  • 142 Bài viết

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 đỏ

while (n<2) or ( n>200) do
begin
writeln(' nhap lại n= '); readln (n);
end;

#9
Dramons Celliet

Dramons Celliet

    Hạ sĩ

  • Thành viên
  • 59 Bài viết

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 đỏ

Ở đâ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à.
Giá như... ai đó biết rằng: Mình nhớ ai đó lắm...
Giá như... ai đó biết: Mình yêu ai đó thật nhiều...

#10
nthoangcute

nthoangcute

    Thiếu tá

  • Thành viên
  • 2003 Bài viết
Nhâ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 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
thanhluong

thanhluong

    Trung sĩ

  • Thành viên
  • 122 Bài viết

Nhâ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...

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ắm :wacko:

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
Celia

Celia

    Hạ sĩ

  • Thành viên
  • 93 Bài viết

Nhâ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...

Chương trình dài + rối quá, mình mới đọc qua đoạn

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---------------------===========--------Hình đã gửi


#13
Trần Đức Anh @@

Trần Đức Anh @@

    Thượng sĩ

  • Thành viên
  • 286 Bài viế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.
Chữ ký spam! Không cần xoá!

#14
duongchelsea

duongchelsea

    Trung sĩ

  • Thành viên
  • 142 Bài viế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.

Theo mình, dùng vòng lặp While .. do ... để kiểm tra điều kiện là hay nhất.
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
nthoangcute

nthoangcute

    Thiếu tá

  • Thành viên
  • 2003 Bài viết

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 ^^

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.

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
Celia

Celia

    Hạ sĩ

  • Thành viên
  • 93 Bài viết

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---------------------===========--------Hình đã gửi





1 người đang xem chủ đề

0 thành viên, 1 khách, 0 thành viên ẩn danh