Читайте также:
|
|
Это обычная задача поиска максимума, и при анализе слов очередное текущее слово с большей длиной необходимо присвоить результирующему слову. Но в этом случае 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, за которым следует п вещественных чисел. Напечатать эти числа в порядке их неубывания.
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Ь."
Дата добавления: 2015-07-08; просмотров: 517 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Множества | | | Комбинации клавиш управления в среде Turbo Pascal |