Постановка задания

Задание для всех вариантов звучит так (или, возможно, немного изменено, так как могут быть разные издания учебного пособия):

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

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

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

ВариантЗадание
1.Определить самое длинное слово-палиндром в строке. Палиндром — слово, которое читается одинаково слева направо и справа налево. Если палиндромов максимальной длины несколько, то напечатать эти слова по алфавиту.
2.Напечатать самое длинное и самое короткое слово в строке и все слова, находящиеся между ними, по алфавиту.
3.Напечатать по алфавиту все слова, которые не содержат гласных букв.
4.Напечатать по алфавиту все слова, которые содержат по одной цифре.
5.Напечатать все слова, которые частично или полностью совпадают с заданным словом.
6.Преобразовать строку таким образом, чтобы сначала в ней были напечатаны только буквы, а потом только цифры, не меняя порядка следования символов в строке.
7.Преобразовать строку так, чтобы все буквы в ней были отсортированы по возрастанию.
8.Преобразовать строку так, чтобы все цифры в ней были отсортированы по убыванию.
9.Преобразовать строку так, чтобы в ней остались только слова-идентификаторы из заданного списка, а слова, состоящие только из цифр, удалить.
10.Напечатать все слова-палиндромы по алфавиту.
11.Преобразовать строку таким образом, чтобы в ее начале были записаны слова, содержащие только цифры, потом слова, содержащие только буквы, а затем слова, которые содержат и буквы, и цифры.
12.Преобразовать строку таким образом, чтобы все слова в ней были напечатаны перевернутыми относительно центра.
13.Преобразовать строку таким образом, чтобы буквы каждого слова в ней были отсортированы по возрастанию.
14.Преобразовать строку таким образом, чтобы цифры каждого слова в ней были отсортированы по убыванию.
15.Преобразовать строку таким образом, чтобы в ней остались только слова, содержащие буквы и цифры в алфавитном порядке, остальные слова удалить.
16.Определить, сколько раз встречается каждое слово в строке. Выдать этот список в алфавитном порядке.
17.Определить, какие слова встречаются в строке по одному разу, и напечатать их по алфавиту.
18.Все слова строки, которые начинаются с буквы, отсортировать в алфавитном порядке.
19.Все слова, которые начинаются с цифры, отсортировать по убыванию. Напечатать сумму цифр слов строки.
20.Удалить из строки все слова из заданного списка, которые не являются служебными словами языка Си. Напечатать оставшиеся слова по убыванию.
21.Выделить из строки слова из заданного списка, являющиеся служебными словами языка Си, и отсортировать их по алфавиту.
22.Удалить из строки все слова-палиндромы и напечатать оставшиеся слова по убыванию длин.
23.Выделить из строки все слова, состоящие из чисел, и напечатать оставшиеся по возрастанию длин.
24.Выделить из строки все неповторяющиеся слова, состоящие из чисел, и напечатать оставшиеся по убыванию длин.
25.Выделить из строки все неповторяющиеся слова-палиндромы и напечатать их в алфавитном порядке.

Лабораторная работа $№8$ предполагает написание программы на языке Си. При заказе работы своего варианта вы получите качественно написанную и хорошо прокомментированную программу.

Дополнительно заказав алгоритм решения вашей задачи (мы крайне рекомендуем это сделать), получите аккуратно оформленный отчет-алгоритм, поясняющий все тонкости решения поставленной задачи.

Образец выполнения (вариант №1)

Условие задания

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

Алгоритм решения задачи

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

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

Используя функцию strtok можно легко получать очередное слово из входной строки. После вычленения очередного слова, его нужно проверить на «палиндромность». Для этих целей будет создана в коде программы специальная функция.

➡ Как проверить слово на палиндромность?

Рассмотрим слово, например, «наворован«. Рассмотрим алгоритм проверки на палиндромность на данном слове.

С точки зрения языка программирования Си, слово «наворован» имеет такую структуру:

‘н’‘а’‘в’‘о’‘р’‘о’‘в’‘а’‘н’‘\0’символ
0123456789индекс

Напомним, что палиндром — это такое слово, которое читается одинаково слева направо и справа налево.

Это означает, что в таком слове $1$-я буква должна быть равна последней, $2$-я буква — предпоследней, $3$-я буква — предпредпоследней и т.д. Следовательно, когда идет проверка слова на палиндромность, нужно сравнить пары символов, которые симметричны относительно экватора слова.

Экватор слова — это центральный символ рассматриваемого слова.

Если количество букв в слове нечетное (например, в слове «теремок» экватором выступает буква ‘e‘). Если в слове четное количество букв (например, в слове «молоко»), то экватор вырождается в точку, следовательно, абсолютно каждой букве в любом слове есть симметричная пара.

Слово «наворован» образует следующие пары проверяемых символов:

‘н’‘а’‘в’‘о’‘р’‘о’‘в’‘а’‘н’‘\0’символ
0123456789индекс

➡ Буква ‘р‘, стоящая на позиции с индексом $4$, является экватором, поэтому в расчетах участия не принимает.

Осталось вывести формулу, которая связывает пару симметричных символов. Во-первых, в цикле со счетчиком (for(;;)) начинаем пробежку по слову, начиная с самой первой буквы. Во-вторых, потребуется знать длину анализируемого слова. В этом поможет функция strlen из заголовочного файла string.h.

Формулы для образования пары симметричных символов относительно экватора:

  • буква$[i]$ — получение левой буквы пары.
  • буква$[длина\ слова — i — 1]$ — получение правой буквы пары.

➡ Длина слова «наворован» составляет $9$.

«Желтая» пара букв имеет индексы $\{0; 8\}$. $8$-ка была получена по выше озвученной зависимости: $8 = 9 — 0 — 1$.

«Серая» пара букв имеет индексы: $\{1, 9 — 1 — 1\} = \{1, 7\}$. И так далее…Итак, с проверкой слова на палиндромность разобрались.

В условии задачи есть такая фраза:

«Если палиндромов максимальной длины несколько, то напечатать эти слова по алфавиту»

💡 Это означает, что слова-палиндромы максимальной длины нужно куда-то запоминать, чтобы потом была возможность их отсортировать.

Поэтому в программе нам придется завести дополнительный массив (с точки зрения языка Си этот массив будет представлять собой двухмерный массив символов) слов для слов-палиндромов максимальной длины.

Рассмотрим следующую входную строку: «На рынке казак купил радар и подарил его узизу«. Очевидно, что в этой строке встречаются слова-палиндромы, вот их перечень:

  • казак
  • радар
  • и
  • узизу

Три слова из этих слов-палиндромов одновременно имеют максимальную длину, равную $5$-ти. Четвертое слово-палиндром «и» не обладает максимальной длиной, поэтому в дальнейших расчетах участия не принимает.Лабораторная работа №8. Степанов. Си. Программирование. МГТУ им.Баумана. Массив слов-палиндромов макс.длины

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

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

➡ Очень важно помнить о том, что в языке Си две строковые переменные ни в коем случае нельзя сравнивать на равенство значений, используя оператор $==$. Так как в этом случае будут сравниваться адреса первых элементов этих строк, а не хранимое ими значение.

Си предоставляет специальную функцию сравнения двух строк по значению — это функция strcmp, которая находится в заголовочном файле string.h.

➡ И еще важный момент! Для обмена значений двух строковых переменных нужно использовать вспомогательный строковый буфер и производить обмен значений строк через функцию strcpy.

Необходимые программные функции для кодирования

Ниже представлен список необходимых функций, требующихся для успешного решения поставленной задачи (самое главное — помнить о том, что функция должна строго решать какую-то конкретную одну задачу).

Название функцииНазначение функции
1mainГлавная функция программы (точка входа). В рамках этой функции будет реализован ввод входной строки, разбивка входной строки на отдельные слова и формирование массива слов-палиндромов максимальной длины.
2IsPalindromЭта функция принимает на вход текущее слово и проверяет, является ли оно палиндромом.
3SortBubblePalindromsЭта функция принимает на вход массив, хранящий слова-палиндромы максимальной длины и их количество. Происходит упорядочивание слов-палиндромов по алфавиту методом пузырьковой сортировки.
4PrintPalindromsЭта функция принимает на вход отсортированный по алфавиту массив слов-палиндромов и их количество. Происходит печать результатов работы программы.

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

➡ При желании количество функций можно увеличить вдвое.

Реализация задачи на языке Си

Результаты работы программы

NРезультат
1Ввод входной строки, не содержащей ни одного слова-палиндрома.
Лабораторная работа №8. Степанов. Си. Программирование. МГТУ им.Баумана. Тест программы: ввод пустой строки
2Ввод входной строки, содержащей ровно одно слово-палиндром максимальной длины.
Лабораторная работа №8. Степанов. Си. Программирование. МГТУ им.Баумана. Тест программы: входная строка содержит только одно слово-палиндром
3Ввод входной строки, содержащей несколько слов-палиндромов максимальной длины.
Лабораторная работа №8. Степанов. Си. Программирование. МГТУ им.Баумана. Тест программы: входная строка содержит три слова-палиндрома

Стоимость заказа работы

➡ Стоимость программы из любого варианта составляет $150$ рублей.
➡ Стоимость детального алгоритма из любого варианта составляет $200$ рублей (заказывается опционально на ваше усмотрение, чтобы детально разобраться с решением лабораторной работы, например, не прибегая к консультации репетитора).

Также дополнительно вы можете заказать у нас:

  • Построение аккуратной ГОСТовой блок-схемы. Ориентировочная стоимость $150$ рублей.
  • Отчет о проделанной работе (иногда в вузах есть требование — предоставить отчет к лабораторной работе). Ориентировочная стоимость $100$ рублей.

Для оформления заказа пишите на почту: proglabs@mail.ru.
Время нашего ответа обычно составляет не более 10 минут.