Архив рубрики: С (Си)
Язык Си: основы Ncurses
NCURSES — это библиотека на языке Си, которая управляет процессом отправки серии байтов через терминал. Это довольно старый подход, но он широко используется даже сейчас, поскольку интернет работает точно так же: интернет пакеты тоже посылаются просто сериями байтов. Так что … Читать далее
Язык C: Проблема «невозможно привязаться к порту» (Windows)
Иногда процесс работы вашей программы может застопориться и вызвать ошибку, подобную этой: Couldn’t bind to the port Итак, у нас есть подобная проверка в коде C: if (bind (socket_desc, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) printf(«Couldn’t bind to the port\n»); И … Читать далее
Язык Си: компиляция и запуск программ в Notepad++
В верхнем меню жмём «Run» и вбиваем… Пример: cmd /c cd «C:\Users\n\Desktop\» && gcc 1.c -o 1.exe && 1.exe В этом примере мы говорим Notepad++: cmd — запустить cmd /c означает закрыть консоль после выполнения программы; можно сделать /k (чтобы … Читать далее
Создаем Makefile для gcc в Visual Studio Code
устанавливаем MinGW (как настроить MinGW — см. мое видео на англ.) устанавливаем Visual Studio Code (VSC) сразу можно VSC интегрировать с Git, чтобы все автоматически синхронизировалось. Для этого просто сделайте репозиторий на Github и клонируйте его в какую-то папку у … Читать далее
Язык Си: проверка правописания по словарю
В конце пятой недели курса CS50 Harvard мы изучили хэш-таблицы, с помощью которых можно решить задачу хэширования слов из текста, чтобы проверить правильность их написания по словарю (speller.c). Дается словарь, в котором на каждой новой строке перечислены слова. В отдельном … Читать далее
Язык Си: наследование группы крови членов семьи
На пятой неделе курса Computer Science — CS50 (Harvard) мы изучили структуры данных и научились обращаться к элементам структур по их адресу. Чтобы выполнить домашнее задание (лабораторная работа 5 — inheritance.c), нужно разобраться в научном принципе наследования группы крови от … Читать далее
Язык Си: простой генератор случайных чисел
Генератор случайных чисел на C при помощи srand() и time(). Srand() является вспомогательной функцией для функции rand(), генерируя семя (seed) начала последовательности (псевдо)случайных чисел. Т.к. время, возвращаемое функцией time() меняется раз в секунду, при вызове этого кода чаще — рандома … Читать далее
Язык Си: восстановить фотографии с карты памяти
Представьте, что вы удалили фотографии с карты памяти, а потом захотели их восстановить. Оказывается, что в некоторых случаях это возможно сделать, ведь когда мы удаляем фото кнопкой «delete», то что происходит на самом деле больше похоже не на удаление, а … Читать далее
Язык Си: фильтр, выделяющий края объектов на изображении
В конце четвертой недели курса CS50 (Harvard) нам выпало интересное задание: сделать программу, которая принимает исходное изображение и накладывает на него фильтр с выделением краев объектов (filter-more). Этот эффект достигается применением оператора Собеля — вокруг каждого исходного пикселя берется сетка … Читать далее
Язык Си: наложить фильтр на изображение
На 4 неделе курса CS50 (Harvard) мы изучили принципы работы с памятью и массивы данных. Перед нами встала задача — написать программу, которая будет накладывать фильтры на исходное изображение (filter-less). Нужно сделать 4 фильтра: черно-белый, сепия, зеркальный и размытие. Исходная … Читать далее
Язык Си: изменить громкость звука файла
На четвертой неделе курса CS50 (Harvard) мы изучили работу с памятью, что поможет выполнить лабу (лабораторную работу) по изменению громкости звука в файле .wav при помощи программы, которая получает исходный файл с музыкой и через командную строку получает значение фактора … Читать далее
Язык Си: адреса и указатели
Пример того, как хранятся адреса в памяти: #include <stdio.h> #include <stdlib.h> int main(void) { int* x = NULL; printf («address of new pointer-type variable x: %p\n», &x); printf («value of variable x: %p\n», x); x = (int*) malloc(sizeof(int)); printf («now … Читать далее
Язык Си: поменять местами переменные
Любопытная фича — как просто поменять местами числовые переменные без буфера при помощи побитовой операции XOR (побитовое исключающее ИЛИ): #include <stdio.h> int main(void) { int a = 3; int b = 5; printf(«a = %d, b = %d\n», a, b); … Читать далее
Язык Си: лаба по сортировке
Продолжаем курс cs50, неделя третья, алгоритмы сортировки. Настало время лабораторки. Она очень простая: скачать тестовый сетап: https://cdn.cs50.net/2021/fall/labs/3/sort.zip внутри архива лежат три уже скомпилированные программы на C: sort1, sort2 и sort3 — это бинарники, т.е. файлы с двоичным кодом, поэтому мы … Читать далее
Язык Си: упражнения на рекурсию
Если что-то не получилось — можно подсмотреть решение. Скорее всего на следующий день вы это решение забудете — так что это упражнение можно снова будет попытаться реализовать. Рекурсия довольно нетипичная для мозгов задача, так что не стесняйтесь повторять одно и … Читать далее
Язык Си: рекурсия и гипотеза Коллатца
Продолжаем проходить курс Computer Science CS50 и язык C. Изучаем рекурсию на примере гипотезы Коллатца — интересной (и простой для понимания) математической проблемы, которая все еще не решена учеными. Гипотеза Коллатца: Возьмем любое положительное целое число Если оно чётное, то … Читать далее
Язык Си: голосование с несколькими турами выборов
На третьей неделе курса Computer Science CS50 (Harvard) предлагается выполнить домашнее задание в Problem Set 3 под названием runoff.c — нужно написать код программы, которая не просто подсчитывает, какой кандидат набрал наибольшее количество голосов, как в прошлый раз, в программе runoff … Читать далее