Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример программы
//Программа создает файл строк. Признак окончания ввода - ввод пустой строки. //Слово - это последовательность русских букв. Между словами не менее одного //пробела. Затем строки считываются и программа печатает те слова из каждой //строки, которые содержат равное количество гласных и согласных букв.
#include < stdio.h> #include < conio.h> #include < string.h> #include < stdlib.h>
const FNAME = " C: \\stroka.txt\0"; //имя файла объявлено константой void make_file(char *fname); //создание файла void pro_verka(char *fname); //чтение и обработка строк файла int glasn(char ch); //проверка на гласность int so_glasn(char ch); //проверка на согласность
void main() {clrscr(); char fname[20] = FNAME; make_file(fname); pro_verka(fname); }
//Функция проверяет, является ли символ гласной русской буквой int glasn(char ch) {static char gl[] = " АаЕеИиОоУуЫыЭэЮюЯя\0"; int i = 0;
while(gl[i] & & gl[i]! = ch) i++; if(gl[i]) return(1); //значит буква - гласная else return(0); //значит буква - не гласная }
//Функция проверяет, является ли символ согласной русской буквой int so_glasn(char ch) {static char so_gl[] = " БбВвГгДдЖжЗзКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ\0"; int i = 0;
while(so_gl[i] & & so_gl[i]! = ch) i++; if(so_gl[i]) return(1); //значит буква - согласная else return(0); //значит буква - не согласная }
//Функция создания текстового файла void make_file(char *fname) {unsigned char st[80]; //исходная строка FILE *in; //текстовый файл puts(" \nСоздание файла"); puts(" После ввода каждой строки нажмите < Enter>."); puts(" Признак окончания ввода - ввод пустой строки\n");
//Открываем файл в режиме записи (w) текста (t) //Если файл с таким именем уже есть, то новые данные //будут дописаны поверх старых if((in = fopen(fname, " wt")) == NULL) {printf(" Ошибка открытия файла для записи. Нажмите < Enter> "); getchar(); exit(0); }
printf(" Введите строку и нажмите < Enter> \n"); printf(" -> "); gets(st); //функция вводит всю строку, включая //пробелы и символ \n while(strlen(st)! = 0) {fprintf(in, " %s\n", st); printf(" \nВведите строку и нажмите < Enter> \n"); printf(" -> "); gets(st); } fclose(in); //закрываем файл }
//читаем и обрабатываем строки файла void pro_verka(char *fname) {FILE *in; //текстовый файл unsigned char st[80]; //исходная строка unsigned char sr[80]; //результирующая строка unsigned char pr[80]; //обрабатываемое слово int i, j, k; //номер обрабатываемого символа int gl = 0; //число гласных букв в слове int sogl = 0; //число согласных букв в слове int ok; //признак гласной (согласной) буквы int n; //длина результирующей строки int m; //максимально возможная длина строки //Открываем файл в режиме чтения (r) текста (t) if((in = fopen(fname, " rt")) == NULL) {printf(" Ошибка открытия файла для чтения"); getchar(); exit(0); }
printf(" \nРезультат: \n"); m = 80; fgets(st, m, in); //читаем строку файла while(! feof(in)) {i = 0; n = 0; sr[i] = '\0';
while(st[i]) //обрабатываем строку {k = 0; while(st[i]! = ' ' & & st[i+1]) //копируем слово {pr[k] = st[i]; k++; i++; } pr[k] = '\0';
j = 0; //обрабатываем слово gl = 0; sogl = 0; while(pr[j]) {ok = glasn(pr[j]); //считаем гласные if(ok) gl++;
ok = so_glasn(pr[j]); //считаем согласные if(ok) sogl++; j++; } if(gl == sogl) {for(j = 0; j < k; j++, n++) sr[n] = pr[j]; if(st[i]) sr[n] = ' '; n++; } i++; }
sr[n] = '\0'; printf(" \n%s", sr); fgets(st, m, in); } fclose(in); //Закрываем файл printf(" \nДля завершения нажмите < Enter> "); getch(); }
|