Cho mình hỏi về bài toán này 1 chút

HTML:
const   fi='TS.INP';
        fo='TS.INP';
type mmc=array[0..32000] of word;
var  a:mmc;
     f:text;
     n,d:word;
     i,x:word;
     Time:Longint;Times:Longint absolute 0:$46C;
Begin
  Time:=Times;
  Fillchar(A,sizeof(A),0);
  assign(f,fi);
  reset(f);
  readln(f,n);
  For i:=1 to n do
    Begin
      read(f,x);
      a[x]:=a[x]+1;
    End;
  close(f);
  assign(f,fo);
  rewrite(f);
  For i:=0 to 32000 do
    if a[i]>1 then writeln(f,i,' ',a[i]);
  close(f);
  Writeln((Times-Time)/18.2:0:0);
  Readln;
mình hỏi thế này, ở bài này mình có cần phải khởi tạo mảng Fillchar(A,sizeof(A),0); nữa không.vì ban đầu mảng này mắc định = 0 rồi,
 

phamthanhnhan

(。◕‿‿◕。) づ
không nhất thiết làm vậy nhưng theo mình được biết thì trong một số trường hợp nhất định thì có thể sinh lỗi (ngoài việc fillchar thì có lúc sẽ có những người gán cho biến với giá trị bằng 0 trước khi thực thi), các lỗi thường là do trong quá trình đệ quy.
 

tengiday

Happy life
Trong trường hợp của bạn thì fillchar ko cần thiết bởi vì compiler sẽ làm điều này. Tuy nhiên, bạn cần hiểu rõ Pascal language ko có quy định giá trị khởi tạo cho tất cả các biến. Cho nên fillchar là một thói quen tốt để đảm bảo mảng đc khởi tạo đúng giá trị ban đầu mà bạn muốn. Sau này khi học những ngôn ngữ khác như C, Java, Python,... thì bạn sẽ thấy giá trị ban đầu của mấy biến này toàn là "rác" cả và cần khởi tạo.
Khởi tạo dùng fillchar sẽ nhanh hơn nhiều so với dùng vòng for để gán giá trị.
 
Top