- •Лабораторна робота №1 Тема роботи: “ Програмування лінійних обчислювальних процесів”
- •Рекомендована література:
- •Хід роботи:
- •Лабораторна робота №2 Тема роботи: “ Програмування процесів з розгалуженням”
- •Рекомендована література.
- •Лабораторна робота №3 Тема роботи: “ Програмування циклічних процесів”
- •Рекомендована література.
- •Лабораторна робота №4 Тема роботи: “ Програмування ітераційних процесів”
- •Рекомендована література.
- •Лабораторна робота №5 Тема роботи: “ Одномірні масиви”
- •Рекомендована література.
- •Лабораторна робота №6. Тема роботи: “ Впорядкування одномірних масивів”
- •Рекомендована література.
- •Лабораторна робота №7. Тема роботи: “ Двомірні масиви”
- •Рекомендована література.
- •Лабораторна робота №8. Тема роботи: “ Рядкові змінні”
- •Лабораторна робота №9 Тема роботи: “ Функції та процедури”
- •Рекомендована література.
- •Лабораторна робота №10 Тема роботи: “ Файли”
- •Рекомендована література.
- •Лабораторна робота №11 Тема роботи: “ Програмування циклічних процесів”
- •Рекомендована література
- •Контрольні запитання.
- •Теоретичні відомості.
- •Лабораторна робота №12 Тема роботи: “ Масиви у мові с”
- •Лабораторна робота №13. Тема роботи: “ Рядкові змінні у мові с”
- •Рекомендована література
- •Контрольні запитання:
- •Теоретичні відомості
- •Лабораторна робота №14 Тема роботи: “ Функції та процедури у мові с”
- •Рекомендована література
- •Теоретичні відомості
- •Опис функції.
Лабораторна робота №13. Тема роботи: “ Рядкові змінні у мові с”
Мета роботи: дати навички студентам розв’язувати задачі з використанням рядкових змінних.
Основні питання, які розглядаються в лабораторній роботі: поняття рядкової змінної, використання стандартних функцій та процедур для рядкових змінних, знаходження кількісних характеристик тексту, перетворення тексту, виділення слів з тексту.
Рекомендована література
Романовская Л.М. и др. Программирование в среде Си для ПЭВМ ЕС/Л.М.Романовская, Т.В.Русс, С.Г.Свитковский. – М.: Финансы и статастика, 1991. – 352 с. Ст. 74-79
В.В.Подбельский, С.С.Фомин Программирование на языке Си. -М.:Финансы и статистика, 1999. Ст. 90-100
В.С.Проценко, П.Й. Чалий, А.Б. Ставровський Техніка програмування мовою Ci,-К., Либідь, 1993. Ст. 17-21
Березин Б.И., Березин С.Б. Начальный курс С и С++. – М.: ДИАЛОГ-МИФИ, 1999. – 288 с.Ст. 78-82
Г.Шилдт Справочник программиста по С/С++. : Пер. с англ.: Уч. пос.. – М. : Издательский дом «Вильямс», 2000. – с. 21-25
Хід роботи:
Вивчити теоретичний матеріал.
Виконати індивідуальне завдання.
Скласти звіт, в якому відповісти на теоретичні питання, описати алгоритм, описати програму, привести контрольний приклад виконання програми.
Контрольні запитання:
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 рядкових латинських букв; між сусідніми словами - кома, за останнім словом - крапка.
Надрукувати цю ж послідовність слів, але видаливши із неї повторні входження слів;
Надрукувати усі слова, що зустрічаються в послідовності по одному разу;
Надрукувати усі різноманітні слова, указавши для кожного з них число його входжень у послідовність;
Надрукувати слова, перша літера яких входить у нього ще раз;
Надрукувати усі різноманітні слова, літери яких упорядковані за абеткою;
Надрукувати слова, довжина яких максимальна;
Надрукувати слова, якщо в них немає повторюваних літер;
Надрукувати слова, в яких кожна літера входить не менше двох раз;
Надрукувати слова, в яких голоснийі літери (a, e, i, o, u) чергуються з приголосними.
Надрукувати всі слова, попередньо перенести першу літеру слова в кінець слова;
Надрукувати всі слова, попередньо видаливши зі слова першу букву;
Надрукувати всі слова, попередньо видалити зі слова всі наступні входження першої літери;
Надрукувати всі слова, попередньо залишити в слові тільки перші входження кожної букви;
Надрукувати всі слова, але якщо слово непарної довжини, то видалити його середню букву.
Надрукувати всі слова, попередньо в кожній парі літер у слові поміняти їх місцями;