PDA

View Full Version : Ai có thời gian thì giúp mình với !!!



Thanh Tra 221
07-12-2007, 12:01
Em có ba bài toán Pascal muôn nhờ mọi người giúp đỡ !! Níu mọi người có thời gian thì giúp em viết chương trình luon nha !!! Em xin cảm ơn rất nhiều !!!
1.Nhập số n , in ra các số nhỏ hơn hoặc = n là số nguyên tố .
2.Cho số tự nhiên n . Tính tổng dãy số sau : 1 + 1/2 + 1/4 + 1/7+...+1/n.Tính cả 1/n nếu no ko thuộc quy luật của dãy.
3.Cho số thực x . Tính((x-2)(x-4)(x-8)...(x-64))/((x-1)(x-3)(x-7)...(x-63)).
Mấy bài trên sẽ ko quá khó nếu đề bài ko ép em và thế cùng !!! Ko được sài mảng , xâu , chuỗi , hay while...do, repeat...until , boolean , true ...false, hay break gi hết , mà chỉ được quyền sài for... to ... do thui !!! Thía mởi dở cười !!! Mong mọi người giúp em !!!

mr_invincible
08-12-2007, 12:02
Câu 1. Nếu không được dùng break thì có được dùng exit hay halt không?
Câu 2. Chẳng hiểu quy luật là gì vậy?
Câu 3. Dùng 1 biến kiểu thực lưu trữ kết quả, ban đầu gán giá trị 1
Dùng vòng for cho i chạy từ 1 đến 64. Nếu i chẵn thì kq=kq x (x-i) ngược lại cho kq=kq/(x-i) À quên, chẳng hiểu đề bài có cấm dùng nốt if - then - else không?

alucar
08-12-2007, 12:10
ặc
Câu 1 thì chỉ là vòng lặp i -- n roài kiểm tra phải số nt ko thôi :D theo mình bạn nên để 1 cái j là kiểu string á rồi nếu là số ntố thì + nó vào cái string đó vậy là xong :D .
Câu 2 thì bạn xem sách Tin học 11 có mà

ktvnguyenchien
08-12-2007, 12:31
Cả 3 chỉ cần dùng For.. to .. do + If.. then.. else là đủ
- bài 1 dùng for 2 lần:


...
For i:=1 to n do
Begin
Demuoc:=0;
For j:=2 to i-1 do If i mod j =0 then demuoc:=demuoc+1;
If demuoc=0 then Writte(i:4,' la so nguyen to');
End;

- Bài 2 ta nhận thấy
Voi i=1--->Mauso=1
voi i=2--->mauso:=mauso+i-1=1+2-1=2
voi i=3--->mauso:=mauso+i-1=2+3-1=4
voi i=4--->mauso:=mauso+i-1=4+4-1=7
...............
Vậy quy luật là từ phần tử thứ 2 trở đi, mẫu số là M:=m+i-1


Mauso:=1
Tong:=1
For i:=2 to n do
Begin
Mauso:=mauso+i-1;
Tong:=tong+1/mauso;
End;

- câu 3


Câu 3. Dùng 1 biến kiểu thực lưu trữ kết quả, ban đầu gán giá trị 1
Dùng vòng for cho i chạy từ 1 đến 64. Nếu i chẵn thì kq=kq x (x-i) ngược lại cho kq=kq/(x-i)

dmtmufc
08-12-2007, 12:58
1.Nhập số n , in ra các số nhỏ hơn hoặc = n là số nguyên tố .
Câu này thì dễ rồi. viết 1 hàm kiểm tra số nguyên tố và dùng vòng for--> xong
for i =2 to n do
if nt(i) then write(i,' ');
{hàm nt(i):
function nt(i:byte):boolean;
var j:byte;
dd:boolean
begin
dd:=true;
for j:=2 to (i div 2) do
if i mod j =0 then dd:=false;{chỗ này dc dùng break thì tốt hơn)
nt:=dd;
end;}
2.Cho số tự nhiên n . Tính tổng dãy số sau : 1 + 1/2 + 1/4 + 1/7+...+1/n.Tính cả 1/n nếu no ko thuộc quy luật của dãy.
j:=1;
tong:=0;
for i:=1 to n-1 do
begin
if j<n do tong:=tong+1/j;
j:=j+i;
end;
tong:=tong+1/n;
3.Cho số thực x . Tính((x-2)(x-4)(x-8)...(x-64))/((x-1)(x-3)(x-7)...(x-63)).
vì ko dc dùng while.. do và rêpat thì làm thế này
tong:=1;
for i:=2 to 64 do
if i mod 2 =0 then tong:=tong*((x-i)/(x-i-1));
-->xong

nhat_truong
18-06-2009, 02:56
@KTVNguyenChien
Bài 1 của bạn sai vì 1 ko là số nguyên tố nên phải cho i chạy từ 2 đến n
Còn j nên cho chạy đến trunc(sqrt(i))

technolt
30-06-2009, 01:12
@mr_invincible: anh giải đc bài 2 với n <= 10^15 ko (ko dùng mấy thứ cao siêu nhé)
Cần 1 trick nhỏ

mr_invincible
02-07-2009, 23:09
Bài 2 anh còn ko hiểu đề +_+ Ko hiểu quy luật dãy đấy.

okmen910
03-07-2009, 09:44
bài 2 thì quy luật cũng đơn giản, tổng quát thế này lấy mẫu số của phân số trước cộng thêm cho i ta được mẫu số của phân số sau, trong đó i thuộc Z dương bắt đầu từ 1 đến m, cộng cho đến khi mẫu số bé hơn hoặc bằng n, nếu bé hơn thì cộng thêm 1/n, còn bằng thì khỏi cộng
VD:
phân số thứ nhất là 1/1
phân số thứ hai là 1/2=1/(1+1)
phân số thứ ba là 1/4=1/(2+2)
phân số thứ tư là 1/7=1/(4+3)

huysun
06-07-2009, 09:20
@KTVNguyenChien
Bài 1 của bạn sai vì 1 ko là số nguyên tố nên phải cho i chạy từ 2 đến n
Còn j nên cho chạy đến trunc(sqrt(i))
bạn ấy ko sai đâu