- •Типы данных в Pascal
- •Способы представления данных в компьютере.
- •Представление чисел со знаком.
- •Общая структура программы в Pascal
- •Выражения.
- •Функции
- •Индексированные переменные
- •Операторы
- •Else всегда принадлежит последнему if
- •Операторы цикла.
- •Оператор выбора.
- •Комментарии.
- •Массивы.
- •Сортировка выбором
- •Обменная сортировка пузырьком
- •Алгоритм поиска
Обменная сортировка пузырьком
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;
{ изменение параметра цикла в цикле не рекомендуется }
