Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatika_1 / 1pr opr / ЛАБОРАТОРНИЙ ПРАКТИКУМ / ЛАБОРАТОРНИЙ ПРАКТИКУМ.doc
Скачиваний:
53
Добавлен:
07.02.2016
Размер:
791.55 Кб
Скачать

Лабораторна робота №13. Тема роботи: “ Рядкові змінні у мові с”

Мета роботи: дати навички студентам розв’язувати задачі з використанням рядкових змінних.

Основні питання, які розглядаються в лабораторній роботі: поняття рядкової змінної, використання стандартних функцій та процедур для рядкових змінних, знаходження кількісних характеристик тексту, перетворення тексту, виділення слів з тексту.

Рекомендована література

  1. Романовская Л.М. и др. Программирование в среде Си для ПЭВМ ЕС/Л.М.Романовская, Т.В.Русс, С.Г.Свитковский. – М.: Финансы и статастика, 1991. – 352 с. Ст. 74-79

  2. В.В.Подбельский, С.С.Фомин Программирование на языке Си. -М.:Финансы и статистика, 1999. Ст. 90-100

  3. В.С.Проценко, П.Й. Чалий, А.Б. Ставровський Техніка програмування мовою Ci,-К., Либідь, 1993. Ст. 17-21

  4. Березин Б.И., Березин С.Б. Начальный курс С и С++. – М.: ДИАЛОГ-МИФИ, 1999. – 288 с.Ст. 78-82

  5. Г.Шилдт Справочник программиста по С/С++. : Пер. с англ.: Уч. пос.. – М. : Издательский дом «Вильямс», 2000. – с. 21-25

Хід роботи:

  1. Вивчити теоретичний матеріал.

  2. Виконати індивідуальне завдання.

  3. Скласти звіт, в якому відповісти на теоретичні питання, описати алгоритм, описати програму, привести контрольний приклад виконання програми.

Контрольні запитання:

1. Які з наступних типів є рядковими, а які ні і чому?

const n=20;

а) typedef char а[30]; b) typedef int b[n];

с) typedef char *c; d) typedef char d['1'..'9'];

е) typedef char d['9']; f) typedef char d['1']['9'];

2. Які з зазначених нижче операцій неприпустимі в мові С і чому:

const n=5;

char a1[n], a2[n], *b1, *b2[n], c[5];

а) а1 = а2; b) с = а2; c) b1 = a1;

d) а2>с; e) c == a1; f) b2[1] = b1;

g) а2 = 'a1+a2'; h) b1 = "a1[n]"; i) с >= "12345";

j) а1 == a2; k) a1 == "12345"; l) a1 == b2;

m) a1<>"**"; n) b2 != b1; o) b1==*b2

Теоретичні відомості

Символьні масиви – це масиви, елементи якого належать до типу char.

char ch1[10];

char ch2[]="123456789";

char *ch = "123456789"; // error

Два останні рядки інтерпретуються по різному: перший – це масив з 10 символьних елементів, другий – це покажчик на масив символьних елементів. Останньому компілятор не може виділити пам’ять для зберігання масиву – виділяється тільки пам’ять під покажчик. В обох випадках рядок інтерпретується компілятором як ASCIIZ-строка і десь зберігається в пам’яті.

Можливо використовувати покажчик для яких тільки потім виділяти пам’ять і коли пам’ять не потрібна – звільняти її.

Програміст повинен обов’язково слідкувати за тим, щоб не вийти за межі виділеної пам’яті. Основні функції роботи із строковими змінними є у модулі string.h. Розглянемо деякі:

функція

дія

size_t strlen(const char *s)

Повертає кількість символів у рядку, не враховує останній нуль-символ.

int strcmp(const char *s1, const char *s2)

Порівнює рядки, дорівнює:

якщо s1 < s2, то негативне

якщо s1 == s2, то 0

якщо s1 > s2, то позитивне

char *strcat(char *dest, const char *src)

Конкатенація рядків. До рядка dest додається рядок scr

char *strcpy(char *dest, const char *src)

Копіювання рядків. У рядок dest копіюються усі символи рядки scr

У модулі stdlib.h є такі функції для роботи із строками:

функція

дія

void *malloc(<вираз>)

виділення покажчик на ділянку пам’яті розміром в <вираз> байт

void free(void *<покажчик>)

звільнення ділянки пам’яті виділеної покажчику

double atof(const char *s)

Перетворює s у дійсне

int atoi(const char *s)

Перетворює s у ціле

Розглянемо приклад з помилкою:

#include <stdio.h>

#include <string.h>

void main()

{

char s2[]="root1";

char s1[]="tree2";

printf("\n%s\n%s\n", s1, s2);

strcat(s1, s2);

printf("\n%s\n%s\n", s1, s2);

return;

}

Після виконання програми у рядку s1 буде "tree2root1", а компілятор виділив тільки 6 байтів. Тому деяка ділянка буде перезаписана функцією конкатенації, яка припускає наявність доступної кількості вільного простору, а далі в пам’яті знаходиться рядок s2 зміст якого буде непрямо змінений на "oot1".

Індивідуальне завдання. Скласти програму для розвязання задачі. Дано послідовність, що містить від 1 до 30 слів, у кожному з який від 1 до 5 рядкових латинських букв; між сусідніми словами - кома, за останнім словом - крапка.

  1. Надрукувати цю ж послідовність слів, але видаливши із неї повторні входження слів;

  2. Надрукувати усі слова, що зустрічаються в послідовності по одному разу;

  3. Надрукувати усі різноманітні слова, указавши для кожного з них число його входжень у послідовність;

  4. Надрукувати слова, перша літера яких входить у нього ще раз;

  5. Надрукувати усі різноманітні слова, літери яких упорядковані за абеткою;

  6. Надрукувати слова, довжина яких максимальна;

  7. Надрукувати слова, якщо в них немає повторюваних літер;

  8. Надрукувати слова, в яких кожна літера входить не менше двох раз;

  9. Надрукувати слова, в яких голоснийі літери (a, e, i, o, u) чергуються з приголосними.

  10. Надрукувати всі слова, попередньо перенести першу літеру слова в кінець слова;

  11. Надрукувати всі слова, попередньо видаливши зі слова першу букву;

  12. Надрукувати всі слова, попередньо видалити зі слова всі наступні входження першої літери;

  13. Надрукувати всі слова, попередньо залишити в слові тільки перші входження кожної букви;

  14. Надрукувати всі слова, але якщо слово непарної довжини, то видалити його середню букву.

  15. Надрукувати всі слова, попередньо в кожній парі літер у слові поміняти їх місцями;