Архив рубрики: С (Си)
Язык Си: выборы большинством голосов
Начинается третья неделя обучения Computer Science CS50 (Гарвард) и мы продолжаем учить язык C. Первое задание: реализация системы голосования, где выигрывает кандидат, получившей наибольшее количество голосов, т.н. мажоритарная система по большинству или просто «победитель получает все» (plurality.c). Пользователь может выбрать … Читать далее
Язык Си: игра «Эрудит» с другом
На второй неделе обучения по курсу Computer Science CS50 (Harvard) после выполнения всех индивидуальных заданий мы переходим к лабораторной работе по языку C, которую нужно выполнять в группе. Это будет интересная задача — написать код игры «Эрудит» (Scrabble.с). Суть задания: … Читать далее
Язык Си: продвинутое шифрование по-цезарски
Продолжаем выполнять домашние задания из Problem set 2 в курсе Computer science CS50 (Harvard). В прошлый раз мы научились шифровать текст сдвигом букв на некое число (ключ), введенный пользователем. А в этот раз решим задачу посложнее, это будет программа Substitution.c … Читать далее
Язык Си: шифрование текста Цезаря
Продолжаем делать домашние задания по курсу Computer science CS50 (Harvard), и в этот раз нужно написать код программы и зашифровать текстовое послание. Суть задания ceasar.c заключается в том, чтобы программа запрашивала ввод текста пользователя, а затем выводила ниже строку текста … Читать далее
Язык Си: расчет уровня сложности текста по индексу Колман-Лиау
Продолжаем проходить курс Computer Science CS50 (Harvard), и в этот раз будем делать задание на расчет уровня сложности текста по индексу Колман-Лиау (readability.c) на языке программирования C. Согласно идее двух авторов метода, можно оценить сложность текста и таким образом распределить … Читать далее
Язык Си: проверка номера кредитной карты по алгоритму Луна
В курсе cs50 (Гарвард) есть задача по программированию на Си по выявлению правильности номера кредитной карты через алгоритм Луна (credit.c). Разберем эту задачку и покажем два варианта еще решения. Итак. На любой кредитке напечатан номер, который также хранится в базе … Читать далее
Язык Си: сколько монет дает кассир
Изучая жадные алгоритмы (Greedy Algorithms) на языке программирования C в CS50 (Гарвард), давайте решим задачу про монеты (Cash.c). Допустим, что вам нужно дать сдачу покупателю в магазине и вы хотите свести к минимуму количество монет, которые вы выдаете каждому покупателю. … Читать далее
Язык Си: рисуем пирамидку из Mario
Любопытная задачка для новичков из CS50 (Гарвард). Задача: нарисовать пирамидку из игры Марио (mario-less.c) при помощи символов # (решетка или хэш). Пользователя спрашивают: «Из скольких блоков сделать пирамиду?», он вводит число и пирамидка рисуется, с выравниванием по правому краю, вот … Читать далее
Язык C: примеры неявного преобразования типов
Одна из самых жестких вещей в языке C— это неявное преобразование типов. Если вы не будете следить за этим — у вас будут большие проблемы. Попробуйте запустить этот код, чтобы узреть возможные траблы: #include <stdio.h> int main (void) { int … Читать далее
[Язык C] Арифметические прогрессии и MMORPG
Я заядлый игрок в MMORPG и для меня изучение программирования становится намного веселее и интереснее, если у написанных программ есть какая-то привязка к играм. Это особенно важно, если речь идет о каких-то абстрактных математических вещах, которые мне (гуманитарию) весьма непросто воспринимать. … Читать далее
[Язык C] Приоритет операций
Как мне кажется, более удачно отформатировал приоритеты операций K&R: → ( ) [ ] -> . ← ! ~ ++ – – + – * & (type) sizeof → * / % → + — → << >> … Читать далее
[Язык C] Функция memcpy ()
Помню, что когда я увидел первый раз в коде функцию memcpy () — не понял, что это за неведомая зверушка. Никто и думать не думал написать комментарий, который ее объясняет (не, ну потом понимаешь, что эт логично.. не писать же … Читать далее
[Язык C] Символьный ввод-вывод и перенаправление (глава 8)
Восьмая глава в книжке Стивена Прата “C Primer Plus” (в новой редакции она называется «Символьный ввод-вывод и проверка достоверности ввода«). EOF (end of file) — обозначение конца файла. Ctrl+Z в Windows, Ctrl+D в UNIX. Пользователи особо не задумываются о том, … Читать далее
[Язык C] Коварные символы новой строки на вводе
При выполнении последнего упражнения в главе 7, столкнулся с проблемой считывания строки ввода, если в ней встречается перевод строки. Везде это объясняется несколько заумно, попробую на пальцах: Проблема в том, что когда вы вводите с клавиатуры в scanf любой ввод … Читать далее
[Язык C] Перенос строки оператора printf
Подзабыл, как правильно «резать» длинные куски printf, поэтому решил написать эту шпаргалку. Допустим у вас длиннющее выражение printf и нужно его разбить на несколько небольших для удобочитаемости (или чтобы влезало при встраивании на сайт, например). Есть три способа:
[Язык C] Ввод симола в scanf (%d): ошибка бесконечного цикла
При выполнении заданий из седьмой главы, впервые столкнулся с «защемлением цикла«. Допустим пользователь вводит символ q в поле (не делайте так, если у вас нет возможности прервать программу): #include <stdio.h> int main (void) { int n; scanf(«%d», &n); while (n … Читать далее
[Язык C] Упражнения по программированию (глава 7)
Задания из седьмой главы книжки Стивена Прата “C Primer Plus” — «Управляющие операторы С: ветвление и переходы«. 1. Напишите программу, которая читает входные данные до тех пор, пока не встретится символ #, а затем отображает количество прочитанных пробелов, количество символов … Читать далее