Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Пояснения к программе. Это обычная задача поиска максимума, и при анализе слов очередное текущее слово с большей длиной необходимо присвоить результирующему словуЭто обычная задача поиска максимума, и при анализе слов очередное текущее слово с большей длиной необходимо присвоить результирующему слову. Но в этом случае RezSlovo:= TekSlovo приведет к пересылке одного массива символов на место другого. Если длины последовательно нарастают, то придется пересылать большое количество слов. Если же использовать указатели на динамические массивы, то RezSlovo:= TekSlovo не требует пересылки массивов, а вызывает только присваивание указателю RezSlovo ссылки на тот массив, в котором размещается найденное слово максимальной длины. Поменяв указатели предпишем вводить очередное слово в тот массив, на который сначала ссылался указатель RezSlovo. Type Massiv = Array [ 1.. 100 ] of char; Ukaz = ^ Massiv; Var RezSlovo: Ukaz; {указатель на слово максимальной длины} TekSlovo: Ukaz; {указатель на текущее слово} R: Ukaz; {указатель на промежуточное слово} Max, i, K: Integer; {счетчики букв} Smv: Char; Begin Max:= -1; i:= 0; {i - счетчик букв в слове} New(TekSlovo); New(RezSlovo); { ввод текста и определение длины каждого слова } WriteLn('Введите слова через запятую, в конце - точка'); Repeat Read(Smv); if (Smv <> ',') And (Smv <> '.') then Begin i:= i + 1; TekSlovo^[i]:= Smv End else {сравнение длины текущего слова с максимальной} Begin if i > Max then Begin Max:= i; {сохранили максимальную длину слова} R:= RezSlovo; RezSlovo:= TekSlovo; TekSlovo:= R end; i:= 0 End until Smv = '.';
WriteLn; WriteLn('Введите букву, частоту появления которой ', 'необходимо определить'); ReadLn; Read(Smv); { чтение заданной буквы } K:= 0; { подсчет числа вхождений заданной буквы в самое длинное слово} for i:= 1 to Max do if Smv = RezSlovo^[i] then K:= K + 1; WriteLn ('В 1-ое по порядку слово наибольшей длины:'); for i:= 1 to Max do Write(RezSlovo^[i]); WriteLn; WriteLn ('Число появлений буквы "', Smv, '" равно', K:3); {уничтожаем динамические объекты} Dispose(TekSlovo); Dispose(RezSlovo) End.
В упражнениях 10.2 — 10.14 использовать (линейные) однонаправленные списки при следующем их описании: Type Spisok = ^Zveno; Zveno = record Elem: TypeElem; Next: Spisok end; При этом параметры L, LI и L2 обозначают списки, а параметры Е, El и Е2— данные типа TypeElem, к которым применимы операции присваивания и проверки на равенство. TypeElem — тип элементов списка, уточняемый, если надо, в упражнениях. 10.2. Описать функцию или процедуру, которая: а) определяет, является ли список L пустым; б) находит среднее арифметическое элементов непустого списка L (TypeElem — real); в) заменяет в списке L все вхождения E1 на Е2; г) меняет местами первый и последний элементы непустого списка L; д) проверяет, упорядочены ли элементы списка L по алфавиту (TypeElem = 'a'.. 'z'); е) находит сумму последнего и предпоследнего элементов списка L, содержащего не менее двух элементов (TypeElem = integer). 10.3. Пусть в программе введено описание типа: Type слово = array [1..10] of char; TypeElem = слово; Описать функцию, подсчитывающую количество слов списка L, которые; а) начинаются и оканчиваются одной и той же литерой; б) начинаются с той же литеры, что и следующее слово; в) совпадают с последним словом. 10.4. Описать процедуру, которая по списку L строит два новых списка: L1 — из положительных элементов и L2 — из остальных элементов списка L (TypeElem = Rеаl). 10.5. Описать процедуру, которая вставляет: а) в начало списка L новый элемент Е; б) в конец списка L новый элемент E; в) новый элемент Е после первого элемента непустого списка L; г) в список L новый элемент E1 за каждым вхождением элемента Е; д) в список L новый элемент Е1 перед первым вхождением элемента Е, если Е входит в L; е) в непустой список L пару новых элементов Е1 и Е2 перед его последним элементом; ж) в непустой список L, элементы которого упорядочены по неубыванию, новый элемент Е так, чтобы сохранилась упорядоченность (TypeElem = Real). 10.6. Описать процедуру, которая удаляет: а) из непустого списка L первый элемент; б) из списка L второй элемент, если такой есть; в) из списка L за каждым вхождением элемента Е один элемент, если такой есть и он отличен от Е; г) из непустого списка L последний элемент; д) из списка L первый отрицательный элемент, если такой есть (TypeElem = Integer); е) из списка L все отрицательные элементы (TypeElem = Real). 10.7. Заданный во входном файле текст, за которым следует точка, распечатать в обратном порядке. 10.8. Дана непустая последовательность натуральных чисел, за которой следует 0. Напечатать порядковые номера тех чисел последовательности, которые имеют наибольшую величину. 10.9. Дано целое n > 1, за которым следует n вещественных чисел. Напечатать эти числа в порядке их неубывания. 10.10. Описать процедуру или функцию, которая: а) проверяет на равенство списки L1 и L2; б) определяет, входит ли список L1 в список L2; в) проверяет, есть ли в списке L хотя бы два одинаковых элемента; г) переносит в конец непустого списка L его первый элемент; д) переносит в начало непустого списка L его последний элемент; е) добавляет в конец списка L1 все элементы списка L2; ж) вставляет в список L за первым вхождением элемента Е все элементы списка L1, если Е входит в L; з) переворачивает список L, т. е. изменяет ссылки в этом списке так, чтобы его элементы оказались расположенными в обратном порядке; и) в списке L из каждой группы подряд идущих равных элементов оставляет только один; к) оставляет в списке L только первые вхождения одинаковых элементов. 10.11. Описать рекурсивную функцию или процедуру, которая; а) определяет, входит ли элемент Е в список L; б) подсчитывает число вхождений элемента Е в список L; в) находит максимальный элемент непустого списка L (TypeElem = Real); г) печатает в обратном порядке элементы списка L (TypeElem = Char); д) заменяет в списке L все вхождения E1 на E2; е) удаляет из списка L первое вхождение элемента E, если такое есть; ж) удаляет из списка L все вхождения элемента Е; з) строит L1 — копию списка L; и) удваивает каждое вхождение элемента Е в список L ; к) находит среднее арифметическое всех элементов непустого списка L (TypeElem = Real). 10.12. Описать процедуру, которая формирует список L, включив в него по одному разу элементы, которые: а) входят хотя бы в один из списков L1 и L2; б) входят одновременно в оба списка L1 и L2; в) входят в список L1, но не входят в список L2; г) входят в один из списков L1 и L2, но в то же время не входят в другой из них. 10.13. Описать процедуру, которая объединяет два упорядоченных по неубыванию списка L1 и L2 (TypeElem = Real ) в один упорядоченный по неубыванию список: а) построив новый список L; б) меняя соответствующим образом ссылки в L1 и L2 и присвоив полученный список параметру L1. 10.14. Дан текст, оканчивающийся точкой, причем подряд следует не более 9 одинаковых символов. Требуется перед каждой группой одинаковых символов вставить цифру, равную числу символов в группе, удалив повторные вхождения букв. Например: из строки "ППАААССССККАЛЛЛЛЛЬЬЬЬ." получим строку "2П3А4С2К1А5Л4Ь."
|