Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отдать студ.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
182 Кб
Скачать
☆

Обменная сортировка пузырьком

For i:=1 to m-1 do

For j:=m downto i+1

If a[j-1]>a[j] then begin

v:=a[j-1];

a[j-1]:=a[j];

a[j]:=v;

end;

Алгоритм поиска

Дан вектор, зная искомое число, найти индекс первого вхождения числа в вектор. В случае отсутствия элемента выдать 0.

1) i:=1;

while (a[i]<>x) do inc(i);

if n>i then

{Алгоритм содержит скрытую ошибку. При отсутствие искомого элемента появляется возможность «влезть в чужую память». Может быть выдан несуществующий индекс либо программа может зациклиться. При включенном ключе компиляции {$R+} выдается ошибка в случае отсутствия соответствующего элемента «Range check error», при выключенном программа может зациклиться}.

2) i:=1;

while (i<=n) and{or} (a[i]<>x) do inc(i);

{Алгоритм содержит ошибку. При отсутствие искомого элемента при включенном ключе компиляции {$R+} происходит выход за границу массива. Логические условия входа в цикл(i<=n) and{or} (a[i]<>x) могут быть соединены логическим умножением или логическим сложением

And: индекс элемента находится правильно, но происходит выход за границу массива.

Or : в случае отсутствия элемента программа продолжается поиск хотя должна закончить, следовательно зацикливается или выходит за границу массива}

3) i:=1;

while (i<=n) and (a[i]<>x) do inc(i);

if i>n then i:=0;

{Правильный алгоритм поиска искомого элемента после первого вхождения}

1){Поиск последнего вхождения элемента равного заданному правильный}

i:=n;

while (i<=n) and (a[i]<>x) do dec(i);

2) {Поиск последнего вхождения элемента равного заданному }

ind:=0;

For i:=1 to n do

If a[i]=x then ind:=i:

{алгоритм поиска с While выполняется быстрее, если последний элемент на последнем месте и быстрее для среднестатистического текста}

5) {алгоритм поиска искомого элемента после первого вхождения}

For i:=1 to n do

If a[i]=x then break;

if i>n then i:=0;

{Ошибка В различных трансляторах i за пределами цикла for может быть n, n+1, n-1. Отсюда неопределенность}

Параметр i за пределами цикла считается неопределенным.

6) For i:=1 to n do

If a[i]=x then goto 1;

{неструктурное программирование, которое может привести к Ошибке}

6) k:=0;

For i:=1 to n do

If a[i]=x then begin

k:=i;

i:=n;

end;

{ изменение параметра цикла в цикле не рекомендуется }