Адaнuя для подготовки к работе

 

1. Изучить, как описываются, инициализируются и используются одномерные массивы в языке Си. Как связаны массивы и указатели в языке Си?

2. Изучить особенности символьных массивов, строковый тип в языке Си.

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

4. Подобрать тестовые данные.

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

 

1. Задан текст, в котором нет круглых скобок. Выполнить его сжатие, то есть заменить всякую последовательность одинаковых соседних символов длины больше трех на (k)s, где s - повторяемый символ, а k - количество повторений.

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

3. Отредактировать заданное предложение, заменяя всякое вхождение слова вида abã на b, где а, b - подслова, ã - обращение
подслова а.

4. Задано предложение, в котором есть все буквы латинского алфавита. Пусть Ca - первое из слов предложения содержащее букву а. Проверить, верно ли, что длины слов Caне убывают с изменением а в алфавитном порядке.

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

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

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

8. Отредактировать данное предложение, оставив в нем только те слова, которые могут быть получены перестановкой букв первого слова предложения.

9. Отредактировать заданное предложение, заменяя каждое вхождение слова this на the, а слово those на these.

10. Преобразовать данное предложение, удалив из него слова-палиндромы.

11. Определить, упорядочены ли слова данного предложения лексикографически. Если нет, то преобразовать предложение, удаляя слова, нарушающие порядок.

12. Преобразовать данное предложение, оставив в нем только последнее вхождение каждого слова.

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

14. Удалить из данного предложения слова, содержащие заданную последовательность символов.

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

16. Даны две строки s1 и s2. Пусть w – первое из слов строки s1, которое есть и в строке s2. Найти слово, предшествующее первому вхождению w в s1.

17. Даны две строки. Получить строку, в которой чередуются слова первой и второй строки. Если в одной из строк число слов больше, чем в другой, то оставшиеся слова этой строки должны быть дописаны в строку-результат.

18. Даны две строки. Пусть n1 – число слов в первой строке, а n2 – во второй (n1< n2). Добавить в конец первой строки последние n2-n1 слов второй строки.

19. Дан текст, заканчивающийся точкой. Соседние слова разделены запятыми. Определить количество слов-палиндромов, которые начинаются с буквы "а".

20. Вывести слова данного предложения, которые отличны от последнего слова.

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

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

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

24. Определить, есть ли в данной строке одинаковые слова.

25. Даны две строки. Определить последнее из слов первой строки, которое есть во второй строке.

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

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

28. Определить, есть ли в данной строке слова, множества символов которых равны.

29. Вывести слова данной строки в обратном порядке по одному в строке экрана.

30. Удалить из строки слова, содержащие повторяющиеся символы.

 

Контрольные вопросы

 

1. Как описываются и инициализируются одномерные массивы?

2. Найдите ошибку в фрагменте программы:

int i,a[10];

for (i = 10; i > 0; i- -)

scanf("%i",a[i]);.

3. Какое соглашение принято в Си для работы с символьными массивами как со строками динамической длины?

4. Определите объем памяти, выделяемый для переменных s1 и s2 согласно каждому из следующих описаний:

a) char s1[ ]="string";

b) char s2[ ]={’s’,’t’,’r’,’i’,’n’,’g’}.

5. Опишите функции для:

a) определения длины строки;

б) копирования строки;

в) конкатенации строк;

г) сравнения строк.

 

ЛАБОРАТОРНАЯ РАБОТА №15

Массивы и указатели

 

Цель работы: Освоение работы с многомерными массивами и массивами указателей в языке Си, осознание связи между массивами и указателями.