procedure SortByCount(a: Vector; kol: integer; var b: Vector); {Сортировка подсчетом} var i, j: integer; c: array[1..50] of integer;
begin for i := 1 to 50 do C[i] := 0; for j := 1 to kol do c[A[j]] := c[A[j]] + 1; for i := 2 to 50 do c[i] := c[i] + c[i - 1]; for j := kol downto 1 do begin b[c[a[j]]] := a[j]; c[a[j]] := c[a[j]] - 1 end end;
begin writeln('Исходный массив'); for i := 1 to n do write(a[i]:4); writeln; SortByCount(a, n, b); writeln('Отсортированный массив'); for i := 1 to n do write(b[i]:4); end.
Импликацию часто по-другому называют "Следование". Т.е. из выражения a следует выражение b. Основные правила импликации, где 0 - ложь, 1 - истина. Импликация ложна тогда и только тогда, когда из истины следует ложь. А теперь так, как когда-то объясняли мне: 1) 1->1 = 1 Из истины следует истина. То есть из истинного факта (а) следует (или же мы делаем) справедливый истинный вывод(b). Все в порядке. Справедливо. Получаем 1 (истину) после операции импикации.
2) 0->1 = 1 Из неправильного высказывания (a) мы делаем правильный вывод(b). С этим тоже все в порядке, множество научных открытий делалось по принципу "из ошибочного суждения - верная теория". Бывает. Справедливо. Получаем истину.
3) 0->0 = 1 Из ложного высказывания (a) - ложные "выводы"(b) , тоже все в порядке. Логично, что из одной "лжи", у нас вторая "ложь". Справедливо. Получаем иситну.
4) 1->0 = 0 Из истинного высказывания (a) получаем ложное высказывание (b). Т.е. мы взяли и переврали истину непонятно как. Нехорошо и не справедливо. Получаем ложь:(
Если остались вопросы, или вообще никак не в комментарии:)
n = 7;
type
Vector = array[1..n] of integer;
procedure SortByCount(a: Vector; kol: integer; var b: Vector);
{Сортировка подсчетом}
var
i, j: integer;
c: array[1..50] of integer;
begin
for i := 1 to 50 do C[i] := 0;
for j := 1 to kol do
c[A[j]] := c[A[j]] + 1;
for i := 2 to 50 do
c[i] := c[i] + c[i - 1];
for j := kol downto 1 do
begin
b[c[a[j]]] := a[j];
c[a[j]] := c[a[j]] - 1
end
end;
var
a: Vector := (25, 1, 13, 42, 8, 6, 14);
b: Vector;
i: integer;
begin
writeln('Исходный массив');
for i := 1 to n do write(a[i]:4);
writeln;
SortByCount(a, n, b);
writeln('Отсортированный массив');
for i := 1 to n do write(b[i]:4);
end.
Тестовое решение:
Исходный массив
25 1 13 42 8 6 14
Отсортированный массив
1 6 8 13 14 25 42