- •Лабораторна робота №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)
- •Контрольні питання
- •Література
Void main( )
{
char C1[ ]="сума мас";
/* Прототип функції: */
Int index(char [ ], char [ ]);
char C2[ ]="ма"/
char C3[ ]="ам";
printf("\nДля %s індекс=%d",C2,index(C1,C2) );
printf("\nДля %s індекс=%d",C3,index(C1,C3)); }
Результат виконання програми:
Для ма індекс=3 Для ам індекс=-1
У функції index() параметри специфіковані як вказівники на тип char, а в тілі функції звернення до символів рядків виконується за допомогою індексованих перемінних. Замість параметрів-вказівників підставляють як фактичні параметри імена символьних масивів С1[ ], С2[ ], С3[ ]. Ніякої неточності тут немає: до масивів припустимі обидві форми звертання - і за допомогою індексованих перемінних, і з використанням розіменованих вказівників.
Функція порівняння рядків. Для порівняння двох рядків можна написати наступну функцію (у стандартній бібліотеці є близька до цієї функція strcmp():
Int row(char c1[ ], char c2[ ])
{
int і,m1,m2; /* m1,m2 - довжини рядків С1,С2 */
for (m1=0;*(C1+m1)= '\0'; m1++) ;
for (m2=0;*(C2+m2)= '\0'; m2++);
if (m1!=m2) return -1;
for (i=0; i<m1; i++)
if (*C1++ != *C2++) return (i+1);
return 0;
}
У тілі функції звернення до елементів масивів-рядків реалізовано через розіменування вказівників. Функція row() повертає: значення -1, якщо довжини рядків-аргументів С1, С2 різні; 0 - якщо всі символи рядків збігаються. Якщо довжини рядків однакові, але символи не збігаються, то повертається порядковий номер (ліворуч) перших незбіжних символів.
Особливість функції row() - специфікація параметрів як масивів і звернення до елементів масивів всередині тіла функції за допомогою розіменування. При цьому за рахунок операцій С1++ і С2++ змінюються початкові "настройки" вказівників на масиви. Одночасно в тій же функції до тих же масивів-параметрів виконується звертання і за допомогою виразів *(Cl+m1) і *(С2+m2), при обчисленні яких значення С1 і С2 не міняються.
Функція з'єднання рядків. Наступна функція дозволяє "приєднати" до першого рядка-аргументу другий рядок-аргумент (у стандартній бібліотеці є подібна функція : strncat()):
/* З'єднання (конкатенація) двох рядків: */
Void cone(char *c1, char *c2)
{
int i,m; /* m - довжина 1-го рядка */
for (m=0; *(C1+m)!='\0'; m++);
for (i=0; *(C2+i)!='\0'; i++)
*(C1+m+i)=*(C2+i);
*(C1+m+і)='\0';
}
Результат повертається як значення першого аргументу C1. Другий аргумент C2 не змінюється. При використанні функції соnс() довжина рядка, що заміняє параметр C1, повинна бути достатньою для прийому результуючого рядка.
Функція виділення підстроки. Для виділення з рядка С1 фрагменту заданої довжини (підстроки) можна запропонувати таку функцію:
Void substr(char *c1, char *c2, int n, int k)
/* Cl - вихідний рядок */
/* C2 - підстрока, що виділяється */
/* n - початок підстроки, що виділяється */
/* k - довжина підстроки, що виділяється/
{
int і,m; /* m - довжина вихідного рядка */
for (m=0; C1 [m] ! =' \0 ' ; m++) ;
if (n<0 || n>m || k<0 || k>m-n)
{
C2[0]='\0';
return;
}
for (i=n; i<k+n; i++)
C2[i-n]=C1[i-1];
C2[i-n]='\0';
return;
}
Результат виконання функції - рядок C2 [ ] з k символів, виділених з рядка C1[ ], починаючи із символу, що має номер n. При невірному сполученні значень параметрів повертається порожній рядок, використаний як параметр С2.
Функція копіювання вмісту рядка. Так як в мові Сі відсутній оператор присвоювання для рядків, то корисно мати спеціальну функцію, що дозволяє "переносити" вміст рядка в інший рядок (така функція strcpy() є в стандартній бібліотеці, але вона має інше значення, що повертається):
/* Копіювання вмісту рядка С2 в С1 */
void copy(char *С1, char *C2) /* С2 - оригінал, С1 - копія */
{
int і;
for (i=0; C2[i]!='\0'; i++)
C1[i]=C2[i];
C1[i]='\0';
}