Pascal: SOLUTIONS BÀI TẬP 8
Giải phóng thời gian, khai phóng năng lực
Bài tập 8.1:
Mã chương trình:
Cách 1:
Program Tach_so; Var haisodau, haisocuoi, i : integer; Begin Writeln('cac so thoa man dieu kien gom co'); For i:=1000 to 9999 do Begin haisodau:=i Div 100; {lay 2so dau tien ab} haisocuoi:=i mod 100; {lay 2so cuoi cd} If i=SQR(haisodau+haisocuoi) then write(i:5); End; Readln; End.
Cách 2:
Program Xet_so; Var a,b,c,d : integer; Begin Writeln('cac so thoa man dieu kien gom co'); For a:=1 to 9 do For b:=0 to 9 do For c:=0 to 9 do For d:=0 to 9 do If i=(1000*a + 100*b + 10*c+ d) = SQRT(10*a+b + 10*c+d) then write(i:5); Readln; End.
Bài tập 8.2:
Mã chương trình:
Program Chu_so_thu_k; Var M: array[1..10] of integer; so: Longint; i,k:integer; Begin Write('Nhap so: ');Readln(so); so:=abs(so); Write('Nhap k: ');Readln(k); i:=0; While so>0 do begin i:=i+1; M[i]:=so mod 10; so:=so div 10; end; Write('Chu so thu ',k,'la: ',M[i-k+1]); Readln; End.
Nhận xét :
Nếu bài toán yêu cầu tìm chữ số thứ k tính từ phải sang trái thì đơn giản hơn nhiều. Lúc đó ta chỉ cần xóa k-1 chữ số cuối. Rồi lấy chữ số cuối.
Bài tập 8.3:
Mã chương trình:
Program So_bac_thang; Var i,n1,n2: integer; Function BT(n:integer):Boolean; Var ok: boolean; so:byte; Begin ok:=true; While n>=10 do Begin so:=n mod 10; n:=n div 10; if so < (n mod 10) then ok:=ok and false; End; BT:=ok; End; Begin Write('Nhap so n1: ');Readln(n1); Write('Nhap so n2: ');Readln(n2); For i:= n1 to n2 do if BT(i) then Write(i:4); Readln End.
Bài tập 8.4:
Mã chương trình:
Program Doi_co_so; Var n,s: longint; Function D10_CS(n:longint;s:byte):string; Var CS: array[0..100] of char; i: integer; ch:Char; Tam:string; Begin {Khoi tao cac chu so 0 den 9} i:=0; ch:='0'; while i<=9 do Begin CS[i]:=Ch; inc(i); inc(ch); End; {Khoi tao cac chu so A den Z} i:=10; ch:='A'; While ch<'Z' do Begin CS[i]:=ch; inc(i); inc(ch); End; tam:=''; While n<>0 do Begin tam:= CS[n mod s]+ Tam; n:=n div s; End; D10_CS:=Tam; End; Begin Write('Nhap n:');Readln(n); Write('Doi sang co so: ');Readln(s); Write(D10_CS(n,s)); Readln End.
Bài tập 8.5:
Mã chương trình:
Program Doi_co_so; Var n: String; s:byte; Function DCS_10(st:String;s:byte):longint; Var CS1: array['0'..'9'] of byte; CS2: array['A'..'Z'] of byte; ch:Char; i:byte; Tam:longint; Begin i:=0; ch:='0'; while i<=9 do Begin CS1[ch]:=i; inc(i); inc(ch); End; i:=10; ch:='A'; While ch<'Z' do Begin CS2[ch]:=i; inc(i); inc(ch); End; Tam:=0; While st<>'' do Begin ch:=st[1]; if (ch>='0') and (ch<='9') then Tam:=Tam*s+CS1[ch] else Tam:=Tam*s+CS2[ch]; Delete(st,1,1); End; DCS_10:=Tam; End; Begin Write('Nhap n:');Readln(n); Write('Co so cua so vua nhap: '); Readln(s); Write(DCS_10(n,s)); Readln End.
Bài tập 8.6:
Mã chương trình:
Program Do_ben; uses crt; Var n,d,i,j,max:longint; Function TICH(n:Longint):Longint; Var tam:integer; Begin if n=0 then tam:=0 else tam:=1; While n<> 0 do Begin Tam:=tam*(n mod 10); n:=n div 10; End; TICH:=Tam; End; Begin clrscr; Write('Nhap n:');Readln(n); Max:=0; For i:=1 to n do Begin d:=0; j:=i; gotoxy(1,2); Write('Dang duyet den so: ',i); While j>9 do Begin d:=d+1; j:=TICH(j); End; if d>=Max then Begin max:=d; gotoxy(1,3); Writeln('So co do ben lon nhat dang la ',i,' do ben la:',d); End; End; Gotoxy(1,4); Writeln('Da duyet xong'); Readln End.
Giải phóng thời gian, khai phóng năng lực