Содержание
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Общие положения
➡ Текстовый файл — это последовательность строк, причем каждая строка заканчивается символом «\n».
Текстовый файл состоит из обычных печатных символов (в кодах ASCII), включая пробелы, символы новой строки, символы табуляции. Например, в текстовом файле целое число 123 представлено тремя символами-цифрами «1», «2» и «3», которые в файле расположены друг за другом, образуя слово «123».
Требуется составить программу, выполняющую преобразования над текстовыми файлами согласно указанному варианту.
Варианты заданий (уровень А)
№ | Формулировка |
А1 | Напечатать все слова из текстового файла, начинающиеся на большую и заканчивающиеся на маленькую букву. |
А2 | Напечатать все слова из текстового файла, содержащие хотя бы одну цифру. |
А3 | Напечатать все слова из текстового файла, содержащие хотя бы одну маленькую латинскую букву. |
А4 | Напечатать все слова из текстового файла, содержащие хотя бы одну большую латинскую букву. |
А5 | Напечатать все слова из текстового файла, состоящие только из маленьких латинских букв. |
А6 | Напечатать все слова из текстового файла, состоящие только из больших латинских букв. |
А7 | Напечатать все слова из текстового файла, состоящие только из цифр. |
А8 | Напечатать все слова из текстового файла, состоящие не менее чем из четырех букв. |
А9 | Напечатать все пятибуквенные слова из текстового файла. |
А10 | Напечатать все слова из текстового файла, содержащие буквы и цифры. |
А11 | Напечатать все слова из текстового файла, не содержащие ни одной цифры. |
А12 | Напечатать все слова из текстового файла, не содержащие ни одной большой латинской буквы. |
А13 | Напечатать все слова из текстового файла, содержащие ровно две цифры. |
А14 | Напечатать все слова из текстового файла, содержащие две рядом стоящие одинаковые буквы. |
А15 | Напечатать все слова из текстового файла, содержащие две рядом стоящие цифры. |
А16 | Напечатать все слова из текстового файла, состоящие не более чем из пяти букв. |
А17 | Напечатать все слова из текстового файла, состоящие только из латинских букв. |
Уровень В
Постановка задания
Выделить в текстовом файле все слова, разделенные символами-разделителями «_.,;:\n\t!?», и все эти слова, обладающие свойством Q, построчно записать в другой текстовый файл. Свойства Q задаются в индивидуальных вариантах.
Варианты заданий
№ | Свойство Q |
В1 | В слове нет арифметических знаков. |
В2 | В слове нет гласных латинских букв. |
В3 | Слово состоит только из согласных латинских букв. |
В4 | В слове присутствуют цифры, и арифметические знак. |
В5 | В слове присутствуют и гласные, и согласные латинские буквы. |
В6 | В слове нет согласных латинских букв. |
В7 | В слове нет гласных латинских букв и арифметических знаков. |
В8 | В слове присутствуют гласные латинские буквы. |
В9 | В слове присутствуют согласные латинские буквы, но нет цифр. |
В10 | В слове присутствуют цифры, но нет арифметических знаков. |
В11 | В слове согласных латинских букв больше чем гласных. |
В12 | В слове количество цифр равно количеству арифметических знаков. |
В13 | В слове гласных латинских букв больше чем цифр. |
В14 | В слове количество гласных латинских букв равно количеству арифметических знаков. |
В15 | Слово состоит только из гласных латинских букв и цифр. |
В16 | Слово состоит только из согласных латинских букв и является регулярным. |
В17 | В слове нет согласных латинских букв, и оно является симметричным. |
Уровень С
Постановка задания
Выделить в текстовом файле все слова, разделенные символами-разделителями «_.,;:\n\t!?». Найти количество слов, которые обладают свойством Q. Все слова из исходного файла записать во второй файл построчно в алфавитном порядке в следующем виде:
<слово> — <количество повторений в исходном файле>
Варианты заданий
№ | Формулировка |
С1 | В слове нет повторяющихся символов. |
С2 | В слове все символы встречаются более одного раза. |
С3 | В слове хотя бы один символ встречается более одного раза. |
С4 | В слове только один символ встречается более одного раза. |
С5 | В слове латинские буквы чередуются с цифрами (например, «a2b5s»). |
С6 | В слове гласные латинские буквы чередуются с согласными. |
С7 | В слове строчные латинские буквы чередуются с прописными. |
С8 | В слове буквы располагаются по возрастанию и не повторяются. |
С9 | В слове гласные латинские буквы чередуются с цифрами. |
С10 | В слове согласные латинские буквы чередуются с нечетными цифрами. |
Образец выполнения (вариант В13)
Условие задачи
В слове гласных латинских букв больше чем цифр.
Реализация задачи на языке Си
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 146 | #include <stdio.h> // консольный ввод-вывод #include <ctype.h> // символьные функции #include <conio.h> // для задержки программы #include <locale.h> // русификация диалогов #define DELIMITERS " .,:;?!\n\t" // разделители слов #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_vowel(const char pch) { #define VOWELS "aeiouyAEIOUY" // набор гласных латинских букв int i = 0; int result = 0; for(i = 0; VOWELS[i]; i++) if(pch == VOWELS[i]) { result = 1; break; } return result; } // нахождение количества гласных латинских букв в заданном слове int Get_vowels_in_word_count(const char* pword) { int i; int count = 0; for(i = 0; pword[i]; i++) if(Is_vowel(pword[i]) == 1) count++; return count; } // нахождение количества цифр в заданном слове int Get_digits_in_word_count(const char* pword) { int i; int count = 0; for(i = 0; pword[i]; i++) if(isdigit(pword[i])) count++; return count; } // чтение данных из входного текстового файла (pname_input_file) // запись слов, соответствующих свойству Q в выходной текстовый файл (pname_output_file) void Read_words_from_text_file(const char* const pname_input_file, const char* const pname_output_file) { FILE* in_f; FILE* out_f; char s[N]; // текущая строка входного текстового файла in_f = fopen(pname_input_file, "r"); if(!in_f) printf("Ошибка открытия входного текстового файла с данными!"); else { char current_word[N]; // хранит текущее выделенное слово из строки s out_f = fopen(pname_output_file, "w"); while(fgets(s, N - 1, in_f) != NULL) { int i; // счетчик цикла + текущий индекс символа в строке s int k; // номер символа текущего слова // пока не будут выделены все слова из входной строки 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]) { // определяем количество гласных букв в текущем слове int vowels_count = Get_vowels_in_word_count(current_word); // определяем количество цифр в текущем слове int digits_count = Get_digits_in_word_count(current_word); // если в слове количество гласных латинских букв больше чем цифр, то if(vowels_count > digits_count) fprintf(out_f, "%s\n", current_word); // пишем текущее слово в выходной текстовый файл } } } // обработка закончена - разрываем связь с файлами fclose(in_f); fclose(out_f); } } // главная функция программы (точка входа) int main(void) { // имена входного и выходного текстовых файлов char name_in_file[N / 10]; char name_out_file[N / 10]; setlocale(LC_ALL, ""); // русификация диалогов // пользователь вводит с клавиатуры имена входного и выходного текстовых файлов printf("Введите имя входного текстового файла с данными: "); gets(name_in_file); printf("Введите имя выходного текстового файла с данными: "); gets(name_out_file); // запускаем файло-текстовую обработку Read_words_from_text_file(name_in_file, name_out_file); printf("\nДля завершения работы программы нажмите ENTER..."); getch(); // задержка программы, чтобы была возможность просмотреть результат return 0; // завершение работы программы и передача управления в ОС } |
Результаты работы программы

Содержимое входного файла

Результаты работы программы (консоль)

Содержимое выходного файла
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Пока лишь 1 комментарий