Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методички по информатике / Конспект лекций (Delphi).pdf
Скачиваний:
63
Добавлен:
27.05.2015
Размер:
1.2 Mб
Скачать

13

for j := 1 to 2 do A[i,j] := ???;

n1 := 1;

n2 := 2;

MinA := sqrt(sqr(A[n1,1]-A[n2,1])+sqr(A[n1,2]-A[n2,2])); for i := 1 to n-1 do

for j := i+1 to n do begin

Temp := sqrt(sqr(A[i,1]-A[j,1])+sqr(A[i,2]-A[j,2])); if MinA>Temp then

begin

MinA := Temp; n1 := i;

n2 := j; end;

end;

<вывод n1 и n2>; end;

Пример 3 (формирование одномерного массива из положительных чи-

сел):

procedure TForm1.Button1Click(Sender: TObject); var

A : array[1..10,1..10] of integer; B : array[1..100] of integer; Count,n,m,i,j : integer;

begin

n := ???;

m := ???;

for i := 1 to n do for j := 1 to m do

A[i,j] := ???;

Count := 0;

for i := 1 to n do for j := 1 to m do

if A[i,j]>0 then begin

inc(Count); B[Count] := A[i,j];

end;

for i := 1 to Count do <вывод B[i]>;

end;

1.10 Строки

Строковый тип String можно рассматривать как одномерный массив символов. Поэтому обращение к конкретному символу строки можно осу-

14

ществлять по его индексу, например, S[12] – обращение к 12-му символу строки S.

Максимальную длину строки можно задать при объявлении переменной,

например, S : string[80].

Для строк допустимо выполнение операции сложения, например,

S := 'Первая '+'строка'.

Так как каждому символу соответствует определенный числовой код, то строки можно сравнивать между собой, например, 'AB'>'A' значение True, т.к. более короткая строка имеет меньший код.

Для работы со строками могут применяться стандартные функции и процедуры:

Функция

Описание

Length(S)

Определяет длину строки в символах

Pos(SubS,S)

Поиск подстроки SubS в строке S

Copy(S,i,n)

Копирование n символов из строки S начиная с позиции i

Concat(S1[,S2…])

Объединение строк

Delete(S,i,n)

Удаление n символов из строки S начиная с позиции i

Insert(SubS,S,i)

Вставка подстроки SubS в строку S начиная с позиции i

Str(X[:m:n],S)

Перевод числа X в строку S

Val(S,X,c)

Перевод строки S в число X. с – код результата перевода

Пример (разложение строки на отдельные слова):

procedure TForm1.Button1Click(Sender: TObject); var

S : string;

Mas : array[1..100] of string; i,n : integer;

begin

S := ???;

n := 0; repeat

i := Pos(' ',S); if i>0 then begin

inc(n);

Mas[n] := Copy(S,1,i-1); Delete(S,1,i);

end; until i=0;

if Length(S)>0 then begin

inc(n); Mas[n] := S;

end;

for i := 1 to n do <вывод Mas[i]>;

end;

15

1.11 Записи

В отличии от массива, тип-запись включает ряд компонент, называемых полями, которые могут быть различных типов. Формат описания:

<идентификатор записи> : record <идентификатор поля1> : <тип поля1>;

<идентификатор поляN> : <тип поляN>; end;

Количество и тип полей записи может быть произвольным. Для обращения к полю записи используется формат:

<идентификатор записи>.<идентификатор поля>

Если требуется обращение к нескольким полям записи подряд, то можно для упрощения использовать оператор WITH:

WITH <идентификатор записи> do <оператор>

WITH <идентификатор записи> do begin

<оператор1>

<операторN> end;

Пример (нахождение среднего роста людей старше 50 лет):

procedure TForm1.Button1Click(Sender: TObject); var

People : array[1..100] of record

Name : string; Age : integer; Height : integer;

end; i,CountPeople,SumHeight,CountSelect : integer;

begin

CountPeople := ???;

for i := 1 to CountPeople do begin

People[i].Name := ???;

People[i].Age := ???;

People[i].Height := ???;

end;

CountSelect := 0; SumHeight := 0;

for i := 1 to CountPeople do if People[i].Age>50 then begin

16

inc(CountSelect);

SumHeight := SumHeight+ People[i].Height; end;

if CountSelect>0 then

<вывод SumHeight/CountSelect> else

<вывод 'таких людей нет'>;

end;

При работе с записью можно применять вариантную часть, которая может быть одна на всю запись и располагается после описания всех полей:

<идентификатор записи> : record

case [<идентификатор поля>:]<тип поля> of

<вариант выбора1> : (<идентификатор поля> : <тип поля>);

<вариант выбораN> : (<идентификатор поля> : <тип поля>); end;

Для всех вариантов отводится общая область памяти, поэтому имеется возможность преобразовывать данные одного типа в другой, однако при неправильном обращении к полю имеется возможность ошибки.

Пример (нахождение площади фигур):

procedure TForm1.Button1Click(Sender: TObject); var

Figures : array[1..100] of record X,Y : real;

case Vid : integer of

0: (Side : real); {квадрат}

1: (Side1,Side2 : real){прямоугольник};

2: (Radius : real); {круг}

end;

Count,i : integer; s : string;

begin

Count := ???;

for i := 1 to Count do with Figures[i] do begin

Vid := ???;

X := ???;

Y := ???;

case Vid of

0 : Side := ???;

1 : begin

Side1 := ???;

Side2 := ???;

end;

2 : Radius := ???;

end;