Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие для учеников .doc
Скачиваний:
12
Добавлен:
18.12.2018
Размер:
2.27 Mб
Скачать

Примеры

Val('1234', n, k) - n=1234, k=0;

Val('234.56', n, k) - n=234.56, k=0;

Val('2.3456e+2', n, k) - n=2.3456e+2, k=0;

Val('12-45', n, k) k=3, так как знак "−" в записи чисел может быть только на первом месте;

Val('2,567m', n, k) k=2, так как разделитель­ным знаком между целой и дробной частями является точка, а не запятая;

Val ('5.87с-5') k=5, так как символ 'с' не должен встречаться в записи вещественного или цело­го числа.

Решение задач

Пример 1

Сколько раз в данной строке встречается символ 'a'?

Решение

Опишем функцию, которой будем передавать строку. Результат выполнения − целое число.

Program Example_129;

Function Q_Ch(st: String): Byte;

Var i, k: Byte;

Begin

k:=0; {Просматриваем все символы строки,

их количество равно длине строки;

если очередной символ равен 'а',

то увеличиваем счетчик}

For i:=1 To Length(st) Do

If st[i]='a' Then Inc(k);

Q_Ch:=k;

End;

Пример 2

Если в строке нечетное число символов, то удалить средний.

Решение

Program Example_130;

Procedure Del(Var st: String);

Var k: Byte;

Begin

k:=Length(st);

If k Mod 2=1 Then

Delete(st, k Div 2+1,1);

End;

Пример 3

Заменить все вхождения подстроки 'del' на 'Insert'.

Решение

Пока такая подстрока встречается, необходимо нахо­дить номер первого символа очередного вхождения под­строки 'del' , удалять 'del' и вставлять 'Insert'.

Program Example_131;

Procedure Ins(Var st: String);

Var k: Byte;

Begin

While Pos ('del', st)<>0 Do

Begin

k:=Pos ('del', st);

Delete(st, k, Length ('del'));

Insert('Insert', st, k);

End;

End;

Пример 4

Дана строка, состоящая из нескольких слов, между словами один пробел, в конце строки − точка. Под­считать количество слов и вывести на экран только те из них, которые начинаются с буквы 'а' (слов не больше 30).

Решение

Разобьем предложение на отдельные слова и каждое будем хранить как элемент массива строк.

Program Example_132;

Const n=30;

Type Myarray_Str=Array [1..n] Of String;

Var A: Myarray_Str;

str: String[255];

k: Byte;

Procedure Init(Var b: Myarray_Str);

Var i: Integer;

Begin

k:=1; {Пока не встретится пробел,

формируем очередное слово k, прибавляя

по одной букве}

For i:=1 To Length(str)-1 Do

If str[i]<>' ' Then b[k]:=b[k]+str[i]

Else

{Если это не последний символ, то

увели­чиваем счетчик слов и начинаем

формировать очередное слово}

If i<>Length(str)-1 Then

Begin Inc(k); b[k]:=' ' End;

End;

Begin

Writeln('Введите предложение');

Readln(str);

Init(A);

Writeln('Всего слов: ',k);

{Просматриваем все слова, если первый

символ очередного слова равен букве

'а', то выводим его}

For i:=1 To k Do If A[i][1]='a'

Then Write(A[i],' ');

Readln;

End.

Пример 5

Подсчитать сумму цифр, входящих в данную строку.

Program Example_133;

Function Sum(st: String): Integer;

Var i, d: Byte; s,k: Integer;

Begin

s:=0;

For i:=1 To Length(st) Do

Begin

Val(st[i], d, k);

If k=0 Then s:=s+d;

End;

Sum:=s;

End;

Пример 6

Строка символов представляет собой некоторый текст, слова в котором разделены одним или более пробелами. Преобразовать эту строку так, чтобы все слова разделялись ровно одним пробелом, а ведущие и хвостовые пробелы отсутствовали.

Решение

Program Example_134;

var s: string;

begin

writeln('Введите строку текста с

пробелами');

readln(s);

while pos(' ', s)>0 do

delete (s, pos (' ', s),1);

{Пока в строке существуют два рядом

стоящих пробела, удаляем один из них}

if s[1]=' ' then

delete(s, length (s), 1);

if s[length(s)]= ' ' then

delete(s, length(s), 1);

readln;

end.

Пример 7

Дана строка символов следующего вида:

p1q1p2q2p3q3...qnpn

где pi − целое неотрицательное число, а qi − знак арифметического действия из набора (+,-,*). Написать программу вычисления значения введенного выражения, предполагая, что действия выполняются согласно правилам арифметики.

Решение

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

Program Example_135;

var pq, p1, p2: string;

m,n, k, l, j: word;

begin

writeln('Введите арифметическое

выражение');

readln(pq);

while pos('*', pq)>0 do

{цикл для выполнения всех

действий умножения}

begin

p1:=' ';

k:=pos('*', pq);

while (k>1) and (pq[k-1]

in ['0'..'9']) do

begin

k:=k-1;

p1:=pq[k]+p1 {формируем число,

стоящее справа от знака умножения}

end; {while}

p2:=' ';

l:=pos('*', pq);

while (l<length(pq)) and (pq[l+1]

in ['0'.. '9']) do

begin

l:=l+1;

p2:=p2+pq[l]; {формируем число,

стоящее справа от знака умножения}

end; {while}

val(p1, n, j);

if j>0 then

begin

writeln('ошибка в выражении');

halt

end; {if}

val(p2, m, j);

if j>0 then

begin

writeln('ошибка в выражении);

halt;

end; {if}

j:=m*n;

str(j, p1);

delete(pq, k, l-k+1);

{часть строки удаляем}

insert (p1, pq, k);

{вставляем результат умнож.}

end; {while} {все умножения выполнены}

while (pos('+',pq)>0) or

(pos('-',pq)>0) do

begin

p1:=' ';

k:=1;

while (pq[k] in ['0'.. '9']) do

begin

p1:=p1+pq[k];

k:=k+1;

end; {while}

p2:= ' ';

l:=k;

while (l<length(pq)) and (pq[l+1]

in ['0'.. '9']) do

begin

l:=l+1;

p2:=p2+pq[l];

end; {while}

val(p1, n, j);

if j>0 then

begin

writeln('ошибка в выражении');

halt;

end; {if}

val(p2, m, j);

if j>0 then

begin

writeln('ошибка в выражении');

halt;

end; {if}

case pq[k] of

'+': j:=n+m;

'-': j:=n-m;

end; {case}

str(j, p1);

delete(pq, 1, l);

insert(p1, pq, 1)

end; {while}

{все сложения и вычитания выполнены}

val(pq, n, j);

if j>0 then

begin

writeln('ошибка в выражении');

halt;

end; {if}

writeln('=', pq);

readln;

end.

Оператор halt − стандартная процедура, которая завершает выполнение программы и выполняет возврат в операционную систему.