Содержание
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Постановка задания
Требуется выделить в строке-предложении s все слова, разделенные символами-разделителями «_.,;:\n\t!?», и обработать выделенные слова в соответствии с вариантом задания.
Определения
Регулярное слово — слово, состоящее только из больших латинских букв.
Палиндром — это слово, которое одинаково читается слева направо и справа налево.
Алфавитный порядок задается таблицей ASCII.
Уровень А
Постановка задания
Выделить в строке-предложении s все слова, разделенные символами-разделителями «_.,;:\n\t!?». Обработать выделенные слова в соответствии с вариантом.
Варианты заданий
№ | Формулировка |
А1 | Напечатать все слова, начинающиеся на большую и заканчивающиеся на маленькую букву. |
А2 | Напечатать все слова, содержащие хотя бы одну цифру. |
А3 | Напечатать все слова, содержащие хотя бы одну маленькую латинскую букву. |
А4 | Напечатать все слова, содержащие хотя бы одну большую латинскую букву. |
А5 | Напечатать все слова, состоящие только из маленьких латинских букв. |
А6 | Напечатать все слова, состоящие только из больших латинских букв. |
А7 | Напечатать все слова, состоящие только из цифр. |
А8 | Напечатать все слова, состоящие не менее чем из четырех букв. |
А9 | Напечатать все пятибуквенные слова. |
А10 | Напечатать все слова, содержащие буквы и цифры. |
А11 | Напечатать все слова, не содержащие ни одной цифры. |
А12 | Напечатать все слова, не содержащие ни одной большой латинской буквы. |
А13 | Напечатать все слова, содержащие хотя бы две цифры. |
А14 | Напечатать все слова, содержащие две рядом стоящие буквы. |
А15 | Напечатать все слова, содержащие две рядом стоящие цифры. |
А16 | Напечатать все слова, состоящие не более чем из пяти букв. |
А17 | Напечатать все слова, состоящие только из латинских букв. |
Уровень В
Постановка задания
Выделить в строке-предложении s все слова, разделенные символами-разделителями «_.,;:\n\t!?». Обработать выделенные слова в соответствии с вариантом задания. Крайне не рекомендуется использование функции strtok() из библиотеки <string.h>.
Варианты заданий
№ | Формулировка |
В1 | Подсчитать количество слов, начинающихся на большую букву и содержащих хотя бы один арифметический знак. Напечатать все слова, содержащие две рядом стоящие одинаковые буквы. |
В2 | Подсчитать количество регулярных слов. Напечатать в перевернутом виде все слова, которые содержат два экземпляра заданного символа. |
В3 | Напечатать все слова, начинающиеся с большой буквы. Напечатать самое длинное регулярное слово, которое состоит из одинаковых символов. |
В4 | Напечатать слово, содержащее наибольшее количество цифр. Напечатать количество слов, содержащих хотя бы два арифметических знака. |
В5 | Напечатать все регулярные слова. Напечатать в перевернутом виде самое длинное слово, состоящее только из цифр и латинских букв. |
В6 | Найти количество слов, содержащих более одной цифры, и, исключив все арифметические знаки из этих слов, напечатать их. Напечатать в порядке возрастания все числа, встретившиеся в словах. |
В7 | Определить количество слов, которые содержат заданное подслово и хотя бы одну цифру, и напечатать их. Напечатать в порядке убывания все числа, встретившиеся в словах. |
В8 | Определить количество слов, содержащих и буквы, и цифры, и арифметические знаки. Напечатать их. Напечатать все симметричные слова, содержащие наибольшее количество цифр. |
В9 | Подсчитать количество регулярных слов, содержащих хотя бы две одинаковые буквы. Напечатать все слова, имеющие одну цифру, удалив из таких слов все арифметические знаки. |
В10 | Найти самое длинное регулярное слово и удалить из него все гласные буквы. Найти все слова, в которых имеются либо только цифры, либо только латинские буквы. |
В11 | Подсчитать количество слов, состоящих из одинаковых букв или одинаковых цифр. Напечатать в перевернутом виде слова, имеющие хотя бы один арифметический знак. |
В12 | Напечатать все слова, которые начинаются с большой буквы и заканчиваются заданным двухбуквенным подсловом. Определить количество слов, содержащих согласные латинские буквы, и напечатать порядковые номера этих слов. |
В13 | Напечатать все слова, имеющие в своем составе согласные латинские буквы. Определить количество слов, которые не имеют в своем составе ни одной цифры, и напечатать эти слова. |
В14 | Напечатать все симметричные слова, предварительно удалив из них цифры. Напечатать все слова, состоящие только из согласных латинских букв. |
В15 | Найти все слова, содержащие числа в диапазоне от 10 до 100, и подсчитать их сумму. Напечатать слова, не имеющие цифр, предварительно удалив арифметические знаки. |
В16 | Подсчитать количество слов, начинающихся с большой буквы и оканчивающихся цифрой. Напечатать слова, содержащие заданное подслово и хотя бы один арифметический знак. |
В17 | Подсчитать количество слов, содержащих хотя бы одну согласную латинскую букву и хотя бы одну цифру. Напечатать все слова, состоящие только из четных цифр, и подсчитать сумму этих цифр. |
В18 | Напечатать все слова, которые содержат хотя бы один арифметический знак и заканчиваются на цифру. Определить количество слов, содержащих все маленькие латинские гласные буквы. |
В19 | Найти количество симметричных регулярных слов и напечатать их. Напечатать в перевернутом виде все слова, содержащие согласные латинские буквы. |
В20 | Найти и напечатать все слова, содержащие наибольшее количество букв, если только буквы расположены в алфавитном порядке. Подсчитать количество симметричных слов, имеющих более двух арифметических знаков. |
Уровень С
Постановка задания
Выделить в строке-предложении s все слова, разделенные символами-разделителями «_.,;:\n\t!?». Найти количество всех слов в строке-предложении, которые обладают свойством Q. Вывести все слова исходной строки-предложения в лексикографическом порядке. Записать в строку t любое из слов максимальной длины строки s. Удалить из строки t все символы, обладающие свойством T. Запрещается использование функции strtok() из библиотеки <string.h>.
Программа должна содержать следующие функции:
- сортировка слов (указателей);
- удаление символов строки, обладающих свойством T.
Варианты заданий
№ | Свойство Q | Свойство T |
C1 | В слове нет повторяющихся символов. | Символ является маленькой гласной латинской буквой. |
С2 | В слове все символы встречаются более одного раза. | Символ является большой гласной латинской буквой. |
С3 | В слове хотя бы один символ встречается более одного раза. | Символ является маленькой согласной латинской буквой. |
С4 | В слове только один символ встречается более одного раза. | Символ является большой согласной латинской буквой. |
С5 | В слове латинские буквы чередуются с символами (например, «a2b5s»). | Символ является цифрой. |
С6 | В слове гласные латинские буквы чередуются с согласными. | Символ является арифметическим знаком. |
С7 | В слове строчные латинские буквы чередуются с прописными. | Символ является простой цифрой. |
С8 | В слове буквы располагаются по возрастанию и не повторяются. | Символ является маленькой согласной латинской буквой. |
С9 | В слове гласные латинские буквы чередуются с цифрами. | Символ является маленькой гласной латинской буквой. |
С10 | В слове согласные латинские буквы чередуются с четными цифрами. | Символ является большой согласной латинской буквой. |
Образец выполнения (вариант В14)
Условие задания
Напечатать все симметричные слова, предварительно удалив из них цифры. Напечатать все слова, состоящие только из согласных латинских букв.
Реализация задачи на языке Си
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | #include <stdio.h> // консольный ввод-вывод #include <ctype.h> // символьные функции #include <conio.h> // для задержки программы #include <locale.h> // русификация диалогов #include <string.h> // строковая функция strlen (strtok НЕ используется!) #define DELIMITERS " .,:;?!\n\t" // разделители слов // латинские согласные буквы #define CONSONANTS "bcdfghjklmnpqrstvwxzBCDFGHKLMNPQRSTVWXX" #define N 1024 // максимальная длина входной строки // проверка символа на разделитель // 0 - символ НЕ является разделителем; 1 - является разделителем int Is_delimiter(const char pch) { int i = 0; int result = 0; for(i = 0; DELIMITERS[i]; i++) if(pch == DELIMITERS[i]) { result = 1; break; } return result; } // проверка символа на латинскую букву // 0 - символ НЕ является латинской буквой; 1 - является int Is_consonats(const char pch) { int i = 0; int result = 0; for(i = 0; CONSONANTS[i]; i++) if(pch == CONSONANTS[i]) { result = 1; break; } return result; } // проверка слова на то, что оно состоит только из согласных латинских букв (регистр не важен!) // 0 - слово состоит НЕ только из согласных лат.букв; 1 - иначе int Is_word_consonants(const char* pword) { int i; int result = 1; for(i = 0; pword[i]; i++) if(Is_consonats(pword[i]) == 0) { result = 0; break; } return result; } // удаление всех цифр из заданного слова void Delete_digits_from_word(char* pword) { char new_word[N]; int i; int k = 0; for(i = 0; pword[i]; i++) // если текущий символ не является цифрой, то копируем его в буффер if(!isdigit(pword[i])) new_word[k++] = pword[i]; new_word[k] = 0; // перезаписываем заданное слово словом, в котором нет ни одной цифры for(i = 0; new_word[i]; i++) pword[i] = new_word[i]; pword[i] = 0; } // проверка слова на симметричность (0 - нет; 1 - да) int Is_palindrom(const char* const pword) { int result = 1; int i; int len_word = strlen(pword); // вычисляем длину слова // попарно сравниваем 1ый с последним символом, 2ой с предпоследним и т.д. for(i = 0; i < len_word/2; i++) // если пара символам не равна друг другу, значит, это слово НЕ палиндром if(pword[i] != pword[len_word - i - 1]) { result = 0; break; } return result; } int main(void) { char s[N]; // входная строка char current_word[N]; // хранит текущее выделенное слово из строки s int i; // счетчик цикла + текущий индекс символа в строке s int k; // номер символа текущего слова setlocale(LC_ALL, ""); // русификация диалогов // пользователь вводит с клавиатуры входную строку для последующей обработки printf("Введите входную строку для обработки: "); gets(s); // пока не будут выделены все слова из входной строки s i = 0; while(s[i]) { // пропускаем цепочку разделителей while(s[i] && Is_delimiter(s[i]) == 1) i++; // выделяем очередной слово из входной строки k = 0; while(s[i] && Is_delimiter(s[i]) == 0) current_word[k++] = s[i++]; current_word[k] = 0; // завершаем текущее слово нуль-терминатором (Си-строка) // если текущее слово существует, то начинается его обработка if(current_word[0]) { // проверка выделенного слова на то, что оно состоит только из согласных латинских букв if(Is_word_consonants(current_word) == 1) printf("\n\'%s\' - слово, состоящее только из согласных латинских букв", current_word); // удаляем все цифры из выделенного слова Delete_digits_from_word(current_word); // если текущее выделенное слово является симметричным (палиндромом), то if(Is_palindrom(current_word) == 1) // распечатываем его на экран printf("\n\'%s\' - слово, являющееся симметричным", current_word); } } getch(); // задержка программы, чтобы была возможность просмотреть результат return 0; // завершение работы программы и передача управления в ОС } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Добавить комментарий