Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию..pdf
Скачиваний:
10
Добавлен:
15.11.2022
Размер:
12.2 Mб
Скачать

Uses

Graph;

Integer;

Var

Driver, Mode

 

X

Real; Xg,

Yg, I integer;

Begin

.Инициализация графического режима_____

у

Driver := Detect;

InitGraph(Driver, Mode, ’C:\TP\BGIO-

SetColor(White);

 

{ белый цвет тгвгяут }

>

SetBkColor(Black);

{ черный цвет фона

LineClO,

90,

200,

90);

{ ось X >

 

Line(10,

20,

10,

160);

{ ось Y >

 

.Построение графика функции иептыми точками

>

X :=

0;

0 То

 

----------

 

For

I

190 Do

 

Begin Xg

:«= Ю

+ Round(95 / Pi * X);

 

 

Yg

:= 90

- Round(50 * Sin(X));

 

 

PutPixel(Xg,Yg, Yellow);

 

End;

X

X + Pi / 95

 

 

 

 

 

 

{_______ Разметка осей, запись функции______

 

0utTextXY(15,

30,

'Y');

 

OutTextXY(205,

90,

’Х’);

 

0utTextXY(l30,

40,

,Y=SIN(X)0;

 

Readln;

 

 

{ эадерчха >

 

CloseGraph;

 

{ выкол то графики}

 

End.

 

 

 

 

 

Задания

1.Составить программу “Звездное небо” : в черном окне случай­ ным образом расставляются белые точки. Работа программы закан­ чивается по нажатию клавиши.

2.Изменить программу “Звездное небо” так, чтобы наряду с за­ жиганием новых звезд происходило угасание (закрашивание цветом фона) уже светящихся звезд.

3.В программу “Робот” внести такие изменения, в результате которых робот окажется раскрашенным в разные цвета.

4.Используя линии и другие графические примитивы, составить

программу, рисующую дом.

5.Составить программу рисования на экране шахматного поля.

6.Написать универсальную процедуру построения графика фун­ кции у = F(x) точечным методом. Процедура должна иметь следую­

щие параметры: Х т[п) Х тах» ^Inin? Ymsx,

^<7тах> Y9тты Yдшъх-

Функция F (x) описывается во внешней подпрограмме-функции.

7. Исследовав область определения и, выбрав расположение коорди­ натных осей, построить на экране графики функций:

1

о\

#4"3

лч

1 , 2 t 3

1) у = i + i ’

 

 

V y ~ 1 + x + xS’

используя процедуру из предыдущей задачи.

Лекция 10

10.1. Строковы й тип данных

Теперь мы познакомимся с типом данных, который относится к чис­ лу структурированных. Это строковый тип данных (строка). Следует заметить, что строковый тип данных есть в Турбо-Паскале и отсутст­ вует в стандартном Паскале.

Строка — это последовательность символов. Каждый символ зани­ мает 1 байт памяти (код ASCII). Количество символов в строке назы­ вается ее длиной. Длина строки может находиться в диапазоне от 0до 255. Строковые величины могут быть константами и переменными.

Строковая константа есть последовательность символов, заключен­ ная в апострофы. Например:

'Язык программирования ПАСКАЛЬ1

'IBM PC - computer1,

>33-45-12’

Строковая переменная описывается в разделе описания переменных следующим образом:

Var <идентификатор> 8бгт#[<максимальная длина строки>].

Например:

Var Name string[20] .

Параметр длины может и не указываться в описании. В таком случае подразумевается, что он равен максимальной величине — 255. Напри­ мер:

Var slovo string;

Строковая переменная занимает в памяти на 1 байт больше, чем ука­ занная в описании длина. Дело в том, что один (нулевой) байт содержит значение текущей длины строки. Если строковой переменной не при­ своено никакого значения, то ее текущая длина равна нулю. По мере заполнения строки символами ее текущая длина возрастает, но она не должна превышать максимальной по описанию величины.

Символы внутри‘строки индексируются (нумеруются) от единицы. Каждый отдельный символ идентифицируется именем строки с индек­ сом, заключенным в квадратные скобки. Например:

Name[5], Name[i], slovo[k+l].

Индекс может быть положительной константой, переменной, выраже­ нием целого типа. Значение индекса не должно выходить за границы описания.

Тип string и стандартный тип char совместимы. Строки и символы могут употребляться в одних и тех же выражениях.

Строковые выражения строятся из строковых констант, перемен­ ных, функций и знаков операций. Над строковыми данными допустимы операции сцепления и операции отношения.

Операция сцепления (+) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые кон­ станты, так и переменные.

Пример:

’ ЭВМ' + IBM' + PC5

В результате получится строка:

'ЭВМ IBM PC'

Длина результирующей строки не должна превышать 255Операции отношения: =, <, >, < = , > = , О . Производят сравнение

двух строк, в результате чего получается логическая величина (true или false). Операция отношения имеет приоритет более низкий, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в ко­ торой первый несовпадающий символ имеет больший номер в таблице символьной кодировки.

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

Пример:

Выражение

 

Результат

'cosm l'

<

'cosm2'

T ru e

'pascal'

>

'PASCAL'

T ru e

'Ключ.'

<>

'Ключ'

T ru e

'MS DOS'

=

'MS DOS'

True

Функция Copy(S, Poz, N) — выделяет из строки S подстроку дли­ ной N символов, начиная с позиции Poz. N и Poz — целочисленные выражения.

Пример:

Значение S

Выражение

Результат

'ABCDEFG'

Copy(S, 2, 3)

'BCD'

’ ABCDEFG,

Copy(S,4,4)

’ DEFG '

Функция Concat(Sl, S2, ..., SN) выполняет сцепление (конкатена­ цию) строк SI, ..., SN в одну строку.

Пример:

Выражение

Результат

Concat( 'АА*, ’ XX', >Y>)

'AAXXY'

Функция Length (S) — определяет текущую длину строки S. Резуль­ тат — значение целого типа.

Пример:

Значение S

Выражение

Резугг,т,ат

Чев-Ь-б'

Length(S)

6

’ (А+В)*(Р

Length(S)

7

Функция Pos(Sl, S2) — обнаруживает первое появление в строке S2 подстроки S1. Результат — целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в S2 подстроки S1 не обнаружено, то результат равен 0.

Пример:

Значение S2

Выражение

Результат

'a b cd ef’

Pos(’cd’, S2)

3

*abcdcdef*

Pos(’cd’, S2)

3

'abcdef*

Pos(’k\ S2)

0

Процедура Delete(S, Poz, N) — удаление N символов из строки S, начиная с позиции Poz.

Пример:

 

 

Исходное значение S

Оператор

Конечное значение S

’ abcdefg0

Delete(S, 3, 2)

,abefg)

'abcd efg'

Delete(S, 2, 6)

,a >

В результате выполнения- процедуры уменьшается текущая длина строки в переменной S.

Процедура Insert(Sl, S2, Poz) — вставка строки S1 в строку S2, начиная с позиции Poz.

Пример:

Исходное значение S2

Оператор

Конечное значение S2

'ЭВМ

PC'

Insert(’IBM-’, S2, 5)

'ЭВМ IBM-PC'

'Рис.

2'

Insert(’N’, S2, 6)

'Рис. N 2'

П ример 1 . Следующая программа получает из слова “ВЕЛИЧИ­ НА” слово “НАЛИЧИЕ” :

Program Slovo_l;

Var Sll, S12

String[10];

Begin

511 := }ВЕЛИЧИНА1;

512 :« Copy(Sll, 7, 2) + Copy(Sll, 3, 4) + Sll[2];

WriteLn(S12)

End.

П ример 2. По следующей программе из слова “СТРОКА” будет получено слово “СЕТКА” :

Program Slovo_2;

Var SI StringClO];

Begin SI := 9СТРОКА1;

Delete(Sl, 3, 2);

Insert(’E ’, SI, 2);

WriteLn(Sl)

End.

П ример

 

3.

Составим

программу, формирующую символьную

строку, состоящую из п звездочек (п — целое число, 1 < п ^ 255).

Program

Stars;

 

Var Л

I

String;

 

N,

Byte;

 

Begin

 

(* Введите число

звездочех*);

Write

ReadLn(N);

 

 

A :»

 

 

 

For I := 1 To N Do

 

A

:= A +

9* 9;

 

WriteLn(A)

End.

Здесь строковой переменной А вначале присваивается значение пустой строки ( ’ '). Затем к ней присоединяются звездочки.

П ример

4. В символьной строке подсчитать количество цифр,

предшествующих первому символу Т.

Program

С;

 

Var

S

String;

 

 

К, I

Byte;

 

Begin

 

строку');

WriteLn('Введите

ReadLn(S);

 

К

:= 0;

 

I

1;

 

While (I <* Length(S)) And (S[I] <> >!') Do

Begin

 

 

 

If (S[I] >= '0') And (S[i] <= '9')

 

Then

К :* К +

1;

I :« I + 1

 

 

End;

равно

К)

WriteLn ('Количество цифр до символа

End.

 

 

В этой программе переменная К играет роль счетчика цифр, а перемен­ ная I — роль параметра цикла. Цикл закончит выполнение при первом же выходе на символ ” !” или, если в строке такого символа нет, то при выходе на конец строки. Символ S [I] является цифрой, если истинно отношение: *0*< S[I] < *9\

Задания

1. Составить программу получения из слова “дисковод” слова “воск” , используя операцию сцепления и функцию сору.

2. Составить программу получения слова “правило” из слова “операция” , используя процедуры Delete, Insert.

3. В данном слове заменить первый и последний символы на ” *” .

4.В данном слове произвести обмен первого и последнего символов.

5.К данному слову присоединить столько “!” , сколько в нем имеется букв (например, из строки “УРА” полупить “УРА!!!” ).

6.В данной строке вставить пробел после каждого символа.

7.Удвоить все буквы во введенном слове.

8. Перевернуть введенную строку (например, из “ДИСК” получится “КСИД” ).

С := А * В

End;

вывод результата— ---> WriteLn(C 2)

End.

В этой программе появился новый для нас оператор. Он называется оператором выбора. Формат этого оператора описывается следующей синтаксической диаграммой:

Соператор выбора>

 

 

case—> <селектор>^ Qf -

 

7Гл * < константа->

|" KZ ) — ^ < оператор*

"end— >

— О

— СЕ>----------

 

Здесь <селектор>

это выражение любого

порядкового типа;

<константа> — постоянная величина того же типа, что и селектор; <оператор> — любой простой или сос явной оператор.

Выполнение оператора выбора и р от:: *д.^т гак: вычисляется выра­ жение-селектор; затем в списках констант ищется такое значение, ко­ торое совпадает с полученным значением селектора; далее исполняется оператор, помеченный данной константой. Если такой константы не найдено, то происходит переход к выполнению оператора, следующего после оператора выбора.

В приведенной выше программе роль селектора играет символьная

величина Str[2].

Если она равна

то выполнится оператор с := а+ Ь;

если равна

то выполнится оператор с := а - 6; если равна V, вы­

полнится оператор с := а * Ь. Для любых других значений Str[2] не вы­ полнится ни один из операторов присваивания, и значение переменной

с останется неопределенным.

Приведенное выше описание оператора выбора соответствует стан­ дарту Паскаля. В ТУрбо-Паскале допустимо использование в операторе case альтернативной ветви после служебного слова else. Вот пример с той же задачей. Если мы хотим, чтобы в случае неверного символа в Str[2] выдавалось бы сообщение об этом, нужно программировать так:

Case Str[2] Of

>+> С :* А + В;