- •Лабораторна робота №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)
- •Контрольні питання
- •Література
-
Розробка тексту програми Текст програми починаємо з підключення файлу stdio.H.
Оскільки нам потрібно буде проводити порівняння (блок 15) поля name в елементах масиву, а це поле - символьна стрічка, то підключаємо також файл string.h, де описані функції роботи з символьними стрічками. На самому початку програми вводимо також опис структури mon і одночасно - об’явлення масиву mm. Масив буде розміщений в статичній пам’яті.
Потім відкривається головна функція програми, і в ній об’являються інші змінні. Об’явлення:
float sqx;
Відкривається простий цикл з лічильником n.
В кожній ітерації циклу виводиться запрошення і вводяться значення полів наступного елемента масиву. Порівняння поля name з константою "***" виконується за допомогою функції strcmp(). Якщо введена ознака кінця, відбувається передчасний вихід з циклу оператором break.
Потрібно, одначе, зупинитися на вводі значення для поля sq. Тут ми зіткнулися (не вперше в нашій практиці) з явищем, яке не можемо пояснити інакше, як помилкою в системі програмування: функція scanf() працює ненадійно при вводі значень типу float і double, якщо це значення полів елементів масиву структур. Тому ми об’явили робочу змінну sqx типу float і значення поля sq спочатку вводиться в цю змінну, а потім присвоюється полю структури.
Вивід масиву складається з виводу заголовка як декількох стрічок-констант і виводу в циклі стрічок з фактичними даними.
Наступні оператори програми детально реалізовують блоки 12 - 17 схеми алгоритму (для порівняння символьних стрічок застосовується функція strcmp()). Детального перегляду потребує тільки реалізація блоку 18 - перестановка елементів. По-перше, при перестановці використовується робоча структура x: спочатку складове i-го елемента пересилається в x, потім складове m-го елемента пересилається в i-ий елемент, а потім складове x пересилається в m-ий елемент. По-друге, операція присвоєння, яка звичайно використовується для пересилання значень, не може застосовуватися до структури в цілому, так що присвоєння відбувається для кожного поля окремо. До того ж, поле name являється символьною стічокою, а стрічки теж не можуть присвоюватися прямо, а тільки через функцію strcpy(). (Між іншим, для присвоєння структур можна застосовувати функцію розподілу в пам’яті - memcpy().)
Вивід таблиці-результату - такий же, як і початкової таблиці.
Повний текст програми наведений нижче.
#include <stdio.h>
#include <string.h>
/* Опис структури, яка представляє монастир */
struct mon {
char name[15]; /* назва */
char sc; /* школа */
int cnt; /* кількість монахів */
float sq; /* площа */
} mm[10]; /* визначення масиву монастирів */
Int main(void) {
struct mmm x; /* робоча змінна */
int n; /* кількість елементів в масиві */
int i, j; /* поточні індекси в масиві */
int m; /* індекс мінімального елемента */
float sqx;/* робоча змінна */
/* Ввід даних */
for (n=0; n<10; n++){
printf("%d. Введіть: назву, школу, кількість, площу >",
n+1);
scanf("%s",mm[n].name);