Professional Documents
Culture Documents
КУРСОВА РОБОТА з дисципліни «Програмування»
КУРСОВА РОБОТА з дисципліни «Програмування»
КУРСОВА РОБОТА
з дисципліни «Програмування»
Члени комісії:
__________ _____________________
(підпис) (прізвище та ініціали)
__________ _____________________
(підпис) (прізвище та ініціали)
__________ ______________________
(підпис) (прізвище та ініціали)
2
м. Дніпро
2020
Завдання на курсову роботу
Завдання 1. Робота з символьними рядками
Мета: поглиблення і закріплення теоретичних знань та набуття практичних
навичок роботи з символьними рядками та забезпечення функціональної
модульності програми.
Постановка задачі: Скласти функцію для обробки символьних рядків та програму
для перевірки працездатності функції. За зразок можна брати бібліотечні функції
обробки рядків мови С, але не використовувати їх в своїй функції.
При виконанні 1-го завдання необхідно:
1. Рядки для тестування функції вводити в головній програмі з клавіатури.
2. Передбачити обробку помилок в завданні параметрів та особливі випадки.
3. Розробити два варіанти заданої функції з використанням:
а) індексованих масивів;
б) вказівників.
Варіант індивідуального завдання:
Функція digit(s)
Призначення: визначає довжину найдовшої послідовності цифр в символьному
рядку.
Зміст
Вступ....................................................................................................................................................................... 7
1. Робота з символьними рядками.....................................................................................................................8
1.1 Умова завдання...........................................................................................................................................8
1.2 Опис методу рішення.................................................................................................................................8
1.3 Опис логічної структури...........................................................................................................................9
1.4 Дані для тестування.................................................................................................................................10
2. Робота з двовимірними масивами...............................................................................................................11
2.1 Умова завдання.........................................................................................................................................11
2.2 Опис методу рішення...............................................................................................................................11
2.3 Опис логічної структури.........................................................................................................................11
2.4 Дані для тестування.................................................................................................................................13
3. Робота з бітами................................................................................................................................................14
3.1 Умова завдання.........................................................................................................................................14
3.2 Опис методу рішення...............................................................................................................................14
3.3 Опис логічної структури.........................................................................................................................15
3.4 Дані для тестування.................................................................................................................................16
4. Робота зі структурами. Сортування та пошук даних...............................................................................18
4.1 Умова завдання.........................................................................................................................................18
4.2 Опис методу рішення...............................................................................................................................18
4.3 Опис логічної структури.........................................................................................................................19
4.4 Дані для тестування.................................................................................................................................21
Висновок..............................................................................................................................................................24
Список використаних джерел..........................................................................................................................25
Додаток А............................................................................................................................................................. 26
Рис. A.1. — Блок-схема алгоритму функції main()...................................................................................26
Рис. A.2. — Блок-схема алгоритму функції digit(s)...................................................................................27
Рис. A.3. — Блок-схема алгоритму функції digitpointer(s).......................................................................28
Додаток Б.............................................................................................................................................................29
Рис. Б.1. — Блок-схема алгоритму функції main()....................................................................................29
Рис. Б.2. — Блок-схема алгоритму функції vvod(str)................................................................................30
6
Вступ
Мова програмування С - це універсальна мова з багатим набором операторів і
компактним способом запису виразів. Завдяки гнучкості, виразності і компактності
своїх конструкцій С завоював найбільшу популярність у середовищі професійних
програмістів і широко використовується при розробці системних і прикладних
програм. За цей період навчання ми здобули багато теоретичних знать та
практичних навичок. Ми вивчили такі теми як, оператори циклу , масиви ,
функції ,вказівники, робота з файлами, структури тощо.
Мета роботи: освоїти алгоритми вирішення задач, користуючись набутими
протягорм курсу знаннями. Дослідити типові задачі з програмування, а саме:
розробка функцій для обробки символьних рядків;
робота з одновимірними та двовимірними масивами даних;
робота з динамічними структурами та файлами;
використання методів сортування та пошуку даних.
Основна частина, яка для кожного завдання має такі підрозділи:
умова завдання;
метод рішення (стислі відомості про особливості використаних операторів та
методів, опис вхідних та вихідних даних для кожної функції);
логічна структура програми (алгоритми роботи для кожної функції, що
складають програму, та їх опис);
тестування програми при різних наборах вхідних даних (дані для тестування,
результати тестування та аналіз одержаних результатів).
блок-схеми алгоритму функцій програми
лістинг (текст) програми;
8
3. Робота з бітами
3.1 Умова завдання
Скласти програму кодування/декодування текстового файлу за наступним
алгоритмом: над кожним символом з файлу виконується побітова операція
«виключне або» з заданим паролем, тобто Свих=Свх ^ p, где Свих — символ, що
одержано після кодування, Свх — символ, що потрібно закодувати, p — пароль
(число). Пароль та вибір режиму роботи (кодування/декодування) слід задавати з
клавіатури.
3.2 Опис методу рішення
Символ – це умовне позначення деякої сутності: літери, цифри, знаку,
пунктуації, тощо. Для роботи з символами в мові C використовується тип даних
char. Оскільки процесори комп’ютерів обробляють інформацію в двійковій системі,
кожен символ в програмуванні представлений деяким числом. Це число – код
символу. Під char виділяється 1 байт тобто, максимальне число, яке можна
записати в 1 байт, це 255 (буде виглядати як 11111111). Це означає що діапазон
паролів, які ми будемо використовувати, буде від 1 до 255 включно. Оскільки
принцип кодування таким чином Свих=Свх ^ p, не відрізняється під принципу
декодування, вважаю, що вибір режиму роботи в даній програмі не потрібен.
Визначимо склад параметрів функції кодування(декодування):
void codesymb(firstfile, secondfile, a)
де firstfile – масив, який зберігає ім’я файлу для читання
secondfile – масив, який зберігає ім’я файлу для запису
a – змінна int, яка зберігає числовий пароль
15
Функція визначає кількість рядків у файлі. Вона зчитує рядки і рахує їх доки
вказівник не досягне кінця файлу. Параметр функції ім’я файлу. Повертає кількість
рядків.
Висновок
Підбиваючи підсумки проведеної роботи, шо мова програмування C не
втратила своєї актуальності й у 2020 році. C – це хороша мова для навчання, знати
її потрібно, щоб розуміти як працювати з пам’яттю, знати звідки вона береться і
куди вона дівається; розвити в собі уважність, в C потрібно чітко уявляти, що й де
записано, на яку пам'ять ми посилаємося, коли і ким ця пам'ять буде очищена;
розуміти як працює комп’ютер, файлові операції тощо;
9. Б
Додаток А
Додаток Б
Додаток В
Додаток Г
39
Додаток Л
Лістинг Л.1 — Лістинг алгоритму розв’язання задачі з обробки двовимірних
масивів
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void main() {
char s[100];
47
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
}
/*функція заповнення матриці через командний рядок*/
void vvod(int str[K][K]) {
printf("Enter the matrix");
for (int i = 0; i < K; i++) //зовнішній
цикл
for (int j = 0; j < K; j++) //внутрішній
цикл
scanf("%d", &str[i][j]); //введення елементу
з командного рядка
}
49
void exercise2() {
int str[K][K], h;
printf("Incoming matrix:");
strprint(str); //виклик функції
друку матриці
printf("\n\nTurned matrix:");
povorot(str); //виклик функції
повороту матриці
strprint(str); //виклик функції
друку матриці
printf("\n");
_getch(); }
50
void exercise3() {
char filename[20], secondfile[20];
int pass;
printf("Enter a file to read ");
scanf("%s", filename); //введення ім'я файлу
для читання
printf("Enter a file to write ");
scanf("%s", secondfile); //введення ім'я файлу
для запису
printf("Enter a pass from 1 to 255 :");
do {
scanf("%d", &pass); //цикл перевірки
паролю
} while (pass < 1 || pass>255);
/*прототипи функцій*/
Trip* initArray(int, char[]);
int dimlong(char[]);
void displayArray(Trip*, int);
void countChoise(Trip*, int, int, int, char[], int, int);
void displayTrip(Trip);
void sortPrice(Trip*, int);
void displayChoise(Trip*, int, char[], char[]);
/*головна функція*/
void exercise4() {
int dimension;
char filename[] = "zont.txt", secondfile[] = "selectzont.txt";
Trip* massiveStruct;
dimension = dimlong(filename);
//виклик функції для визначення кількості рядків в файлі
massiveStruct = initArray(dimension, filename);
//виклик финкції для створення масиву структур
if (massiveStruct == NULL) {
//перевірка створення масиву
printf("\nDynamic array don't exist!\n");
printf("\nPress any key to exit...");
}
printf("\nThe list of umbrellas: \n");
displayArray(massiveStruct, dimension);
//функція виведення масиву структур
free(massiveStruct);
//звільнення пам'яті
printf("\nPress any key to exit...\n");
}
/*функція визначення кількості рядків у файлі*/
int dimlong(char filename[]) {
FILE *mf;
char str[200];
int i = 0;
mf = fopen(filename, "r"); //відкриття
потоку
if ((mf = fopen(filename, "r")) == NULL) { //перевірка
відкриття потоку
printf("Cannot open file.\n");
exit(1);
}
while (!feof(mf)) { //цикл перебору
рядків
fgets(str, 200, mf);
i++;
54
}
fclose(mf); //закриття потоку
return i; //повертаємо
кількість рядків
}
/*функція створення масиву, виділення пам'яті та введення інформації
з файлу*/
Trip* initArray(int dimension, char filename[]) {
int i;
Trip* massive = (Trip*)malloc(dimension * sizeof(Trip));
//виділення пам'яті
FILE *mf;
mf = fopen(filename, "r");
//вівдкриття файлу
if (massive == NULL)
return NULL;
//перевірка виділення
if (mf == NULL) { printf("error\n"); return -1; }
//перевірка відкриття
for (i = 0; i < dimension; i++)
//цикл перебору рядків у файлі
{ //введення інформації з файлу в елемент масиву
fscanf(mf, "%s%s%s%s%f%d%d", massive[i].country,
massive[i].mehType, massive[i].color, &massive[i].image,
&massive[i].price, &massive[i].month, &massive[i].year);
}
if (fclose(mf) == EOF) printf("fclose(mf) == EOF\n");
//закриття файлу
return massive;
//повертаєто масив
}
}
/*функція виведення та підрахування елементів що відповідають
критеріям*/
void countChoise(Trip* massive, int dimension, int Umonth, int Uyear,
char image[], int Lmonth, int Lyear)
{
int count=0; //обнуляємо лічильник
for (int i = 0; i < dimension; i++)
//цикл перебору всіх елементів масиву
{
if ((massive[i].year >= Lyear)&&(massive[i].month >=
Lmonth)|| (massive[i].year > Lyear)) //якщо дата елементу більше
нижньго ліміту дати відкриваємо новий цикл
{
for (int j = i; j < dimension; j++)
{
if ((massive[j].month > Umonth)&&(massive[j].year
>= Uyear)|| (massive[j].year > Uyear)) //якщо дата елементу більше
верхньго ліміту закриваємо функцію
{
goto stop;
}
else if (*(massive[j].image)==*(image)){
//в іншому випадку збільшуємо лічильник
displayTrip(massive[j]);
//та вивиодимо елемент на екран
count++;
i = j;
}
}
}
}
stop: printf("\n\n%d umbrellas found by this search criterias\n\n",
count); //виводимо лічильник
}
}
for (int i = 0; i <= dimension; i++)
//сортування методом бульбашки за роком продажу
for (int j = dimension - 1; j > i; j--)
if (massive[j].year<massive[j - 1].year)
{
temp = massive[j];
massive[j] = massive[j - 1];
massive[j - 1] = temp;
}
}
void displayChoise(Trip* massive, int dimension, char secondfile[],
char mechanism[])
{
FILE * pFile;
pFile = fopen(secondfile, "w"); //відкриття потоку
для запису