
- •Лабораторна робота №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 array[100];
fread(&array, sizeof(int),1, inpf);
це буде самим швидким способом читання значень з диска в пам'ять.
Файли з довільним доступом
Особливістю таких файлів є те, що:
-
файл складається з компонент (записів) однакової довжини (розміру). Кожен запис у файлі має номер.
-
Уздовж файлу переміщається покажчик, положення якого можна позиціонувати програмно за допомогою функції fseek()
Запис
#0 Запис
#1 Запис
#n Запис
#2
-
функція fseek() вимагає три аргументи:
-
змінна потоку типу File*, відкритого для двійкового доступу.
-
значення зміщення покажчика щодо заданої (чи поточної) позиції
-
один із трьох компонентів:
SEEK_SET – зсув покажчика на число байтів, на які внутрішній покажчик пересувається уперед від початку файлу;
SEEK_CUR – зсув на число байтів вперед чи назад від поточної позиції покажчика, у залежності від знака константи;
SEEK_END – зсув на число байт від кінця файлу в напрямку до початку.
Приклад 3. Написати програму для читання 11-го запису у файлі int.dat.
#include <stdio.h>
#include <stdlib.h>
Int main()
{
File *inpf;
int val;
inpf = fopen (“int.dat”, “rb”);
If ( ! inpf)
{
puts (“Can’t create file”);
exit (1);
}
fseek (inpf, 10*sizeof(int),SEEK_SET);
fread(&val, sizeof(int),1, inpf);
printf (“ Record #10 == %d”,val);
fclose(inpf);
return 0;
}
Другий аргумент у fseek () – добуток розміру в байтах змінної типу int на номер запису (10) шуканого значення.
Якщо змінна fl типу File* указує на відкритий файл записів zap, то оператор fseek (fl, sizeof(zap), SEEK_CUR); - перемістить поточний покажчик файла з поточного запису на наступний.
А оператор fseek (fl, -sizeof(zap), SEEK_CUR); - перемістить поточний покажчик файлу назад на один запис.
Виклик функції fread() так само переміщає покажчик файлу вперед, тому після читання одного запису за допомогою fread() можна використовувати fseek() для відновлення позиції покажчика для того, щоб підготуватися до перезапису нової інформації в те ж місце
Оператор fseek (f, 0, SEEK_END); - знаходить кінець файлу. Цей оператор можна використовувати перед викликом функції fwrite(), щоб додати нові записи у файл, відкритий не в режимі додавання в кінець файлу.
Приклад 4. За допомогою функції fseek() і fwrite() модифікувати 11-й запис у файлі int.dat.
#include <stdio.h>
#include <stdlib.h>
Int main()
{
File *outf;
int val=99; /*нове значення запису */
outf = fopen (“int.dat”, “r+b”);
If ( ! outf)
{
puts (“Can’t create file”);
exit (1);
}
printf(“Writing %d to record #10”,val);
fseek (outf, 10*sizeof(int),SEEK_SET);
fwrite(&val, sizeof(int),1, outf); /* модифікація 10-го запису */
fclose(outf);
return 0;
}
}
Передача файлів між комп’ютерами.
Сьогодні багато організацій мають у своєму розпорядженні кілька комп'ютерів, причому часто ці комп'ютери виявляються різних типів або різних моделей, а також мають несумісні формати дисків. При використанні різних комп'ютерів більша перевага може бути досягнутою при з'єднанні комп'ютерів через їхні послідовні порти з метою спільного використання ними інформації або програм. У багатьох випадках створення програм, що забезпечують обмін файлами для таких комп'ютерів через їхні послідовні порти, є проблематичним.
Однак існує досить швидкодіюча й ефективна програма передачі файлів. Ця програма має ряд значних переваг: вона працює з будь-якими типами файлів на всіх типах комп'ютерів, що природно відрізняються один від одного своєю продуктивністю і, саме головне, не використовують апаратного підтвердження зв'язку. У додаток до всього, програма може працювати навіть тоді, коли апаратне підтвердження зв'язку в принципі неможливе і непотрібне.
Підпрограми передачі файлів виконують свої функції, використовуючи програмне підтвердження зв'язку, і функціонують фактично в різних середовищах. Однак для рішення глобальної проблеми краще пожертвувати продуктивністю, збільшивши надійність системи.