StartprogrammingusingObjectPascal:SortingStudentsMarks

From 흡혈양파의 번역工房
Jump to: navigation, search

학생 성적 정렬하기

program smSort;  // Students marks sort

{$mode objfpc}{$H+}

uses
    {$IFDEF UNIX}{$IFDEF UseCThreads}
    cthreads,
    {$ENDIF}{$ENDIF}
    Classes
    { you can add units after this };

type
    TStudent = record
        StudentName: string;
        Mark: Byte;
    end;

procedure BubbleSort(var X: array of TStudent);
var
    Temp: TStudent;
    i: Integer;
    Changed: Boolean;

begin
    repeat
        Changed:= False;
        for i:= 0 to High(X) - 1 do
            if X[i].Mark < X[i + 1].Mark then
            begin
                Temp:= X[i];
                X[i]:= X[i + 1];
                X[i + 1]:= Temp;
                Changed:= True;
        end;
    until not Changed;
end;

var
    Students: array [0 .. 9] of TStudent;
    i: Integer;

begin
    Writeln('Please input 10 student names and marks');
    for i:= 0 to High(Students) do
    begin
        Write('Student #', i + 1, ' name : ');
        Readln(Students[i].StudentName);

        Write('Student #', i + 1, ' mark : ');
        Readln(Students[i].Mark);
        Writeln;
    end;
    BubbleSort(Students);
    Writeln;
    Writeln('Marks after Bubble sort: ');
    Writeln('----------------------');

    for i:= 0 to High(Students) do
    begin
        Writeln('# ', i + 1, ' ', Students[i].StudentName,
            ' with mark (', Students[i].Mark, ')');
    end;
    Write('Press enter key to close');
    Readln;
end.

버블 정렬 알고리즘은 매우 단순하고, 프로그래머가 기억할 수 있습니다. 오직 데이터양이 적고 거의 정렬된 상태일 경우에만 적당합니다. 정렬되지 않은 많은 양의 데이터가 있다면 긴 시간이 걸리게 될 것이며, 다른 알고리즘을 사용하는 것이 더 좋습니다.