[Pascal ]

O

o0_zz_0o

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Mọi người giúp em kiểm tra lại bài làm của các bài tập này với vì không có text nên em không chắc chắn

Em mới học lớp 8 nên phiền mọi người giải thích lỗi sai từ từ thôi không thì em lại không hiểu



Bài 1:Cặp số hữu nghị


Hai số nguyên dương được gọi là “ hữu nghị” nếu số này bằng tổng các ước số thực sự của số kia và ngược lại (ước thực sự của một số nguyên dương là ước nhỏ hơn ước số đó, ví dụ 6 có ước thực sự là 1,2,3).Hãy tìm các cặp số hữu nghị từ 100 tới 1000.
Kết quả: đưa ra màn hình, mỗi cặp số tìm được ghi trên một dòng, số bé hơn viết trước, các số cách nhau tối thiểu mộ dấu cách.

Mã:
program Huu_Nghi;
var f,f1:text;
procedure nhap;
        begin
                assign(f1,'fo.out');
                rewrite(f1);
        end;
function uoc(so:longint):longint;
        var i,k:longint;
        begin
                k:=0;
                for i:=1 to trunc(so/2) do
                        if so mod i=0 then k:=k+i;
                uoc:=k;
        end;
procedure xuli;
        var i,j,x,y:longint;
        begin
                for i:=100 to 1000 do
                        for j:=i+1 to 1000 do
                            begin
                                x:=i;   y:=j;
                                if (uoc(x)=y) and (uoc(y)=x) then
                                        writeln(f1,i,'  ',j);
                            end;
        end;
begin
        nhap;
        xuli;
        close(f1);
end.

Bài 2: Xóa chữ số
Tìm tất cả các số có 4 chữ số thỏa mãn tính chất : Nếu xóa đi 1 chữ số nào đó thì số đó sẽ giảm đi 9 lần.
Kết quả: Đua ra màn hình, gồm nhiều dòng, mỗi dòng gồm 2 số; số thứ 1 là số có 4 chữ số thỏa mãn tính chất trên, số thứ 2 là số có 3 chữ số có được từ số trên, các số cách tối thiểu 1 dấu cách. Các dòng ghi kết quả không trùng nhau.
Dòng cuối cùng ghi số các số tìm được.
Mã:
program xoaso;
uses crt;
var f:text;
    tam:longint;
procedure nhap;
begin
        assign(f,'xoa.out');
        rewrite(f);
end;
procedure xoa(so:longint);
var  ch,ch1:string;
        z:integer;
        i:longint;
begin
      str(so,ch);
      ch1:=ch;
        for i:=1 to 4 do
                begin
                        delete(ch1,i,1);
                        val(ch1,tam,z);
                        if tam=so/9 then
                                begin
                                        writeln(f,so,'  ',tam);
                                        break;
                                end;
                         ch1:=ch;
                end;
end;
procedure xuli;
var i,x:longint;
begin
        for i:=1000 to 9999 do
                begin
                        x:=i;
                        xoa(x);
                end;
end;
begin
        nhap;
        xuli;
        close(f);
end.
Bài 3: Số Amstrong
Số tự nhiên có k chữ số, được gọi là amstrong nếu N bằng tổng các lũy thừa bậc k của các chữ số của nó.
Ví dụ 153= 13+53+33
Hãy tìm tất cả các số amstrong có k chữ số với 3<=k<=6;
Kết quả: Mỗi số được tìm viết trên một dòng.
Dòng cuối cùng ghi số các số tìm được.

Mã:
program Amstrong;
var f,f1:text;
    k,n,m:longint;
procedure nhap;
        var i:longint;
        begin
                assign(f,'fi.inp');
                assign(f1,'fo.out');
                reset(f);
                readln(f,k);
                rewrite(f1);
                close(f); n:=1; m:=1;
                for i:=1 to k-1 do
                        begin
                                n:=n*10;
                                m:=m*10;
                        end;
                m:=m*10-1;
        end;
procedure ams(var so:longint);
        var i,tong,tam,j,a:longint;
            ch:string;
            z:integer;
        begin
                tong:=0;
                str(so,ch);
                for i:=1 to k do
                        begin
                                val(ch[i],tam,z);
                                a:=tam;    tam:=1;
                                for j:=1 to k do
                                        begin
                                                tam:=tam*a;
                                        end;
                                tong:=tong+tam;
                        end;
                if tong=so then writeln(f1,so);
        end;
procedure xuli;
        var i,x:longint;
        begin
                for i:=n to m do
                        begin
                                x:=i;
                                ams(x);
                        end;
        end;
begin
        nhap;
        xuli;
        close(f1);
end.
 
D

danghoangyennhi1998

đây là bài tập lớp 8 hả bạn? lớp 8 chưa học cặp số hữu nghị với số amstrong mà bạn!
 
D

danghoangyennhi1998

Nhưng hình như kỳ II mới học anh ạ, chắc bạn này thi sớm, anh biết thì check dùm bạn ấy đi :)
 
T

tg06031997

bạn ơi cái bài này là đề thi học sinh giỏi năm 2010 mà.
còn bài xoáy ốc bạn không up lên cho mọi người?
 
T

tminhhht12

Giúp tôi giải bài pascal này với các huynh ơi

Đầu tiên , một dãy số gồm 1 số 1 được nhập vào máy tính. Tại mỗi bước tiếp theo máy sẽ biến đổi đồng thời mỗi số 1 thành số 0 1, mỗi số 0 thành 1 0. Như vậy sau bước đầu ta có dãy 0 1, sau bước 2 có dãy 1 0 0 1 và cứ thế tiếp tục. Viết chương trình tìm xem sau n bước ( 2=<n<=20) có bao nhiêu số 0 trong dãy được tạo ra ( VD sau bước 2 như trên ta có 1 cặp số 0)
 
O

o0_zz_0o

bạn ơi cái bài này là đề thi học sinh giỏi năm 2010 mà.
còn bài xoáy ốc bạn không up lên cho mọi người?
Đề hsg nào bạn ? Xin lỗi mình không biết, còn bài xoắn ốc có phải bài nhập n rồi xuất ra các số từ 1 -> n theo mảng xoắn ốc ko ?
nếu phải thì bài của mình đây
program fdsa;
uses crt;
var f,f1:text;
a:array[1..100,1..100] of longint;
n,m,k,so,dong,cot,i,j,dem:longint;
begin
assign(f,'so.inp');
assign(f1,'so.out');
reset(f);
read(f,n,m);
rewrite(f1);
i:=0;
j:=0;
dong:=n;
cot:=m;
so:=n*m;
k:=0;
dem:=1;
repeat
i:=i+1;
repeat
if k<so then
begin
j:=j+1;
if j <= cot then
begin
k:=k+1;
a[i,j]:=k;
end;
end;
until (k=so)or (j=cot);
repeat
if k<so then
begin
i:=i+1;
if i <= dong then
begin
k:=k+1;
a[i,j]:=k;
end;
end;
until (k=so)or (i=dong);
repeat
if k<so then
begin
j:=j-1;
if j >= dem then
begin
k:=k+1;
a[i,j]:=k;
end;
end;
until (k=so)or (j=dem);
repeat
if k<so then
begin
i:=i-1;
if i> dem then
begin
k:=k+1;
a[i,j]:=k;
end;
end;
until (k=so)or (i=dem);
dong:=dong-1;
cot:=cot-1;
dem:=dem+1;
until so=k;
for i:=1 to n do
begin
for j:=1 to m do
write(f1,a[i,j],' ');
writeln(f1);
end;
close(f);
close(f1);

end.


Làm thế này cho nó phây sần = ))
 
Top Bottom