- •Лабораторна робота №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 wait(port)
Int port;
{
if(rport(port)!='.') {
printf("помилка встановлення зв'язку \n");
exit(1);
}
}
Таким чином, при виявленні помилки ця функція припиняє свою роботу. Однак можна передбачити обробку даної ситуації.
Функція filesize() повертає розмір файлу в байтах. Її використання можливо, якщо компілятор Сі підтримує функцію обчислення довжини файлу, у протилежному випадку потрібно замінити цю функцію розробленою вами, але виконуючу аналогічні дії. Змінна cnt, що входить до складу структури union, служить для збереження двобайтової довжини файлу, але потрібно пам'ятати, що за одиницю часу можна переслати через послідовний порт тільки один байт.
Прийом файлу
Прийом файлу є прямо протилежною операцією передачі файлу. По-перше, функція прийому очікує маркера запиту на одержання даних (символ ‘?’). На одержання маркера функція відповідає крапкою (символом квітування). Після одержання імені файлу функція очікує одержання його розміру в байтах. В остаточному підсумку функція починає читання файлу. Після одержання і читання кожного байта функція посилає комп’ютерові-джерелу квітуючий байт. У такий спосіб вона реалізує програмне підтвердження зв’язку. Функція rec_file() представлена нижче.
/* Прийом файлу */
Void rec_file()
{
FILE *fp;
char ch;
char fname[14];
union {
char c[2];
unsigned int count;
} cnt;
get_file_name(fname); /* одержання імені файлу */
printf(„ Отриманий файл %s\n”,fname);
remove(fname);
if(!(fp=fopen(fname, „wb”))) {
printf(„ Неможливо відкрити вихідний файл \n”);
exit(1);
}
/* Одержання довжини файлу */
sport(PORT, ‘.’); /* квітування */
cnt.c[0] = rport(PORT);
sport(PORT, ‘.’); /* квітування */
cnt.c[1] = rport(PORT);
sport(PORT, ‘.’); /* квітування */
for(; cnt.count; cnt.count--) {
ch = rport(PORT);
putc(ch, fp);
If(ferror(fp)) {
printf(„ помилка запису у файл „);
exit(1);
}
sport(PORT, ‘.’); /* квітування */
}
fclose(fp);
}
Функція get_file_name() представлена нижче.
/* Одержання імені файлу */
Void get_file_name(f)
char *f;
{
printf(„Чекання одержання...\n”);
while(rport(PORT)!=’?’) ;
sport(PORT, ‘.’); /* квітування */
while((*f=rport(PORT))) {
if(*f!=’?’) {
f++;
sport(PORT, ‘.’); /* квітування */
}
}
}
-
Приклад розв’язання задачі на еом (варіант 10)
Дана програма буде складатися з основної функції int main(), та двох функцій для виконання поставленої задачі:
void EnterData (const char *file_name) – призначена для перезапису даних в файлі.
int GetLinesCount(const char *file_name) – призначена для підрахунку кількості стрічок двійкового файлу.
-
Розробка тексту програми
#include <stdio.h>
#include <conio.h>
#include <string.h>
void EnterData (const char *file_name);
int GetLinesCount(const char *file_name);
/*
Перезапис всіх даних в файлі та запис нових даних даних
*/
void EnterData(const char *file_name)
{
FILE *f; // file variable
f = fopen(file_name,"wb");
if(f)
{
char str[100];
printf("Please enter data:\n");
do
{
gets(str);
if( strlen(str) == 0 )
break;
fprintf(f, "%s\n", str);
}while(1);
fclose(f);
}
}
int GetLinesCount(const char *file_name)
{
FILE *f;
f = fopen(file_name,"rb");
if(f)
{
char ch;
int k = 1;
while( !feof(f) )
{
fread(&ch, 1, 1, f);
if( ch == 10 )
k++;
}
fclose(f);
return k; }
printf("Cannot open file");
return 0;
}
void main()
{
clrscr();
int h;
char file_name[] = {"1.txt"};
h=GetLinesCount(file_name);
printf("k=%d",h);
getch();
}
3.2 Результати роботи програми
Для перевірки правильності роботи програми безпосередньо введемо до текстового файлу „ 1.txt ” деяку інформацію, наприклад запишемо:
Ukraine
Ne xo4y v armijy
ale pidy
Slyjy Ukraini
Видно, що файл містить чотири стрічки.
Тоді запустимо програму і бачимо, що в файлі „ 1.txt ” кількість стрічок:
k=4.