Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Работа со строками в объектно-ориентированном программировании. Оператор цикла с параметрами
Для языков программирования характерны не только возможности работы с числовой информацией, но и со строковой. Напомним, что для работы с числами мы использовали два основных типа данных: Integer (целый) и Real (вещественный). Например, var a: integer; b: real; Для работы со строками необходимо использовать тип данных string (var s: string). Отличительной чертой этого типа данных является то, что мы можем обратиться как к строке целиком, так и посимвольно, то есть к каждой букве в отдельности. Для этого нам необходимо использовать оператор цикла. Цикл - многократное повторение последовательности действий по некоторому условию. Известны три типа циклических алгоритмических структур, но при работе со строками будем использовать одну из них – цикл с параметром. Он имеет две формы записи: For < параметр>: =< нач. значение> to < кон. значение> do < тело цикла>; For < параметр>: =< кон. значение> downto < нач. значение> do < тело цикла>; Цикл повторяется пока значение параметра лежит в интервале между начальным и конечным значениями параметра. Причем эти выражения (начального и конечного значение) вычисляются только один раз в начале выполнения цикла. Параметр обязательно должен быть целого типа. В первом варианте при каждом повторении цикла значения параметра изменяется на следующее значение в данном типе (для целого типа - увеличивается на 1). Понятие шаг. Во втором варианте при каждом повторении цикла значение параметра изменяется на предыдущее значение параметра (для целого типа - уменьшается на единицу). При работе со строкой запишем оператор цикла следующим образом: for i: =1 to length(s) do (обращение к символам от первого до последнего в строке s). Кроме того, используются следующие процедуры и функции: 1. Функция length (s) определяет длину строки. Результат - целое число 0..255 Пример: дана строка, подсчитать количество цифр в строке. var s: string; k: integer; k: =length(s); 2. Процедура Delete (s, pos, n) - удаление части строки. Удаляет из строки s n-символов начиная с символа № pos. Пример: s: ='рогатка'; Delete(s, 5, 3) => рога 3. Процедура Insert (s1, s2, pos). Вставка части строки. S1-что, S2-куда, Pos-с какой позиции Пример: S1: ='свет'; Insert(s1, 'o', 2) => 'совет' 4. Функция Copy (s, pos, n) - возвращает часть строки s длиной n, начиная с позиции pos. Пример: S: ='пароход'; t: =copy(s, 1, 3) => 'пар' 5. Сцепление строк - функция Concat (s1, s2, s3, …, sn) Пример: Concat ('к', 'о', 'т') => 'кот' 6. Функция Pos (s1, s2) - поиск одной строки в другой. Возвращает номер символа, начиная с которого строка s1 является частью s2. Пример: pos ('cd', 'abcdf') => 3 Лабораторная работа №9 Рассмотрим алгоритм решения задачи, в которой нужно подсчитать количество вхождений символа «а» в строку. Используем компоненты классов TEdit и TMemo для ввода строки и вывода результата. Var s: string; i, k: integer; Procedure TForm1.Button1Click(Sender: TObject); Begin s: =edit1.text; //ввод строки For i: =1 to length(s) do //идем по строке If s[i]=’a’ then k: =k+1; {если i-ый символ а, тогда увеличивай счетчик k} Memo1.text: =IntToStr(k) //вывод результата End; Пусть форма будет выглядеть следующим образом: Задания для самостоятельной работы: 1. Дана строка s: Найти количество вхождений букв a, c, d в строку. 2. Найти количество цифр в строке. 3. Сцепить несколько строк в одну. 4. Из данной строки выбрать цифры и сформировать из них новую строку. 5. Найти количество слов, начинающихся на букву с. 6. Подсчитать количество слов в строке. 7. Определить начинается и заканчивается ли слово одной буквой. 8. Удалить каждую четную букву в строке. 9. Проверить одинаковое ли число открытых и закрытых скобок в строке. 10. По введенным: фамилии, имени, отчеству выводить информацию о том, является ли пользователь автором программы, его теской или являются ли теской отец автора и пользователя программы. Программирование циклических алгоритмов. Циклы «до» и «пока» Как уже говорилось, известны три типа циклических алгоритмических структур. Была рассмотрена только одна из них – цикл с параметром. Поговорим об остальных: - цикл с предусловием - цикл с постусловием Существуют операторы для их реализации. 1. Цикл с предусловием (цикл-«пока») - наиболее универсальная циклическая структура. Реализуется оператором While. Формат оператора: While < логическое выражение> do < тело цикла> Пока значение логического выражения истинно (true), выполняется тело цикла, тело может быть простым или составным оператором. 2. Цикл с постусловием (цикл-«до»)имеет формат Repeat < тело цикла > until < логическое выражение > Повторяется выполнение тело цикла. Цикл заканчивается, когда логическое выражение становится истинным. Тело цикла с постусловием выполняется хотя бы один раз. Использование операторных скобок для ограничения тела цикла не требуется. Для гибкого управления циклическими операторами используют следующие процедуры: Break – реализует немедленный выход из цикла Continue – обеспечивает досрочное завершение очередного прохода цикла. Лабораторная работа №10 Задача: Вывести 5 одинаковых надписей: «Программа цикла»
Для вывода повторяющегося действия нам понадобиться описать переменную i целого типа, обработать события OnClick для кнопки Button1. В теле процедуры необходимо описать нижеследующий метод: procedure TForm1.Button1Click(Sender: TObject); begin for i: =1 to 5 do Memo1.Lines.Add('Программа цикла') end; Рассмотрим пример решения задачи: найти сумму ряда s=1+1/2+1/3+…+1/k. Для задачи наиболее оптимальным алгоритмом решения будет цикл. Для того чтобы выделить повторяющие части запишем ряд следующим образом: s=1/1+1/2+1/3+…+1/k. Заметим, что числители постоянен и равен 1. Знаменатели постоянно увеличиваются на 1 в интервале от 1 до k. Таким образом, общий вид элемента ряда = 1/i, где i – изменяющийся знаменатель. Следовательно, запишем метод решения задачи: Var k, i: integer; s: real; Begin k: =StrToInt(Edit1.Text); s: =0; For i: =1 to k do s: =s+1/i; {i пробегает все значения знаменателя от 1 до k (1, 2, 3, …, k) изначально s=0, при k=1 s=0+1/1, s становится равным 1; при k=2 s=1+1/2, s становится равным 1, 5 и т.д.} Memo1.Text: =FloatToStr(s); End; Задания для самостоятельной работы: 1. Вывести таблицу умножения на любое число, введенное с клавиатуры. 2. Вывести таблицу значений функции y=sin(x) в интервале 0..1 3. Вывести 4 надписи: «На окне сидело n кошек», 1£ n£ 4. 4. В интервале [0, 20] подсчитать количество четных чисел и чисел, которые делятся на 3. 5. Вычислить сумму натурального ряда чисел от 1 до n. 6. Вычислить сумму чисел s=1/(p+2)+2(p+2)+3/(p+2)+…+p/(p+2). 7. Вычислить произведение чисел кратных 5 ряда от 1 до n. 8*. Вычислить сумму чисел s=(1+3+5+…+2*n-1)3-(2+4+6+…+2*n)2. 9*. Составить программу для проверки утверждения: «Результатами вычислений по формуле х2+х+17 при 0≤ х≤ 15 являются простые числа». Все результаты вывести на экран (простое число – число которое делится только на себя и на единицу). 10*. Покупатель должен заплатить в кассу s рублей. У него имеются 1, 2, 5, 10, 50, 100, 500, 1000-рублевые купюры. Сколько купюр разного достоинства отдаст покупатель, если он начнет платить с самых крупных? (использовать процедуру Continue). 11*. Написать программу, которая запрашивает исходные данные и производит над ними выбранное пользователем действие. Выбор действий осуществляется с помощью меню. Исходные данные – числа a и b. Меню действий: 1. – сложить 2. – умножить 3. – вычесть 4. – разделить 5. – выход Результат выводить после каждого действия Популярное:
|
Последнее изменение этой страницы: 2016-07-14; Просмотров: 705; Нарушение авторского права страницы