Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль(шпоры).doc
Скачиваний:
1
Добавлен:
20.04.2019
Размер:
225.79 Кб
Скачать

24.Структурированные типы данных Строковый тип данных: основные процедуры и ф-ции

(составные): массивы, строки, мн-ва, записи, файлы. Строк.тип данных. Строка - посл-ть символов. Каждый символ занимает 1байт памяти. Длина-кол-во симв. в строке. Ее диапазон 0-255.Строковые величины:1)строк. константа - посл-ть симв-ов, заключ-ся в апострофы, 2)строк. переменная - опис-ся в разделе описаний (т.о.: var <идентиф-ор>:string[<макс-ая длина строки>]) Параметр длины м-т не указ-ся в описании. В таком случае подразум-ся, что он = 255.Строк-ая перем-ая занимает в памяти на 1б.больше, чем уаз-ая в описании длина.Т.к. нулевой байт сод-т знач-е текущей длины строки.Если строковой переменной не присвоено никакого значения, то ее текущ стока =0.По мере заполнения строки символами ее текущая длина возрастает, но она не должна превышать макс-го по опис-ю велич. Символы в строке номеруются от 1.Кажд-й отдельный символ идент-ся именем строки с индексом (b[ ]).Индекс м/б положит-ой константой, переменной,выраж-ем целого типа. Знач-е индекса не должно выходить за границы описания. Тип string и стандартный тип char совместимы. Строки и символы м-т употребляться в одних и тех же выраж-ях. Строковые выраж-я строятся из строковых констант, переменных, ф-ций и знаковопераций. Над строк-ми данными допустимы операции сцепления(+) и отношения. Ф-ции: length(s) – вычисляет кол-во символов в строке, copy(S1,P,N) – выделяет из строки подстроку S1 длиной N, начиная с позиции P, concat(S1,S2,…Sn) – сцепляет все строки в одну, poz(S1,S2) – обнаруживает появление в строке S2 подстроки S1.Процедуры: delete(S,P,N) – удаляет из строки S N-символов, insert(S,P,N) – вставляет , str(N,S) – преобразует число к строковому типу, val(S,N,code) – преобразует строковый тип к числовому.

25-26.Длинная арифметика.

Длин-е числа м-о хранить в строке, в массиве, в файле (недостаток: медленное время доступа),с помощью динамических структур данных (списки). Для простоты рассуждений реализуем только неотрицательные целые числа. Вводим дл.число с помощью строки и преобразуем его. Младшие размеры дл.числа – это эл-ты массива с меньшими номерами. {Dlch=array[1..Nmax] of digit;}

Сложение:

Procedure sum (a,b:dlch;var c:dlch);

var i, p, k, ma: int.;

Begin

p:=; obnul(c);

if dlina(a)> dlina(b) then ma:= dlina(a)

else ma:=dlina(b);

for i:=1 to ma+1 do

begin

k:=a[i]+b[i]+p;

if k>9 then

begin

k:=k-10;

p:=1;

end

else p:=0;

c[i]:=k;

end;

end;

Вычитание:

Procedure subtr (a,b:dlch; var c:dlch);

var i, p, k:int.;

Begin

p:=0;

obnul(c);

for i:=1 to dlina(a) do

begin

k:=a[i]-b[i]-p;

if k<0 then begin

k:=k+10;

p:=1;

end

else p:=0;

c[i]:=k;

end;

end;

Умножения:

Procedure umn (var a,b,c:dlch);

var per:0..9; i, j:word; p:0..99;

Begin

obnul (c);

m:=strazryad(b);

for i:=0 to n do

begin

per:=0;

for j:=0 to m do

begin

p:=a[j]*b[i]+per+[i+j];

c[i+j]:=p mod 10;

per:=p div 10;

end;

c[i+m+1]:=per;

end;

end;

Отношения:

Function bolshe (var a,b:dlch):boolean;

var i:word;

Begin

i:=Nmax-1;

while (a[i]=b[i]) and (i>0) do i:=i-1;

bolshe:=a[i]>b[i];

end; {true если a>b, false если a<=b}

{Procedure obnul (var a:dlch);

var i:0..Nmax-1 ;

Begin

for i:=0 to Nmax-1 do a[i]:=0;

end;

Function strazryad(dlina) (var a:dlch):word;

var i:word;

Begin

i:=Nmax-1 while (a[i]=0) and (i>0) do i:=i-1; strazryad:=i;

end;}