Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program lab1;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils;
- const
- ARR_LENGTH_MAX = 4;
- EPS = 0.0001;
- type TArr = array[1..ARR_LENGTH_MAX] of integer;
- var
- Arr: TArr;
- i, j,k, Temp, Perm, Comp: integer;
- WasChange: Boolean; //флаг(будет показывать, были ли замены(заходили ли мы в while))
- begin
- comp := 0; //тут понятно
- perm := 0; //
- for i := 1 to ARR_LENGTH_MAX do
- readln(Arr[i]);
- for i := 1 to ARR_LENGTH_MAX do
- write (Arr[i]:4);
- writeln;
- for i := 2 to ARR_LENGTH_MAX do
- begin
- WasChange := False;
- Temp := Arr[i];
- j := i - 1;
- while (j >= 1) and (Arr[j] > Temp) do
- begin
- WasChange := True;
- Comp := Comp + 1; //
- Perm := Perm + 1; //если мы зашли в цикл, то мы переставляем елемент на 1 вперёд(+1 перестановка), а значит мы с ним 1 раз сравнивали.
- Arr[j + 1] := Arr[j];
- j := j - 1;
- for k := 1 to ARR_LENGTH_MAX do
- write (Arr[k]:4);
- writeln(' перестановок:', perm, ' сравнений:', comp);
- end;
- if WasChange then // если мы что-то меняли местами в этой итерации for, значит у нас + 2 перестановки от темп переменной
- Perm := Perm + 2 //
- else // если нет, то +1 сравнение, так как мы в цикл не зашли, значит сравнили, но было не больше
- comp := comp + 1; //
- Arr[j + 1] := Temp;
- for k := 1 to ARR_LENGTH_MAX do
- write (Arr[k]:4);
- writeln(' перестановок:', perm, ' сравнений:', comp);
- end;
- writeln;
- readln;
- end.
Add Comment
Please, Sign In to add comment