Проверка строгого чередования в массиве

Задача

Дана таблица а[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, является отсутствие динамичности длины массива, поскольку все переменные в Паскале необходимо объявлять в разделе описания. То есть фактически нет возможности задать размер массива в теле операторов, в момент выполнения программы. Поэтому в подобных задачах, в разделе описания создаем массив, с размерностью, которая заранее превосходит размерность массива, которую может ввести пользователь (в рамках разумного конечно). В программе же работаем с тем числом первых элементов, которое ввел пользователь, игнорируя те элементы, позиция которых превосходяь введеное пользователем число.