Язык Си: лаба по сортировке

Продолжаем курс cs50, неделя третья, алгоритмы сортировки. Настало время лабораторки. Она очень простая:

  • скачать тестовый сетап: https://cdn.cs50.net/2021/fall/labs/3/sort.zip
  • внутри архива лежат три уже скомпилированные программы на C: sort1, sort2 и sort3 — это бинарники, т.е. файлы с двоичным кодом, поэтому мы не можем просмотреть их исходный код на C.
  • каждая из этих программ работает по одному из алгоритмов сортировки: сортировка выбором (selection sort), пузырьковая сортировка (bubble sort) или сортировка слиянием (merge sort). В каком файле какая — мы не знаем. Наша задача — определить, какой алгоритм сортировки используется в каждом бинарнике.

Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: упражнения на рекурсию

Если что-то не получилось — можно подсмотреть решение. Скорее всего на следующий день вы это решение забудете — так что это упражнение можно снова будет попытаться реализовать. Рекурсия довольно нетипичная для мозгов задача, так что не стесняйтесь повторять одно и тоже упражнение несколько раз. Варианты решений есть снизу.

  1. печать чисел от 1 до n
  2. печать четных/нечетных чисел до n
  3. возведение n в степень
  4. печать n! (факториал — произведение чисел до n)
  5. печать суммы чисел от n до m
  6. печать чисел Фибоначчи (каждое следующее — сумма двух предыдущих)
  7. печать чисел Коллатца (чётное: n/2; нечетное: n*3+1)
  8. копирования строки из одной в другую
  9. печать элементов массива
  10. печать строки наоборот
  11. конвертация десятичного числа в двоичное
  12. бинарный поиск
  13. сортировка «пузырьком»
  14. сортировка слиянием

Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: рекурсия и гипотеза Коллатца

Продолжаем проходить курс Computer Science CS50 и язык C. Изучаем рекурсию на примере гипотезы Коллатца — интересной (и простой для понимания) математической проблемы, которая все еще не решена учеными.

Гипотеза Коллатца:

  1. Возьмем любое положительное целое число
  2. Если оно чётное, то поделим его на 2
  3. Если нечётное, то  умножаем на 3 и прибавляем 1 (получаем n * 3 + 1).
  4. Далее полученное число снова оцениваем — четное оно или нет и снова  выполняем те же самые действия, до тех пор, пока не получим 1.

Итого, суть гипотезы Коллатца в том, что абсолютно любое число при применении к нему этих двух простых операций рано или поздно превратится в 1. Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: голосование с несколькими турами выборов

На третьей неделе курса Computer Science CS50 (Harvard) предлагается выполнить домашнее задание в Problem Set 3 под названием runoff.c — нужно написать код программы, которая не просто подсчитывает, какой кандидат набрал наибольшее количество голосов, как в прошлый раз, в программе runoff нужно реализовать голосование до набора более 50% голосов всех избирателей.

Победитель будет объявлен только тогда, когда один из кандидатов наберет более половины голосов. Чтобы это можно было сделать, каждый голосующий ранжирует всех кандидатов от наибольшего предпочтения (ранг 1) до наименьшего (последний ранг). Далее подсчитывается сумма голосов в первом туре (ранг 1). Если кто-то из кандидатов наберет на этом этапе более 50% голосов, его объявляют победителем. Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: выборы большинством голосов

Начинается третья неделя обучения Computer Science CS50 (Гарвард) и мы продолжаем учить язык C. Первое задание: реализация системы голосования, где выигрывает кандидат, получившей наибольшее количество голосов, т.н. мажоритарная система по большинству или просто «победитель получает все» (plurality.c). Пользователь может выбрать из списка кандидатов одного и проголосовать за него. При подсчете голосов, кандидат, набравший наибольшее количество голосов, объявляется победителем выборов.

Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: игра «Эрудит» с другом

На второй неделе обучения по курсу Computer Science CS50 (Harvard) после выполнения всех индивидуальных заданий мы переходим к лабораторной работе по языку C, которую нужно выполнять в группе. Это будет интересная задача — написать код игры «Эрудит» (Scrabble.с). Суть задания: игроки придумывают слова, которые набирают разное количество очков в зависимости от букв в этом слове, при этом каждой букве приписывается разное количество очков от 1 до 10 и затем эти очки складываются (сумма очков букв дает общее количество очков в слове).

Для этой задачи используется следующая таблица соответствий букв и баллов:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 3 3 2 1 4 2 4 1 8 5 1 3 1 1 3 10 1 1 1 1 4 4 8 4 10

Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: продвинутое шифрование по-цезарски

Продолжаем выполнять домашние задания из Problem set 2 в курсе Computer science CS50 (Harvard). В прошлый раз мы научились шифровать текст сдвигом букв на некое число (ключ), введенный пользователем. А в этот раз решим задачу посложнее, это будет программа Substitution.c и в ней тоже происходит шифрование текста путем замены одних букв на другие по принципу, который вводит пользователь в командной строке при запуске программы. Этот принцип выглядит как строка букв алфавита, расположенных в измененном порядке, так в примере:

$ ./substitution JTREKYAVOGDXPSNCUIZLFBMWHQ
plaintext:  HELLO
ciphertext: VKXXN

Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: шифрование текста Цезаря

Продолжаем делать домашние задания по курсу Computer science CS50 (Harvard), и в этот раз нужно написать код программы и зашифровать текстовое послание.

Суть задания ceasar.c заключается в том, чтобы программа запрашивала ввод текста пользователя, а затем выводила ниже строку текста в зашифрованном виде с ключом пользователя. Ключ же указывается при запуске программы в командной строке после называния самой программы argv[]. Так в примере запуска готовой программы пользователь вводит ключ = 13 и свой текст «Hello, world!», а на выходе получает этот текст в виде шифра:

Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: расчет уровня сложности текста по индексу Колман-Лиау

Продолжаем проходить курс Computer Science CS50 (Harvard), и в этот раз будем делать задание на расчет уровня сложности текста по индексу Колман-Лиау (readability.c) на языке программирования C. Согласно идее двух авторов метода, можно оценить сложность текста и таким образом распределить книги по классам школы (от простых текстов, где индекс меньше 1, до академически сложных с индексом более 16). Расчет идет по формуле: 

index = 0.0588 * L - 0.296 * S - 15.8 ,
где L — среднее количество букв на 100 слов в тексте,
 S — среднее количество предложений на 100 слов в тексте. Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: проверка номера кредитной карты по алгоритму Луна

В курсе cs50 (Гарвард) есть задача по программированию на Си по выявлению правильности номера кредитной карты через алгоритм Луна (credit.c). Разберем эту задачку и покажем два варианта еще решения.

Итак. На любой кредитке напечатан номер, который также хранится в базе данных банка, выдавшего карту. Номера кредиток генерируются таким образом, что у них есть некоторая «контрольная сумма» — математическое соотношение между по крайней мере одним числом и другими. Эта контрольная сумма позволяет быстро провести первоначальную проверку и обнаружить опечатки на стороне клиента без необходимости делать запрос к серверу.

Тут-то нам и помогает Алгоритм Луна (создан Гансом Питером Луном из IBM), который позволяет проверить валидность карты таким образом: Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: сколько монет дает кассир

Изучая жадные алгоритмы (Greedy Algorithms) на языке программирования C в CS50 (Гарвард), давайте решим задачу про монеты (Cash.c). Допустим, что вам нужно дать сдачу покупателю в магазине и вы хотите свести к минимуму количество монет, которые вы выдаете каждому покупателю.  Если вы кассир, то у вас в кассе есть монеты (25 центов), десять центов (10 центов), пять центов (5 центов) и пенни (1 цент). Как решить, какие монеты и в каком количестве передать покупателю?

Представьте себе «жадного» кассира, который хочет получить как можно больший кусок от этой проблемы с каждой монетой, которую он достает из ящика. Представим, что вы должны покупателю 42 цента, то самая большая первая монета, которую можно взять, — это 25 центов. Этот выбор сократит сумму, которую нужно отдать, до 17 центов, поскольку 42 — 25 = 17. Получается, что при помощи более мелких монет нам нужно будет решить уже более мелкую задачу. Этот подход от наибольшего к наименьшему даст наименьшее возможное количество монет в сдаче.

Решение (Игроглаз): Читать далее

Рубрика: С (Си) | Оставить комментарий

Язык Си: рисуем пирамидку из Mario

Любопытная задачка для новичков из CS50 (Гарвард).

Задача: нарисовать пирамидку из игры Марио (mario-less.c) при помощи символов # (решетка или хэш). Пользователя спрашивают: «Из скольких блоков сделать пирамиду?», он вводит число и пирамидка рисуется, с выравниванием по правому краю, вот так:

       #
      ##
     ###
    ####
   #####
  ######
 #######

Решение Игроглаза: Читать далее

Рубрика: С (Си) | 1 комментарий

Язык C: примеры неявного преобразования типов

Одна из самых жестких вещей в языке C— это неявное преобразование типов. Если вы не будете следить за этим — у вас будут большие проблемы. Попробуйте запустить этот код, чтобы узреть возможные траблы:

#include <stdio.h>

int main (void)
{
int a = -10;
unsigned int b = 5U;
long int c = a + b; // signed + unsigned

printf ("1) (signed int)a -10 will look as unsigned like this: %u\n", a);

printf ("2) (signed)a(-10) + (unsigned)b(5) = %ld\n", c);

return 0;
}

Приоритеты типов:

bool
 char
  unsigned char
   short int
    unsigned short int
     int
      unsigned int
       long int
        unsigned long int
         long long int
          unsigned long long int
           float
            double
             long double

 

 

Рубрика: С (Си) | Оставить комментарий

Как вставить Google Adsense в дочернюю тему WordPress

Чтобы вставить на сайт Adsense рекламу в дочернюю тему: в function.php добавляем следующий код:

////////////////////////
///Google AdSense:
//
add_action('wp_head', 'wpse_43672_wp_head');
function wpse_43672_wp_head(){
    //Close PHP tags 
    ?>
<script data-ad-client="ca-pub-<цифровой код издателя>" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <?php //Open PHP tags
}
////////////////////////

Не забудьте заменить цифровой код издателя (убрав угловые скобки).

p.s.
Но вообще удобнее вставлять этот код через виджет 🙂

Рубрика: Wordpress | Оставить комментарий

phpBB: добавить баннер в шапку

Как добавить кликабельный адаптивный баннер в шапку форума phpBB без сторонних дырявых плагинов:

  1. Заходим в /styles/prosilver/template/overall_header.html
  2. Там сразу после
    <!-- EVENT overall_header_headerbar_before -->
    добавляем:
    <center><a href="ССЫЛКА_КУДА_ВЕДЕТ_БАННЕР" target="_blank"><img width="100%" src="ССЫЛКА_НА_КАРТИНКУ"></a></center>
    например:
    <center><a href="https://www.labirint.ru/books/822167/?p=33449" target="_blank"><img width="100%" src="https://vidforum.ru/images/icons/book.jpg"></a></center>
  3. Чистим кэш: удаляем cache/production/twig
  4. Наслаждаемся баннером. Он будет адаптивным, т.е. будет растягиваться на мобильных устройствах в нужных пропорциях.

Пишите комменты 🙂

Рубрика: phpBB | Оставить комментарий

Лайфхак Gmail: точки в email

Забавная (и довольно важная) штука, которую мало кто знает: точки в email на gmail.com — не важны. Поэтому эти адреса:

  • vasia.pupkin@gmail.com
  • va.sia.pup.kin@gmail.com
  • v.a.s.i.a.p.u.p.k.i.n@gmail.com

… являются одним и тем же: vasiapupkin@gmail.com

Этим порой пользуются скамеры, т.к. почты с точками не на gmail, а на других доменах считаются обособленными. Будьте внимательны и осторожны!

Рубрика: Email - The Bat, Безопасность | Оставить комментарий

[Решение] Photoshop отключить сетку по умолчанию

Я заметил, что каждый раз, когда я открываю Photoshop — в нем по умолчанию включена сетки, и каждый раз мне приходилось скрывать её, нажимая Ctrl + h. Наконец, я нашел решение:

Зайдите в верхнее меню и найдите там:
View → Show → None
(см. картинку слева)

Теперь перезапустите Photoshop, и вы больше не увидите сетку .. Наконец-то! 😀

Рубрика: Photoshop | Оставить комментарий