JavaRush /Java блог /Random UA /Гарвард CS50: завдання другого тижня (лекції 5 та 6)
Masha
41 рівень

Гарвард CS50: завдання другого тижня (лекції 5 та 6)

Стаття з групи Random UA
cs50 завдання до лекцій 5 та 6 Лекції CS50 лежать тут: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngcs50.html . У цьому матеріалі - 3 завдання, теоретичні відомості до них та керівництво до дії.

Цілі

• Поглибитись у функції та бібліотеки • Познайомитись з криптографією, реалізувати пару простих шифрів

Додаткові матеріали

https://reference.cs50.net/ — роз'яснення функцій бібліотек під час навчання. Англійською. http://computer.howstuffworks.com/c.htm стор 11 – 14 та 39

Підготовка

Залогіньтесь на cs50.io, update50 щоб переконатися в актуальності версії вашого робочого простору. Якщо ви випадково закрабо термінальне вікно, зайдіть у меню View і переконайтеся, що навпроти пункту Console стоїть галочка (поставте її, якщо це не так). Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 1 Клацніть на(+), всередині зеленого кола на рамці термінального вікна, виберіть New Terminal . Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 2 Створіть робочу директорію: mkdir ~/workspace/pset2 Зверніть увагу: між mkdir та ~/workspace/pset2 є пробіл. Нагадаємо, ~ означає кореневий каталог, ~/workspace - папка, звана робочим простором, знаходиться всередині кореневого каталогу, ~/workspace/pset2 - директорія на ім'яpset2 всередині ~/workspace . Тепер виконайте: cd ~/workspace/pset2 щоб перейти до нової директорії. Командний рядок виглядає приблизно так: username:~/workspace/pset2 $ Якщо щось не так, повторіть кроки. Також можете викликати команду history , щоб переглянути останні кілька команд у хронологічному порядку. Також ви можете, встановивши курсор на командний рядок і натискаючи стрілку вгору на клавіатурі, переглядати всі команди в порядку від останньої, введеної до першої. За допомогою кнопки вниз ви можете йти назад. До речі, замість того, щоб щоразу набирати ті самі команди, ви можете прокручувати вже набрані команди і виконувати їх знову, натискаючи на Enter. Ви могли помітити, що Девід робить саме так. Завдання другого тижня потрібно зберігати в pset2 .

Завдання 0. Ініціалізація

Ознайомимось із рядками ближче. У файлі initials.c напишіть програму, яка запитує ім'я користувача (за допомогою функції GetString отримуємо ім'я у вигляді рядка) і потім виводить перші літери імені (або імен) та прізвища у верхньому регістрі без пробілів, точок та інших знаків тільки з перекладом рядка ( \n ). Припускаємо, що користувачі вводять виключно літери (у нижньому або верхньому регістрі, або обох відразу) плюс по одному пропуску між словами. Вважайте, що хлопці з іменами Joseph Gordon-Levitt, Conan O'Brien або David J. Malan не користуватимуться програмою. Для перевірки коректності роботи програми викликайте check50 Хочете погратися з реалізацією програми, підготовленої співробітниками CS50? Набирайте рядок: username:~/workspace/pset2 $ ./initials Zamyla Chan ZC username:~/workspace/pset2 $ ./initials robert thomas bowden RTBcheck50 2015.fall.pset2.initials initials.c~cs50/pset2/initials
Криптографія
Криптографія, наука про шифрування та дешифрування інформації... Насправді зашифровані послання існують з давніх-давен, і використовувалися арміями для передачі секретних повідомлень. Ну і зараз ваші паролі у Facebook та інших мережах зберігаються у зашифрованому вигляді.

Завдання 1. Аве, Цезарю!

Теоретичні відомості
Ми вивчимо один із найпростіших шифрів – шифр Цезаря, названий на честь римського імператора. У цьому шифрі кожна літера тексту замінюється іншою, яка знаходиться на фіксоване число букв нижче в алфавіті. Це фіксоване число букв називається ключем . Так, ключ 1 переводить букву латиниці C букву D, а Z — по циклу в A. Якщо ключ 3, то буква C перейде F, а Z — C. Приклади: використовуємо шифр Цезаря з ключем 5 на слові cat. c -> h a -> f t -> y Caesar (cat, 5) = hfy Ключ = 7, слово = комп'ютер c->j o->v m->t p->w u->b t->a e->l r->y Caesar(computer,7) = jvtwbaly Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 3 Шифр Цезаря простий, але, на жаль, ненадійний (це взаємопов'язані речі!): Для англійського алфавіту - всього 25 варіантів шифрування, перебрати всі варіанти легко навіть без комп'ютера. Тим не менш, шифр Цезаря часто використовують як крок в інших шифрах, таких як шифр Віженера (про нього - в наступному пункті). "Математизуємо" шифр Цезаря. Позначимо незашифрований текст літерою p, pi — літера у тексті p, що знаходиться на позиції з номером i. Назвемо секретний ключ літерою k, з — зашифрований текст, а ci — літера у шифрованому тексті, що знаходиться на позиції i. Тоді обчислити кожну букву шифру можна за такою формулою: ci = (pi + k) % 26 Звикайте до такої формалізації, вона дозволяє програмувати алгоритм і висловлює сенс шифру точно та стисло. Якщо ключ k = 13 а початковий текст p - "Be sure to drink your Ovaltine!", Ось який шифр ми отримаємо: Зверніть Or fher gb qevax lbhe Binygvar! увагу, O (перша буква в шифрованому тексті) зміщена на 13 позицій від букви B (перша буква в оригінальному тексті ). Те саме з літерою r (друга літера в шифруванні) зміщена на 13 літер від e (друга літера в оригіналі). Третя літера в шифруванні, f, зміщена на 13 літер від s (третя в оригіналі), тут ходимо по колу від z до a. Шифр Цезаря з ключем 13 має спеціальну назву ROT13 . Він симетричний: застосувавши його двічі, ми повернемось до первісного тексту. Звичайно, є ще й ROT26, цей взагалі супер-сек'юрний, але тільки якщо ви нечітко висловлюєте свої думки.
Умова
Написати у файлі caesar.c програму, що шифрує текст за допомогою шифру Цезаря. На вхід програми подавайте один аргумент командного рядка: негативне ціле число. Для простоти назвемо його k. Якщо користувач виконує програму без аргументів командного рядка або більше, ніж з одним аргументом, програма повинна обуритися і повернути значення 1 (зазвичай так позначають помилки): return 1; У всіх інших випадках програма запитує користувача, який потрібно зашифрувати, потім виводить на екран текст, зашифрований ключем k (тобто зміщений на k позицій вправо по циклу). Якщо текст містить символи, що виходять за межі англійського алфавіту, їх програма не змінює. Після виведення шифрованого тексту, програма завершує роботу, main повертає 0: return 0; Якщоmainне повертає нуль явно, він повертається автоматично (насправді int - тип, що повертається main, але про це іншим разом). Відповідно до конвенції (правил хорошого тону в програмуванні), якщо ви явно повертаєте 1 щоб вказати на помилку, то потрібно повернути і 0 як вказівник на успішне завершення роботи програми. Хоча в англійському алфавіті тільки 26 літер, k може бути і більше 26. По суті, ключ k = 27 дасть той же результат, що і k = 1, але потрібно дозволити користувачеві вводити будь-яке невід'ємне число, що не перевищує 2^31 – 26 ( воно має поміститися в int). Програма також повинна враховувати, що малі літери шифруються малими, а великі - великими. З чого починаємо? Оскільки програма має прийняти значення k безпосередньо в рядку аргументів, заголовок функції main у нас має такий вигляд: int main(int argc, string argv[]) З шостої лекції ви знаєте, що argv це масив рядків. Масив можна уявити, як ряд шафок-осередків у спортзалі. У кожному їх приховано деяке значення. У нашому випадку, всередині кожного осередку лежить аргумент типу string Щоб відкрити першу шафку, використовуємо argv [0], другий - argv [1] і так далі. Якщо ми маємо n замків, нам потрібно зупинитися на argv[n - 1], оскільки argv[n] вже немає (чи існує, але належить комусь ще, нам краще його чіпати). Таким чином, ви можете отримати доступ до аргументу k наступним чином: string k = argv[1]; Ми вважаємо, що там справді щось є! Нагадаємо, argc - змінна типу int, що дорівнює кількості рядків argv. Значить, краще перевірити значення argc перш, ніж намагатися відкрити комірку, адже може статися, що її немає. В ідеалі argc=2. Чому так? Всередині argv[0] зазвичай міститься ім'я програми. Тобто, argc завжди не менше 1. Але нашій програмі потрібно, щоб користувач надав аргумент командного рядка k, отже, argc = 2. Звичайно, якщо користувач у командному рядку введе більше одного аргументу, argc також підростає і може бути більшим, ніж 2 Якщо користувач вводить ціле число в рядок, це ще не означає, що внесене значення автоматично буде збережено в тип int. Точніше, воно не буде. Воно буде string, навіть якщо виглядає точнісінько, як int! Тому нам потрібно конвертувати string в int самостійно. На щастя, існує функція atoi, створена з цією метою. Її синтаксис: int k = atoi(argv[1]); Зверніть увагу: k має тип int, тому можна з ним провернути арифметичні дії. З цією функцією не потрібно турбуватися, чи введе користувач ціле число, або, скажімо, foo: у такому випадку atoi поверне 0. Функція atoi оголошена в бібліотеці stdlib.h , тому не забудьте прописати її директивою #include на початку програми. Код і без цього скомпілюється, оскільки ми вже включабо цю функцію до бібліотеки cs50.h. Проте краще довіряти нативним бібліотекам. Отже, ви отримали k збережене як int. Тепер запитаємо на введення тексту. Якщо ви робабо завдання першого тижня, вже знайомі з функцією бібліотеки CS50, яка називається GetString. Вона нам і допоможе. Після того, як ви отримали k і початковий текст, приступимо до шифрування. Нагадаємо, ви можете пройтися по всіх символах рядка і надрукувати їх за допомогою наступного циклу: for (int i = 0, n = strlen(p); i < n; i++) { printf("%c", p[i]); } Іншими словами, так само, як argv - масив рядків, stringє масивом символів. Тому ми можемо використовувати квадратні дужки для доступу до окремих елементів рядка так само, як отримувати окремі рядки в argv. Звичайно, немає нічого криптографічного у друку кожного із символів. Або, технічно, коли k = 0. Але ж ми повинні допомогти Цезарю зашифрувати його текст! Аве, Цезарю! Щоб використати strlen, потрібно підключити ще одну бібліотеку . Оскільки ми автоматизуємо деякі перевірочні тести, програма повинна поводитися рівно таким чином: username:~/workspace/pset2 $ ./caesar 13 Be sure to drink your Ovaltine! Or fher gb qevax lbhe Binygvar! Крім atoi , ви можете знайти інші класні функції в бібліотеках ctype.h і stdlib.h . Для цього перейдіть за посиланням і поріться там небагато. Наприклад, isdigit - явно щось цікаве =). Коли переходите від Z до A (або від z до a), не забувайте про оператора поділу по модулю % у мові С. Також вивчіть таблицю , вона показує символи ASCII як літер. Щоб перевірити правильність роботи програми з check50 , виконайте наступне: check50 2015.fall.pset2.caesar caesar.c А якщо вам цікаво пограти з кодом, зробленим співробітниками СS50, виконайте команду: ~cs50/pset2/caesar До речі, uggc://jjj.lbhghor.pbz/jngpu?i=bUt5FWLEUN0 .
Розбір завдання
  1. Отримати ключ
  2. Отримати текст
  3. Зашифрувати
  4. Вивести на екран зашифроване повідомлення
1. Формуємо функцію main так, щоб користувач вводив ключ у командному рядку та перевіряємо ключ на коректність. int main(int argc, string argv[]) argc: • int • кількість аргументів, введених у командний рядок • якщо argc = 2 всі прибл. Якщо ні, виводимо інструкцію та закриваємо програму. • Якщо argc = 2 перевіряємо, чи є ключ цілим • Argv - це масив рядків, список з введеними в нього аргументами Масив - структура даних, що містить різні дані одного типу в різних осередках. Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 4 Наприклад, користувач ввів рядок blastoff Team Rocket, тоді: Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 5 Перекладаємо за допомогою функції atoi() отримане ціле число. Якщо неможливо, функція поверне 0. Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 6 2. Запит у користувача тексту. Це просто: все, що вводить користувач є рядком. 3. Шифрування. Алгоритм простий, але як пояснити комп'ютеру, які букви йдуть одна за одною? Саме час згадати таблицю ASCII! Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 7 Однак у рядку можуть бути не лише літери… Перш ніж перейти до зміни рядків, уявіть, що потрібно змінити лише один символ. Ми хочемо змінити літери з початкового тексту, а чи не знаки чи цифри. Що ми повинні зробити? Спочатку нам потрібно перевірити, чи є цей символ в алфавіті. Це можна зробити за допомогою функції isalpha() . Якщо символ входить до алфавіту, ця функція повертає значення true та false у всіх інших випадках. Ще дві корисні функції - isupper () та islower ()повертають true у випадку, якщо літера велика або мала відповідно. Таким чином: Isalpha(‘Z’) -> true Isalpha(‘;’) -> false Isupper(‘Z’) ->true Isupper(‘z’) -> false Islower(‘Z’) -> false Islower(‘z’)->true Якщо isalpha повертає true, нам потрібно змінити цей символ за допомогою ключа. Розглянемо і розберемо як приклад програму Замілі, помічника CS50. Вас може здивувати, чому 'A' це ціле число, тоді як вона явно є буквою. Виявляється символи та цілі числа – взаємозамінні. Поставивши букву A одиночні лапки можна отримати її ASCII-код в int. Будьте уважні: вам потрібні саме одинарні лапки, без них компілятор шукатиме змінну на ім'я A, а не символ. Потім у рядку /* * asciimath.c * by Zamyla Chan * * Calculates the addition of a char and an integer, * and displays both the resultant character and its * ASCII value. * * Usage: ./asciimath key [char] * */ #include #include #include int main(int argc, string argv[]) { if (argc != 2) { printf("print the key next time \n"); return 1; } // key is the second command line argument int key = atoi(argv[1]); //преобразование строки в int int letter = 'A'; printf("\nCalculating '%c' + %d...\n", letter, key); int result = (letter + key); printf("The ASCII value of %c is %d.\n\n", result, result); return 0; } int result = (letter + key); ми додаємо значення ключа до ASCII-коду літери та зберігаємо їх у змінній цілого типу. Навіть якщо результат має тип int, оператор printf використовує плейсхолдер %с для символів. Таким чином, програма друкує символ, пов'язаний з цілим результатом. У другому випадку ми виводимо на екран число за допомогою плейс-холдера %d. Ви можете ввести цей код у сs50 IDE і грати з ним. Перевіримо роботу asciimath для різних ключів. Візьмемо значення 25, побачимо наступну картинку: Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 8 А тепер нехай ключ буде 26: Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 9 Ми отримали [, а зовсім не букву A. Це просто наступний символ ASCII після Z. Так що простий додаток ключа не працюватиме. Нам потрібно використовувати формулу шифру, щоб повертатися на початок алфавіту як тільки літери закінчаться. Пам'ятайте, ми вже писали вище: ci = (pi + k) % 26 Де ci — літера номер i у шифрованому тексті, pi — літера номер i у незашифрованому тексті, k — ключ, а %26 — залишок від поділу на 26 (або поділ за модулем 26). Давайте застосуємо цю формулу для літери Y. Візьмемо k = 2. Порахуємо ('Y' + 2) %26 ASCII-код літери 'Y'= 89. Тоді ('Y' + 2) %26 = (89 + 2)% 26 = 91%26 = 13 Але це зовсім не ASCII-значення потрібної нам літери A, яке дорівнює 65. Тепер давайте надамо кожній літері алфавіту значення від 0 до 25 по порядку. У такому разі Y = 24. (24+2)%26 = 0 Літера А якраз має такий індекс. Таким чином, ця формула відноситься до алфавітного індексу букв, а не їх ASCII значень. Для друку зашифрованого символу вам потрібно буде його значення ASCII. І розберіться з тим, як перемикатися між значенням ASCII і номером в алфавіті. Після того, як ми з'ясували формулу для одного символу, Необхідно застосувати її для кожної літери у рядку, що вводиться з клавіатури. Але лише якщо це букви! І пам'ятайте, для великих і малих літер потрібні різні значення. Тут знадобляться функції isupper і islower. У вас може бути дві формули, одна для великих букв, інша для малих, функції допоможуть вибрати, яку з них застосувати. Як застосувати формулу до кожного окремого символу у рядку? Пам'ятаємо, що рядок це просто масив символів. Визначити кількість ітерацій у циклі допоможе функція Як застосувати формулу до кожного окремого символу у рядку? Пам'ятаємо, що рядок це просто масив символів. Визначити кількість ітерацій у циклі допоможе функція Як застосувати формулу до кожного окремого символу у рядку? Пам'ятаємо, що рядок це просто масив символів. Визначити кількість ітерацій у циклі допоможе функціяstrlen (довжина рядка). Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 10

Завдання 2. Parlez-vous français?

Теорія
Шифр Віженера дещо безпечніший за шифр Цезаря: як ключ у ньому використовується слово і його складно зламати вручну за допомогою одного тільки частотного аналізу або перебору. Кожна буква ключа генерує число, і в результаті ми отримуємо кілька ключів для зсуву букв. Приклад: p = Meet me in the park at eleven am В качестве ключевого слова возьмем k = bacon Длина повідомлення p = 25 В то время як длина k = 5 Поэтому его нужно повторять 5 раз. Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 11 Якщо число літер у повідомленні не ділиться на ключ націло, ми в останньому застосуванні ключа використовуємо лише його частину: Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 12 Щоб знайти значення для усунення, використовуємо позиції кожної літери нашого ключа bacon в алфавіті (від a до z). Вважаємо з нуля, як справжні програмісти. І кожну букву в оригінальному тексті зміщуємо на задане число, як у шифрі Цезаря, повертаючись за потреби після Z на початок алфавіту. Таким чином, M зміститься на 1, перша e взагалі не зміститься, а друга зміститься на 2 позиції. Нижче ви бачите початкове повідомлення, розписаний ключ та результат його застосування. Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 13 Шифр Віженера, звичайно, надійніший, але якщо ви знаєте довжину ключа, його зламати досить просто. Як її виявити? Якщо оригінальний текст досить довгий, щоб деякі слова зустрічалися в ньому кілька разів, ви побачите деякі повторення: Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 14 Також можна використовувати повний перебір, але варіантів чимало: 26 n - 1 де n - Довжина невідомого ключа. Але зазвичай це багато. Щоправда, для комп'ютера це проблема. А тепер математика шифру: Нехай р – деякий текст, k – ключове слово, kj – j-я літера ключа, pi – літера під номером i в оригінальному тексті, ci – літера під номером i у шифруванні. Тоді: ci = (pi + kj) % 26
Завдання
Умова Написати програму vigenere.c, яка шифрує повідомлення за допомогою шифру Віженера. На вхід програми подаємо один аргумент командного рядка: ключове слово k, що складається з літер англійської абетки. Якщо програма запускається більш ніж з одним аргументом або з аргументом, що не входить до алфавіту, потрібно вивести інформацію про помилку із завершенням програми. Тобто main повертатиме 1 — у такому разі наші автоматичні тести зрозуміють, що тут все добре, і ця умова врахована. Якщо все добре, програма повинна перейти до запиту рядка тексту p, який ми і шифруємо отриманим ключем k, надрукувати результат і завершити виконання програми, повернувши значення 0. Уточнення Потрібно зробити так, щоб у ключі k символи A та a позначалися як 0, B та b як 1, ..., Z та z як 25. Програма повинна застосовувати шифр Віженера лише до літер тексту p. Інші символи (цифри, розділові знаки, пробіли) потрібно вивести без змін. Якщо алгоритм має намір застосувати j-й символ k до i-го символу p , що не входить до алфавіту, застосовуємо цей j-й символ ключа до наступного алфавітного символу в тексті; ви не можете просто залишити його і перейти до іншого символу в k. Нарешті, програма повинна зберегти регістр кожної літери p .
Не знаєте з чого почати?
Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 15
Ось вам кілька порад від Замілі, помічника курсу CS50
На щастя, програма дуже схожа на шифр Цезаря, тільки як ключ використовується не ціле число, а рядок. Якщо ви успішно реалізували шифр імені римського імператора, він може стати чудовим стартом для реалізації другого завдання. Ви, мабуть, уже зрозуміли, що шифр Віженера з однією літерою як ключ — це той самий шифр Цезаря. В алгоритмі Віженера застосовуються ті самі кроки, що й у «Цезарі»:
  1. Отримати ключ
    • кодове слово - це другий аргумент командного рядка argv[1]
    • повинен входити до алфавіту: функція isalpha
  2. Отримати текст
  3. Зашифрувати
  4. Друкувати шифрований текст
Отже, другий аргумент командного рядка argv[1] перевіримо на приналежність до символів алфавіту. Робимо це за допомогою вже знайомої isalpha . Якщо ключ коректний, отримуємо від користувача рядок і починаємо шифрувати. Формула шифру Віженера схожа на формулу шифру Цезаря. Як ви перетворюєте літеру на відповідне усунення шифру? Спробуйте порівняти значення таблиці ASCII. Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 16 Швидше за все, вам вдасться знайти закономірність між літерами та їх алфавітними індексами використовуючи послідовності в таблиці. Здогадалися, як відібрати одну літеру від іншої, щоб отримати бажаний результат? Зміщення для великих і малих букв однакові, так що вам доведеться визначити дві схожі формули для визначення зсуву для малих і окремо для великих букв. Також не забудьте, що цикл проходу по тексту має ігнорувати символи, що не входять до англійського алфавіту. І не забудьте зберегти регістр літер. Якщо подивитися на формулу шифру: ci = (pi + kj) % 26 ви побачите дві індексні змінні, i та j. Одна зберігає позицію у вихідному тексті, інша – у ключі. Якщо ваш текст довший за ключ, індекс по ключу проходить з кінця ключа знову в його початок. Як це зробити? За допомогою операції поділу за модулем! Результат операції - залишок від розподілу двох чисел. Практична користь цієї операції у програмуванні просто величезна! Уявіть, що численну групу людей потрібно поділити на три підгрупи. Один із способів це зробити — попросити їх розрахуватися на перший-другий-третій. Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 17 Тобто перша людина належить до першої групи, друга — до другої, третьої — до третьої, четверта — знову до першої і так далі. Ви можете використовувати поділ по модулю, щоб зробити цю ж операцію. Пронумеруємо ті ж три групи з нуля. Ось як це робиться: Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 18 Якщо ви візьмете індекс і поділіть його за модулем максимального значення, отриманий результат ніколи не буде більшим або дорівнює цьому значенню. Спробуйте застосувати цей принцип для повернення ключового слова на початок! Тільки замість сортування груп вам потрібен індекс ключового слова, щоб ви могли правильну букву для зміщення, не виходячи за довжину ключа. Оскільки ми автоматизуємо деякі тести вашого коду, програма повинна поводитися так, як показано нижче: jharvard@appliance (~/Dropbox/pset2): ./vigenere bacon Meet me at the park at eleven am Negh zf av huf pcfx bt gzrwep oz Як ще можна протестувати програму, крім ручного обчислення зашифрованого тексту? Ми добрі: для цього ми написали програму devigenere. Вона приймає один і лише один аргумент командного рядка (ключове слово), а її робота полягає в тому, щоб прийняти зашифрований текст як вхідні дані і повернути звичайний. Запустіть її: ~cs50/pset2/devigenere k Де k - ключове слово. Якщо ви хочете перевірити правильність вашої програми за допомогою check50, виконайте: check50 2014.fall.pset2.vigenere vigenere.c А якщо хочете оцінити нашу реалізацію vigenere, наберіть: ~cs50/pset2/vigenere

Як підтвердити правильність коду та отримати оцінки

Увага! Якщо вам важливо перевірити тільки правильність завдань, то скористайтеся cs50check. Якщо ж ви ходите отримати оцінки на платформі edx, виконайте процедуру, описану нижче. Майте на увазі, ця процедура для перевірки завдань використовує той же cs50check. Різниця лише в тому, що вона запам'ятовує результати та підраховує загальну оцінку.
  1. Залогіньтесь у CS50 IDE
  2. Поряд з лівим верхнім кутом CS50 IDE там, де розташований її файловий браузер (не в термінальному вікні), клацніть правою клавішею миші по файлу initials.c , що знаходиться в директорії pset2 і натисніть Download . Ви повинні побачити, що браузер завантажив initials.c .
  3. Повторіть caesar.c .
  4. Повторіть для vigenere.c .
  5. В окремому вікні або вкладці введіть CS50 Submit
  6. Клацніть по іконці Submit у верхньому лівому куті екрана. Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 19
  7. У списку папок зліва клацніть по директорії Problem Set 2 , потім натисніть кнопку Upload New Submission . Вона знаходиться праворуч. Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 20
  8. На екрані клікніть по кнопці Add files …. Відкриється вікно вибору файлів із комп'ютера. Гарвард CS50: завдання другого тижня (лекції 5 та 6) - 21
  9. Перейдіть до папки, де ви зберігаєте initials.c . Швидше за все, він знаходиться в папці Downloads ("Завантаження") або там, куди ваш браузер складає стандартні файли. Коли знайдете initials.c , клацніть по ньому один раз, щоб вибрати, потім клацніть Open («Відкрити»).
  10. Натисніть Add files ще раз.
  11. Знайдіть caesar.c і відкрийте його.
  12. Виконайте те саме для файлу vigenere.c .
  13. Натисніть кнопку Start upload. Ваші файли будуть завантажені на сервери CS50 .
  14. На екрані ви повинні побачити вікно No File Selected . Якщо ви переведете курсор миші вліво, ви побачите список файлів, що завантажабося. Для підтвердження клацніть по кожному з них. Якщо ви у чомусь не впевнені, ви можете перезавантажити файли, повторивши ті самі кроки. Ви це можете робити скільки завгодно разів до кінця 2016 року.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ