КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Строковые данные
END. BEGIN END. END. BEGIN END. Ur(a,b,c,d,x,y,z); if let='0' then goto K else writeln(' / ',a[1],'x+',b[1],'y+',c[1],'z=',d[1]); writeln('система i ',a[2],'x+',b[2],'y+',c[2],'z=',d[2]); writeln(' \ ',a[3],'x+',b[3],'y+',c[3],'z=',d[3]); writeln('имеет решение: x=',x,' y=',y,' z=',z); K: writeln('Будет ещё ур-е? да - "Y", нет – любая клавиша '); read(let); if (let='Y') or (let='y') then goto N; Имеется одномерный массив. Необходимо определить сумму положительных элементов, номер последнего отрицательного элемента, количество отрицательных элементов массива. Задача 1. Массив один и состоит из 7 элементов. Задача 2. Массивов два, размерность первого – 7 элементов, второго – 5. Задача 3. Количество массивов не ограничено, количество элементов в массивах произвольное, но не более 70. Program Prim35; {массив 1 и состоит из 7 элементов } label j; Type mas=array[1..7] of real; Var n,k,i,no:integer; a:mas; s:real; ch:char; procedure prmas(a:mas;n:integer; Var s:real; Var k,no:integer); Var i:integer; Begin 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; for i:=1 to 7 do Begin writeln('ввести значениеa[',i,']'); readln(a[i]); end; prmas(a,7,s,k,no); j: writeln('сумма положительных элементов =',s); writeln('последний отрицательный элемент имеетN=' no); writeln('количество отрицательных элементов =', k); readln; Program Prim36; { массива 2, размерность первого массива 7, второго – 5} label j; Type mas=array[1..7] of real; Var k,no,y:integer; 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,' значение элемента массива'); 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 prmas(7,s,k,no); y:=0; j: writeln('сумма положительных элементов =',s); writeln('последний отрицательный элемент имеетN=', no); writeln('количество отрицательных элементов =', k); y:=y+1; if y=1 then Begin prmas(5,s,k,no); goto j; end else readln; 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; 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"} readln; END. Если бы в var было указано string[10], то writeln(st1), вывел бы результат "отдел № 25"
8.3. Стандартные процедуры и функции для обработки строк
8.3.1. Процедуры обработки строк Delete (st, Poz, N) – удаление N символов из строки с именем st, начиная с позиции Poz. st:='река_Волга'; Delete (st, 1, 5); Результат 'Волга'. insert (stl, st2, poz); – вставка строки stl в строку st2, начиная с позиции Poz. st1: = 'Дом_25_' st2: =' На_улице_живет_петух_'; insert (stl, st2, 10); Результат: "На_улице_дом 25_живет_петух"; str (IBR, st); преобразует число IBR (типа integer, byte или Real) и помещает результат в строку st. Возможно после IBR указать ширину поля. Если ширины поля не хватает, оно автоматически расширяется до нужной величины. str (1500:6, stl); даст результат '_1500'; str (4.8е+03:10, stl); – результат '_ 4.800E+03'; str (-46854:3, stl); – результат '-46854'. Val (st, IBR, Cod); процедура преобразует значение st в величину целочисленного или вещественного типа и помещает результат в IBR. Значение st должно содержать символьное изображение числа и не содержать символов, не присущих изображению чисел (например, пробелов перед цифрами), букв и т.п. Cod - целочисленная переменная индуцирующая ошибку. Если Cod=0, преобразование произведено без ошибки, если Cod=5, то ошибка при преобразовании – 5 символов. Программа Program Prim 40; иллюстрирует работу вышеописанных процедур: Program Prim40; var st1,st2:string[30]; BEGIN st1:=' река Волга '; delete(st1,1,5); writeln(st1); st1:='дом 25 '; st2:='на улице живет петух'; insert(st1,st2,10); writeln(st2); str(1500:6,st1); writeln(st1); str(4.8e+03:10,st1); writeln(st1); str(-46854:3,st1); writeln(st1); readln;END.
8.3.2. Функции обработки строк Сору (st, Poz, N) выделяет из st подстроку длиной N символов, начиная с позиции Poz. stl:='absdefg'; writeln (Сору (stl, 2, 3)); результат bсd Const (stl, st2,..., stn) выполняет сцепление строк stl... stn. Длина суммарной строки не должна превышать 255 символов. Length (st) определяет длину строки, результат – integer. Pos (stl, st2) обнаруживает первое появление строки stl в строке st2. Результат – целое число, определяющее номер позиции, в которой находится первый символ подстроки st1. Если st1 не содержится в строке st2, то результат равен 0. UpCase (ch) преобразует строчную букву в прописную. Параметр и результат имеют литерный тип. ch:=a'; UpCase (ch) имеет результат 'A'. Program Prim 41, Prim 42, Prim 43 иллюстрируют работу вышеописанных функций. Program Prim41; var st1,st2:string[30]; s:char; BEGIN st1:='отдел № 256'; writeln(copy(st1,7,5)); st2:='находится в НИИ 5'; writeln(concat(st1,st2)); writeln(length(st2)); st2:='n 256'; writeln(pos(st2,st1)); s:='a'; writeln(upcase(s)); readln;END. Program Prim42; {программа удаляет все пробелы в строке, стоящие в строке слева, если они имеются} Var str:string[255]; { Var str: string; будет работать так же} function del(stroka:string):string; Var dlina:byte; Begin dlina:=Ord(stroka[0]); while ((dlina>0)and(copy(stroka,1,1)=' '))do delete(stroka,1,1); del:=stroka; end; BEGIN writeln('введите строку'); readln(str); writeln(del(str)); readln;
Дата добавления: 2014-12-17; Просмотров: 429; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |