МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ,,ЛЬВІВСЬКА ПОЛІТЕХНІКА’’
Кафедра інформаційних
систем та мереж
/
Лабораторна робота №2
на тему:
операції над стрічками
Мета роботи: набуття практичних навичок застосування операцій над стрічками.
Завдання
Розробити процедури та функції які забезпечують виконання операції вказаних в завданні.
В контрольному прикладі передбачити всі можливі комбінації вхідних параметрів (нульова довжина, вихід за межі стрічки і т.п.), в тому числі і неправильні.
№ варіанту індивідуального завдання 10. Визначення довжини слова з номером n.
Опис алгоритму: В даній лабораторній я створюю алгоритм знаходження довжини вказаного слова. Його робота полягає в накопиченні всіх пробілів у стрічці, і коли ми вводимо n, тобто номер слова, довжину якого нам потрібно, то функція перевіряє чи (k=n-1), тобто, в реченні на один пробіл менше ніж слів, і з цього місця інша змінна починає накопичувати символи, тобто букви слова і коли доходить до кінця, то виводить нам довжину сова на екран. Також передбачено ввід порожньої стрічки, виводить помилку, якщо нічого не введено з клавіатури. Якщо ми вказуємо на слово, якого немає, то також з’являється помилка (k<n-1), тобто, коли кількість пробілів менша ніж номер слова.
Блок-схема алгоритму
Ні
Так
Ні Так
Ні Так
Ні Так
Реалізація програми в мові С
Код програми
//WordLenght.cpp
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <ctime>
#define MAX 256
#define OUTPUT ( n==1 ? b : b-1)
void main()
{
char s[MAX];
int i,n,k,b,z;
int t1, t2;
printf("Введiть стрiчку:\n");
gets_s(s);
if (strlen(s)==0) printf("Порожня стрiчка");
else
{
printf("Введiть номер слова:\n");
scanf_s("%d", &n);
t1=clock();
k=0;
b=0;
z=0;
for(i=0; i<strlen(s); i++)
{
if ((s[i]=='!')||(s[i]=='-')||(s[i]=='+')||(s[i]=='*')||(s[i]==']')
||(s[i]=='|')||(s[i]=='/')||(s[i]=='#')||(s[i]=='@')||(s[i]=='%')
||(s[i]=='{')||(s[i]=='}')||(s[i]=='"')||(s[i]=='(')||(s[i]==':')
||(s[i]==';')||(s[i]=='=')||(s[i]=='?')||(s[i]=='[')||(s[i]==')')
||(s[i]=='^')||(s[i]=='№')||(s[i]=='`')||(s[i]=='.')||(s[i]=='<')
||(s[i]=='>')||(s[i]=='&')) z++;
{
if (s[i]==' ') s[i+1];
}
if ((s[i]==' ')&&(s[i+1]!=' ')) k++;
if (k==n-1) b++;
}
if (z>0) printf("Помилка, в стрiчцi мiстяться %d системних символи\n",z);
else
{
if (k<n-1) printf("Вказаного слова не iснує");
else printf("Довжина вказаного слова: %d", OUTPUT);
}
t2=clock();
printf("\nЧас виконання програми:%ld ms\n", t2-t1);
}
_getch();
}
Виведення результатів
На даному рисунку я перевіряю,як працює визначення довжини третього слова .
/
Ввожу системні символи, програма видає помилки, бо символи не стосуються слова.
/
Перевіряю, код на визначення порожньої стрічки.
/
Ввожу речення, і вказую на неіснуюче слово.
/
Перевіряю код на врахування апострофа в українській мові.
/
Перевіряю код на врахування скорочувального символа в англійській мові мові.
/
Перевіряю код на врахування твердого знаку в російській мові.
/
Вказую на слово ,якого немає, тобто, на слово поза межами стрічки.
/
Таблиця затрат часу на виконання
Час
Для стрічки із 3 слів
Для стрічки із 10 слів
Середня різниця
t1
2 мс.
7 мс.
5 мс.
t2
1 мс.
4 мс.
3 мс.
t3
3 мс.
6 мс.
3 мс.
Середня різниця часу складає 3.6 мс. – 0.004 секунди.
Висновок: в даній лабораторній роботі я навчився працювати зі стрічками. Для пошуку потрібного слова я ввів функцію, яка шукає пробіли, підраховує їх, потім дивиться на номер слова, перед цим віднявши від номера 1, бо слів на одне більше, і починає шукати його довжину. Різниця в часі виконання між матрицями була не суттєвою – 0.004 секунди. При зчитуванні даних з файлу, результат виводився миттєво. Отже, я вважаю цей алгоритм – економним.