МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
національний університет “Львівська політехніКА”
КАФЕДРА ЕЛЕКТРОННИХ ОБЧИСЛЮВАЛЬНИХ МАШИН
Лабораторна робота №5
Передача параметрів програмі
через аргументи функції main( )
Виконав:
ст. гр. КІ-2
Львів-2004
Мета роботи: закріпити теоретичні знання та оволодіти практичними навиками опрацювання символьних рядків. Засвоїти методику роботи з символьними рядками
за допомогою стандартних функцій бібліотеки Сі.
Завдання на лабораторну роботу:
Розробити програмне забезпечення для опрацювання символьних рядків відповідно до заданого варіанту.
Під словом, слід розуміти послідовність алфавітних символів, що належать множині {’А’, ’Б’, …, ’Я’, ’а’, ’б’, …, ’я’, ’A’, ’B’, …, ’Z’, ’a’, ’b’, …, ’z’}. Речення, це послідовність слів розділених пропуском (пробілом). Кожне слово чи речення повинно представлятися в пам’яті машини окремою символьною змінною. При реалізації програм, максимально використати стандартні (бібліотечні) функції обробки символьних рядків. Ці функції описані в заголовковому файлі string.h, а їх імена починаються з префіксу “str…”.
Програма повинна обробляти слова та речення довільної довжини. Для цього використати механізм динамічного розподілу пам’яті. При реалізації механізму динамічного розподілу пам’яті використати стандартні Сі – функції malloc(), calloc() realloc() та free().
При вирішенні задач забезпечити дружній інтерфейс з користувачем.
Варіант 1. Ввести зі стандартного пристрою вводу речення. Виділити в реченні окремі слова та вивести їх на стандартний пристрій виводу. Виділені слова взяти в дужки. Довжину речення, в символах, передавати програмі через аргументи функції main().
Виконання роботи:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{ clrscr();
char *str, *ns;
if (argc!=2)
{
printf("No lenth of string detected\n");
exit(1);
}
str=(char*) malloc (atoi(argv[1])*sizeof(char));
puts ("\nInput string:\n");
gets (str);
if (atoi(argv[1]) < strlen(str))
puts ("\nNo enough memory\n");
else {
printf("\nFound words:\n\n");
ns=strtok(str," ");
while(ns)
{ { printf("(");
printf("%s",ns);
printf(")\n");
}
ns=strtok(NULL, " " );
}
getchar();
return 0;
void free (char *str);
}
}
Аналіз результату виконання програми: тестуюча програма буде мати наступний вигляд:
Input string
Вирішення задач засобами мови Сі
Found words:
(Вирішення)
(задач)
(засобами)
(мови)
(Сі)
Якщо розмір введеного рядка більший ніж розмір виділеної памяті, то програма видає повідомлення про помилку.
В цій програмі були використані стандартні функції для роботи з рядками символів (файл string.h), а також для динамічного розподілу пам’яті (файл stdlib.h):
char *strtok (char *str1, const char *str2) – повертає вказівник на наступну лексему в стрічці, що адресується параметром str1.
void *malloc (size_t size) – повертає вказівник на перший байт області памяті розміром size, яка була виділена із динамічно розподіляємої памяті.
void free (void *ptr) – повертає в пам'ять блок, який стає доступним для подальшого виділення.
int atoi (const char *str) – перетворює рядок в значення типу int. Цей рядок має містити допустиме ціле число.
Висновки: при виконанні лабораторної роботи №5 я ознайомився з основними функціями опрацювання рядків та робот з динамічною памяттю та з функцією main (). Мною була розроблена програма, яка демонструє роботу цих функцій.