# GÓC SÁNG TẠO > Khu vực lập trình > Pascal/Delphi/Kylix >  ai giỏi pascal thì giúp em với !!!

## muadongvinhcuu

Ai làm giúp em với !
Cho dãy số đc viết lien tiếp như sau:
123456789101112131415161718192021222324252627…  ..
Nhập 1 số n từ bàn phím (N<=10^9),sau đó hiện số thứ n trong dãy trên màn hình.
VD:nhập n = 21 thì hiện ra kq=5.
(bài này đc sử dụng vòng lặp for , repeat…until,while…do… để giải )

----------


## duykhoa

UCLN:


```
var a,b:longint;
begin
      readln(a,b);
      if a<>b then
      repeat
            if a>b then dec(a,b)
               else dec(b,a); 
      until a=b;
      write('UCLN=',a);
      readln;
end.
```


BCNN=(a*b)/UCLN.
Cách cộng phân số (a/b +c/d):
- Đặt e=a*d+b*c.
- Đặt f=b*d.
- Sử dụng tìm UCLN của bài trên để tìm cho e và f. Sau đó e=e div UCLN. f=f div UCLN.
- In e,'/',f.
_Bài dãy số vô hạn 10 và bài fibonacy đã có topic nói đến, bạn hãy tìm kiếm trước khi post bài._

----------


## saudom

*5*.Nhập từ bàn phím số nguyên dương n .đếm xem n có bao nhiêu chữ số .
*6*.Nhập từ bàn phím số nguyên dương n . tính cổng các chữ số của n.

anh binhnguyen có thế làm giúp em 2 bài này đc ko ạ ? 
còn về bài dãy số kia thì anh có thể cho em địa chỉ topic đc ko anh .chứ nếu ko chẳng biết đường nào mà tìm

----------


## nguyen_phuonglien

Link đây:http://www.diendantinhoc.vn/showthread.php?t=30313

5+6./


```
uses crt;
var s:string;n,e:integer;i,a:byte;sum:longint;
begin
     write('n=');
     readln(n);
     str(n,s);
     write('n co ',length(s),' chu so ');
     sum:=0;
     for i:=1 to length(s) do
         begin
              e:=0;
              val(s[i],a,e);
              inc(sum,a);
         end;
     write('Tong cac chu so la: ',sum);
     readln;
end.
```

----------


## talkmylove

*8*.Cho 2 số nguyên n,m(1<=n,m<=10^5).Hiện ra màn hình chữ số cuối cũng của n^m.
*9*.Cho 2 số nguyên n,m(1<=n,m<=10^5). Hiện ra màn hình hai chữ số cuối cũng của n^m.


```
var s:qword;
    i,n,m:longint;
begin
   write('LAN LUOT NHAP N & M : ');readln(n,m);
   s:=1;i:=0;
   while i<m do
      begin
         s:=s*n;
         s:=s mod 100;
         inc(i);
      end;
   writeln('SO CUOI CUNG CUA N^M : ',s mod 10);
   writeln('2 SO CUOI CUNG CUA N^M : ',s mod 100);
   readln
end.
```

!!!

----------


## quocbaonh08

> var n,code,i,tg:longint;
> s:string;
> begin
> readln(n);
> i:=0;
> tg:=1;
> repeat
> str(i,s);
> tg:=length(s);
> ...


anh binhnguyen ơi bài dãy số vô có dạng như trên . Nhưng mà tụi em lại chưa đc học tới mấy hàm như là str , length và cả s[n] nữa . Anh có thể đơn giản hóa lại bài làm bằng mấy hàm thủ tục đơn giản đc không ạ . em cám ơn anh !

----------


## dathoaonline

*12*.Lập trình nhậo số thực x và số nguyên n.Rồi tính:
S:=x^n+x^(n-1)+x^(n-2)+…+x^2+x+1




```
var x,n:longint;
    s:qword;
begin
   write('NHAP LAN LUOT X & N : ');readln(x,n);
   s:=x+1;
   dec(n);
   while n<>0 do
      begin
         s:=x*s+1;
         dec(n);
      end;
   write('F(X) = ',s);
   readln;
end.
```

----------


## thiendung

*5*.Nhập từ bàn phím số nguyên dương n .đếm xem n có bao nhiêu chữ số .
*6*.Nhập từ bàn phím số nguyên dương n . tính cổng các chữ số của n.



```
var s,n,x,d:longint;
begin
   write('NHAP N : ');readln(n);
   d:=0;s:=0;
   repeat
      x:=n mod 10;
      n:=n div 10;
      inc(d);
      s:=s+x;
   until n=0;
   writeln(n,'CO ',d,' CHU SO');
   writeln('TONG CAC CHU SO CUA N ',s);
   readln;
end.
```

có lẽ bạn chỉ nên lấy các bài này làm bài đối chiếu kq thôi
mấy bài dạng này chỉ là giúp bạn làm quen với các vòng lặp thôi, phải tự làm mới được
chúc bạn thành công !!!

----------


## nam123

bí quá em mới hỏi . Chứ nếu làm đc thì em hỏi làm gì

----------


## saogacon89

> Ai làm giúp em với !
> Cho dãy số đc viết lien tiếp như sau:
> 123456789101112131415161718192021222324252627…  ..
> Nhập 1 số n từ bàn phím (N<=10^9),sau đó hiện số thứ n trong dãy trên màn hình.
> VD:nhập n = 21 thì hiện ra kq=5.
> (bài này đc sử dụng vòng lặp for , repeat…until,while…do… để giải )


http://diendantinhoc.vn/showthread.php?t=30313

----------


## nguyenquyhuong

> http://diendantinhoc.vn/showthread.php?t=30313


 vì bọn em chưa học mấy hàm str , length , .. chị có thể viết lại giúp em bằng mấy hàm đơn giản đc không chị !
Em cám ơn !

----------


## bedaukute22

bạn học chuỗi chưa ?
------------------------

----------


## chicilonmedia

tụi em mới chỉ họi tới :lệnh rẽ nhánh , lệnh lặp và các hàm đơn giản như là : abs,inc,sqr,sqrt
còn chuỗi thì chưa chị ạ [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

----------


## yurycandy

có ai giúp em với !! em sắp phải nộp bài rồi

----------


## mewxu

chưa học string thì mình chịu 
-----------------------------

----------


## baoxuyen368

> chưa học string thì mình chịu 
> -----------------------------


 Chị Hằng ơi, Nguyên khi xưa có thử tính bằng công thức, nhưng rất phức tạp nếu không sử dụng string . Với giới hạn 2.000.000.000 chương trình đã rất phức tạp.

----------


## phimzalo

- Thuật toán tối ưu là thuật toán đúng và đạt tới giới hạn của bài toán => Thuật toán chưa phải là thuật toán tối ưu
- Bài này string thì tối ưu nhất
- E post thuật toán lên tham khảo

----------


## mainguyen

> - Thuật toán tối ưu là thuật toán đúng và đạt tới giới hạn của bài toán => Thuật toán chưa phải là thuật toán tối ưu
> - Bài này string thì tối ưu nhất
> - E post thuật toán lên tham khảo


 Đây thưa chị Hằng. Nhưng cách làm này rất tốn tài nguyên bộ nhớ, tuy số lần vòng lặp khá ít với số lớn so với cách làm theo chuỗi, tất nhiên, cách này đáp ứng yêu cầu không dùng chuỗi:


```
uses crt;
var a,b,c:array[1..9] of longint;i,j,k,m:byte;x,tam,so,n,thutu,sum:longint;
begin
     clrscr;
     a[1]:=1;
     a[2]:=10;
     a[3]:=190;
     a[4]:=2890;
     a[5]:=38890;
     a[6]:=488890;
     a[7]:=5888890;
     a[8]:=68888890;
     a[9]:=788888890;
     {Tinh toan bang toan hoc}
     readln(n);
     fillchar(b,sizeof(b),0);
     fillchar(c,sizeof(c),0);
     i:=1;
     while a[i+1]<=n do inc(i); {Tim xem n co bao nhieu chu so}
     b[1]:=1;
     for j:=2 to i do
         b[j]:=b[j-1]*10;
     x:=n-a[i];
     so:=b[i]+ (x div i);
     thutu:=(x mod i)+1;
     tam:=so;
     j:=1;
     m:=i;
     repeat
           c[j]:=tam div b[m];
           tam:=tam mod b[m];
           inc(j);
           dec(m);
     until j=9;     
     write(c[thutu]);
     readln;
end.
```

----------


## phamvanhoa7592

Mấy bài này có hết trong các topic khác rồi mà. bạn chịu khó tìm nhé.

----------


## thaymatkinhiphone6s

> *5*.Nhập từ bàn phím số nguyên dương n .đếm xem n có bao nhiêu chữ số .
> *6*.Nhập từ bàn phím số nguyên dương n . tính cổng các chữ số của n.


bạn ơi chạy thử chtrinh naz:
program bai5_6;
var n,i,so,S:integer;
begin
write('nhap n: ');readln(n);
while (n<>0) do
begin
S:=S+n mod 10;
so:=so+1;
n:=n div 10;
end;
writeln('so chu so: ',so);
writeln('tong chu so: ',S);
readln;
end.

----------


## nxtk2401

Chưa học chuỗi thì chỉ có cách nhận số rồi cứ div với mod để tách chữ số ra thôi, nhưng như thế thì lâu lém.

----------


## yeuyeu90

> Chưa học chuỗi thì chỉ có cách nhận số rồi cứ div với mod để tách chữ số ra thôi, nhưng như thế thì lâu lém.


 Bài mình làm test n=10^10-1 tốc độ tốt hơn chuỗi đấy, không lâu lắm đâu.O(1) thôi, dữ liệu vào không quyết định vòng lặp. (tất nhiên vẫn có cho mảng tách 10^i, 1<=i<=10; nhưng không ảnh hưởng lớn).

----------

