Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
82
Добавлен:
15.06.2014
Размер:
341.5 Кб
Скачать

Диалоговые программы. Дружественный интерфейс пользователя

Тест: Написать программу, которая превращает нули в единицы, а 1 в 2

Вариант б) лучше, но короткое сообщение об ошибке не много даст.

Добавьте перед вводом: ВВЕДИ а (из 0 или 1)

Вариант а) не доработан. Необходимо провести проверку на ввод данных.

1

Оптимальный вариант:

1.Выдается сообщение, что делает программа (Вы работаете с программой, превращающей 1 в 2, а 0 в 1). Помощь сразу после загрузки

2.Введите число (указание диапазона, вида).

3.Контроль ввода: вы ввели… - Визуальный контроль для исключения ошибки

оператора

4.Результат

2 группы функций при разработке диалога:

Функции управления данными. Функции управления процессами.

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

Специальные интегральные среды (справки, система отладки) – Турбо Паскаль

1.Интерфейс (interface) - совокупность средств и правил, обеспечивающих взаимодействие устройств вычислительной системы и (или) программ.

2.Интерфейс пользователя (user interface) - комплекс программных средств, обеспечивающих взаимодействие пользователя с системой или средства связи между пользователем и системой.

Важна система помощи и подсказок, элементов обучения

2

СТРОКОВЫЙ ТИП (String)

Напоминает одномерный массив символов ARRAY[0..N] OF CHAR

Может меняться длина строки от 1до N символов, где N<=255

1. Строка-константа: (‘abcd-абвг’, ’ ’ , ’ , ‘) writeln (‘вариант=’);

2.Строки-переменные:

VAR типом STRING

{либо в разделе TYPE}

пример: Const N=200;

 

VAR st: String;

{переменная длина до 255 символов}

st1: String[1];

 

st2: String[10];

 

st3: String[N];

{длина до 200 символов}

Строка в ТП трактуется как цепочка символов:

st2: ARRAY[0..10] OF CHAR; st2[0] – служебный пример: Var st:string;

Begin

St:= ‘алгоризм’;

if st[7]=‘з' then st[7]:=‘т'; {алгоритм}

. . .

End.

3

Отдельный символ совместим со значение Char:

пример: Var st: string; Ch: Char;

begin

st:=‘Hello’; ch:=st[1]; {ch=‘H’} st[2]:=‘E’;

st[6]:=‘!’; {st=‘HEllo!’}

for I=1 to 6 do write (st[I]);

readln;

End.

Начальный символ строки имеет индекс 0.

Длина строки всегда равна ORD(ST[0]) – коду нулевого символа строки. Значащие символы занимают с 1 по N байты.

st[0] - нулевой элемент строки содержит информацию о ее длине.

4

Нулевой символ строки s[0] – это символ, код которого равен длине строки.

Длина строки может быть изменена:

1.Путем заполнения строки новым значением;

2.Путем изменения нулевого элемента.

!!!Если строку формировали поэлементно, надо обязательно заполнить для нее нулевой элемент.

Если в примере ‘Hello!’ записать st[0]:=chr(6),

то такую строку можно вывести целиком (а не поэлементно) writeln(str);

пример: Var st:string; Begin

writeln(‘Введи элементы строки посимвольно’)

 

for I=1 to5 do read (st[I]);

{‘BYE!’}

{ st[1]=‘B';st[2]=‘Y‘ ..}

st[0]:=CHR(4); длина строки = 4;

writeln(st)

end.

5

Операции над строками

Операции сцепления

пример: st:='A‘ + 'B';

{st содержит ‘AB’}

st:=st + 'C';

{st=‘ABC’}

st[1]:='A' и т.д.

 

пример: Var st: string[2]; begin

st:='123'; writeln(st); {12}

End.

Операции отношений: >,<,=,>=,<=,<>

пример

'abcd‘ = ‘abcd‘ ->TRUE;

'abcd‘ <> 'abcD'->TRUE;

‘abcd‘ < 'abcde'->TRUE; т.к.‘e'>‘ ';

'abcd‘ > 'abcD '-TRUE, т.к. 'd'>'D';

‘abcd‘ <' abcde'->TRUE;

'aBcd‘ < 'ab' ->TRUE, т.к. 'B'<'b';

6

Функции (процедуры) для работы со строками

1. LENGTH(s:string):byte - выдает длину строки S; Пример: k:=Length(st), где st :=‘ABC’ - Результат – k=3

for I:=1 to Length(st) do …

2. CONCAT(s1,s2,...,sN:string):string - осуществляет сцепление

строк;

st:=concat(‘note’,’book’);

{‘notebook’\}

 

s3:=concat(s1,s2);

{ s3:=s1+s2}

 

s3:=concat(s1,s2,s3);

{ s3:=s1+s2+s3}

3. COPY(s:string; index,len:integer):string - выдает подстроку из строки S длиной len, начиная с символа с номером index.

Если index>LENGTH(S), то функция вернет пустую строку; если

index>255,то ошибка.

 

 

Пример: Значение S

Выражение

Результат

‘ABCDEFG’

COPY(S,2,3)

‘BCD’

‘ABCDEFG’

COPY(S,4,10)

‘DEFG’

‘ABC’

COPY(S,4,2)

‘’ (пусто)

4. DELETE(Var st:string; index,len: integer) - удаляет из строки st

подстроку длиной len, начиная с символа с номером index; Если index=0 или(и) Len=0, то строка не меняется.

Пример: Delete(S,20,255);

 

 

Значение S

Выражение

Результат

 

‘абвгде’

Delete(S,4,2)

‘абве’

 

‘ABCDEF’

Delete(S,1,5)

‘F’

7

 

 

 

5. INSERT(subs:string; Var s: string; index: integer) - вставляет в строку S подстроку SubS, начиная с позиции

index;

Пример: Var st: string[10];

str2, str3, str4: string;

str2:= ’начало-конец’; str3:= str2; str4:= str2;

insert(‘середина-’,str2,8); {результат:str2=‘начало-середина-конец’}

st:=‘****-’;

insert(st,str3,8); {результат:str3=‘начало-****-конец’}

st:=‘****-’;

insert(str4,st,3); {результат:st=‘**начало-к’}

6. POS(subs,s:string):byte - функция отыскивает вхождение подстроки SubS в строке S

Пример:

S

функция

результат

 

'abcdef'

POS('de',S)

4

 

'abcdef'

POS('k',S)

0

 

 

-

 

8

Процедуры преобразования

7.STR(x[:w[:n]],Var s:string) - преобразует числовое значение x в

строковое s. Параметры [:w[:n]] не обязательны.

Пример: str(6.66:8:2,s);

{результат s=‘ 6.66’}

str(6.66:-8:2,s);

{результат s=‘6.66 ’}

str(6.66:8:1,s);

{результат s=‘ 6.7’}

str(6.66:8,s);

{результат s=‘0.67E+01’}

const F=6; N=4;

 

str(1.254687:F:N,s); {результат:S=‘1.2547’}

8. VAL(s:string,Var x,Var ErrCod) - преобразует числовую строку s в числовую переменную x. Если ErrCod=0, то

преобразование выполнено.

 

Пример:S

преобразования

результат

1562

 

VAL(S,x,ErrCod)

x=1562, ErrCod=0

15.62E2

VAL(S,x,ErrCod)

x=1562, ErrCod=0

15.62A2

VAL(S,x,ErrCod)

x-неопр., ErrCod=6

9

9. FILLCHAR(Var X, k: word, Value) - процедура заполнения. (Word-целое без знака (0..65535))

Fillchar(Var x,kbytes:word, b:byte); Fillchar(Var x,kbytes:word, c:char);

Пример: Заполнить строку с ее начала (с первого элемента) 80 пробелами (‘ ’или #32)

Var

st: string;

Fillchar(st[1], 80, ’ ‘);

st[0]:=chr(80); {принудительная запись длины строки} st[1] означает, что заполняем строку с первого элемента

При использовании ввода строк с клавиатуры процедурой Read читается только одна строка (дo <enter>), остальные процедуры Read и Readln игнорируются для любых типов и типа string.

Используйте Readln в программах со строками для ввода данных любого типа, кроме символов.

10