У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент



Лабораторна робота - Обробка текстів
4

Лабораторна робота

Тема:

 

Обробка текстів.

Мета роботи: вивчення засобiв мови Сi для обробки текстів.

Завдання 1:Дано текст, який містить букви і пропуски. Знайти і надрукувати слово, в якому міститься найбільше символів “А”. Словом вважати послідовність букв, розділених пропусками.

Короткі теоретичні відомості:

Масивом називається сукупність однотипних даних або функцій, позначених одним іменем. Це чи не найпоширеніший тип даних у програмуванні, а оскільки для обробки масивів найчастіше використовуються цикли, вони різко підвищують ефективність використання комп’ютерної техніки.

З курсу лінійної алгебри відомо, що за вимірністю масиви бувають одновимірні (вектор), двовимірні (матриця), тривимірні (тензор) і т.д. У програмуванні найчастіше використвуються одновимірні та двовимірні масиви. Більшість сучасних мов програмування дозволяють обробляти масиви будь-якої вимірності. Мова Сi відрізняється від них тим, що дозволяє використовувати тiльки одновимiрні масиви даних, а багатовимірні розглядаються як одновимірні масиви одновимірних масивів. Це, однак, як буде показано нижче, не є її недоліком, а навпаки надає їй ширших можливостей.

Так само, як прості, дані складних типів підлягають оголошенню в програмі. Ознакою масиву пiд час його оголошення є квадратнi дужки, якi ставляться пiсля iдентифiкатора масиву, в дужках вказується кiлькiсть елементiв масиву. Мiнiмальне значення iндекса (порядкового номера) елемента масиву завжди дорiвнює нулю. Це відрізняє Сі від інших мов програмування таких, як Паскаль, Бейсик, де початковий номер елемента можна змінювати. Пiд час оголошення масив може бути iнiцiалiзований. Наведемо декілька прикладів.

char h[]="Система", t[25], s[9]="Комп'ютер";

float a[20], b[5][3];

float c[2][3]={{2,3,7},{6,,1.2}}; або

float c[2][3]={2,3,7,6,1e-4,1.2}; – задані всі елементи.

Тут для масиву h буде зарезервовано в пам’ятi мiсце для зберiгання 8 букв типу char – на одну більше, ніж це потрібно для слова Система, в цьому випадку компiлятор автоматично додасть до масиву нуль '\0' – машинний нуль. Під час операцій вводу-виводу та деяких інших компілятор не підраховує кількість елементів масиву, а використовує цей нуль, як ознаку його кінця.

Масив h можна було оголосити інакше так:

char h[8]; або char h[];

та ініціалізувати шляхом присвоєння: h[0]='С'; h[1]='и'; h[2]='с'; ... h[6]='а';

Масиви t i s займуть вiдповiдно 25 i 9 комiрок пам’ятi типу char. Подібно до масиву h, вектор s буде iнiцiалiзований, проте вiн не буде доповнений нульовим елементом, оскільки під час оголошення для нього не було зарезервовано місце. В будь-якому місці програми машинний нуль можна примусово встановити наприкінці масиву s, наприклад, так: s[8]='\0'; Але тоді його остання буква р буде стертою, замість неї запишеться нуль.

Особливо треба наголосити на тому, що під час оголошення для масиву s відведено 9 комірок типу char, а порядковий номер його останнього індекса дорівнює лише 8, оскільки нумерація елементів починається з 0. Неврахування цього часто спричиняє виникнення помилок у програмі.

Для масиву a буде видiлено 20, масиву b – 15, а масиву c – 6 комiрок пам’ятi типу float. Пiд час оголошення вiдбудеться iнiцiалiзацiя масиву c п’ятьма елементами, тобто c[0][0]=2, c[0][1]=3, c[0][2]=7, c[1][0]=6 та c[1][2]=1.2. Елемент c[1][1] не буде ініціалізованим, але йому буде зарезервовано відповідне місце. Зауважимо лише, що не всі компілятори забезпечують можливість пропуску елементів.

Рядки багатовимірного масиву розташовуються в пам’яті один за другим у порядку оголошення.

Звернення до елемента масиву в програмi вiдбувається шляхом вказування iдентифiкатора масиву, пiсля якого в квадратних дужках задаються значення всiх його iндексiв за допомогою констант або виразiв цiлого типу. Зрозуміло, що у випадку використання виразів усі значення його змінних повинні бути задані до їх застосування.

Таблиця ідентифікаторів:

Ідентифікатор |

Змінна

kB |

Приблизна кількість букв в слові.

kS |

Приблизна кількість слів.

j | Порядковий номер букви.

i | Порядковий номер слова.

SIZE | Приблизна довжина тексту.

text[SIZE] |

Текст.

slovo[kS][kB] | Слово.

kBAa[kS] | Масив кількостей букв А, а в кожному слові.

max | Слово з max кількістю букв А, а.

NM | Порядковий номер слова з max кількістю букв А, а.

podil_na_slova(); |

Функція поділу суцільного рядка на окремі слова.

KBAa(); |

Функція, що підраховує кількість букв А, а кожному

слові.

int NMK(); |

Функція що повертає порядковий номер слова з max

кількістю букв А, а.

Програма:

#include<stdio.h>

#define SIZE 1000

#define kS 40

#define kB 20

int i=0,j=0;

char text[SIZE]="Оператором називають одиничну, логiчно

завершену iнструкцiю для ЕОМ.";

char *word=text,slovo[kS][kB];

int kBAa[kS];

int NMK();

/*@@@@@@@@@@@@@@@@@

@@ Головна програма @@

@@@@@@@@@@@@»@@@@@*/

main()

{

clrscr();

podil_na_slova();

KBAa();

printf("Дано текст:\n<<%s>>\n",text);

printf("\nСлово з найбiльшою кiлькiстю букв'A,a':\n<<%s>>",slovo[NMK()]);

getch();

}

/*%%%%%%%%%%%%%%%%%

%% Подiл тексту на слова %%

%%%%%%%%%%%%%%%%%*/

podil_na_slova()

{

while(*word)

{

if(*word!=' '){slovo[i][j]=*word;j++;}

else{slovo[i][j]='\0';i++;j=0;}

word++;

}

}

/*##########################################

## Кiлькiсть букв "A,a" в кожному словi ##

##########################################*/

KBAa()

{

for(i=0;i<kS;i++)

{

kBAa[i]=0;

for(j=0;j<kB;j++)

if(slovo[i][j]=='А'|slovo[i][j]=='а')kBAa[i]++;

}

}

/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&

&& Пошук слова з max кiлькiстю букв "A,a" &&

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/

int NMK()

{

int max=kBAa[0],NM=0;

for(i=1;i<kS;i++)

if(max<kBAa[i])

{max=kBAa[i];NM=i;}

return NM;

}

Результати:

Дано текст:

<<Оператором називають одиничну, логiчно завершену iнструкцiю для ЕОМ.>>

Слово з найбiльшою кiлькiстю букв 'A,a':

<<називають>>

Висновок: Я вивчив засоби мови Сi для обробки текстів.