Если не ошибаюсь, то X и Z являются типа byte. Требовать от переменных этого типа извлечение корня неправильно. Так как это по определению целые положительные числа, размером до 256. От переменной, из которой извлекают корень, требуется тип значения - действительное число. Так что лучше сразу объявить эти две переменные типа double (похоже так в Паскале).
В первом же случае лучше извлечь корень с операции sqrt. Снова, если не ошибаюсь, операция возведения в степени в Паскале довольно трудоемка что ли. Она определяется через exp и ln. Так что лучше не заморачиваться, а воспользоваться оператором sqrt.
Program cikli;unit math;var i,n,s,p:integer; a:array[1..20]of integer;begin writeln('Исходный массив: '); for i:=1 to 20 do begin a[i]:=RandomRange(1,20); writeln(' Элемент ',i,' = ',a[i]); end; writeln('Сумму и произведения скольки первых чисел вы хотите посчитать? '); readln(n); s:=0;p:=1;//цикл с параметром For i:=1 to n do begin s:=s+a[i]; p:=p*a[i]; end;writeln('Цикл с параметром');writeln('Сумма первых ',n,' чисел = ',s);writeln('Произведения первых ',n,'чисел = ',p); //цикл с предусловиемi:=1;p:=1;s:=0;while i<>n do begin s:=s+a[i]; p:=p*a[i]; i:=i+1;end;writeln('Цикл с предусловием');writeln('Сумма первых ',n,' чисел = ',s);writeln('Произведения первых ',n,'чисел = ',p); //цикл с постусловиемi:=0;s:=0;p:=1;repeat i:=i+1; s:=s+a[i]; p:=p*a[i];until i=n;writeln('Цикл с постусловием');writeln('Сумма первых ',n,' чисел = ',s);writeln('Произведения первых ',n,'чисел = ',p);End.
В первом же случае лучше извлечь корень с операции sqrt. Снова, если не ошибаюсь, операция возведения в степени в Паскале довольно трудоемка что ли. Она определяется через exp и ln. Так что лучше не заморачиваться, а воспользоваться оператором sqrt.