# GÓC SÁNG TẠO > Khu vực lập trình > Pascal/Delphi/Kylix >  Thảo luận Pascal nâng cao!

## hc_066

*Topic này cho phép post bài tập khó, thảo luận, post code, ...
Mọi hành vi spam đều bị cảnh cáo.
*
*Chúc các bạn vui vẻ!*
​

----------


## nhumotcongio

Đăng kí trước 1 bài:
Cho 1 khu ruộng kích thước n*m, trong đó chia thành các ô ruộng đơn vị : ô i,j có độ cao nền là h[i,j]. Có 1 máy phát tại ô u,v. Hỏi lượng nước bơm vào ruộng lớn nhất là bao nhiêu để không bị tràn. Nhập,n,m,u,v và ma trận kề thể hiện độ cao của ô i,j
Vd: 5 5 3 2
8 8 8 8 8
8 8 2 3 5
8 3 2 3 8
8 8 8 8 8
8 8 8 8 8
out :12
GIải thích: bơm ở ô 3,2 và ta thấy lượng nước ở ngoài rìa nhỏ nhất để tràn ra là 5, từ ô 3,2 nước muốn tràn ra ngoài thì phải đến mức >5 ở các ô kề nó (ở đây nước chỉ tràn theo kiểu kề cạnh chứ không kề góc).

----------


## tranviettuanit

Bài 2 nè: Có 1 ma trận vuông n*m, trong đó có 1 con rắn ở ô 1,1. Trên ma trận vuông đó có đặt các chướng ngại vật và khi tới chướng ngại vật đó thì con rắn phải rẽ trái hoặc rẽ phải theo hướng đi hiện tại, con rắn không được đi tới ô đã đi qua. In ra số lượng ô mà con rắn đi được lớn nhất.
---------------------------------Bài viết đã được trộn ---------------------------------
Bài 3:
Bài trạm xăng đã post trước đây rồi.
http://diendantinhoc.vn/showthread.php?t=33172
Bài này có công thức rồi nhưng mà chả hiểu gì cả.
Công thức đây:


Gọi F[i,j] là khoảng cách min khi có i trạm xăng, j bể chứa.
F[i,j] = min (max(F[t,j-1],F1[t,i])) với t>=j-1
F1[t,j] là cách đặt tối ưu khi có 1 bể chứa, từ các cây xăng t tới cây xăng j.
Để tính hàm này, ta duyệt các cây xăng cần đặt

----------


## ngobaolac

Tọa độ của N hòn đảo trên mặt phẳng tọa độ được cho bởi n cặp số nguyên xi, yi. Trên mỗi đảo đều có chứa xăng cung cấp đầy các thiết bị chứa xăng của canô. Biết rằng mọi thiết bị chứa xăng của canô đều không thể chứa số xăng đi hết quãng đường quá M km.
​ Hãy tìm một hành trình cho canô đi từ một đảo U đến một đảo V nào đó mà số lần ghé vào các đảo lấy xăng là ít nhất (nếu có). Tên các đảo là 1, 2, …, N.
​ *Dữ liệu vào cho bởi file văn bản DAO.INP cấu trúc, dòng đầu ghi 4 số nguyên dương N, M, U, V là số đảo, quãng đường tối đa cho các thiết bị chứa xăng của canô tính bằng km, đảo xuất phát, đảo kết thúc hành trình. Các dòng tiếp theo dòng thứ i+1 trong file ghi 2 số nguyên tương ứng là tọa độ của đảo i.*
​ *Kết quả ghi vào file văn bản DAO.OUT theo cấu trúc: nếu có đường đi thì dòng thứ nhất ghi số lần ghé các đảo trung gian lấy xăng trên đường đi (trừ U, V), dòng thứ 2 ghi tên các đảo theo thứ tự ghé trên hành trình. Nếu không có đường đi thì ghi dòng NO SOLUTION.*
​


```
Input                              Output
  9 8 1 9                         3
  1 9                              1 2 9
  1 5
  3 0
  0 2
  9 4
  3 7
  15 20
  2 4
  5 2
```

*Hướng đi*
 Đây là bài toán về đồ thị vô hướng. Xem mỗi đảo là một đỉnh của đồ thị N đỉnh. Giữa 2 đảo U, V có cạnh nếu chúng thuộc một miền liên thông. Xác định đường đi ghé ít đảo nhất chính là tìm trên đồ thị đó đường đi qua ít đỉnh nhất. Dùng kĩ thuật tìm kiếm theo chiều rộng. chú ý là không cần dùng ma trận liên hợp của đồ thị mà khi xét xem giữa 2 đỉnh của đồ thị có đường đi không, chỉ cần xét đỉnh tìm được đã có trong hàng đợi chưa và khoảng cách giữa 2 đỉnh có vượt quá M không.

----------


## manhvlance

vậy bài hòn đảo này mình đọc file xong, xây dựng mảng liên thông 2 chiều, rồi loang bình thường từ U đến V

----------


## ngochan

> Đăng kí trước 1 bài:
> Cho 1 khu ruộng kích thước n*m, trong đó chia thành các ô ruộng đơn vị : ô i,j có độ cao nền là h[i,j]. Có 1 máy phát tại ô u,v. Hỏi lượng nước bơm vào ruộng lớn nhất là bao nhiêu để không bị tràn. Nhập,n,m,u,v và ma trận kề thể hiện độ cao của ô i,j
> Vd: 5 5 3 2
> 8 8 8 8 8
> 8 8 2 3 5
> 8 3 2 3 8
> 8 8 8 8 8
> 8 8 8 8 8
> out :12
> GIải thích: bơm ở ô 3,2 và ta thấy lượng nước ở ngoài rìa nhỏ nhất để tràn ra là 5, từ ô 3,2 nước muốn tràn ra ngoài thì phải đến mức >5 ở các ô kề nó (ở đây nước chỉ tràn theo kiểu kề cạnh chứ không kề góc).


bài này tôi dùng loang
chỉ tràn ra theo kiểu kề cạnh chứ ko kề góc => loang theo 4 chiều.
với mỗi lần loang, đánh dấu các ô đã đi qua.
xét : nếu ô đích đến là ô lớn hơn ô hiện tại thì nạp vô hàng đợi, còn nếu ô đích là ô có giá trị nhỏ hơn ô hiện tại (tức ô hiện tại đã là "cái viền" nếu đổ nước vô) thì ko nạp vô hàng đợi mà lưu giá trị của ô hiện tại vào 1 mảng nào đó, tạm gọi là mảng luu, còn nếu nhỏ hơn thì ko đánh dấu ô đó, và bỏ qua.
Nhưng mà điều quan trọng là ô này muốn là "viền" thì phải là "cái viền ngoài cùng", tức là nó có thể chứa lượng nước là nhiều nhất.

kq bài toán : sau khi đã có đầy đủ mảng luu, tìm giá trị min, sau đó lấy tổng sự chênh lệch giữa giá trị min đó với các ô a[i,j] mà đã được đánh dấu ( tức nằm trong ao nếu bơm đầy nước ) trừ ô viền ^^, tổng sự chênh lệch này là kq cần tìm.

hix, bài này cài đặt hơi bị dài và rối đây, nhưng tư tưởng thế là rõ rồi.

----------


## mathanhcong

Mình chưa rõ lắm bạn ơi, bạn chỉ cách tiến hành test này giúp mình nhé:
8 8 8 8 8
8 5 100 2 8 
9 8 8 8 9 
9 2 2 2 9
8 8 8 8 8
Ô có máy bơm là ô 2.3 (ô 100 đấy).
---------------------------------Bài viết đã được trộn ---------------------------------



> Tọa độ của N hòn đảo trên mặt phẳng tọa độ được cho bởi n cặp số nguyên xi, yi. Trên mỗi đảo đều có chứa xăng cung cấp đầy các thiết bị chứa xăng của canô. Biết rằng mọi thiết bị chứa xăng của canô đều không thể chứa số xăng đi hết quãng đường quá M km.
> ​Hãy tìm một hành trình cho canô đi từ một đảo U đến một đảo V nào đó mà số lần ghé vào các đảo lấy xăng là ít nhất (nếu có). Tên các đảo là 1, 2, …, N.
> ​*Dữ liệu vào cho bởi file văn bản DAO.INP cấu trúc, dòng đầu ghi 4 số nguyên dương N, M, U, V là số đảo, quãng đường tối đa cho các thiết bị chứa xăng của canô tính bằng km, đảo xuất phát, đảo kết thúc hành trình. Các dòng tiếp theo dòng thứ i+1 trong file ghi 2 số nguyên tương ứng là tọa độ của đảo i.*
> ​*Kết quả ghi vào file văn bản DAO.OUT theo cấu trúc: nếu có đường đi thì dòng thứ nhất ghi số lần ghé các đảo trung gian lấy xăng trên đường đi (trừ U, V), dòng thứ 2 ghi tên các đảo theo thứ tự ghé trên hành trình. Nếu không có đường đi thì ghi dòng NO SOLUTION.*
> ​
> 
> 
> ```
> Input                              Output
> ...


 Đọc qua thì thấy có chút gì đó QHd nhưng chưa chắc lắm, đồ thị thì rõ rồi. Thế có xài tới Qhd không anh?

----------


## linktac

> Đọc qua thì thấy có chút gì đó QHd nhưng chưa chắc lắm, đồ thị thì rõ rồi. Thế có xài tới Qhd không anh?


Em học tới phần đồ thị chưa?! Nếu chưa thì giờ em mở giáo trình của Lê Minh Hoàng ra xem phần TÌM KIẾM THEO CHIỀU RỘNG là sẽ biết ngay. [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
Theo hướng của anh thì không có QHĐ rồi.

----------


## giantapta

> Mình chưa rõ lắm bạn ơi, bạn chỉ cách tiến hành test này giúp mình nhé:
> 8 8 8 8 8
> 8 5 100 2 8 
> 9 8 8 8 9 
> 9 2 2 2 9
> 8 8 8 8 8
> Ô có máy bơm là ô 2.3 (ô 100 đấy).


cái test bạn đã cho đây có viền ngoài cùng là 
0 x x x 0
x 0 s 0 x
x x x x x 
mấy cái dấu "x" là viền, còn "s" là đỉnh xuất phát.
tìm cái min của mấy cái dấu x í, rồi lấy giá trị đó trừ đi các ô nào bị đánh dấu và có giá trị nhỏ hơn min này, trong trường hợp của bạn là (2;2) và (2;4), vậy kq = 9.
bài này cài đặt hơi bị rườm rà đây !!!

----------


## kidhero321

Biến hóa 1 chút cái test tớ cho nhé:
9 9 9 9 9
9 5 100 2 9
9 8 8 8 9
9 2 2 2 9
9 8 8 8 8
---------------------------------Bài viết đã được trộn ---------------------------------



> Em học tới phần đồ thị chưa?! Nếu chưa thì giờ em mở giáo trình của Lê Minh Hoàng ra xem phần TÌM KIẾM THEO CHIỀU RỘNG là sẽ biết ngay. [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
> Theo hướng của anh thì không có QHĐ rồi.


 Chưa học đồ thị thì sao học hình học anh. Em học rồi nhưng không thích dùng đồ thị lắm nên thử xài QHD.

----------


## hangdambao00

> Biến hóa 1 chút cái test tớ cho nhé:
> 9 9 9 9 9
> 9 5 100 2 9
> 9 8 8 8 9
> 9 2 2 2 9
> 9 8 8 8 8
> ---------------------------------Bài viết đã được trộn ---------------------------------
> 
> Chưa học đồ thị thì sao học hình học anh. Em học rồi nhưng không thích dùng đồ thị lắm nên thử xài QHD.


test này bạn cho có khác chi test kia, có đổ thêm nước vào được nữa đâu ???
kq vẫn rứa : 9

----------


## nguyennam19

> Chưa học đồ thị thì sao học hình học anh. Em học rồi nhưng không thích dùng đồ thị lắm nên thử xài QHD.


Còn anh thì học QHĐ sau đó học tới hình học và cuối cùng là đồ thị.

----------


## nanivodoi

Code bài hệ thống xăng trên các đảo.


```
Uses Crt;
Const fi = 'DAO.INP'; fo = 'DAO.OUT';
Var F : Text;
    i, n, m, u, v, d, c, so : Integer;
    td : Array[1..2, 1..200] Of Integer;
    dau : Array[1..200] Of Boolean;
    tr, hd, kq : Array[1..200] Of Byte;

Procedure DocDuLieu;
Begin
        Assign(f, fi);
        Reset(f);
        Readln(f, n, m, u, v);
        For i := 1 To n Do
                Readln(f, td[1, i], td[2, i]);
        Close(f);
        FillChar(dau, SizeOf(dau), True);
        tr[1] := 0;
        so := 0;
        Assign(f, fo);
        Rewrite(f);
End;

Function KC(i, j : Integer): Real;
Var x, y : Real;
Begin
        x := td[1, i] - td[1, j];
        y := td[2, i] - td[2, j];
        kc := Sqrt(Sqr(x)+Sqr(y));
End;

Procedure Viet;
Begin
        While tr[c] > 0 Do
        Begin
                Inc(so);
                kq[so] := hd[c];
                c := tr[c];
        End;
        Inc(so);
        kq[so] := u;
        Writeln(f, so);
        For i := so Downto 1 Do Write(f, kq[i],' ');
        Close(f);
        Halt;
End;

Procedure Hangdoi;
Begin
        d := 1;
        c := 1;
        hd[1] := u;
        dau[u] := False;
        While d <= c Do
        Begin
                For i := 1 To n Do
                If dau[i] And (kc(i, hd[d]) <= m) Then
                Begin
                        Inc(c);
                        hd[c] := i;
                        dau[i] := False;
                        tr[c] := d;
                        If i = v Then Viet;
                End;
                Inc(d);
        End;
        Writeln(f, 'NO SOLUTION!');
        Close(f);
End;

BEGIN
        DocDuLieu;
        Hangdoi;
End.
```

----------


## noithatdn

bài em này !!!
ôn lại loang 1 tẹo !!!


```
const fi='DAO.INP';
      fo='DAO.OUT';
var f:Text;
    n,m,s,t:longint;
    kt:boolean;
    x,y,hd,dem,trc:array[1..200] of longint;
    dd:array[1..200] of boolean;
    a:array[1..200,1..200] of byte;
procedure docfile;
var i:longint;
    tg:longint;
begin
   assign(f,fi);
   reset(f);
   readln(f,n,m,s,t);
   tg:=s;
   s:=t;
   t:=tg;
   for i:=1 to n do readln(f,x[i],y[i]);
   close(f);
end;

procedure khoitao;
var i,j:longint;
begin
   fillchar(dd,sizeof(a),0);
   for i:=1 to n do
      for j:=1 to n do
         if sqrt(sqr(x[i]-x[j])+(sqr(y[i]-y[j])))<=m then
            begin
               a[i,j]:=1;
               a[j,i]:=1;
            end;
end;

procedure loang;
var d,c,u,v:longint;
begin
   kt:=true;
   fillchar(dd,sizeof(dd),true);
   d:=1;c:=1;
   hd[d]:=s;
   dem[s]:=0;
   dd[s]:=false;
   repeat
      u:=hd[d];
      for v:=1 to n do
         if dd[v] and (a[u,v]=1) then
            begin
               inc(c);
               hd[c]:=v;
               dd[v]:=false;
               trc[v]:=u;
               dem[v]:=dem[u]+1;
               if v=t then exit;
            end;
      inc(d);
   until d>c;
   kt:=false;
end;

procedure ghifile;
begin
   assign(f,fo);
   rewrite(f);
   if kt=false then writeln(f,'NO SOLUTION!')
   else
      begin
         writeln(f,dem[t]-1);
         repeat
            write(f,t,' ');
            t:=trc[t];
         until t=s;
         writeln(f,t);
      end;
   close(f);
end;

begin
   docfile;
   khoitao;
   loang;
   ghifile;
end.
```

----------


## nuhoang

> test này bạn cho có khác chi test kia, có đổ thêm nước vào được nữa đâu ???
> kq vẫn rứa : 9


 Test đấy đổ thêm vào được mà, những ô 8 và 2 có thể cho nước tràn sang mà vẫn chưa tràn ra ngoài khu ruộng.
Anh Haso học hình trước đồ thị sao? Em thấy hình khó hơn mà. Nhưng thế cũng chẳng sao, có tiền bối chỉ dạy là tốt rồi.
NGHỈ DIỄN ĐÀN 1 TUẦN ÔN THI TỈNH (THỨ 3, 4 TUẦN SAU). HIC HIC NHỚ MỌI NGƯỜI LẮM.

----------


## khanhnguyen12021

Anh Haso có biết hàm theta không? Trong sách ghi là tính "góc" hợp bởi 2 điểm p1, p2 với phương ngang, tuy ko phải là góc chính xác, nhưng vẫn giữ nguyên thứ tự. Câu nè chẳng hiểu sách viết gì, anh biết ko giải thích cho em cái.
Mà cả phần xử lí bit nữa, mấy cái tắt, bật, đảo bit nữa, mới học qua chưa hiểu gì cả.

----------


## linht1106k1

> Test đấy đổ thêm vào được mà, những ô 8 và 2 có thể cho nước tràn sang mà vẫn chưa tràn ra ngoài khu ruộng.


ý bạn là sao, 
đổ nước cao tới 8 mà tràn được sang các ô cao 2 bên dưới àh ???
nói như thế thì cái test ban đầu liệu bạn có được đổ lên 5 ko ???
mà test sau này, muốn lan sang các ô 2 bên dưới thì nó phải đổ nước lên 9, mới vượt sang các ô 8 được chứ !!!
bạn muốn gì đây ???

----------


## pesttykl

Không đâu, bạn hiểu theo thực tế nhé, khi mực nước dâng tới 8 là bắt đầu tràn sang các ô 8, tràn sang ô 2 - chảy tới ô thấp nhất trước. NHư vậy thì nước vẫn sang được mấy ô 8 và 2. Thế mới hóc chứ. Tới giờ vẫn chưa làm được bài này test đúng 100%.
Sắp thi rồi mà còn nhiều vấn đề lơ mơ quá. Ai giúp mình cái hàm inside xác định 1 điểm có nằm trong 1 đa giác không với. Sao cài y như trong sách mà vẫn sai thế này.

----------


## thomtomtit

nếu thế thì bạn làm gì đổ nước lên 8 được, vì ko có cớ gì nước từ ô 8 tràn sang ô 2 được mà lại ko được tràn ra ngoài rìa !!!
và nếu thế thì cái test ban đầu bạn cũng đâu có được bơm lên 5, vì nó tràn ra rìa rồi còn đâu nữa

----------


## tuanlucki

Test đầu tiên coi như bỏ qua. Test thứ 2 mình cho là có các rìa đều là 9 nên thoải mái tràn qua 8 tới các ô nhỏ hơn mà chưa sợ tràn.

----------


## mewxu

Chán quá bài mình post chưa ai có code hoàn chỉnh à. Thử làm BFS rồi, nhưng có những test mà các khu vực chia thành nhiều vùng, thì BFS die. 
Có TOPIC đề thi Nam Định rùi mọi người zo đi nào, topic này có vẻ ít dân quá, kiểm ra thì có 3 mem thôi à, chán mún chết

----------


## vasmobifone

> Code bài hệ thống xăng trên các đảo.
> 
> 
> ```
> Uses Crt;
> Const fi = 'DAO.INP'; fo = 'DAO.OUT';
> Var F : Text;
>     i, n, m, u, v, d, c, so : Integer;
>     td : Array[1..2, 1..200] Of Integer;
> ...


Dưới đây là đoạn code chứng minh đoạn code trên đây là hoàn toàn chính xác.


```
        Const fi = 'dao2.inp'; fo = 'dao2.out';

        Type dao = record
                x, y : Integer;
             End;
             mangso = Array[1..100] of Integer;

        Var f, g : Text;
            a    : Array[1..100] of dao;
            b, c : mangso;
            DD   : Array[1..100] of Boolean;
            DDmin, dem, d, dau, dich, n, sn : Integer;
            m    : Real;
            Good : Boolean;

{=== Mo file ===}
        Procedure Openf;
        Begin
                Assign(f, fi);  Reset(f);
                Assign(g, fo);  Rewrite(g);
        End;

{=== Dong file ===}
        Procedure Closef;
        Begin
                Close(f);       Close(g);
        End;

{=== Input ===}
        Procedure Input;
        Var k : Integer;
        Begin
                Readln(f, n, m, dau, dich);
                For k := 1 to n do Readln(f, a[k].x, a[k].y);
                FillChar(b, SizeOf(b), 0);
                FillChar(c, SizeOf(c), 0);
                FillChar(DD, SizeOf(DD), False);
                DDMin := Maxint;
        End;

{=== Print ===}
        Procedure Print(x : mangso; sl : Integer);
        Var k : Integer;
        Begin
                Inc(sn);
                For k := 1 to (sl - 1) do Write(g, x[k], ' ---> ');
                Writeln(g, x[sl]);
        End;

{=== Tinh Khoang Cach ===}
        Function KC(i, j : Integer) : Real;
        Begin
                KC := sqrt(sqr(abs(a[i].x-a[j].x))+sqr(abs(a[i].y-a[j].y)));
        End;

{=== Vet ===}
        Procedure Try(i : Integer);
        Var j, k : Integer;
        Begin
                If d = dich then
                Begin
                        Print(b, dem);
                        If (sn = 1) Or (dem < DDMin) then
                        Begin
                                DDMin := dem;
                                FillChar(c, SizeOf(c), 0);
                                For k := 1 to dem do c[k] := b[k];
                        End;
                End;
                For j := 1 to n do
                Begin
                        If (j <> i) And (Not DD[j]) then
                        Begin
                                Good := True;
                                For k := 1 to dem do
                                If (a[j].x = a[k].x) And (a[j].y = a[k].y) then Good := False;
                                If Good And (KC(i, j) <= m) then
                                Begin
                                        Inc(dem);
                                        b[dem] := j;
                                        DD[j] := True;
                                        d := j;
                                        Try(d);
                                        b[dem] := 0;
                                        Dec(dem);
                                        DD[j] := False;
                                End;
                        End;
                End;
        End;

{=== Xu li ===}
        Procedure Process;
        Begin
                sn := 0;
                dem := 1;
                b[1] := dau;
                Try(dau);
                If DDMin > 0 then
                Begin
                        Writeln(g, 'Tong so duong di : ',sn);
                        Writeln(g, 'Duong di toi uu  : ');
                        Print(c, DDMin);
                End
                Else
                Writeln(g, 'Khong cos duong di toi uu tu ',dau,' den ',dich);
                Closef;
        End;

{=== MAIN ===}
        BEGIN
                Openf;
                Input;
                Process;
        END.
```

Chúc các bạn học tốt!

----------


## evashopping

_Đề bài:_ Cho dãy số nguyên b: b[1],b[2],...,b[n]. Tìm dãy số nguyên a sao cho:
b[I]=a[i-1]+a[I]+a[i+1] với a[n]=a[0], a[n+1]=a[1].

Mình giải như sau:



```
const fi='dulieu.inp';
      fo='ketqua.out';
var a,b:array[0..300] of real;
    f:text;
    tong,tong1,tong2,tong3:real;
    N,i:integer;

procedure nhap;
  var i:integer;
  begin
     assign(f,fi);
     reset(f);
     readln(f,N);
     for i:=1 to N do read(f,b[i]);
     close(f);
  end;

procedure tim_a(i:integer);
  var k:integer; tam:real;
  begin
     tam:=tong;
     k:=2;
     while k+1<i do
         begin
            tam:=tam-b[k];
            inc(k,3);
         end;
     while k-1>i do
         begin
            tam:=tam-b[k];
            dec(k,3);
         end;
     if N mod 3 = 1 then a[i]:=tam
         else a[k-1]:=b[k]-tam;
  end;

procedure xuly;
  var i:integer;
  begin
     assign(f,fo);
     rewrite(f);
     for i:=1 to N do tong:=tong+b[i];
     tong:=tong/3;
     i:=1;
     while i<=N do
        begin
           tong1:=tong1+b;
           tong2:=tong2+b[i+1];
           tong3:=tong3+b[i+2];
           inc(i,3);
        end;
     if tong = trunc(tong) then
             begin
                If N mod 3 = 0 then
                    if (tong1=tong2) and (tong2=tong3) then write(f,'VO SO NGHIEM')
                        else
                           begin
                              for i:=1 to N do tim_a(i);
                              if a[0]<>0 then a[n]:=a[0];
                              for i:=1 to N do write(f,a:0:0,'   ');
                           end;
             end
        else write(f,'VO NGHIEM');
     close(f);
  end;

BEGIN
   nhap;
   xuly;
END.

```

_Nhưng kết quả không in ra file ketqua.out. Rõ ràng tư duy không có gì sai. Mình nghĩ thủ tục tim_a lỗi nhưng không biết khắc phục thế nào.
Mong mọi ng giúp đỡ [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]_

----------


## TruongTamPhong

Mọi người check giúp mình chương trình trên đi.
Mình nghĩ thủ tục *tim_a* có vấn đề. Mình đang băn khoăn trong thủ tục *tim_a* thì tham số đưa vào là *i*, nhưng biến *k* hoàn toàn có thể xác định theo *i*. Vậy kết quả sau khi thực hiện thủ tục có biến *k* nhưng biến *k* lúc đó được xác định rõ ràng, có thể nói là hằng số. Như thế có được không?

----------


## thangemxuananh

Làm thế nào để sắp xếp 1 dãy theo thứ tự từ điển.
VD: cho dãy :1,2,3,…,11 sắp xếp thành:1,10,11,2,3,4,…9
Ai biết giúp em với. em thank trước

----------


## nguyenduong2402

> Làm thế nào để sắp xếp 1 dãy theo thứ tự từ điển.
> VD: cho dãy :1,2,3,…,11 sắp xếp thành:1,10,11,2,3,4,…9
> Ai biết giúp em với. em thank trước


 Gọi N là độ dài của chữ số dài nhất. 
Thêm các số 0 vào trước các số có độ dài chữ số <N.
Sắp xếp bình thường [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

----------


## minhkiet0907

> Gọi N là độ dài của chữ số dài nhất. 
> Thêm các số 0 vào trước các số có độ dài chữ số <N.
> Sắp xếp bình thường [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]


 Em hơi kém :emlaugh: , anh có thể chỉ rõ hơn cho em được không ạ [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

----------

