2013-05-08 2 views
1

레코드 파일을 정렬해야하지만 어떻게해야하는지 잘 모르겠습니다. 레코드 파일이 있는데 간단한 버블 정렬을 사용하여 정렬하려고 시도했지만 붙어있어 도움이 필요합니다. 누구든지 나를 도울 수 있을까? 나는 아래 코드를 열거 할 것이다.레코드 파일 정렬 오류

HighScoreFile = file of HighScoreRecord; 


var 
frmEnterDetails: TfrmEnterDetails; 
HighScoreMasterFile: HighScoreFile; 
HighScore:HighScoreRecord; 
FileArray:array[1..20] of HighScoreRecord; 
i:integer; 

Procedure Sort 
var 
    i,j,temp:integer; 

AssignFile(HighScoreMasterFile, 'HighScores.dat'); 
Reset(HighScoreMasterFile); 
while not eof(HighScoreMasterFile) do 
begin  
    i:=i+1; 
    read(HighScoreMasterFile, HighScore); 
    FileArray[i].Name:=HighScore.Name; 
    FileArray[i].Date:=HighScore.Date; 
    FileArray[i].FinalScore:=HighScore.FinalScore; 

    for i:=0 19 do 
    for j:=0 to 18 do 
     if FileArray[j].Score > FileArray[j+1].Score then 
     begin 
      FileArray[temp]:=FileArray[j]; 
      FileArray[j]:=FileArray[j+1]; 
      FileArray[j+1]:=FileArray[temp]; 
     end; 
end; 

도움이 될 것입니다.

+0

정렬 절차가 불완전합니다. 'i'는 초기화되지 않았습니다. Indexing FileArray는 for 루프에서 1로 시작해야합니다. 'temp'는 결코 초기화되지 않습니다. 'i'는 for 루프에서 사용되지 않습니다. –

+0

또한 파일을 읽는 동안 정렬을합니다. 전체 파일을 읽은 후 그 파일을 정렬하십시오. – RBA

+0

도와 줘서 고마워. – user2180030

답변

0

올바른 것은 아닙니다 100 %, 나는 IDE에서 테스트하지 않았습니다. 디버거를 사용하여이 알고리즘이 단계별로 어떻게 작동하는지 확인할 수 있습니다. 또한이 링크는 거품 정렬이 어떻게 작동 하는지를 잘 설명합니다 http://delphi.wikia.com/wiki/Bubble_sort.

HighScoreFile = file of HighScoreRecord; 


    var 
    frmEnterDetails: TfrmEnterDetails; 
    HighScoreMasterFile: HighScoreFile; 
    HighScore:HighScoreRecord; 
    FileArray:array[1..20] of HighScoreRecord; 
    i:integer; 

    Procedure Sort 
    var 
     i,j,temp:integer; 
    begin 
    AssignFile(HighScoreMasterFile, 'HighScores.dat'); 
    Reset(HighScoreMasterFile); 
    i := 0; 
    while not eof(HighScoreMasterFile) do 
    begin  
     i:=i+1; 
     read(HighScoreMasterFile, HighScore); 
     FileArray[i].Name:=HighScore.Name; 
     FileArray[i].Date:=HighScore.Date; 
     FileArray[i].FinalScore:=HighScore.FinalScore; 
    end; 

     for i:=1 to 19 do 
     for j:=1 to 18 do 
      if FileArray[i].Score > FileArray[j+1].Score then 
      begin 
       temp := i; 
       HighScore := FileArray[temp]; 
       FileArray[temp]:=FileArray[j]; 
       FileArray[j]:=HighScore; 
      end; 
    end; 
+0

레이블을 사용하여 배열을 표시하려면이 같은 것을 사용합니까? lblScore1.Caption : = FileArray [1] .HighSore.FinalScore – user2180030