Методичка по С. Методические указания к лабораторному практикуму по дисциплине Программирование на языках высокого уровня (язык Си) москва 2005
Скачать 429.5 Kb.
|
Пример решения задачиЗадача 3. Выделить из каждой строки и напечатать подстроки, разделенные более чем тремя точками. Среди выделенных подстрок найти первую подстроку, содержащую русскую букву. Вставить три звездочки после каждой латинской буквы в строку, которой принадлежит найденная подстрока. #include #include #include #include //константа, содержащая все русские буквы #define Rus "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ\ абвгдежзийклмнопрстуфхцчшщъыьэюя" /*Функция выделяет подстроки, разделенные более чем тремя точками. k - количество строк;n1 - количество подстрок (передается по адресу); str - исходный массив строк; str1 - массив подстрок; num - массив с номерами строк, из которых были выделены подстроки*/ void substr(char str[][81],int n,char str1[][81],int*n1,int num[]) { int i; char *s,*s1,*s2;//s - указатель на текущий символ // s1 и s2 – указатели на начало и на конец подстроки *n1=0; //подстрок еще нет for(i=0;i { s1=NULL;//начало подстроки еще не обнаружено s=str[i];//ставим указатель на текущий символ в начало строки while(*s) if(*s=='.') //возможно, найден конец подстроки { s2=s-1; //s2 указывает на символ перед точкой //пропуск точек : пока символ точка и не конец строки while(*s=='.'&&*s) s++; if (s-s2-1>3) //если число точек больше 3 { if(s2>=s1&&s1)//если подстрока не пустая //и найдено начало подстроки { num[*n1]=i; //запоминаем номер исходной строки //копируем подстроку в массив подстрок strncpy(str1[*n1],s1,s2-s1+1); //добавляем нуль-символ в конец подстроки str1[*n1][s2-s1+1]='\0'; (*n1)++;//увеличиваем число подстрок } s1=s;//запоминаем начало следующей подстроки } } else s++;//если символ - не точка, берем следующий символ } } /*Функция находит среди выделенных подстрок первую, содержащую русскую букву. Возвращает -1 если таких подстрок не найдено, либо номер найденной подстроки */ int rus(char str1[][81],int n1) { int i,k=-1; char *s; for(i=0;i //пока не рассмотрены все подстроки и не обнаружена русская буква { //strchr возвращает адрес первого вхождения подстроки в строку for(s=str1[i];*s && !strchr(Rus,*s);s++);//цикл закрыт if(*s)//как только обнаружена русская буква, return i;//возвращает номер строки, т.е. выходит из функции } return(k);//вернет –1, если русских букв не было } /*Функция вставляет три звездочки после каждой латинской буквы в строке, которой принадлежит найденная подстрока. Возвращает 1 если вставка была и 0 в противном случае*/ int ins(char *s) { char *s1,s2[4]="***",*j; int f=0;//признак вставки for(s1=s;*s1;s1++) if(*s1>='A' && *s1<='Z' ||*s1>='a' && *s1<='z') {//если символ латинская буква, освобождаем место для вставки * j=strlen(s)+s; //указатель в конце строки - на нуль-символе for(;j>s1;j--)//сдвиг символов вправо на 3 позиции, // начиная с последнего символа *(j+3)=*j; s1++;//ставим указатель на символ, расположенный после // латинской буквы strncpy(s1,s2,3);//копируем звездочки f=1;//вставка была } return f; } void main() { int n=0,n1,num[100],f,i,k; char str [10][81],str1[10][81]; clrscr(); //ввод строк до пустой строки printf("Введите строки: \n"); while(n<10 && *gets(str[n]))n++;; substr(str,n,str1,&n1,num);//выделение подстрок if (n1==0) printf("Нет подстрок! \n"); else { printf("Выделено %d подстрок: \n",n1); for(i=0;i puts(str1[i]); k=rus(str1,n1);//поиск номера подстроки с русской буквой if(k==-1) printf("Нет строк с русскими буквами!"); else { printf("Выделенная строка: %s\n",str1[k]); if(f = ins(str[num[k]]))//если вставка была printf("Преобразованная строка: %s\n",str[num[k]]); else printf("Нет вставки\n"); } } getch(); } Лабораторная работа 4. "Структуры. Файлы "Н аписать программу, которая вводит в режиме запросов заданное число структур вида (в зависимости от номера варианта): Запрос выводится с новой строки для каждого поля. Например: После ввода массива структур программа ищет в нем следующую информацию: Названия телевизоров с размером по диагонали больше 50 см. Фамилии директоров, производящих телевизоры стоимостью свыше 7000 руб. Города, в которых производятся телевизоры стоимостью менее 4000 руб. Заводы, производящие телевизоры с самым большим размером экрана. Названия телевизоров с самым маленьким размером экрана. Фамилии директоров заводов, выпускающих самые дешевые телевизоры. Города, в которых производятся самые дорогие телевизоры. Названия самых дешевых цветных телевизоров. Названия самых больших черно-белых телевизоров. Заводы, производящие только цветные телевизоры. Города, в которых производятся только черно-белые телевизоры. Фамилии директоров, производящих самые большие черно-белые телевизоры. Заводы, производящие самые дешевые цветные телевизоры. Заводы, производящие телевизоры с размером экрана не менее 50 см. Фамилии директоров заводов, производящих телевизоры не дороже 3000 руб. Производителей самых дорогих цветных телевизоров. Названия самых дорогих холодильников. Города, в которых производятся самые тяжелые холодильники. Города, в которых производятся самые большие холодильники. Адреса заводов, производящих только холодильники дороже 4000 руб. Адреса заводов, производящих самые дешевые холодильники. Адреса заводов, производящих самые маленькие холодильники. Адреса заводов в Москве, производящих самые легкие холодильники. Названия холодильников объемом более 250 литров, выпускаемых в Москве. Города, в которых расположено максимальное число заводов. Города, в которых производится наибольшее число марок холодильников. Адреса заводов, производящих наибольшее число марок холодильников. Названия самых больших холодильников, выпускаемых в Санкт-Петербурге. Названия самых дешевых холодильников, выпускаемых в Москве. Все различные цены на холодильники, выпускаемые в Москве. Названия холодильников, производимых в городе с наименьшим числом заводов. Города, где производится наибольшее число холодильников разного объема. ПРИМЕЧАНИЕ: Номер варианта выбирается равным номеру по журналу. II. Модифицировать программу, написанную в первом пункте, таким образом, чтобы она вводила структуры из текстового файла и записывала результаты в файл.
|