Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТPascal Сборник конспектов.doc
Скачиваний:
25
Добавлен:
10.11.2018
Размер:
924.67 Кб
Скачать

18. Решение задач на обработку строк.

Задача 1. «Первая буква стала последней». Для любой строки, введенной с клавиатуры, получить новую строку, в которой первая и последняя буква поменялись местами.

Например:

Вводим:

ТУПИК

Получаем:

КУПИТ

Напишем программу:

Program Smena;

Var s,sn,per,sr,pos: String;

Begin

Write(‘Введите строку=’); ReadLn(s);

per:=Copy(s,1,1);

pos:=Copy(s, Length(s), 1);

sr:=Copy(s, 2, Length(s)-2);

sn:=pos+sr+per;

WriteLn(sn);

ReadLn;

End.

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

Например:

Вводим:

МИР

Вводим:

КОРАН

Получаем:

М И Р

Получаем:

К О Р А Н

Напишем программу:

Program Naoborot;

Var s,sn,c: String; n:Integer;

Begin

Write(‘Введите строку=’); ReadLn(s);

sn:=’’;

For n:=1 To Length(s) Do Begin

c:=Copy(s,n,1); sn:=sn+c+ ' '; End;

WriteLn(‘sn=’,sn);

ReadLn;

End.

Задача 3. «Строка наоборот». Для любой строки, введенной с клавиатуры, получить новую строку с обратным порядком символов.

Например:

Вводим:

МИР

Вводим:

КОРАН

Получаем:

РИМ

Получаем:

НАРОК

Напишем программу:

Program Naoborot;

Var s,sn,c: String; n:Integer;

Begin

Write(‘Введите строку=’); ReadLn(s);

sn:=’’;

For n:=1 To Length(s) Do Begin

c:=Copy(s,n,1); sn:=c+sn; End;

WriteLn(‘sn=’,sn);

ReadLn;

End.

Задача 4. «Перевод на тарабарский язык». Для любой строки, введенной с клавиатуры, получить новую строку, в которой перед каждой буквой вставлен слог 'ТА'.

Например:

Вводим:

МИР

Вводим:

КОРАН

Получаем:

ТАМТАИТАР

Получаем:

ТАКТАОТАРТААТАН

Задача 5. «Подсчет». Найти количество заглавных русских букв «А» в произвольной строке.

Program Count;

Var s, c: String; n, k: Integer;

Begin

Write(‘s=’);ReadLn(s);

k:=0;

For n:=1 To Length(s) Do Begin

c:=Copy(s,n,1);

If c=’A’ Then k:=k+1; End;

WriteLn(‘k=’,k);

ReadLn;

End.

Вводим строку

Обнуляем счетчик букв

Выделяем одну букву

Если это ‘А’, то увеличиваем счетчик

Задача 6. «Цифры». Дана произвольная строка. Получить новую строку, в которой останутся только цифры из первой строки.

Пример: ’21 ноября 2007 года’’212007’

Program Count;

Var s, sn, c: String; n: Integer;

Begin

Write(‘s=’);ReadLn(s);

sn:=’’;

For n:=1 To Length(s) Do Begin

c:=Copy(s,n,1);

If (c>=’0’) and (c<=’9’) Then sn:=sn+c; End;

WriteLn(‘sn=’,sn);

ReadLn;

End.

Вводим строку

Обнуляем новую строку

Выделяем символ

Если это цифра, то прибавляем к новой строке

Задача 7. «Скобки». Дана строка с арифметическим выражением. Определить правильно ли в ней стоят скобки.

Примеры: ‘(3+(3/2-1))’верно

‘(2-(3/2-1)))’не верно

‘(13+2))-(3/2’не верно

Схема решения:

- получим новую строку, в которой будут только скобки.

- из новой строки постепенно будем удалять все парные скобки ‘()’ – таких удалений может потребоваться в два раза меньше чем символов в строке.

- если после удалений строка станет пустой, то скобки стояли правильно, иначе не правильно.

Пример: ‘((7/(3+2))-1)’’((()))’’(())’’()’’’ верно

Program Skobki;

Var s, sn, c: String; n,k: Integer;

Begin

Write(‘s=’);ReadLn(s);

sn:=’’;

For n:=1 To Length(s) Do Begin

c:=Copy(s,n,1);

If (c=’(’) Or (c=’)’) Then sn:=sn+c; End;

For k:=1 To (Lehgth(sn) div 2) Do

For n:=1 To Length(sn) Do Begin

c:=Copy(sn,n,2);

If c=’()’ Then Delete(sn,n,2); End;

If sn=’’ Then WriteLn(‘Да’) Else WriteLn(‘Нет’);

ReadLn;

End.

Вводим строку

Обнуляем новую строку

Получаем символ

Если это скобка, то прибавляем к новой строке

Выделяем два символа

Если это (), то удаляем их

Если строка пуста, то верно

Задача 8. «Разные скобки». Дана строка с арифметическим выражением, в котором встречаются и круглые, и квадратные скобки. Определить, правильно ли расставлены скобки.

Примеры: ‘(3+[3/2-1])’верно

‘(2-(3/2-1)])’не верно

‘(13+[2*3)]’не верно

Задача 9. «Сумма». Дана строка из цифр со знаками + между ними. Найти сумму этих цифр.

Пример: ‘3+9+8’20

Схема решения:

- прибавим к строке слева еще один плюс

- потом в цикле будем искать плюсы и через операцию Val будем получать численное значение того, что стоит после плюса

- все эти численные значения нужно сложить.

Пример:

‘3+9+8’’+3+9+8’

Первый плюс: Val(‘3’,x,cod)x=3 и cod=0

Второй плюс: Val(‘9’,x,cod)x=9 и cod=0

Третий плюс: Val(‘8’,x,cod)x=3 и cod=0

Сумма всех иксов даст 20

Program Summa;

Var s,c: String;

x, sum, n, cod: Integer;

Begin

Write(‘s=’);ReadLn(s);

s:=’+’+s; sum:=0;

For n:=1 To Length(s) Do Begin

c:=Copy(s,n,1);

if c=’+’ Then Begin

sn:=Copy(s,n+1,1);

Val(sn,x,cod);

sum:=sum+x; End;

End;

WriteLn(‘sum=’,sum);

ReadLn;

End.

Вводим строку

Прибавляем плюс

Выделяем символ

Если это плюс, то:

Получаем цифру после плюса

Получаем число х

Прибавляем его к сумме

Задача 10. «Результат». Дана строка из цифр со знаками + и - между ними. Найти результат этой строки.

Пример: ‘3+9-8’4

Задача 11. «Сумма цифр». Дано целое число (a). Найти сумму всех его цифр.

Пример: 7439  23

Program Summa;

Var s, c: String; a, sum, x, cod, n: Integer;

Begin

Write(‘a=’);ReadLn(a);

Str(a,s); sum:=0;

For n:=1 To Length(s) Do Begin

c:=Copy(s,n,1);

Val(c,x,cod);

sum:=sum+x; End;

WriteLn(‘sum=’,sum);

ReadLn;

End.

Вводим число

Преобразуем его в строку s

Выделяем символ

Получаем значение символа x

Прибавляем число х к сумме

Задача 12. «Автобусный билет». Дано шестизначное целое число (номер автобусного билета типа LongInt). Найти счастливый это билет или нет.

Числа типа Integer ограничены по величине числом 32 765.

Числа типа LongInt ограничены по величине числом 2 147 483 647.

Пример: 285663  счастливый

198222  нет

Задача 13. «Максимум». Дано целое число. Найти цифру наибольшую по величине.

Пример: 76381  max=8

Задача 14. «Минимум». Дано целое число. Найти цифру наименьшую по величине.

Пример: 76381  min=3

Задача 15. «Наоборот». Дано целое число. Получить новое целое число с обратным порядком цифр.

Пример: 7812  2187

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]