Задача
Дана таблица а[1..n], состоящая из нулей и единиц. Проверить существует ли строгое чередование.
Решение
Для решения задачи, необходимо в цикле пройтись по всему массиву, проверяя текущий и следующий за ним элементы на чередование. Текущий элемент(a[i]) может быть равен либо единице (1), тогда следующий элемент (a[i+1]) должен будет быть равным нулю(0), либо текущий равен нулю, а следующий за ним единице. Это условие запишеться следующим образом:
If ((a[i]=1)and(a[i+1]=0))or((a[i]=0)and(a[i+1]=1)) Then …
В противном случае, если условие не выполняется, то выходим из цикла и возвращаем «НЕТ» — как ответ на задачу.
Пример
Uses Crt; Var a:Array[1..10] Of Integer; Flag,i,k,n:Integer; Begin ClrScr; Write('Количество элементов таблицы, n='); ReadLn(n); For i:=1 To n Do Begin Write('a[',i,']='); ReadLn(a[i]); End; i:=1; While i<=n-1 do Begin Flag:=0; If ((a[i]=1)and(a[i+1]=0))or((a[i]=0)and(a[i+1]=1)) Then Flag:=1 Else Begin Write('нет'); Flag:=0; ReadLn; Halt; End; i:=i+2; End; If Flag=1 Then Write('Чередование существует'); Readln; End.
Описание примера
Основной проблемой при работе с массивами в Turbo Pascal, является отсутствие динамичности длины массива, поскольку все переменные в Паскале необходимо объявлять в разделе описания. То есть фактически нет возможности задать размер массива в теле операторов, в момент выполнения программы. Поэтому в подобных задачах, в разделе описания создаем массив, с размерностью, которая заранее превосходит размерность массива, которую может ввести пользователь (в рамках разумного конечно). В программе же работаем с тем числом первых элементов, которое ввел пользователь, игнорируя те элементы, позиция которых превосходяь введеное пользователем число.