Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Программирование алгоритмов с использованием строк




Цель работы: Разработка алгоритмов и написание приложений циклической структуры с использованием подпрограмм и строковых типов данных.

Один из предоставляемых Turbo Delphi типов данных обработки строк - короткая строка. Для переменной такого типа память выделяется статически, т.е. до начала выполнения программы, и общее количество символов такой строки не может превышать 256. Переменная строкового типа может быть объявлена двумя способами:

- с помощью конструкции string [длина], где длина – константа целого типа, определяющая максимальный размер, который может иметь переменная:

- зарезервированным словом - shortstring.

Следует иметь в виду,  что в нулевой байт заносится текущий размер строки. В тексте программы последовательность символов, являющаяся строкой, заключается в апострофы.

Используя операции =, <, >, <=, >=, <>, можно осуществлять сравнение строковых переменных или констант. Строки сравниваются посимвольно, начиная с первого символа.

Операция конкатенации, обозначаемая символом +  - единственная строковая операция. Она объединяет строки в указанном порядке слева направо.

  Для обработки строк в Turbo Delphi используются встроенные функции и процедуры (таблица 6):

                                                                                                         Таблица 6

   Функция        Назначение       Описание параметров
Concat (s1,s2,..sn:string):string Слияние строк в одну s1,s2,..sn - строки
Copy (s:string;       i,k:integer):string Возвращает подстроку заданной строки s – исходная строка; i – индекс начала копирования; к – длина подстроки
Length (s:string):integer Возвращает количество символов в строке s- строка
Pos (subs,s:string):integer Возвращает номер первого символа в подстроке, содержащейся в заданной строке (если подстрока не найдена, то возвращает 0)            sub – искомая подстрока s – исходная строка
Trim (s:string):string Удаляет из строки лидирующие и хвостовые пробелы s – исходная строка
TrimLeft (s:string):string Удаляет из строки лидирующие пробелы s – исходная строка
TrimRight (s:string):string Удаляет из строки хвостовые пробелы s – исходная строка
UpperCase (s:string):string Возвращает копию строки с заменой всех букв нижнего регистра                       соответствующими буквами верхнего регистра s – исходная строка
LowerCase (s:string):string Возвращает копию строки с заменой всех букв верхнего регистра                       cоответствующими буквами нижнего регистра s – исходная строка
StringReplace(s,s1,s2:string; flag:tReplaceFlags):string Возвращает строку с заменой вхождений одной подстроки другой подстрокой s – исходная строка s1 – искомая подстрока s2 – строка замены Тип tReplaceFlags =set of (rfReplaceAll,rfIgnoreCase)
Процедура        Назначение      Описание параметров
Delete(Var s:string;                i,k:integer) Удаляет подстроку из строки s – исходная строка k – количество удаляемых символов i – индекс начала удаления
Insert (subs:string; Var s:string;i:integer) Вставляет подстроку в строку, начиная с указанной позиции subs – вставляемая подстрока s – исходная строка i – индекс начала вставки
Str (x:m:n;Var s:string) Преобразует числовую переменную в строку в соответствии с параметрами форматирования x – выражение целого или вещественного типа m, n – выражения целого типа (параметры форматирования) s – результирующая строка
Val (s:string; Var v:integer(или real);   cod:integer) Преобразует строку в числовую переменную s – исходная строка v – численный результат cod – номер недопустимого символа в исходной строке (если такого нет, то 0)

 

 

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

Program Example_17;

{$APPTYPE CONSOLE}

Uses SysUtils;

Var

InStr: shortstring;

count_word: word;            // количество слов

count_symb: byte;             // количество букв

PosProb: byte;                // позиция пробела

Begin

write ('Введите строку: ');

readln (InStr);

count_word:= 0;

count_symb:= 0;

InStr:= Trim(InStr);         // удаление лидирующих пробелов

Repeat                                  // удаление повторяющихся пробелов

PosProb:= Pos(' ',InStr);

Delete(InStr,PosProb,1)

until PosProb=0;

while length (InStr) <> 0 do

begin

PosProb:= Pos (' ',InStr);

case PosProb of

0: begin                                // пробелов нет, последнее или одно слово

    count_word:= count_word+1;

    count_symb:= count_symb + length (InStr);

   break

end

else                                     // любое другое положение пробела

   begin

     Delete (InStr,1,PosProb);

     count_word:= count_word+1;

     count_symb:= count_symb + PosProb-1

   end;

end; { case }

end; { while }

writeln ('Количество слов = ',count_word:6);

writeln ('Среднее количество букв в слове = ',count_symb/count_word:6:0);

writeln ('Завершение приложения!');

readln

End.

Результат работы приложения представлен в окне вывода (рис.10):

Рис.10. Результат работы приложения (пример 17)

Варианты заданий

Вводится предложение в виде строки. Слова в предложении разделяются между собой пробелом или запятой. Для решения задачи следует применять стандартные функции и процедуры работы со строками. При невозможности определения нужных значений, вывести сообщение.

1. Определить самое длинное слово – палиндром в строке. Палиндром – слово, которое читается одинаково слева направо и справа налево. Если палиндромов максимальной длины несколько, то вывести эти слова по алфавиту.

2. Вывести самое длинное и самое короткое слово в строке и все слова, находящиеся между ними, по алфавиту.

3. Вывести по алфавиту все слова, которые не содержат гласных букв.

4. Вывести по алфавиту все слова, которые содержат по одной цифре.

5. Вывести все слова, которые частично или полностью совпадают с заданным словом.

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

7. Преобразовать строку так, чтобы все буквы в ней были отсортированы по возрастанию.

8. Преобразовать строку так, чтобы все цифры в ней были отсортированы по убыванию.

9. Преобразовать строку так, чтобы в ней остались только слова идентификаторы из заданного списка, а слова, состоящие только из цифр удалить.

10. Из заданной строки вывести все слова-палиндромы по алфавиту.

11. Преобразовать строку таким образом, чтобы в ее начале были записаны слова, содержащие только цифры, потом слова, содержащие только буквы, а затем слова, которые содержат буквы и цифры.

12. Преобразовать строку таким образом, чтобы все слова в ней были выведены перевернутыми относительно центра..

13. Преобразовать строку таким образом, чтобы буквы каждого слова в ней были отсортированы по возрастанию.

14. Преобразовать строку таким образом, чтобы цифры каждого слова в ней были отсортированы по убыванию.

15. Преобразовать строку таким образом, чтобы в ней остались только слова, содержащие буквы и цифры в алфавитном порядке, остальные слова удалить.

16. Определить, сколько раз встречается каждое слово строке. Выдать этот список в алфавитном порядке.

17. Определить, какие слова встречаются в строке по одному разу, и напечатать их по алфавиту.

18. Все слова строки, которые начинаются с буквы, отсортировать в алфавитном порядке.

19. Все слова, которые начинаются с цифры, отсортировать по убыванию. Напечатать сумму цифр слов строки.

20. Удалить из строки все слова, которые не являются служебными словами языка Delphi Win32 Language из заданного списка. Напечатать оставшиеся слова по убыванию.

21. Выделить из строки слова, являющиеся служебными словами языка Delphi Win32 Language из заданного списка и отсортировать их по алфавиту.

22. Удалить из строки все слова-палиндромы и вывести оставшиеся слова по убыванию длин.

23. Выделить из строки все слова, состоящие из чисел, и вывести оставшиеся по возрастанию длин.

24. Выделить из строки все неповторяющиеся слова, состоящие из чисел, и вывести оставшиеся по убыванию длин.

25. Выделить из строки все неповторяющиеся слова-палиндромы и вывести их в алфавитном порядке.

 

9. Программирование алгоритмов с использованием комбинированного типа данных (тип «запись»)

Цель работы: Разработка алгоритмов и написание приложений циклической структуры для работы с массивами записей и использованием подпрограмм.

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

               with <переменная типа запись> do <группа операторов>.

 Он позволяет, один раз указав имя комбинированной переменной после слова with, работать в переделах группы операторов (составной оператор) только с именами полей как с обычными переменными.

Пример 18.  Ввести список студентов в виде массива записей. Запись состоит из двух полей: фамилия и массив из двух оценок. Найти в массиве записей студента с заданной фамилией. Вывести фамилию студента и его средний балл.

Program Example_18;

{$APPTYPE CONSOLE}

Uses   SysUtils;

Const size = 3;

Type

tS=string[20];

tStud=record                                      // тип запись

        Fam: tS;

        Oc: array[1..2] of byte;

        end;

tGrup = array[1..size] of tStud;   // массив записей

Var   Grup: tGrup;

    i,j,Search: integer;

       Family: tS;

     MidlOc: real48;

Begin

writeln ('Введите массив из ',size,' записей:');

for  i:=1 to size do

begin

write (' Введите фамилию: ');

readln (Grup[i].Fam);

write ('    Введите 2 оценки: ');

for j:= 1 to 2 do

   read (Grup[i].Oc[j]);

readln

end;

writeln;

write('Введите фамилию для поиска: ');

readln (Family);

Search:= 0;

for i:=1 to size do

if Family = Grup[i].Fam then

   with Grup[i] do

   begin

   Search:= Search+1;

   MidlOc:= (Oc[1] + Oc[2])/2;

   writeln (' ':5,Fam, ': средний балл = ',MidlOc:4:2)

   end;

if Search = 0 then writeln('Нет такой фамилии!');

readln

End.

      Результат работы приложения представлен в окне вывода (рис.11).

Рис.11. Результат работы приложения (пример 18)

 

Варианты заданий

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

При реализации приложения необходимо использовать подпрограммы на усмотрение автора. При обработке заданного массива нельзя использовать дополнительные массивы.       

1. Задан список абитуриентов университета: фамилия, будущая специальность, три оценки на экзаменах, средний балл аттестата. Удалить абитуриентов с заданной фамилией и добавить абитуриента после абитуриента с указанным номером.

2. Задан перечень книг в библиотеке: автор, название, издательство, год издания, тираж. Добавить в начало массива две книги, удалить все книги заданного автора.

3. Задан список сотрудников фирмы: фамилия и инициалы, должность, год рождения, заработная плата. Удалить сотрудников с заданной должностью, добавить элемент после элемента с указанной фамилией.

4. Задан список спортсменов: фамилия спортсмена, вид спорта, разряд, количество набранных очков. Удалить из списка всех спортсменов с заданным видом спорта и добавить двух спортсменов в начало списка.

5. Задан список научно-исследовательских лабораторий: наименование, номер лаборатории, количество научных сотрудников, количество компьютеров, количество тем исследования, сумма выполненного объем научных исследований. Удалить все лаборатории с минимальным количеством тем и добавить новую лабораторию перед лабораторией заданного наименования.

6. Задан список автобусов: тип автобуса, завод-производитель, число мест, мощность двигателя, номер маршрута, название маршрута. Удалить из списка все автобусы заданного типа и добавить новый автобус перед заданным номером маршрута.

7. Задан список автозаводов: название завода, номер завода, марка выпускаемого автомобиля, количество автомобилей, прибыль. Удалить из списка заводы, выпускающие автомобиль заданной марки, и добавить два новых автозавода в начало списка.

8. Задан список студентов: фамилия, специальность, группа, три экзаменационные оценки. Удалить из списка всех студентов-отличников и добавить одного студента после студента с заданной фамилией.

9. Задан список компьютеров: марка компьютера, фирма-производитель, тип процессора, год выпуска, стоимость. Удалить все компьютеры заданной фирмы - производителя и добавить в начало списка два компьютера новой марки.

10. Задан список поездов: номер поезда, начальный и конечный пункты назначения, время отправления, время в пути, число мест. Удалить из списка все поезда, отправляющиеся из заданного начального пункта. Добавить новый поезд перед поездом с заданным номером.

11. Задан список предприятий: название, руководитель, адрес, количество работников, годовая прибыль. Удалить из списка все предприятия заданного наименования и добавить предприятие перед предприятием с заданной фамилией руководителя.

12. Задан список автомобилей: марка, страна, мощность двигателя, количество мест, расход топлива на 100 км. Добавить два автомобиля одной марки в начало списка и удалить автомобили заданной страны.           

13. Задан список школ: номер, фамилия директора, район города, количество классов, количество учеников. Добавить школу перед школой с заданным номером и удалить школы заданного района.

14. Задан список часов: марка, завод-производитель, страна, год выпуска, цена. Удалить из списка часы последнего года выпуска и добавить часы после часов заданной марки и заданной страны.

15. Задан список стран: название, столица, численность населения, занимаемая площадь суши, протяженность границ. Удалить из списка страны с численностью, меньше заданной, и добавить в начало списка две страны.

16. Задан список картин: название, художник, год написания, страна, цена. Удалить из списка все картины заданного художника и добавить две картины перед картиной c заданным названием.

17. Задан список телевизоров: марка, фирма-производитель, страна-производитель, размер экрана, цена. Добавить два новых телевизора после первого телевизора с заданной фирмой производителем и удалить телевизор заданной марки.

18. Задан список носителей информации: название носителя, тип, фирма производитель, объем информации, цена. Удалить последний элемент с заданного типом носителя информации, добавить элемент перед элементом с указанным номером.

19. Задан список владельцев автомобиля: фамилия, номер прав, номер автомобиля, телефон, номер техпаспорта. Удалить из списка элемент с заданным номером, добавить два элемента перед элементом с заданным номером автомобиля.

20. Задан список компакт-дисков: название, фирма-производитель, год выпуска, объем информации, цена. Удалить последний компакт-диск с заданным названием, добавить два элемента перед компакт-диском с заданным номером.

21. Задан список товаров: название, страна, фирма-производитель, год выпуска, количество, стоимость. Удалить все товары заданной страны, добавить два товара после первого товара с указанной фирмой-производителем.

22. Задан список больных: фамилия, домашний адрес, номер медицинской карты, диагноз, номер страхового полиса. Удалить больного с заданным номером медицинской карты, добавить двух больных в начало массива.

23. Задан список домов в районе: улица, номер дома, тип дома, количество квартир, суммарная площадь. Удалить все дома заданного типа и добавить дом перед домом, для которого задан адрес.

24. Задан список мобильных телефонов: тип, фирма-производитель, страна, вес, фамилия владельца. Удалить все телефоны для заданной фамилии владельца и добавить телефон после второго мобильного телефона заданного типа.

25. Задан список товаров на радио-рынке: название, тип, фирма, количество, цена. Удалить все товары заданного названия и добавить товар после товара с минимальным количеством.





Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 1148 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Жизнь - это то, что с тобой происходит, пока ты строишь планы. © Джон Леннон
==> читать все изречения...

2321 - | 2086 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.