Программирование. Строковые переменные

advertisement
Тема по программированию
Строки
г.Сургут
2005г.
Содержание
Занятие I
Тип данных Char. Операции над символами.
Занятие II
Строка. Тип данных String. Строковые переменные, их
описание. Длина строки. Операции над строками.
Занятие III
Стандартные функции для работы со строками
(concat,copy,length, pos,upcase).
Занятие IV
Стандартные процедуры для работы со строками
(delete, insert,str,val).
Занятие V
Примеры решения задач. Самостоятельное решение задач.
Занятие VI
Бегущая строка. Пример программы осыпающихся букв.
Строки в графическом
Занятие VII
Решение задач.
Занятие VIII
Зачет.
Занятие I
Тема. Тип данных Char. Операции
над символами.
В большинстве применений компьютера алфавитно-цифровая информация
используется наряду с числовой информацией. Прежде чем мы сможем написать
программу, которая манипулирует алфавитно-цифровыми знаками (литерами), нам
потребуется тип данных для их представления. для этих целей в языке Паскаль
предусмотрен тип данных Char.
Так же, как переменная типа Integer может хранить одно целое число, переменная
типа Char может хранить одну литеру.
Мы будем пользоваться множеством литер, находящимся в таблице кодов,
называемой ASCII – американский стандартный код обмена информацией.
Все литеры упорядочены, т.к. имеют свой личный номер. Важно, что соблюдаются
следующие отношения:
'A' < 'B' < 'C' < ... < 'X' < 'Y' < 'Z'
'0' < '1' < '2' < ... < '7' < '8' < '9'
Для проверки равенства или неравенства переменных типа Char могут использоваться
операторы булевого сравнения.
Например,
Var
Alpha : Char;
Begin
Alpha :='p‘;
Alpha :='+‘;
Alpha :='3‘;
Alpha :=' ‘;
Alpha :='''‘;
Первый оператор присваивания делает Alpha равной литере р.
Второй делает Alpha равной литере плюса (+).
Третий делает Alpha равной литере 3. Заметим, что литера 3 отличается от целого числа
3 тем, что она не может быть использована в арифметических операциях.
Четвертый оператор присваивания делает Alpha равной литере пробела. Хотя литера
пробела при печати не изображается, она является обыкновенным значением типа Char.
Последний оператор присваивания делает Alpha равной литере апострофа, это
специальный случай, так как знак апострофа используется для ограничения значения типа
Char.
Задача.
Написать программу, которая считывает две литеры и печатает больше, равна или
меньше первая литера второй.
Program Sravnenie;
Var
First, Second : Char;
Begin
write ('Введите две литеры через пробел ');
readln (First, Second);
write ('Первая литера ');
if First > Second
then
write ('больше второй. ');
else
if First = Second
then
write ('равна второй. ');
else
write ('меньше второй. ');
Еnd.
Так как Char – порядковый тип, то к его значениям применимы следующие функции.
Succ – возвращает следующий символ литерного множества;
Pred – возвращает предыдущий символ литерного множества;
Ord – возвращает значение кода литеры;
Chr – возвращает значение литеры, является обратной по отношению к функции Ord.
Например,
Succ('0')='1' – символ, следующий за символом 0, равен символу 1.
Pred('3')='2' – символ, предшествующий символу 3, равен 2;
Chr(65)='A' – символ, соответствующий коду 65, равен А;
Ord('A')=65 – код символа А равен 65
Задачи для самостоятельного решения
1. Запросите у пользователя несколько символов и выведите на экран их коды.
2. Запросите у пользователя символ и выведите на экран 5 символов, следующих за ним в
таблице американских стандартных кодов обмена информацией.
3. Запросите у пользователя символ и выведите на экран 5 символов, предшествующих
данному в таблице американских стандартных кодов обмена информацией.
4. Определите коды русских заглавных букв.
5. Определите коды русских прописных букв.
6. Составьте программу, проверяющую, является ли введенный символ буквой
а) русского алфавита,
б) латинского алфавита
7. Составьте программу, проверяющую, является ли введенной символ скобкой (учесть
круглые, фигурные и квадратные скобки).
8. Составьте программу, проверяющую, является ли введенной символ звездочкой.
9. Вывести в одну строку ABBCCCDDDD...ZZ...Z.
10. Вывести в одну строку ZYY...AA...A.
11. Вывести треугольник
A B C ... Z
B C ...Z
C ...Z
Занятие II
Тема. Строка. Тип данных String. Строковые
переменные, их описание. Длина строки.
Операции над строками.
Строка (String) – это последовательность литер.
Литерные строки уже использовались нами в качестве аргументов операторa Write
при изучении темы "Ввод-вывод". Теперь познакомимся с ними подробнее.
Тип данных (String) определяет строки с максимальной длиной 255 символов.
Переменная этого типа может принимать значения переменной длины.
Например,
MaxLine : String;
City : String[30]
Строковая переменная может иметь атрибут длины, определяющий ее максимальную
длину.
Текущая длина строковой переменной может быть определена с помощью
встроенной функции Length. для заданного значения типа String эта функция возвращает
целое значение, показывающее количество литер в строке.
Выражения, в которых операндами служат строки, называются строковыми
выражениями.
Над строками определены две операции:
1. Операция сцепления (+) применяется для сцепления нескольких строк в одну.
Например,
SumStr := 'Турбо'+'Паскаль'+'7.0'
2. Операции отношения (=, <>, >, <, >=, <=) проводят сравнение двух строк слева
направо до первого несовпадающего символа, и та строка считается больше, в которой
первый несовпадающий символ имеет больший номер в стандартной таблице обмена
информацией. Результат выполнения операций отношения над строками всегда имеет
булевой тип.
Например:
выражение 'MS-DOS'<'MS-Dos' имеет значение True
Если строки имеют различную длину, но в общей части символы совпадают,
считается, что более короткая строка меньше, чем более длинная.
Строки считаются равными, если они совпадают по длине и содержат одни и те же
символы.
Для присваивания строковой переменной результата строкового выражения
используется оператор присваивания. Если значение переменной после выполнения
оператора присваивания превышает по длине максимально допустимую при описании
величину, то все лишние символы справа отбрасываются.
Допускается смешение в одном выражении операндов строкового и символьного
типа.
К отдельным символам строки можно обратиться по номеру (индексу) данного
символа в строке.
Например, чтобы обратиться к третьему символу строки SumStr надо записать
SumStr[3]. Запись SumStr[0] дает значение текущей длины строки.
Для эффективного программирования алгоритмов обработки текстов необходимо
хорошо понимать внутреннюю структуру представления строк в памяти. Строки
реализованы достаточно просто. Для хранения строковых переменных выделяется память,
на единицу большая максимальной длины строки.
Начальный байт этой памяти отводится для хранения текущей длины строки,
следующие байты - для символов самой строки. Так как элементы строк стандартно
нумеруются целыми числами, начиная с единицы, байт с длиной строки можно считать
нулевым ее элементом. Такая структура памяти допускает прямой доступ к ее элементам.
Важно отметить, что имеется возможность динамически управлять текущей длиной
строки. Следующая программа показывает автоматическое изменение длины строки после
тех или иных операций с нею. Обратите внимание, что общий (определяемый с помощью
стандартной функции SizeOf) размер памяти, отведенной для хранения строки все время
остается неизменным.
Внимание! При решении задач со строковыми переменными Вы можете
столкнуться с распространенной трудноуловимой ошибкой, когда после присваивания
некоторым элементам строки символов ни содержимое, ни длина строки не
изменяются. Разберемся, с чем это связано.
Очень важно понимать, что при доступе к некоторому элементу строки значение ее
текущей длины не проверяется. Это иллюстрирует следующая программа:
Задание: Наберите программу, протестируйте и установите зависимость размера
строки и длины строки от изменения количества символов в строке.
Program StringLength;
Var
S : String; {макс. длина строки = 255}
Begin
S:=' '; {пустая строка}
Writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=0}
S:='Пример длинной строки'; {непустая строка}
Writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=21}
Delete(S,7,8); {удаляем из строки 8 символов, начиная с 7}
Writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=13}
S:=S+' символов'; {пустая строка}
Writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=22}
End.
Задача: Имитация увеличения длины строки
Program StringElements;
Var
S : String; {макс. длина строки = 255}
Begin
S:=' ABCD'; {инициализация строки}
Writeln (S,' ',Length(S)); {вывод строки и ее длины}
S[5] := 'E'; {присваивание элементу строки}
Writeln (S,' ',Length(S)); {ни сама строка, ни ее длина не изменились}
End.
Присваивание пятому элементу строки некоторого значения не изменяет длину строки,
что подтверждает вывод на экран ее содержимого и длины (конечно само присваивание реально
произошло, но на значение текущей длины строки в нулевом байте это никакого влияния не
оказало). Работа с элементами строки без учета ее текущей длины и является ошибкой
программиста. Посмотрите следующую программу:
Program StringElements2;
Var
Str : String[26]; {длина строки = 26}
i : Integer;
Begin
S:='A';
for i := 1 to 26 do
Str[i] := Chr (Ord('A')+i-1);
Writeln(Str);
End.
Предполагается, что данная программа должна сформировать строку из 26
символов, содержимым которой является последовательность заглавных букв
латинского алфавита. Однако вызов процедуры Writeln показывает, что содержимым
переменной Str будет строка из одного символа 'А'. Природа совершенной ошибки
заключается в том, что присваивание значений элементам строки не влияет не текущую
длину, которая была установлена равной 1 при первом присваивании. Поэтому
правильной будет следующая программа:
Program StringElements3;
Var
Str : String[26]; {длина строки = 26}
i : Integer;
Begin
S:=' ';
for i := 'A' to 'Z' do
Str := Str + i;
Writeln(Str);
End.
Операция конкатенации, как и все стандартные операции, работающие со строками, в
отличие от поэлементного присваивания, изменяет длину строки, что дает корректный
результат. Кроме того, вторая программа работает непосредственно с символами букв.
Наконец, не следует забывать инициализировать строку перед ее заполнением (первый
оператор программы). В противном случае, так как начальная длина строки является
неопределенной, можно получить произвольный результат; не стоит рассчитывать на то, что в
нулевом байте стоит ноль.
Для обработки строковых данных можно использовать встроенные процедуры и
функции:
1. Delete (Str,Poz,N) – удаление N символов строки Str, начиная с позиции Poz.
2. Insert (Str1,InStr2,Poz) – вставка строки Str1 в строку InStr2, начиная с позиции Poz.
3. Copy (Str,Poz,Nstr) – выделяет строку длиной Nstr, начиная с позиции Poz, из строки
Str.
4. Concat (Str1,Str2,...,StrN) – выполняет сцепление строк в том порядке, в каком
указаны в списке параметров.
5. Poz (InStr,Str) – обнаруживает первое появление подстроки InStr в строке Str.
6. UpCase (Ch) – преобразует строчную букву в прописную.
7. Str (Number,Str) – преобразует число в строку.
8. Val (Str,Number,Code) – преобразует строку в число и выдает код правильности
преобразования.
Более подробно Вы познакомитесь с этими операторами на последующих занятиях.
Задачи для самостоятельного решения
Выберите одну задачу и решите ее. Сдайте листинг для оценки
1. Запросите у пользователя несколько строк и выведите на экран их длину.
2. Запросите у пользователя несколько строк, произведите их сцепление и вывод на экран.
3. Запросите у пользователя строку и выведите ее на экран посимвольно в столбик.
4. Запросите у пользователя строку, состоящую из нескольких слов, разделенных пробелом, и
выведите ее на экран так, чтобы каждое слово начиналось с новой строки.
5. Запросите у пользователя и сравните две строки.
6. Запросите у пользователя и сравните три строки.
7. Запросите у пользователя и сравните четыре строки.
8. Запросите у пользователя строку и символ и выведите на экран сообщение, имеется ли
среди символов строки заданный пользователем символ.
Выберите одну задачу и решите ее. Сдайте листинг для оценки
1. Загадайте пользователю детскую загадку. Дайте ему возможность трижды попробовать
отгадать Вашу загадку.
2. Заставьте компьютер случайным образом загадать букву латинского (русского) алфавита.
Предложите пользователю отгадать загаданную букву, помогая ему следующим образом.
Если пользователем введена буква, стоящая слева от загаданной, то выводите пользователю
сообщение "Правее!", а если справа – "Левее!".
3. Заставьте компьютер случайным образом загадать букву латинского (русского) алфавита.
Предложите пользователю отгадать загаданную букву, помогая ему следующим образом.
Если в очередной попытке пользователем введена буква, стоящая ближе к загаданной, чем
предыдущая, то выводите пользователю сообщение "Горячее!", а если дальше – "Холоднее!".
Занятие III
Тема. Стандартные функции для работы со
строками (concat,copy,length, pos,upcase).
Функция Length
Встроенная функция Length (длина) позволяет определить фактическую длину
текстовой строки, хранящейся в указанной переменной (а не величину предельного
размера строки, установленную при декларации):
Program DemoFunctionLength;
Var
Word : String;
Begin
Write ('Введите слово :');
Readln(Word);
Writeln('Это слово состоит из ',Length (Word),' букв');
End.
Примечание. При подсчете фактической длины строки учитываются все входящие в
нее символы, в том числе и пробелы.
В результате работы программы на терминал выдается строка, содержащая
большие английские буквы и маленькие русские.
Функция Upcase
Функция Upcase позволяет преобразовывать символ любой литеры из строчного в
прописной. Эта функция рассчитана на обработку отдельного символа. Поэтому для
обработки строки символов с помощью этой функции приходится организовывать цикл.
Program DemoFunctionUpcase;
Var
Word : String;
i : Byte;
Begin
Word := 'фирма Microsoft';
for i := 1 to Length (Word) do
Word[i] := UpCase (Word[i]);
Writeln(Word); {выводится текст 'фирма MICROSOFT'}
End.
Примечание. Русские литеры не могут обрабатываться этой функцией.
Для того, чтобы преобразовать в заглавные строчные буквы русского алфавита,
применяют оператор выбора Case:
. . .
Case Word[i] of
'a' : Word[i] := 'A';
'б' : Word[i] := 'Б';
'в' : Word[i] := 'В';
. . .
end;
. . .
Функция Copy
Функция Copy позволяет копировать фрагмент некоторой строки из одной
переменной в другую. Вызывая эту функцию нужно указать следующие параметры:
•
имя строки, из которой должен извлекаться копируемый фрагмент,
•
позицию в строке, начиная с которой будет копироваться фрагмент,
•
число копируемых символов.
Program DemoFunctionCopy;
Var
Word : String;
Word1 : String[20];
Begin
Word := 'фирма Microsoft';
Writeln(Word); {выводится текст 'фирма MICROSOFT'}
Word1 := Copy (Word,1,5);
Writeln(Word1); {выводится текст 'фирма'}
End.
Примечание. Если начальная или конечная позиции копируемого текста находятся
вне пределов исходной строки символов, то сообщение об ошибке не выдается. Результатом
выполнения операции в первом случае будет строка нулевой длины, во втором - фрагмент
от начальной позиции копирования до конца исходной строки.
Функция Pos
C помощью функции Pos Вы можете осуществить поиск некоторого фрагмента в строке.
Если заданный фрагмент в строке присутствует, то функция возвращает номер позиции, с
которой он начинается. Если фрагмент не найден, то функция возвращает нуль.
Program DemoFunctionPos;
Var
Word : String;
SearchWord : String[20];
Position : Byte;
Примечание. Функция Pos
Begin
требует полного совпадения
искомого фрагмента и
Word := 'фирма Microsoft';
фрагмента строки, в которой
Writeln(Word); {выводится текст 'фирма MICROSOFT'}
производится поиск. Причем
Writeln ('Введите искомый текст ');
большие и маленькие буквы
Readln (SearchWord);
считаются различными
Position := Pos(SearchWord, Word);
символами.
if Position <> 0
then
begin
Write ('Фрагмент <',SearchWord,'> содержится в строке <',Word);
Writeln ('>, начиная с позиции ',Position );
end
else
Writeln('Фрагмент <',SearchWord,'> не содержится в строке <',Word);
End.
Функция Concat
Функция Concat (Str1,Str2,...,StrN) выполняет конкатенацию (или сцепление)
строк Str1,Str2,...,StrN в том порядке, в каком они указаны в списке параметров. Сумма
символов всех сцепленных строк не должна превышать 255.
Program DemoFunctionConcat;
Var
Word : String;
Word1, Word2 : String[20];
Begin
Word1 := 'фирмы ';
Word2 := 'Microsoft';
Word := Concat('Компьютеры ',Word1,Word2);
Writeln(Word); {выводится текст 'Компьютеры фирмы Microsoft'}
End.
Задачи для самостоятельного решения (выберите 1 задачу для решения)
1. Напишите алгоритм, проверяющий, является ли частью данного слова заданное слово.
Ответ должен быть "да" или "нет".
2. Напишите алгоритм, подсчитывающий, сколько раз в данном слове встречается
заданное сочетание букв.
3. Напишите алгоритм, подсчитывающий, сколько раз в данном тексте х встречается
данное слово у. Если слово у длиннее, чем х, то результат должен быть равен нулю.
4. Выясните, сколько раз встречается каждая буква алфавита в предложенном тексте.
5. Задано существительное 1-го склонения, оканчивающееся на “а”. Напечатайте это слово
во всех падежах
6. Заданы фамилия, имя и отчество учащегося, разделенные пробелом. Напечатайте его
фамилию и инициалы
7. Проверьте правописание “ча” и “ща” в тексте.
8. Проверьте правописание “жи” и “ши” в тексте.
9. Проверьте правописание “нч” и “нщ” в тексте.
10. Посчитайте количество букв в введенной строке.
Занятие IV
Тема. Стандартные процедуры для работы со
строками (delete, insert,str,val).
Процедура Insert
Процедура Insert вставляет в исходную строку, начиная с указанной позиции, какуюлибо другую строку. Оператор Insert (Word1,Word2,5) указывает, строку Word1 необходимо
вставить в строку Word2, начиная с 5-ой позиции.
Процедура Delete
Процедура Delete удаляет в исходной строке фрагмент определенной длины, начиная
с указанной позиции. Так, оператор Delete(Word1,2,3) удаляет из указанной строки
фрагмент, длиной в три символа, начиная со второго.
Процедура Str
Общий вид Str(Chislo,Stroka)
Процедура Str преобразовывает числовое значение переменной Chislo в строковую
переменную Stroka. После первого параметра может указываться формат, аналогичный
формату вывода.
Program DemoProcedureStr;
Var
Word : String;
Chislo : Integer;
Begin
Chislo := 1560;
Str(Chislo:8, Word);
Writeln(Word); {выводится строка ' 1500'}
End.
Процедура Val
Общий вид Val(Stroka,Chislo,Code)
Процедура Val преобразует значение строки Stroka в величину целочисленного или
вещественного типа и помещает результат в Chislo. Значение строковой переменной Stroka
не должно содержать пробелов в начале и в конце. Code целочисленная переменная. Если во
время операции преобразования ошибки не обнаружено, значение Code равно нулю, если же
ошибка обнаружена, Code будет содержать номер позиции первого ошибочного символа, а
значение Chislo будет не определено.
Program DemoProcedureVal;
Var
Word : String;
Chislo, Code : Integer;
Begin
Writeln('Введите строку цифр ');
Readln(Word);
Val(Word, Chislo, Code); {преобразование строки в число}
if Code <> 0
then
begin
Writeln('Ошибка! В позиции ',Code,' не цифра!',);
Halt; {Прерывание программы}
end;
End.
Задачи для самостоятельного решения (выберите 1 задачу для решения)
1. Cоставьте алгоритм подсчета суммарного числа букв "а" и букв "б" в данной строке.
2. Составьте алгоритм замены в какой-нибудь литерной величине всех букв "а" на буквы
"б" и наоборот (при такой замене, например, из слова "баба" должно получиться слово
"абаб")
3. Составьте алгоритм, удваивающий каждую букву в заданном тексте (при этом,
например, из слова "кот" должно получиться слово "ккоотт")
4. Составьте алгоритм, выясняющий, является ли данное слово "перевертышем" (так
называются слова, читающиеся одинаково слева направо и справа налево, например:
ПОТОП, КАЗАК.
5. Составьте алгоритм, вычеркивающий из данного текста любую букву.
6. Составьте алгоритм, который каждую встреченную в слове букву "б" заменял бы
сочетанием букв "ку".
Задачи для самостоятельного решения (выберите 1 задачу для решения)
1. Как только в строке встретится символ "*", удалить все символы в строке после "*".
2. Вставить в строку слово по условию:
а) в конец строки
б) в начало строки
в) после первого слова
3. В строке удалить все буквы "б","с","д","."
4. Все слова в которых буква “а” встречается более 2х раз вычеркнуть из текста.
5. Из строки удалить среднюю букву, если длина строки нечетная, иначе - удалить две средние
буквы.
6. Удвоить каждое вхождение буквы в данной строке. Букву и строку задает пользователь.
Занятие V
Тема. Примеры решения задач.
Самостоятельное решение задач.
Program MordovskihKonstantin;
Uses
Crt;
Var
i,d : Integer;
a,s : String;
Begin
ClrScr;
Write('введите строку>');
Readln(a);
i := 1;
d := 0;
if a[i]=' '
then
repeat
i:=i+1
until a[i]<>' ';
while d<>2 do
begin
repeat
i:=i+1;
until a[i]=' ';
repeat
i:=i+1
until a[i]<>' ';
d:=d+1;
End;
Рассмотрите несколько примеров. Наберите эти программы на
компьютере и проверьте их действие. Дополните программы
комментариями, внесите свои изменения.
Задача 1. Подсчитать, сколько слов начинается с первой буквы
третьего слова введенной строки.
end;
s:=a[i];
Writeln ('Первая буква третьего слова - ',s);
d:=0;
if a[1]=s
then
d:=d+1;
for i := 1 to length(a) do
begin
if (a[i]=s) and (a[i-1]=' ')
then
d:=d+1;
end;
Write('Слов, начинающихся с этой буквы - ',d);
Readln;
End.
Задача 2.
Составить программу, удваивающую каждую
букву в заданном тексте.
Program MiskovVadim;
Uses
Crt;
Var
i, k,x : Integer;
a, b, c : String;
Begin
ClrScr;
Write('введите строку>');
Readln(a);
k := length(a);
repeat
for i := 1 to 2 do
c:=c+b;
x:=x+1;
b:=Copy(a,x,1);
until x=k+1;
Writeln ('Ваше слово - ',s);
Readln;
End.
Задача 3.
Найти в предложении самое длинное симметричное
слово.
Program KaparovSergey;
Uses
Crt;
Var
i, p, f, k, max, j : Integer;
s, s2 : String;
Begin
ClrScr;
Write('Bведите предложение с симметричными
словами ');
Write('в конце поставьте точку: ');
Readln(s);
max := 0;
p:=1;
for i := 1 to length(s) do
begin
f:=0;
s2:=' ';
if (s[i]=' ') or (s[i]='.')
then
begin
s2:=Copy(s,p,i-p);
k:=length(s2);
for j:=1 to ((i-p) div 2) do
begin
if s2[j]=s2[k]
then
begin
f:=f+1;
k:=k-1;
end;
end;
if f=(length(s2) div 2)
then
if max <= length(s2)
then
max:=length(s2);
p:=i+1;
end;
end;
if max = 0
then
Write('В вашем предложении нет
симметричных слов')
else
Writeln ('Самое длинное симметричное слово
из ',max,' символов');
Readln;
End.
Выберите задачу, номер которой соответствует Вашему порядковому номеру в
журнале, для самостоятельного решения:
1. Дана строка текста. В данной строке один заданный символ заменить другим.
2. В заданном тексте найти и распечатать слово максимальной длины.
3. Написать (в порядке появления в тексте) все слова, длина которых попадает в интервал
[X, Y]. Здесь X и Y целые числа, указывающие, соответственно, наибольшую и
наименьшую длину
4. В данном предложении найти количество слов, содержащих удвоенную согласную
(буквы латинские). Слова в предложении разделяются пробелами, в конце предложения точка.
5. Выяснить, сколько раз встречается каждая буква в предложенном тексте.
6. Предложите пользователю ввести дату в предложенном формате ДД-ММ-ГГ. День и
месяц могут быть указаны одиночными числами, т.е. 1-5-94, а не 01-05-94. Выделите
числа представляющие день, месяц и год, и выведите каждое число с соответствующей
поясняющей надписью на экран.
7. Предложите пользователю ввести число в интервале от 1 до 5 включительно. Ваша
программа должна позволять пользователю вводить любую последовательность
символов. Организуйте проверку ввода, и если ввод длинее одного символа либо
нецифровой, либо не попадает в допустимый интервал, тогда выведите конкретное
сообщение об ошибке. Если ввод неправилен, тогда предложите пользователю повторить
попытку.
8. Даны два текста А и Б. Проверьте, можно ли из букв, входящих в А, составить Б.
(Буквы можно переставлять, но каждую букву можно использовать не более одного раза).
9. В строке, любое количество подряд следующих пробелов замените единственным
пробелом.
10. В строке str1, все вхождения строки str2 замените на строку str3.
11. Напишите программу, которая вводит строку и выводит ее, сокращая каждый раз на 1 символ
до тех пор, пока в строке не останется 1 символ.
12. Напишите программу, которая удаляет из введенной строки любой требуемый введенный с
клавиатуры символ.
13. Вычислите длину самого короткого слова в предложении из трех слов, разделенных
пробелами.
14. Выясните, какая из букв (первая или последняя) встречается в заданном слове чаще.
15. Сколько букв "у" в слове стоит на четных местах?
16. В тексте, состоящем из латинских букв и заканчивающемся точкой, подсчитайте количество
гласных букв.
17. Вычеркните i-ую букву слова.
18. Вычеркните из слова Х те буквы, которые встречаются в слове Z.
19. Составьте программу, вычеркивающую каждую третью букву слова Х.
20. Составьте программу подсчета числа одинаковых букв, стоящих на одних и тех же местах в
словах Х и Y.
Занятие VI
Тема. Бегущая строка. Пример программы
осыпающихся букв. Строки в графическом
режиме.
Program AlexeyDashkin;
Uses
Crt;
Type
Stroka = String [100];
Var
Vhod, St1, InStr : Stroka;
Begin
St1 := '
Поставьте мне пятерку в зачетку!!!!';
ClrScr;
InStr := ' ';
St1:= St1+InStr;
for i := 1 to length(St1) do
begin
Delete(St1,1,1);
GoTo(1,10);
Write(St1);
Delay(5);
Sound(1000);
Delay(90);
NoSound;
DelLine;
end;
End.
Задание. Перед Вами программа
бегущей строки. Рассмотрите ее,
какова роль новых для Вас
операторов?
Program AkulovE;
Uses
Crt;
Var
y,i : Integer;
Name, Bukva : String;
Begin
ClrScr;
Write ('Введите что-нибудь ');
Read (Name);
for i := Length(Name) downto 1 do
begin
Bukva := Name[i];
Задание. Перед Вами программа
осыпающейся строки.
Delete(name,i,1);
Рассмотрите ее, какова роль
for y := 1 to 25 do
новых для Вас операторов?
begin
Window(19,1,80,25);
GotoXY(i,y);
Write(Bukva);
Delay(50);
ClrScr;
Write(Name);
end;
end;
End.
Задание.
1) Наберите программы на компьютере. Проверьте их работу.
2) Усовершенствуйте одну из программ, дополните ее комментариями. Покажите результат работы
учителю для оценки.
3) Решите одну из задач в графическом режиме. Покажите результат работы учителю для оценки.
Занятие VII
Тема. Решение задач.
Выберите задачу, номер которой соответствует Вашему порядковому номеру в
журнале, для самостоятельного решения.
1. В тексте содержащем, несколько (много) предложений, найти все вхождения заданного
слова и распечатать все включающие его предложения. Принять, что каждое
предложение заканчивается точкой.
2*. Ввести с клавиатуры число и вывести его значение словами (например, 44 - сорок
четыре)
3. Дан текст. Преобразовать текст по правилам: если нет символа *, то оставить все без
изменения, иначе заменить каждый символ, встречающийся после первого вхождения
символа *, на символ -.
4. Дан текст. Посчитать количество слов в тексте.
5 Дан текст. Посчитать количество слов, начинающихся на букву “б”.
6. Дан текст. Найти длину самого короткого слова.
7. В заданном предложении указать слово, в котором доля гласных (A, E, I, O) максимальна.
8. Для каждого слова заданного предложения указать долю согласных. Определить слово в
котором доля согласных максимальна.
9. В заданном предложении найти самое короткое и самое длинное слова.
10. В заданном предложении удалите каждое второе слово, а оставшиеся слова переверните.
(Например, из текста “А роза упала на лапу азора” должен получиться текст “азор ан
ароза”).
11. Составьте программу шифрования текстового сообщения. Можно использовать такой
способ шифровки. Шифровальщик задает ключ шифровки - целое число, которое
определяет величину смещения букв русского алфавита, например ключ =3, тогда в
тексте буква “а” заменяется на “г” и т.д. Используются все буквы русского алфавита. Е
считается дважды.
12. Составьте программу дешифрования текстового сообщения, зашифрованного
программой задачи №11.
13. Даны 2 текста. Найти одно из общих слов, встречающихся в текстах.
14. Составьте программу вычисления суммы мест, на которых в слове Х стоят буквы "в" и
"п".
15. Напишите программу, изменяющую порядок слов в строке.
16. Дана строка символов. Дано слово. Удалить из строки это слово.
17. Дана строка символов. Выделить подстроку между первой и второй точкой.
18. Дана строка символов до точки. Группы символов в ней между группами пробелов
считаются словами. Определить, сколько слов начинается и кончается одной и той же
буквой.
19. Дана строка символов до точки. Группы символов в ней между группами пробелов
считаются словами. Определить, сколько слов содержат хотя бы одну букву "е".
20. Дана строка символов до точки. Группы символов в ней между группами пробелов
считаются словами. Определить, сколько слов содержат ровно 3 буквы "е".
Занятие VIII
Тема. Зачет.
• Приготовьте для проверки учителем все Ваши листинги и файлы с
решенными и оцененными задачами по данной теме.
Download