Ім'я файлу: Лабалаторна робота №2 Алгоритмизация.docx Розширення: docx Розмір: 222кб. Дата: 16.11.2020 скачати МІНІСТЕРСТВО НАУКИ ТА ОСВІТИ УКРАЇНИ НацІональнИй технІчНИЙ унІверситет “ХаркІвсЬкий полІтехнІчНий Інститут” Кафедра програмної ІНЖЕНЕРІЇ ТА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ УПРАВЛІННЯ ЛАБОРАТОРНА РОБОТА №1 з дисципліни «Алгоритмізація та програмування» Виконав: студент гр. КН-420Б Бондар Артем Перевірив: Доцент каф. ПІІТУ Білова М. О. Харків – 2020 ЗмістЗміст 1 Порядок виконання лабораторної роботи 3 Завдання №1 – «Readability» 4 Завдання №2 – «Substitution» 6 Висновок 9 Додаток А 10 Додаток Б 12 Порядок виконання лабораторної роботиМета роботи: закріпити знання, пов’язані з використанням масивів, функцій, аргументів командного рядка у мові програмування С на прикладі типу даних string як масиву символів char з використанням хмарного середовища програмування CS50 IDE. Завдання №1 – «Readability»Розробити програму, Readability, для обчислення індексу Коулмана-Ліау тексту. Програма повинна запропонувати користувачеві ввести рядок тексту. Програма повинна підрахувати кількість букв, слів і речень у тексті. Буква визначається як будьякий символ від a до z чи будь-який символ від A до Z; слово - будь-яка послідовність символів, розділених пробілами; речення відділяються одне від одного знаками крапки, оклику або питання. Програма повинна надрукувати у консоль «Grade X», де X - рівень оцінки, обчислений за формулою КоулманаЛіау, округлений до найближчого цілого числа. Якщо отримане число індексу дорівнює 16 або вище програма повинна виводити «Grade 16+». Якщо номер індексу менше 1, програма повинна вивести «Before Grade 1». Основні етапи роботи: Обмірковування завдання Розробка алгоритма програми Написання кода Тестування коду Здача коду у CS50 Gradebook Результати роботи програми: Скріншот № 1 Скріншот № 2 Скріншот № 3 Завдання №2 – «Substitution»Розробити програму, яка реалізує шифр простої заміни. Програма повинна прийняти один аргумент командного рядка, ключ для заміни. Сам ключ не повинен враховувати регістр, тому будь-який символ у ключі може бути великим чи малим, що не повинно впливати на поведінку програми. Якщо ваша програма виконується без будь- яких аргументів командного рядка або з кількома аргументами командного рядка, програма повинна надрукувати повідомлення про помилку і повернути з main значення 1 негайно. Якщо ключ недійсний, програма повинна надрукувати повідомлення про помилку на ваш вибір і повернути main значення 1. Програма повинна вивести plaintext:, а потім запропонувати користувачеві ввести текст, який потрібно зашифрувати. Після цього програма повинна вивести ciphertext:, за яким вивести відповідний зашифрований текст. При цьому кожен алфавітний символ у відкритому тексті замінюється відповідним символом в зашифрованому тексті; не алфавітні символи слід виводити без змін. Програма повинна зберігати регістр: великі літери повинні залишатися великими; малі літери повинні залишатися малими. Після виведення зашифрованого тексту слід надрукувати новий рядок. Потім програма повинна закінчити своє виконання, повернувши 0 з main. Основні етапи роботи: Обмірковування завдання Розробка алгоритма програми Реалізування діаграми діяльності Написання кода Тестування коду Здача коду у CS50 Gradebook Діаграма діяльності Результати роботи програми: Скріншот № 4 Скріншот № 5 ВисновокУ ході підготовки до цієї роботи було вивчено масиви, функції, аргументи командного рядка та розширенні знання у можливості використання типу даних string та функції з бібліотеки Додаток А#include #include #include #include void Grade(string str); int main(void) { string str; str = get_string("Enter text - "); Grade(str); } void Grade(string str) { int Lcount = 0; int Wcount = 0; int Scount = 0; float Grade = 0; for (int i = 0; i < strlen(str); i++) { if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) { Lcount++; } else if (str[i] == ' ') { Wcount++; } else if (str[i] == '.' || str[i] == '?' || str[i] == '!') { Scount++; } } Wcount++; Grade = 0.0588 * 100 * (float)Lcount / (float)Wcount - 0.296 * 100 * (float)Scount / (float)Wcount - 15.8; if (Grade < 16 && Grade >= 0) { printf("Grade %i\n", (int)round(Grade)); } else if (Grade >= 16) { printf("Grade 16+\n"); } else { printf("Before Grade 1\n"); } } Додаток Б#include #include #include #include #include void upplow(string key, char c); void Substitute(string key); int main(int strC, string str[]) { if (strC == 2)//Количество комманд { if (strlen(str[1]) == 26)//Длина введёного ключа { for (int i = 0; i < strlen(str[1]); i++)//Проверка каждого елемнта из ключа { if (!isalpha(str[1][i]))//Если не является буквой { printf("Ключ должен состоять из 26 букв\n"); return 1; } for (int j = i + 1; j < strlen(str[1]); j++)//Проверка на повторение { if (toupper(str[1][i]) == toupper(str[1][j])) { printf("Ключ не должен сожддержать повторяющиеся символы\n"); return 1; } } } Substitute(str[1]);//Замена } else { printf("Ключ должен состоять из 26 букв\n"); return 1; } } else { printf("Неверный ввод ключа\n"); return 1; } return 0; } void upplow(string key, char c)//Проверка кажого елемнта на соответсвие с алфавитом { string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //массив алфавит for (int i = 0; i < strlen(alphabet); i++) { if (isupper(c)) { if (c == toupper(alphabet[i])) { printf("%c", toupper(key[i])); } } else { if (c == tolower(alphabet[i])) { printf("%c", tolower(key[i])); } } } } void Substitute(string key) { string str; char x; str = get_string("plaintext: "); printf("ciphertext: "); for (int i = 0; i < strlen(str); i++) { x = str[i]; if (isalpha(x))//Является ли буквой { if (isupper(x)) { upplow(key, toupper(x)); } else { upplow(key, tolower(x)); } } else { printf("%c", x);//Печать каждого елемента } } printf("\n"); } |