- •Лабораторна робота №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)
- •Контрольні питання
- •Література
Приклади розробки функцій для обробки текстової інформації
Приклад 1. Функція обчислення довжини рядка. Наступна нижче функція має старомодну і форму, що не рекомендується стандартом, заголовка (у стандартній бібліотеці їй відповідає функція strlen( )):
int len(e)
char e[ ] ;
{
int m;
for (m=0; e[m]!='\0'; m++) ;
return m;
}
Відповідно до ANSI-стандарту і зі стандартом ISO заголовок повинний мати, наприклад, такий вид:
Int len (char e[ ])
У цьому прикладі й у заголовку, і в тілі функції немає навіть згадувань про споріднення масивів і вказівників. Однак компілятор завжди сприймає масив як вказівник на його початок, а індекс як зсув відносно початку масиву. Наступний варіант тієї ж функції (тепер заголовок відповідає стандартам мови) явно реалізує механізм роботи з вказівниками:
Int len (char *s)
{
int m;
for (m=0; *s++! = '\0' ; m++)
return m;
}
Для формального параметра-вказівника s всередині функції виділяється ділянка пам'яті, куди записується значення фактичного параметра. Так як s не константа, то значення цього вказівника може змінюватися. Саме тому припустимо вираз s++
Приклад 2. Функція інвертування рядка-аргументу з параметром-масивом (заголовок відповідає стандарту):
Void invert(char e[ ])
{
char s;
int і, j , m;
/*m - номер позиції символу '\0' у рядку е */
for (m=0; e[m]!='\0'; m++) ;
for (i=0, j=m-l; i<j; i++, j--)
{
s=e[i];
e[i]=e[j];
e[j]=s;
}
}
У визначенні функції invert() за допомогою ключового слова void зазначено, що функція не повертає значення.
В якості вправи можна переписати функцію invert(), замінивши параметр-масив параметром-вказівником типу char*.
При виконанні функції invert() рядок - фактичний параметр, наприклад, "сироп" перетвориться в рядок "порис". При цьому символ '\0' залишається на своєму місці наприкінці рядка. Приклад використання функції invert():
#include <stdio.h>
void main( )
{
char ct[ ]="0123456789";
/* Прототип функції: */
void invert(char [ ]);
/* Виклик функції: */
invert(ct)/
printf ("\n%s",ct) ;
}
Результат виконання програми:
9876543210
Приклад 3. Функція пошуку в рядку найближчого ліворуч входження іншого рядка (у стандартній бібліотеці є подібна функція strstr()):
/*Пошук рядка СТ2 у рядку СТ1 */
int index (char * СТ1, char * CT2)
{
int і, j , ml, m2;
/* Обчислюються m1 і m2 - довжини рядків */
for (m1=0; CT1[m1] !='\0'; m1++);
for (m2=0; CT2[m2] !='\0'; m2++);
if (m2>m1)
return -1;
for (i=0; i<=m1-m2; i++)
{
for (j=0; j<m2; j++) /*Цикл порівняння */
if (СT2[j] !=СT1[i+j])
break;
if (j==m2)
return i;
} /* Кінець циклу по і */
return -1;
}
Функція index() повертає номер позиції, починаючи з якої СТ2 цілком збігається з частиною рядка СТ1. Якщо рядок СТ2 не входить у СТ1, то повертається значення -1.
Приклад звертання до функції index( ):
#include <stdio.h>
Void main( )
{
char C1[ ]="сума мас";
/* Прототип функції: */