- •О.Ф.Тарасов, о.В.Алтухов
- •1 Заняття № 1 Вивчення інтегрованого середовища с
- •1.1 Теоретичні відомості
- •1.2 Хід роботи
- •1.3 Вимоги до звітів
- •1.4 Питання для контролю і самостійної роботи
- •2 Заняття № 2 Функції введення/виведення даних printf( ), scanf( ). Лінійні обчислювальні процеси
- •2.1 Теоретичні відомості
- •2.2 Хід роботи
- •2.3 Індивідуальне завдання до заняття №2
- •2.4 Питання для контролю і самостійної роботи
- •3 Заняття № 3 Розробка програм зі скалярними типами даних
- •3.1 Теоретичні відомості
- •Приклад
- •3.2 Хід роботи
- •3.3 Індивідуальне завдання до заняття № 3
- •3.4 Питання для контролю і самостійної роботи
- •4 Заняття № 4 Розробка програм з циклічними обчислювальними процесами
- •4.1 Теоретичні відомості
- •Алгоритм роботи оператора циклу for ( )
- •4.2 Хід роботи
- •4.3 Індивідуальне завдання до заняття № 4
- •4.4 Питання для контролю і самостійної роботи
- •5 Заняття № 5
- •Розгалуження обчислювального процесу.
- •Оператори, які реалізують розгалуження: if... Else, switch,
- •Умовна операція ( ? : )
- •5.1 Теоретичні відомості
- •Умовна тернарна операція ( ? : )
- •Оператор варіанта switch
- •Приклад
- •5.2 Хід роботи
- •5.3 Індивідуальне завдання до заняття № 5
- •5.4 Питання для контролю і самостійної роботи
- •6 Заняття № 6 Операції с, їхні пріоритети і використання. Перетворення типів
- •Пріоритет операцій і порядок виконання (асоційованість)
- •(Новий_тип) Операнд
- •Приклад
- •6.2 Хід роботи
- •6.3 Індивідуальне завдання до заняття № 6
- •6.4 Питання для контролю і самостійної роботи
- •7 Заняття № 7
- •7.1 Теоретичні відомості
- •Оголошення функцій (створення прототипів)
- •([ Список_типів_параметрів ])
- •Синтаксис визначення функцій
- •[ Return Значення_типу_що_повертається ]
- •Використання локальних і глобальних перемінних у функціях. Виклик функції
- •Приклад
- •7.2 Хід роботи
- •7.3 Індивідуальне завдання до заняття № 7
- •7.4 Питання для контролю і самостійної роботи
- •8 Заняття № 8
- •8.1 Теоретичні відомості
- •Основні операції з покажчиками
- •Покажчики і цілі величини
- •Динамічне розміщення покажчиків у пам'яті
- •Приклад
- •Приклад
- •8.2 Хід роботи
- •8.3 Індивідуальне завдання до заняття № 8
- •8.4 Питання для контролю і самостійної роботи
- •9 Заняття № 9
- •9.1 Теоретичні відомості
- •Приклад
- •9.2 Хід роботи
- •9.3 Індивідуальне завдання до заняття №9
- •9.4 Питання для контролю і самостійної роботи
- •10 Заняття № 10
- •10.1 Теоретичні відомості
- •Приклад
- •10.2 Хід роботи
- •10.3 Індивідуальне завдання до заняття № 10
- •10.4 Питання для контролю і самостійної роботи
- •Заняття №11 Обробка символьних даних
- •Теоретичні відомості
- •Індивідуальне завдання до заняття №11
- •Питання для контролю і самостійної роботи
- •Приклад
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Теоретичні відомості
- •Приклад
- •Індивідуальне завдання до завдання №13
- •Питання для контролю і самостійної роботи
- •Заняття № 14 Розробка програм зі складеними типами даних
- •Структури
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Заняття № 15 Використання покажчиків для роботи зі складеними типами даних (2години)
- •Теоретичні відомості
- •Приклад
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Використання покажчиків для роботи з функціями
- •Покажчики як параметри функції
- •[Const ] Тип * Ім'я_покажчика
- •Приклад
- •Хід роботи
- •Індивідуальне завдання до заняття №16
- •Питання для контролю і самостійної роботи
- •Використання функцій високого і низького рівня для роботи з потоками (файлами)
- •Функції для роботи з файлами
- •Хід роботи
- •Індивідуальне завдання до заняття №17
- •Питання для контролю і самостійної роботи
- •Розробка програм із багатофайловою структурою. Заголовочні файли. Класи пам'яті перемінних і функцій
- •Керування многофайловими проектами
- •Використання адміністратора проектів
- •Приклад
- •Основний файл проекту
- •Заголовний файл
- •Хід роботи
- •Індивідуальне завдання до заняття №18
- •Питання для контролю і самостійної роботи
- •Графічні функції
- •Графічні примітиви
- •Хід роботи
- •Індивідуальне завдання до заняття №19
- •Питання для контролю і самостійної роботи
- •Заняття№20 Розробка програм з використанням класів
- •Теоретичні відомості
- •Оголошення і визначення класу
- •Тіло класу
- •Інкапсуляція. Керування доступом до членів класу
- •Використання даних-членів класу
- •Хід роботи
- •Індивідуальне завдання до заняття №20
- •Питання для контролю і самостійної роботи
- •Заняття№21 Використання конструкторів і деструкторів у класах
- •Теоретичні відомості
- •Ініціалізація об'єктів класу
- •Деструктори
- •Виклик деструкторів
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •"Друзі" класів (friend)
- •Хід роботи
- •Індивідуальне завдання до заняття №22
- •Контрольні питання для підготовки і самостійної роботи
- •Віртуальні базові класи
- •Віртуальні деструктори
- •Хід роботи
Питання для контролю і самостійної роботи
Чи можна використовувати покажчики для передачі даних у функції, для чого це робиться ?
Які типи даних можна передати у функцію з використанням покажчиків і без покажчиків ?
Чи можна змінювати значення даних у функції при використанні покажчиків при наявності модифікатора const ?
Чи можна повертати покажчики з функцій ?
Як оголосити покажчик на функцію ?
Чи можна використовувати покажчики для роботи з функціями різного типу ?
Який тип має ім'я функції ?
Який тип має ім'я масиву ?
Як зв'язати покажчик з конкретною функцією ?
Як використовувати покажчики для виклику функції ?
Як зв'язати і використовувати покажчик на функцію ?
Як викликати функцію з використанням покажчика ?
Заняття№17
Використання функцій високого і низького рівня для роботи з потоками (файлами)
(2 години)
Ціль роботи: навчитися використовувати функції високого і низького рівня при роботі з файлами.
Теоретичні відомості.
Функції для роботи з файлами
сhmod( ) #include <io.h> Змінює режим доступу до файлу.
int chmod(const char *path, int mode);
chsize( ) #include<io.h> Змінює розмір файлу.
int chsize(int handle, long size);
close( ) #include<io.h> Закриває файл.
int close(int handle);
creatnew( ) #include <dos.h> Створює новий файл.
int creatnew(const char *path, int mode);
eof( ) #include<io.h> Визначає, чи досягнутий кінець файлу.
int eof(int handle);
fclose( ) #include <stdio.h> Закриває потік.
int fclose (FILE *stream);
fdopen ( ) #include<stdio.h> Зв'язує потік з логічним номером файлу.
FILE *fdopen(int handle, char *type);
feof( ) #include<stdio.h> Визначає, чи досягнутий кінець файлу.
ferror( ) #include<stdio.h> Виявляє помилки в потоці.
int ferror(FILE *stream);
fgetc( ) #include<stdio.h> Одержує символ з потоку.
int fgetc(FILE *stream);
fgetchar( ) #include<stdio.h> Одержує символ з потоку stdin.
int fgetchar(void);
fgetpos( ) #include<stdio.h>
Повертає положення покажчика поточної позиції у файлі.
int fgetpos(FILE *stream, fpos_t *pos);
fgets( ) #include<stdio.h> Одержує рядок символів з потоку.
char *fgets(char s, int n, FILE *stream);
fopen( ) #include <stdio.h> Відкриває потік.
FILE *fopen(char *filename, char *type);
fprintf( ) #include <stdio.h>
Здійснює форматизоване виведення у потік.
int fprintf(FILE *stream, const char *format [argument,...]);
fputc( ) #include <stdio.h> Виводить символ у потік.
int fputc(int c, FILE *stream);
fputchar( ) #include <stdio.h> Виводить символ у потік stdout.
int fputchar(int c);
fputs( ) #include <stdio.h> Виводить рядок символів у потік.
int fputs(char *string, FILE *stream);
fread( ) #include <stdio.h> Зчитує дані з потоку.
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
freopen( ) #include <stdio.h> Зв'язує з потоком новий файл.
FILE *freopen(char *filename, char *mode, FILE *stream);
fscanf( ) #include <stdio.h>
Виконує форматизоване введення даних з потоку.
int fscanf(FILE *stream, char *format [adress,...]);
fseek( ) #include <stdio.h> Установлює покажчик файлу в потоці.
int fseek(FILE *stream, long offset, int fromwhere);
fsetpos( ) #include<stdio.h>
Встановлює положення (задає позицію) покажчика поточної позиції у файлі, зв'язаному з потоком stream.
int fsetpos(FILE *stream, const fpos_t *pos);
ftell( ) #include <stdio.h>
Повертає положення покажчика поточної позиції у файлі.
long ftell(FILE *stream);
fwrite( ) <stdio.h>#include Записує дані в потік.
size_t fwrite(void *ptr, size_t size, size_t n, FILE *stream);
getc( ) #include <stdio.h> Вводить символ з потоку.
int getc(FILE *stream);
getchar( ) #include <stdio.h> Вводить символ з потоку stdin.
int getchar(void);
gets( ) #include<stdio.h> Вводить рядок символів з потоку stdin.
char *gets(char *s);
getw( ) #include <stdio.h> Вводить з потоку ціле число.
int getw(FILE *stream);
Переміщає покажчик читання/запису файлу.
lseek( ) #include <io.h>
long lseek(int handle, long offset, int fromwhere);
_open( ) #include <fcntl.h> Відкриває файл для читання чи запису.
int _open(const char *filename, int oflags);
open( ) #include <fcntl.h>; #include <sys\stat.h>;
Відкриває файл для читання чи запису.
int open(const char *filename, int access [unsigned mode]);
putc( ) #include <stdio.h> Виводить символ у потік.
int putc(int c, FILE *stream);
putchar( ) #include <stdio.h> Виводить символ у потік stdout.
int putchar(int c);
puts( ) #include<stdio.h> Виводить рядок у потік stdout.
int puts(const char *s);
putw( ) #include <stdio.h> Поміщає в потік ціле значення.
int putw(int w, FILE *stream);
read( ) #include<io.h> Зчитує дані з файлу.
int read(int handle, void *buf, unsigned len);
rewind( ) #include <stdio.h> Установлює покажчик у початок потоку.
int rewind(FILE *stream);
setmode( ) #include<fcntl.h> Установлює режим відкриття файлу.
int setmode(int handle, unsigned amode);
unlink( ) #include<io.h> Видаляє файл.
int unlink(const char *filename);
vprintf( ) #include <stdarg.h> Здійснює форматизоване виведення даних у стандартний потік stdout.
int vprintf (const char *format, va_list arglist);
write( ) #include<io.h> Записує дані у файл.
int write(int handle, void *buf, unsigned len);
Приклад
/* ЗАНЯТТЯ N17
Розробив Петров О.В.
Оголосити структуру, що містить члени типу int, float, char,
виконати ініціалізацію декількох структур у циклі і запис
їх у файл. Оголосити і виконати ініціалізацію масивів даних для
членів структур, записати їх в окремі файли. Ввести значення
елементів структур, прочитавши їх зі створених файлів даних і
дописати в кінець файлу структур. Прочитати структури з
отриманого файлу і вивести значення членів структур на екран */
#include <stdio.h>
#include <CONIO.H>
#include <CTYPE.H>
#define N 5
int main( void )
{ struct str {
int ces; float ves; char tip; //Дата Вага Вид
} st;
FILE *fstr; //Оголошення покажчика на файл (для структур)
FILE *fces, *fves, *ftip; //Оголошення покажчиків на файли
int a, mces[ ] = {1, 24, 14, 5, 16};
float mves[ ] = {2.3, 3.4, 5.3, 5.6, 2.4};
char mtip[ ] = " abcde ";
clrscr( );
// Відкриття файлів для запису і читання ("w+"):
// FILE *fopen(const char *filename, const char *mode);
if ((fstr = fopen("fstr.dat", "w +")) == NULL)
{ fprintf(stderr, "Cannot open output file\n"); return 1; }
if ((fces = fopen("fc.dat", "w")) == NULL) //Тільки для запису
{ fprintf(stderr, "Cannot open output file\n"); return 1; }
if ((fves = fopen("fv.dat", "w+")) == NULL)
{ fprintf(stderr, "Cannot open output file\n"); return 1; }
if ((ftip = fopen("ft.dat", "w+")) == NULL)
{ fprintf(stderr, "Cannot open output file\n"); return 1; }
int i = 1;
do { printf(" Введення даних у файл структур: %і\n",і);
met1: printf("Введення дати ( >0, тип - int):"); scanf("%і", &st.ces);
if (st.ces <= 0) { fflush(stdin); goto met1;} fflush(stdin);
met2: printf("Введення ваги ( >0, тип - float):"); scanf("%f", &st.ves);
if (st.ves<=0) { fflush(stdin); goto met2;} fflush(stdin);
met3: printf("Введення виду (тип - сhаr):");scanf("%c", &st.tip);
if (!isalpha(st.tip)) { fflush(stdin); goto met3;}
// Запис отриманої структури у файл fstr
fwrite(&st, sizeof(st), 1, fstr);
i ++;
printf("Вихід а = = 0 Введіть а= "); scanf("%i", &a);
} while(a); //Кінець запису структур у файл fstr
// Запис у файли даних з масивів: mces[ і ], mves[ і ], mtip[ і ]
for(і = 0; і < N; і ++)
{ //Формат і застосування функцій запису у файл:
//int fprintf (FILE *stream, const char *format [, argument, ...]);
fprintf(fces,"%d ", mces[ і ] ); //З масиву mces[ і ]
//size_t fwrite(const void *ptr, size_t size, size_t n, FILE*stream);
fwrite (&mves[і], sizeof(float), 1, fves); //З масиву mves[ і ]
//int fputc(int c, FILE *stream);
fputc ( mtip[ і ], ftip); //З масиву mtip[ і ]
}
fclose(fces); //Закриття файлу fces
// int fseek(FILE *stream, long offset, int whence);
fseek(fves, 0L, SEEK_SET); //Установка покажчика файлу fves на початок
fseek(ftip, 0L, SEEK_SET); //Установка покажчика файлу ftip на початок
//Відкриття файлу fces для читання ("r"):
if ((fces = fopen("fc.dat", "r")) = = NULL)
{ fprintf(stderr, "Cannot open input file\n"); return 1; }
printf("Введення даних у структури з файлів даних для окремих членів: \n");
for(і = 0; і < N; і ++)
{ //Формат і застосування різних функцій читання даних
//з файлів і ініціалізація членів структури st :
// int fscanf (FILE *stream, const char *format [, address, ...]);
fscanf (fces, "%d", &st.ces);
// size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
fread (&st.ves, sizeof(float), 1, fves);
// int fgetc(FILE *stream);
st.tip = fgetc (ftip);
// Результати ініціалізації членів структури st
printf("Дата =%d Вага =%f Вид =%c \n", st.ces, st.ves, st.tip);
// Запис отриманої структури в кінець існуючого файлу fstr
fwrite (&st, sizeof(st), 1, fstr);
}
fseek(fstr, 0L, SEEK_SET);
printf("\n Виведення даних з файлу структур: Дата, Вага, Вид \n");
while(1)
{ a = fread(&st, sizeof(st), 1, fstr);
if (a = = 0) goto end;
printf("Дата= %і Вага= %f Вид=%c\n ", st.ces, st.ves, st.tip);
}
end: fclose(fstr);
fcloseall( ); //fclose(fces); fclose(fves); fclose(ftip);
getch( ); return 0;
}
/* Введення даних у файл структур: 1
Введення дати ( >0, тип - int): 3
Введення ваги ( >0, тип - float): 4.6
Введення виду (тип - сhаr): g Вихід а = = 0 Введіть а = 1
Введення даних у файл структур: 2
Введення дати ( >0, тип - int): 19
Введення ваги ( >0, тип - float): 2.7
Введення виду (тип - сhаr): p Вихід а = = 0 Введіть а = 0
Введення даних у структури з файлів даних для окремих членів:
Дата = 1 Вага = 2.300000 Вид = a
Дата = 24 Вага = 3.400000 Вид = b
Дата = 14 Вага = 5.300000 Вид = c
Дата = 5 Вага = 5.600000 Вид = d
Дата = 16 Вага = 2.400000 Вид = e
Виведення даних з файлу структур: Дата, Вага, Вид
Дата = 3 Вага = 4.600000 Вид = g
Дата = 19 Вага = 2.700000 Вид = p
Дата = 1 Вага = 2.300000 Вид = a
Дата = 24 Вага = 3.400000 Вид = b
Дата = 14 Вага = 5.300000 Вид = c
Дата = 5 Вага = 5.600000 Вид = d
Дата = 16 Вага = 2.400000 Вид = e */
