writeln('количество отрицательных элементов =', k); y:=y+1;
if y=1 then Begin prmas(5,s,k,no); goto j; end
else readln;
END.
Program Prim37; { массивы с переменными измерениями, количество массивов не ограничено} Type mas=array[1..70] of real; Var n,k,i,no,kol,r,j:integer; a,b:mas; s:real; ch:char; procedure prmas(n:integer; var s:real; var k,no:integer); var i:integer; a:mas;
begin for i:=1 to n do begin
writeln('введите ',i,' значение элемента массива ', j);
readln(a[i]); end;
s:=0; k:=0; no:=0;
for i:=1 to n do Begin
if a[i]>=0 then s:=s+a[i] else Begin k:=i; no:=no+1;
end; end; end;
BEGIN
writeln('задайте количество массивов'); readln(kol);
for j:=1 to kol do Begin
writeln(' задайте размерность массива', j); readln(r);
prmas(r,s,k,no);
writeln(' сумма положительных элементов =',s);
writeln(' последний отрицательный элемент имеет N=', no);
writeln(' количество отрицательных элементов =', k); end;
readln;
7.4. Локальные и глобальные описания объектов
Мы уже знаем, что программа - блок, т.е. раздел операторов, снабженный описаниями и имеющий заголовок. Вид блока-программы:
Program имя программы (возможны опции); {опции не обязательны}
Label …; {раздел описания меток}
Const …; {раздел описания констант}
Туре …; {раздел определения типов}
Var …; {раздел описания переменных}
Function …; Procedure …; {раздел описания функций и процедур}
BEGIN ... END. {раздел операторов}.
Функции и процедуры, в свою очередь, также являются блоками:
Procedure имя (список входных формальных параметров);
Var (список выходных формальных параметров);
Label …;
Const …;
Туре …;
Var ...;
function …;
procedure …;
разделы описаний
begin ... end; {тело процедуры}
Таким образом, программа - всегда блок, в который могут быть вложены другие блоки.
Как один из вариантов, возможна следующая структура программы:
Program Prim38; { начало блока 1} label N,M; Const k=5.6; Type d=array[1..10] of integer; Var b,c:real; i,j:integer; z,y:d;
function f(f,b,c:real):real; { начало блока 2}
begin f:=1; end; {конец блока 2}
procedure proc(f,b,c:real; Var x,y,z:real); { начало блока 3}
label K,L;
var d,w,s:real;
function fp(a,b:real):real; { начало блока 4}
begin fp:=1; end; {тело fp, конец блока 4}
begin x:=1; y:=1; z:=1; end; {тело proc, конец блока 3}
BEGIN b:=1; END. {тело основной программы, конец блока 1}
Таким образом, программа состоит из четырех блоков. Все имена меток, констант, типов, переменных, функции f и Рrос известны в блоке 1, поскольку они даны в его описании. Считается, что они описаны здесь локально.
В блоке 2 - function - описаний нет, поэтому своих собственных объектов этот блок не имеет. Формальные параметры не в счет, поскольку они служат только для описания алгоритма вычисления результата с именем f в функции f, а ячейки памяти для b, с, f здесь не выделяются. Однако в этом блоке можно использовать все объекты, которые описаны в блоке 1, так как блок 2 является составляющей частью блока 1. Иногда говорят, что имена объектов блока 1 описаны глобально для блока 2.
Аналогичная ситуация и с блоком 3 - Procedure Рrос. Для нее все объекты блока 1 являются глобальными, т.е. доступны. Кроме того, в блоке 3 имеются свои описанные здесь объекты - метки К, L, переменные d, W, 8, функция fp, которые могут быть использованы только в блоке 3 и не известны в блоках 1 и 2.
Как следствие возможно применение одинаковых имен в различных блоках (см. имя d). В блоке 1 d - массив. В блоке 3 (в Рrос) имеется свое d, которое является собственным в блоке 3 и представляет собой не массив, а ячейку памяти типа real.
8.1. Общие замечания
Строка - это последовательность символов длиной 0-255. Для описания данных строкового типа используется слово string, за которым могут следовать в квадратных скобках цифры, определяющие количество символов в строке. Если цифры в квадратных скобках и сами скобки отсутствуют, то для данной ячейки памяти будет выделяться максимально возможная длина: 256 байт для хранения 265 символов. Символьные константы (которые могут храниться) имеют вид совокупности символов, заключенных в апострофы.
Пример: 'a, b, с - символы'.
Примеры описаний:
Var а, b, с: string [70];
Выделяются ячейки с именами а, b, с, в каждую из которых может быть занесена совокупность символов в количестве до 70.
Например, возможны операторы:
а: = 'улица Садовая';
b: = улица Чкалова, 17, хаи';
с: = г. Харьков - большой город';
возможно предварительное описание типа:
Туре a=string [70];
Var b, с: а;
8.2. Строковые выражения
Выражения, в которых операндами служат строки, являются строковыми выражениями. Результат - строка. Опишем операции, которые можно применять при написании строковых выражений:
Операция сцепления, знак операции '+'.
'Дом'+' номер'+'43' дает результирующую строку 'Дом номер 43'.
Операции отношения: =, < >, >, <, >=, <=.
Операции отношения выполняются раньше операции сцепления, т.е. имеют более высокий приоритет.
Сравнения между строками производятся посимвольно, слева направо, до первого несовпадающего символа. Та строка считается больше, в которой первый несовпадающий символ имеет больший код по таблице кодов. Результаты сравнения - True или False.
Если строки имеют различную длину и более короткая совпадает с началом более длинной, то последняя считается большей.
При использовании оператора присваивания, если значение результата вычисления строкового выражения имеет большую длину, чем ячейка памяти, в которую записывается результат, то лишние правые символы отбрасываются. Если значение результата вычисления строкового типа короче, чем ячейка памяти, отведенная для его хранения, то результат записывается в ячейку памяти «прижатым» вправо, а лишние левые разряды заполняются пробелами.
Допускается при записи выражений строкового типа применять данные, описанные с атрибутом char. В этом случае эти данные интерпретируются как string [ 1]. К отдельным символам данного строкового типа можно обратиться по номеру этого символа в строке (аналогично индексу в массивах). В нулевом байте хранится длина строки.
Program Prim39; var st1,st2:string[30]; BEGIN st1:='отдел № 256'; writeln(st1); {на экране "отдел № 256"} st2:=st1[10]; writeln(st2); {на экране "5"} writeln(ord(st1[0])); {на экране "11"}
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28