- •Лабораторна робота №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)
- •Контрольні питання
- •Література
Int main(void) {
int size; /* розмір масиву */
int *Ar; /* покажчик на початок масиву */
int *Cr, *Ir; /* поточні покажчики */
int av, nn; /* середнє значення й кількість елементів послідовності */
randomize(); /* ініціалізація rand */
size=random(151)+50;
printf("size=%d\n",size);
/* виділення пам'яті */
Ar=(int far *)malloc(size*sizeof(int));
/* заповнення масиву випадковими числами й
висновок початкового масиву */
printf("Початковий масив:\n");
for (Cr=Ar; Cr<Ar+size; Cr++) {
*Cr=random(101)-50;
printf("%3d ",*Cr);
}
putchar('\n');
/* перебір масиву */
for (nn=0, Cr=Ar; Cr<Ar+size; Cr++) {
if (*Cr<0)
/* обробка негативного елемента */
if (!nn) {
/* початок послідовності: запам'ятати адрес
початку в Ir, установити початкове значення
накопичувача суми й лічильника елементів */
Ir=Cr; av=*Cr; nn=1;
}
else {
/* підрахунок суми й кількості елементів */
av+=*Cr; nn++;
}
/* кінець обробки негативного елемента */
else /* обробка позитивного елемента */
if (nn) {
/* якщо є неопрацьована негативна послідовність:
усереднення й перебір з обмеженням */
for (av/=nn; Ir<Cr; Ir++)
if (*Ir<av) *Ir=av;
nn=0; /* послідовність оброблена */
} /* кінець якщо є неопрацьована... */
} /* кінець перебору масиву */
if (nn) /* якщо не оброблена остання
негативна послідовність */
for (av/=nn; Ir<Cr; Ir++)
if (*Ir<av) *Ir=av;
/* висновок результатів */
printf("Масив-результат:\n");
for (Cr=Ar; Cr<Ar+size; printf("%3d ",*Cr++));
putchar('\n');
/* звільнення пам'яті */
free(Ar);
return 0;
}
3.4. Налагодження програми
Відслідковувати значення в покроковому режимі тут трохи складно, тому що тут немає досить зрозумілих значень індексів, а замість них бачимо значення покажчиків, складніші для розуміння. Тому рекомендується більше покладатися на виявлення помилок шляхом аналізу результатів програми.
3.5. Результати роботи програми
Зразок результатів програми наведений нижче
size=69
Початковий масив:
-50 8 13 -16 11 -45 21 -12 -6 -45 17 21 41 36 -12 -42 24 -14 -9 -14
50 -31 -37 -49 48 -37 50 -20 -43 46 -30 33 21 24 -36 12 -20 -48 -27 -8
-6 -36 -21 -24 -31 8 -23 24 -33 13 -15 -6 -8 -43 -48 22 -49 49 19 12
18 -17 31 47 45 -2 28 42 -49
Масив-результат:
-50 8 13 -16 11 -45 21 -12 -6 -21 17 21 41 36 -12 -27 24 -12 -9 -12
50 -31 -37 -39 48 -37 50 -20 -31 46 -30 33 21 24 -36 12 -20 -24 -24 -8
-6 -24 -21 -24 -24 8 -23 24 -33 13 -15 -6 -8 -24 -24 22 -49 49 19 12
18 -17 31 47 45 -2 28 42 -49
Контрольні запитання
1. Що таке динамічний масив?
2. Які бібліотеки використовують для роботи з динамічними масивами?
3. Назвіть основні функції, за допомогою яких можна працювати з динамічними масивами.
4. Які способи передачі інформації з викликаючої програми в функцію можна використовувати в мові Сі?
5. Назвіть основні стандартні функції для роботи зі стрічками.
6. Які оператори необхідно використовувати для формування двомірного динамічного масиву в мові Сі?
7. Як розподіляється пам'ять під масив вказівників, які вказують на масив стрічок?
8. Як розподіляється пам'ять під масив стрічок?
9. Що таке вказівник в мові Сі?
10. Спосіб доступу до інформації, на яку вказує вказівник.
11. Як визначити фізичну адресу вказівника?
12. Чим відрізняються стандартні функції malloc(), calloc(), realloc()?
13. Як розподілити пам'ять під одномірний масив?
14. Як організувати звернення до одномірного динамічного масиву?
15. Спосіб заповнення даними одномірного динамічного масиву.
Лабораторна робота №12
Тема : Динамічні масиви і функції користувача
Мета роботи: отримання практичних навичок у роботі з функціями користувача, в яких параметрами є масиви
Порядок виконання роботи
-
Ознайомитися з теоретичними відомостями.
-
Скласти програму, що вирішує задачу відповідно варіанту завдання 1 з обов’язковими наступними умовами: в програмі використовувати динамічний масив; розмір масиву повинен вводитися при виконанні програми; перетворення масиву по заданому алгоритму виконується у вигляді функції, якій передається масив і його розмір.
-
Провести тестування програми не менш, ніж на двох тестах, які студент повинен розробити самостійно.
-
Провести аналіз отриманих результатів.
-
Скласти звіт за результатами лабораторної роботи.
-
Зробити висновки.
1. Варіанти завдання
Таблиця 12.1 – Варіанти завдання |
||
№ варіанту |
Що потрібно зробити |
Ілюстрація |
1
|
Заповнити матрицю випадковими числами. Розгорнути матрицю на 90o по годинниковій стрілці.
|
|
Таблиця 12.1 – Варіанти завдання (продовження) |
||
2 |
Заповнити матрицю випадковими числами. Відобразити матрицю симетрично щодо головної діагоналі
|
|
3 |
Заповнити матрицю ЛП, від лівого верхнього кута по спіралі: вправо - вниз - вліво - вгору.
|
|
4 |
Заповнити матрицю ЛП, від центра по спіралі: уліво - униз - вправо - нагору.
|
|
5 |
Заповнити матрицю випадковими числами. На головній діагоналі розмістити суми елементів, що лежать на тому ж рядку і тому ж стовпці.
|
|
Таблиця 12.1 – Варіанти завдання (продовження) |
||
6 |
Заповнити матрицю ЛП, від лівого верхнього кута по діагоналі: вправо - вгору.
|
|
7 |
Заповнити сектори матриці, що лежать вліво і вправо від головної і побічної діагоналей, ЛП, від лівого верхнього кута вниз - вправо. Залишок матриці заповнити нулями.
|
|
8 |
Заповнити матрицю випадковими числами. Відобразити симетрично щодо вертикальної осі сектори матриці, що лежать вліво і вправо від головної і побічної діагоналей.
|
|
9 |
Заповнити матрицю ЛП, від лівого нижнього кута по діагоналі: вліво - вгору.
|
|
10 |
Заповнити матрицю випадковими числами. Відобразити головну і побічну діагоналі симетрично щодо вертикальної осі.
|
|
Таблиця 12.1 – Варіанти завдання (продовження) |
||
11 |
Заповнити матрицю випадковими числами. Розмістити на головній діагоналі суми елементів, що лежать на діагоналях, перпендикулярних до головного.
|
|
12 |
Заповнити матрицю випадковими числами. Відобразити верхню половину матриці на нижню дзеркально симетрично щодо горизонтальної осі. |
|
13 |
Заповнити матрицю випадковими числами. Розбити матрицю на квадрати розміром 3х3. У центрі кожного квадрата помістити суму інших елементів квадрата. |
|
14 |
Заповнити матрицю випадковими числами. Відобразити праву половину матриці на ліву дзеркально симетрично щодо вертикальної осі. |
|
15 |
Заповнити сектори матриці, що лежать вліво і вправо від головної і побічної діагоналей ЛП, від лівого верхнього кута вправо - вниз. Залишок матриці заповнити нулями. |
|
Таблиця 12.1 – Варіанти завдання (продовження) |
||
16 |
Заповнити матрицю випадковими числами. Розгорнути матрицю на 900 проти годинникової стрілки. |
|
17 |
Заповнити матрицю випадковими числами. Відобразити матрицю симетрично щодо побічної діагоналі |
|
18 |
Заповнити матрицю ЛП, від лівого верхнього кута по спіралі: вниз - вправо - вгору - вліво. |
|
19 |
Заповнити матрицю ЛП, від центра по спіралі: вниз - вліво - вгору - вправо. |
|
20 |
Заповнити матрицю випадковими числами. На побічній діагоналі розмістити суми елементів, що лежать на тім же рядку і стовпці. |
|
Таблиця 12.1 – Варіанти завдання (продовження) |
||
21 |
Заповнити матрицю ЛП, від лівого верхнього кута по діагоналі: вліво - вниз. |
|
22 |
Заповнити сектори матриці, що лежать вище і нижче головної і побічної діагоналей ЛП, від лівого верхнього кута вправо - вниз. Залишок матриці заповнити нулями. |
|
23 |
Заповнити матрицю випадковими числами. Відобразити симетрично щодо горизонтальної осі сектори матриці, що лежать вище і нижче головної і побічної діагоналей. |
|
24 |
Заповнити матрицю ЛП, від правого верхнього кута по діагоналі: вліво - вниз. |
|
25 |
Заповнити матрицю випадковими числами. Відобразити головну і побічну діагоналі симетрично щодо горизонтальної осі. |
|
Таблиця 12.1 – Варіанти завдання (продовження) |
||
26 |
Заповнити матрицю випадковими числами. Розмістити на побічній діагоналі суми елементів, що лежать на діагоналях, перпендикулярних до побічного. |
|
27 |
Заповнити матрицю випадковими числами. Відобразити ліву половину матриці на праву дзеркально симетрично щодо вертикальної осі. |
|
28 |
Заповнити матрицю випадковими числами. Розгорнути матрицю на 1800. |
|
29 |
Заповнити матрицю випадковими числами. Відобразити нижню половину матриці на верхню дзеркально симетрично щодо горизонтальної осі. |
|
30 |
Заповнити сектори матриці, що лежать вище і нижче головної і побічної діагоналей, ЛП, від лівого верхнього кута вниз - вправо. Залишок матриці заповнити нулями. |
|