Главная страница

Методичка по С. Методические указания к лабораторному практикуму по дисциплине Программирование на языках высокого уровня (язык Си) москва 2005


Скачать 429.5 Kb.
НазваниеМетодические указания к лабораторному практикуму по дисциплине Программирование на языках высокого уровня (язык Си) москва 2005
АнкорМетодичка по С.doc
Дата23.09.2018
Размер429.5 Kb.
Формат файлаdoc
Имя файлаМетодичка по С.doc
ТипМетодические указания
#25022
КатегорияИнформатика. Вычислительная техника
страница3 из 6
1   2   3   4   5   6

Пример решения задачи



Задача 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();

}
    1. Лабораторная работа 4. "Структуры. Файлы "





  1. Н
    аписать программу, которая вводит в режиме запросов заданное число структур вида (в зависимости от номера варианта):





Запрос выводится с новой строки для каждого поля. Например:





После ввода массива структур программа ищет в нем следующую информацию:

  1. Названия телевизоров с размером по диагонали больше 50 см.

  2. Фамилии директоров, производящих телевизоры стоимостью свыше 7000 руб.

  3. Города, в которых производятся телевизоры стоимостью менее 4000 руб.

  4. Заводы, производящие телевизоры с самым большим размером экрана.

  5. Названия телевизоров с самым маленьким размером экрана.

  6. Фамилии директоров заводов, выпускающих самые дешевые телевизоры.

  7. Города, в которых производятся самые дорогие телевизоры.

  8. Названия самых дешевых цветных телевизоров.

  9. Названия самых больших черно-белых телевизоров.

  10. Заводы, производящие только цветные телевизоры.

  11. Города, в которых производятся только черно-белые телевизоры.

  12. Фамилии директоров, производящих самые большие черно-белые телевизоры.

  13. Заводы, производящие самые дешевые цветные телевизоры.

  14. Заводы, производящие телевизоры с размером экрана не менее 50 см.

  15. Фамилии директоров заводов, производящих телевизоры не дороже 3000 руб.

  16. Производителей самых дорогих цветных телевизоров.

  17. Названия самых дорогих холодильников.

  18. Города, в которых производятся самые тяжелые холодильники.

  19. Города, в которых производятся самые большие холодильники.

  20. Адреса заводов, производящих только холодильники дороже 4000 руб.

  21. Адреса заводов, производящих самые дешевые холодильники.

  22. Адреса заводов, производящих самые маленькие холодильники.

  23. Адреса заводов в Москве, производящих самые легкие холодильники.

  24. Названия холодильников объемом более 250 литров, выпускаемых в Москве.

  25. Города, в которых расположено максимальное число заводов.

  26. Города, в которых производится наибольшее число марок холодильников.

  27. Адреса заводов, производящих наибольшее число марок холодильников.

  28. Названия самых больших холодильников, выпускаемых в Санкт-Петербурге.

  29. Названия самых дешевых холодильников, выпускаемых в Москве.

  30. Все различные цены на холодильники, выпускаемые в Москве.

  31. Названия холодильников, производимых в городе с наименьшим числом заводов.

  32. Города, где производится наибольшее число холодильников разного объема.


ПРИМЕЧАНИЕ: Номер варианта выбирается равным номеру по журналу.
II. Модифицировать программу, написанную в первом пункте, таким образом, чтобы она вводила структуры из текстового файла и записывала результаты в файл.
    1. 1   2   3   4   5   6


написать администратору сайта