Задача 14. Определить, сколько раз в тексте встречается заданная буква.
С помощью функции Сopy копируем в переменную а по одному последовательно все символы из текста t. В случае а = х, где х исходная буква, необходимо включить счетчик. Длину текста определим с помощью функции length.
Программа:
program bukva;
var
t,a : string;
x : char; i,k : integer;
begin
write(‘Введите исходный текст’);
readln(t);
writeln(‘Введите букву’);
readln(x);
k := 0;
for i := 1 to length (t) do
begin
a := copy (t, i, 1);
if a = x then k := k + 1;
end;
write (‘Буква ‘,x,’ встречается ‘, k, ‘ раз.’)
end.
В этой задаче функцию Copy использовать не обязательно. Возможно и такое решение:
for i := 1 to length (t) do
if t(i) = x then k := k + 1;
Задача 15. Подсчитать, сколько слов в тексте начинается на заданную букву. Слова в тексте разделены пробелами.
Первая буква каждого слова в тексте следует после пробела. Определив позицию пробела и выделив фрагмент текста от пробела и до конца, определим является ли первая буква фрагмента заданной по условию.
Программа:
program bukslova;
var
t,a : string;
x : char; i,k : integer;
begin
write(‘Введите исходный текст’);
readln(t);
writeln(‘Введите букву’);
readln(x);
i := 1; k := 0;
while i0 do
begin
a := copy (t, 1, 1);
if a = x then k := k + 1;
i := pos(‘ ‘,t);
t := copy (t, i + 1, length(t)–i);
end;
write (‘Количество слов на букву ‘,x,’ = ‘, k)
end.
В переменную a копируем первую букву фрагмента текста; i – номер позиции пробела; t – исходный текст и текущий фрагмент текста от пробела и до конца. Цикл продолжается до тех пор, пока текущий фрагмент t содержит пробелы.
Задача 16. В заданном тексте осуществить замену одного слова на другое.
Программа:
program slovo;
var
t,a,b,c,s : string;
i : integer;
begin
write(‘Введите исходный текст’);
readln(t);
writeln(‘Введите слово, которое нужно заменить’);
readln(a);
writeln(‘Введите слово, для замены’);
readln(b);
t := t + ‘ ‘;
writeln (‘Исходный текст ‘); writeln (t);
i := 1; s := ‘’;
while i0 do
begin
i := pos(‘ ‘,t);
c := copy (t, 1, i – 1);
if c = a then s := s + b + ‘ ‘ else s := s + c + ‘ ‘;
t := copy (t, i + 1, length(t) – i)
end;
writeln (‘Новый текст ‘); writeln (s)
end.
Выделяем из текста каждое слово с помощью функции Copy. Выделенное слово “с” сравниваем с заданным “а”: если они равны, то в новый текст следует записать слово для замены “b”, иначе в новый текст записываем старое слово “с”. Текст должен заканчиваться пробелом, иначе не будет возможности выделить последнее слово. На всякий случай запишем в конец исходного текста пробел (t := t + ‘ ‘;).
Задача 17. Составить программу, которая по заданной дате отображает на экране название соответствующего знака Зодиака.
Астрологи делят год на 12 периодов и каждому из них ставят в соответствие знак Зодиака. Граничные даты периодов зададим типизированной константой в виде одномерного массива вещественных чисел, а название каждого периода типизированной константой – одномерным массивом строк. При вводе даты необходимо предусмотреть правильный ввод месяца и числа. Номер месяца должен находиться в интервале от 1 до 12 , а число в интервале от 1 до 31. Чтобы не усложнять задачу, более точную проверку опустим.
Программа:
program zodiak;
uses crt;
label 1;
const
dt : array[1..12] of real = (01.19,2.18,3.20,4.19,5.20,
6.21,7.22,8.22,9.22,10.22,11.22,12.21);
zod : array[1..12] of string[10] = (‘Водолей’,’Рыбы’,’Овен’,
‘Телец’,’Близнецы’,’Рак’,’Лев’,’Дева’,
‘Весы’,’Скорпион’,’Стрелец’,’Козерог’);
var
s:string[10];
x,i:integer;r,y:real;sem:char;
begin
repeat
1: clrscr;
write(‘Введите дату рождения, например: 01.22 или 12.28’);
readln(r);
{Проверка правильности ввода месяца рождения}
x := trunc(r);
if (x12) then begin
write(‘Месяц введен неверно’);
delay(1000); goto 1
end;
{Проверка правильности ввода числа рождения}
y := frac(r);
if (y0.31) then begin
write(‘Число введено неверно’);
delay(1000); goto 1
end;
{Определение знака Зодиака}
s := zod[12];
for i := 1 to 11 do
if(rdt[i]) and (r
{Вывод результатов}
writeln(‘Вы родились ‘, r:5:2);
writeln(‘под знаком Зодиака ‘,s);
writeln(‘Если хотите прервать работу, нажмите Y’);
sem := readkey;
until upcase(sem) = ‘Y’
end.
Все основные действия в программе выполняются в цикле (repeat … until) до тех пор, пока не будут введены символы Y или y. При вводе прописной буквы y функция Upcase превратит ее в заглавную. Процедура delay(t) модуля crt приостанавливает выполнение программы на t мс.
Записные типы
Во многих экономических и информационных задачах обрабатываются ведомости, документы, каталоги, списки. При этом появляется необходимость объединять данные различного типа в одну группу. Для работы с группой данных в языке Паскаль введено понятие записи. Запись — это структура данных, состоящая из фиксированного числа компонентов разного типа. Составляющие запись компоненты называется полями записи. В отличие от массива компоненты (поля) записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются. Записной тип еще называют комбинированным типом.
Записной тип данных предоставляет программисту возможность объединить в одну связанную структуру различные по типу и смыслу элементы. Элементами записи могут быть и структурированные типы данных, например массивы и другие подчиненные записи. Для обработки доступна как вся запись целиком, так и отдельные ее поля.
Понятие записи рассмотрим на примере ведомости списка учащихся с их оценками.
Каждая строка в этой ведомости состоит из отдельных элементов данных различного типа:
а) порядковый номер – целое десятичное число;
б) Фамилия И. О. – массив символов;
в) оценки – массив целых чисел.
Эти данные можно объединить в одну группу и считать записью. Введем следующие обозначения: В – имя всей записи; n – порядковый номер; fio – фамилия, имя, отчество; mark – оценки.
Обращение к элементу записи в программе выполняется с помощью уточненного (составного) имени. Уточненное имя содержит имя записи и имя элемента и записывается в следующем виде:
имя записи.имя элемента
Например,
B.n
B.fio
B.mark
Записи, как и другие данные, объявляются в разделе описаний и используются в разделе операторов.
Структура объявления типа записи такова:
= recordend
Здесь– правильный идентификатор; record, end – зарезервированные слова (запись, конец);– последовательность разделов записи, между которыми ставится точка с запятой. Каждый раздел записи состоит из одного или нескольких идентификаторов полей, отделяемых друг от друга запятыми. За идентификатором (идентификаторами) ставится двоеточие и описание типа поля (полей).
Для представленной ведомости объявление записи выглядит следующим образом:
type
list = record
n : integer;
fio : array [1..20] of char;
mark : array [1..3] of integer
end;
var B : list;
Возможно объявление записи в разделе переменных:
var B : record
n : integer;
fio : array [1..20] of char;
mark : array [1..3] of integer
end;
Элемент записи используется в программе в том же самом смысле, как и обычная переменная. Элемент записи можно указывать как в левой части оператора присваивания, так и в выражениях. Над элементом записи можно выполнять действия, допустимые для данных его типа. Если тип элемента записи – целый, то выполняются все операции, допустимые для целых данных. Для рассмотренной ведомости над элементами записи можно произвести, например, следующие операции:
порядковому номеру n записи B присвоить значение 2:
B.n := 2;
найти сумму трех оценок:
s := B.mark [1] + B.mark [2] + B.mark [3];
ввести значения порядкового номера:
read (B.n).
Обращение к записи в целом, а не только к ее элементам, допускается лишь в операторе присваивания. Слева и справа от знака присваивания при этом должны использоваться имена записей одинакового типа.
Объявим тип birthday, содержащий три поля с именами day, month и year; переменные а и b содержат записи типа birthday; c – запись, содержащая в качестве элемента подчиненную запись.
type
birthday = record
day,month : byte;
year : word
end;
var a,b : birthday;
c : record
name : string;
bd : birthday
end;
В этом случае возможно a := b; a.day := 27; b.year := 1939; для вложенных полей необходимо продолжать уточнения: с.bd.year, c.bd.day, c.bd.month.
Синтаксичекая диаграмма записного типа представлена на рис. 14.
Рис. 14
Синтаксичекая диаграмма списка полей (рис. 15):
Рис. 15
Статьи к прочтению:
Работа со строковыми ресурсами
Похожие статьи:
-
Практическая работа №10. элементы программирования в excel на языке visual basic
Цель работы: Освоение работы с макросами и знакомство с элементами языка Visual Basic, освоение простейших приемов программирования на языке Excel Visual…
-
Требования к практической части работы и рекомендации по ее выполнению
Практическая часть контрольной работы способствует развитию практических навыков по работе с современными операционными системами ПК (задание 2) и…