- •Лабораторна робота №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)
- •Контрольні питання
- •Література
Програмне підтвердження зв’язку
Коли апаратне підтвердження зв'язку неможливе або непотрібне, єдиним способом, що дозволяє уникнути помилок переповнення регістра, що не можуть бути зареєстрованими безпосередньо під час передачі даних по каналу зв'язку, є введення програмного підтвердження зв'язку. Програмне підтвердження зв'язку працює в такий спосіб: комп'ютер-джерело посилає перший байт і переходить у стан чекання повернення від комп'ютера-приймача квітуючого байта (байта, що підтверджує прийняття попереднього повідомлення). При одержанні квітуючого байта комп'ютер-джерело посилає наступний байт і знову переходить у стан чекання квітуючого байта від комп'ютера-приймача.
Цей процес продовжується доти, поки весь файл цілком не буде переданий. Нижче представлені в термінах псевдо-Сі процедури передачі і прийому даних.
send()
{
while ( є байти для передачі ){
send( байт );
wait();
}
}
receive()
{
do {
receive_byte();
send( квітуючий байт );
} while( поки всі байти не зчитані );
}
При цьому передача даних не викликає ніколи переповнення регістра в порту-приймачі незалежно від того, наскільки велика різниця у швидкості виконання операцій комп'ютерів, між якими встановлена зв'язок.
При цьому типі підтвердження зв'язку є лише один недолік - швидкість передачі даних падає вдвічі в порівнянні з теоретично можливої. Це порозумівається тим, що при передачі одного байта інформації фактично відбувається передача двох байт (згадаєте про квітуючий байт).
Перекачування файлу
Першою необхідною підпрограмою є функція, що забезпечує передачу файлу через послідовний порт. У загальному випадку ця функція повинна відкрити файл, що буде переданий на інший комп'ютер, підрахувати його довжину, передати в порт-приймач довжину переданого файлу і, зрештою, перекачати сам файл. Функція send_file(), представлена нижче, саме і призначена для рішення цих задач.
/* пеpекачка специфікованого файлу */
Void send_file(fname)
char *fname;
{
FILE *fp;
char ch;
union {
char c[2];
unsigned int count;
} cnt;
if(!(fp=fopen(fname,"rb"))) {
printf("Вхідний файл не може бути відкритим\n");
exit(1);
}
send_file_name(fname); /* передача імені файлу */
wait(PORT); /* очікування квітуючого байту */
/* обчислення розміру вихідного файлу */
cnt.count = filesize(fp);
/* pозміp посилки */
sport(PORT, cnt.c[0]);
wait(PORT);
sport(PORT, cnt.c[1]);
do {
ch = getc(fp);
if(ferror(fp)) {
printf(" помилка читання вихідного файлу\n");
break;
}
/* очікування готовності поpту-пpиймача */
if(!feof(fp)) {
wait(PORT);
sport(PORT, ch);
}
} while(!feof(fp));
wait(PORT);/* очікування підтвердження отримання останнього байту
*/
fclose(fp);
}
Функція send_file_name(), представлена нижче, установлює відповідність між ім'ям прийнятого і переданого файлів.
/* Пеpекачка імені файлу */
void send_file_name(f)
char *f;
{
printf(" Очікування пеpедачі... \n");
do {
sport(PORT, '?');
} while(!kbhit() && !(check_stat(PORT)&256));
if(kbhit()) {
getch();
exit(1);
}
wait(PORT); /* очікування отримання квітуючого байту */
printf("Пеpедано %s\n\n",f);
/* фактична пеpедача імені файлу */
while(*f) {
sport(PORT, *f++);
wait(PORT); /* очікування отримання квітуючого байту */
}
sport(PORT,'\0'); /* символ кінця стрічки */
}
Функція send_file_name() призначена для рішення двох основних задач. По-перше, вона встановлює зв'язок з комп'ютером-приймачем шляхом передачі йому маркера запитання ('?') і чекає відповіді від нього у виді квітуючого байта. (У якості квітуючого символу використовується крапка. Однак можна за своїм розсудом використовувати інший символ. Після того, як зв'язок буде встановлено, здійснюється передача імені файлу. Ця функція завершує аварійно свою роботу при надходженні переривання від клавіатури.
Функція wait(), представлена нижче, очікує квітування від комп'ютера-приймача, що реалізує програмне підтвердження зв'язку.
/* очікування відповіді */