
- •Лабораторна робота №10
- •Порядок виконання роботи
- •1. Варіанти завдання
- •2. Теоретичні відомості
- •Int len (char e[ ])
- •Int len (char *s)
- •Void invert(char e[ ])
- •Void main( )
- •Int index(char [ ], char [ ]);
- •Int row(char c1[ ], char c2[ ])
- •Void cone(char *c1, char *c2)
- •Void substr(char *c1, char *c2, int n, int k)
- •3. Приклад розв’язання задачі на еом (варіант 3, завдання №7)
- •Void ChangeStr(char **s1,int m)
- •3.3 Результати роботи програми
- •Контрольні запитання
- •Лабораторна робота №11
- •Тема: Особливості роботи з одномірними динамічними масивами
- •Мета роботи: Отримання практичних навиків у роботі з одномірними динамічними масивами в мові c
- •Порядок виконання роботи
- •1. Варіанти завдання
- •2. Теоретичні відомості
- •Void main()
- •3. Приклад розв’язання задачі на еом (варіант №30)
- •3.2. Визначення змінних програми
- •3.3. Розробка тексту програми Крім файлів:
- •Int main(void) {
- •3.4. Налагодження програми
- •3.5. Результати роботи програми
- •Контрольні запитання
- •2. Теоретичні відомості
- •Int**array;
- •Void quart(int n, float * х)
- •Void main()
- •Void quart (int n, float X [ ])
- •3. Приклад розв’язання задачі на еом (варіант №30)
- •3.1. Розробка алгоритму вирішення
- •3.2. Представлення матриці в пам'яті
- •3.3. Визначення змінних програми (варіант 1)
- •Int size;
- •3.4. Розробка тексту програми (варіант 1)
- •Void fill(int *, int);
- •Void fill(int *a, int s) {
- •3.5. Відмінності для варіанту реалізації 3
- •Void fill(int far **, int);
- •Void fill(int far **a, int s) {
- •3.6. Налагодження програми
- •3.7. Результати роботи програми
- •Контрольні запитання
- •Лабораторна робота №13
- •Порядок виконання роботи
- •1. Варіанти завдання Завдання 1
- •2. Теоретичні відомості
- •Void main( )
- •Void main( )
- •Void main( )
- •3.Стандартні функції для роботи зі стрічками (бібліотека string.H)
- •4. Приклади використання стандартних функцій для роботи зі стрічками
- •Функція аналогічна до stpcpy, strcpy, strncat
- •Функція аналогічна до strcspn, strrchr, strspn, strstr
- •Int far _fstrcmp(const char far *s1, const char far *s2);
- •Функція аналогічна до stpcpy, strncpy
- •- Size _t maxlen - максимальне число символів, які копіюємо з вихідної стрічки в результуючу.
- •Приклад: /*strncpy/cpp*/
- •5. Приклад розв’язання задачі на еом (варіант 2)
- •5.1. Розробка алгоритму вирішення
- •5.2 Розробка тексту програми
- •Int main()
- •4.3 Результати роботи програми
- •Контрольні запитання
- •Лабораторна робота №14
- •Порядок виконання роботи
- •1. Варіанти завдання
- •2. Теоретичні відомості
- •Void main( )
- •Приклади розробки функцій для обробки текстової інформації
- •Int len (char e[ ])
- •Int len (char *s)
- •Void invert(char e[ ])
- •Void main( )
- •Int index(char [ ], char [ ]);
- •Int row(char c1[ ], char c2[ ])
- •Void cone(char *c1, char *c2)
- •Void substr(char *c1, char *c2, int n, int k)
- •3. Приклад розв’язання задачі на еом (завдання 2, варіант 7)
- •Void ChangeStr(char **s1,int m)
- •4.3 Результати роботи програми
- •Контрольні запитання
- •Лабораторна робота №15
- •Порядок виконання роботи
- •Варіанти завдання
- •Теоретичні відомості
- •Int pole2 ;
- •Приклад розв’язання задачі на еом (варіант №30)
- •Розробка алгоритму розв’язання задачі
- •Визначення змінних програми
- •Розробка тексту програми Текст програми починаємо з підключення файлу stdio.H.
- •Int main(void) {
- •If (!strcmp(mm[n].Name,"***")) break;
- •Контрольні запитання
- •Лабораторна робота №16
- •Порядок виконання роботи
- •1. Варіанти завдання
- •Теоретичні відомості Читання і запис текстових файлів
- •Int main ()
- •Приклад розв’язання задачі на еом (варіант 6)
- •Контрольні запитання
- •Лабораторна робота №17
- •Порядок виконання роботи
- •Варіанти завдання
- •Теоретичні відомості Читання і запис двійкових файлів
- •Відкриття двійкових фалів
- •Файли з послідовним доступом
- •Запис даних у файл c послідовним доступом
- •Int main()
- •If ( ! outf)
- •Int array[100];
- •Int main()
- •If ( ! inpf)
- •Int array[100];
- •Файли з довільним доступом
- •Int main()
- •If ( ! inpf)
- •Int main()
- •If ( ! outf)
- •Передача файлів між комп’ютерами.
- •Програмне підтвердження зв’язку
- •Перекачування файлу
- •Void send_file(fname)
- •Void wait(port)
- •Int port;
- •Прийом файлу
- •Void rec_file()
- •If(ferror(fp)) {
- •Void get_file_name(f)
- •Приклад розв’язання задачі на еом (варіант 10)
- •Контрольні питання
- •Література
2. Теоретичні відомості
Масив, розмір якого визначається при виконанні ехе-коду, називається динамічним масивом, тому що використовує динамічну пам'ять.
Загальна кількість елементів масиву і розміри пам'яті, виділеної для нього, цілком і однозначно задано визначенням. Це не завжди зручно. Іноді в професійних програмах необхідно, щоб пам'ять для масиву виділялася в таких розмірах, які потрібні для рішення конкретної задачі, причому потреби в пам'яті заздалегідь не відомі і не можуть бути фіксовані.
Формування масивів з змінними розмірами можна організувати за допомогою покажчиків і засобів для динамічного виділення пам'яті. Для цього використовують бібліотечні функції, описані в заголовних файлах alloc.h і stdlib.h стандартної бібліотеки.
Існує кілька способів резервування пам'яті в купі для динамічних змінних. Найпоширеніший спосіб використовує бібліотечну функцію malloc() –memory allocation чи memory allocator (виділення пам'яті чи розподільник пам'яті.
Таблиця 11.2 – Основні бібліотечні функції |
|
Функція |
Прототип і короткий опис |
malloc |
void * malloc(unsigned s); повертає покажчик на початок області (блоку) динамічної пам'яті довжиною в s байт. При невдалому завершенні повертає значення NULL |
calloc |
void * calloc(unsigned n, unsigned m); повертає покажчик на початок області (блока) пам'яті обнуленої динамічної пам'яті, виділеної для розміщення n елементів по m байт кожний. При невдалому завершенні повертає значення NULL |
realloc |
void * realloc(void*bl, unsigned ns); змінює розмір блоку раніше виділеної динамічної пам'яті до розміру ns байт. bl – адреса початку змінюваного блоку. Якщо bl дорівнює NULL (пам'ять не виділялася), то функція виконується як malloc |
free |
void * free(void *bl); звільняє раніше виділену ділянка динамічної пам'яті, адреса першого байта якого дорівнює bl |
Наприклад,
Sp=malloc(129); /*резервування 128 байт
Sp=(char*)malloc(129); /*ті ж дії, тільки виконане приведення типів, тому що функція повертає тип void */
В обох цих випадках покажчик sp адресує блок купи з 129 байт, зарезервованих винятково для його особистого виконання.
Якщо купа вже заповнена, то функція malloc() повертає нуль, тому необхідно перевіряти після виклику функції, чи нерівний нулю покажчик:
sp=malloc(129);
if (sp= =NULL)
error();
чи if ((sp= malloc(129)!=NULL)
оператор;
чи v=malloc(sizeof(double));
long *1;
p=calloc(1,sizeof(long));
У функціях malloc(), calloc(), realloc() динамічно виділяють пам'ять у відповідності зі значеннями параметрів і повертають адресу початку виділеної ділянки пам'яті. Для універсальності тип значення, що повертається, кожної з цих функцій є void*.
Приклад: ввести і надрукувати в зворотному порядку набір чисел, кількість яких заздалегідь не фіксовано, а вводиться до початку введення самих числових значень.
#include<stdio.h>
#include<stdlib.h>