3 заметки с тегом

программирование

Паскаль, или пара воспоминаний из детства

Язык программирования Паскаль появился в 80-е годы. Мое школьное детство прошло в увлечении этим новым и сложным делом. Уроки информатики, на которых нас учили писать простые программы на Паскале, превратились в то время для меня в первооткрытие.

Почему так? Вся суть состояла в том, что тогда ни у кого дома еще не было компьютера. У меня он появился только в 6 классе (интернет появится только спустя еще 7 лет). Но несмотря на это, на нем не был установлен Паскаль, взять его было неоткуда: ведь не было интернета, в редких магазинах с пиратскими CD-дисками можно было найти сборники программ с Паскалем. (Да и сами CD-диски только входили в оборот: все тогда пользовались дискетами на 3,5 дюйма.) Поэтому изучать, писать, пробовать можно было только в школе, а 40 минут урока, выделенные на самостоятельное составление простой программы, казались крайне малым промежутком. Поэтому зачастую мы договаривались с учителем информатики о том, чтобы после уроков он разрешил нам поработать в Паскале в пустом кабинете информатики. Условие было одно: только не в игрушки играть. Я даже в школьной библиотеке книжку брал, по ней дополнительно изучал непростой для меня язык. Во многом это увлечение помогло в освоении азов языка Делфи. Но всерьез взяться за него, конечно, так и не вышло.

Воспоминания местами настолько отчетливые, что при мысли о Паскале или при виде его синего интерфейса, пальцы правой руки сами тянутся нажать комбинацию Ctrl + F9 — самую частонажимаемую при написании программы, поскольку она запускала написанный код. Этот момент всегда был самым волнительным, потому что перед запуском кода Паскаль проверял его на наличие ошибок. Достаточно было одной (например, незакрытого условия if или неправильного знака присваивания значения переменной, или отсутствия точки с запятой в конце выражения), чтобы программа не запустилась и выдала печальное сообщение об ошибке. Но каково было ликование тех «счастливцев», которые осилили программу, и сумели запустить ее. Например, так было с кодом калькулятора. Помню, кто-то даже подскакивал от радости и что-то выкрикивал. А наш учитель понимающе улыбался.

Так выглядит ошибка после попытки запуска программы

Сейчас к воспоминаниям о собственных увлечениях прибавляется также ощущение ностальгии. Конец 90-х — начало 2000-х в моем детстве были удивительными временами, наполненными восторгом перед миром, одним из проявлений которого было первооткрытие — реальное первооткрытие, ведь компьютеры только появлялись. Тогда мы были полны радости перед этим «новым». Кажется, даже к лучшему, что в те времена никто из нас не подозревал, во что выльется технический «прогресс».

А что у вас связано с уроками информатики из детства? С Паскалем? Приглашаю поделиться в комментариях.

2015   детство   ностальгия   программирование

Счетчик просмотров в Совотеке

В Совотеке используется такой вот скрипт для склонения счетчика сов вверху страницы. Можно ли его как-то упростить? Напишите, пожалуйста.

<?php
function pluralForm($chislo, $form1, $form2, $form5)
{
    $chislo = abs($chislo) % 100;
    $chislo1 = $chislo % 10;
    if ($chislo > 10 && $chislo < 20) return $form5;
    if ($chislo1 > 1 && $chislo1 < 5) return $form2;
    if ($chislo1 == 1) return $form1;
    return $form5;
}
echo 'У&nbsp;нас уже '.$chislo.' <a href="/about">'.pluralForm($chislo, 'сова', 'совы', 'сов').'</a>.
Можно выбрать <a href="/" title="Все совы">из&nbsp;всех</a>, указать нужную
или&nbsp;взять <a href="/random" title="Случайная сова">случайную</a>.<br />
А еще можно <a href="/memory">поиграть</a> с совами или посмотреть <a href="/video">видео</a> с их участием.';
?>

Обновление

Z6a в комментариях подсказал правильную функцию. Спасибо. Теперь всё работает, кажется, даже быстрее. Привожу новый код здесь.

<?php
echo plural_form(42, array('арбуз', 'арбуза', 'арбузов'));
function plural_form($n, $forms) {
return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]);
}
?>
2014   вопрос   программирование   совы

Как устроена Совотека

О том, что у «Совотеки» под капотом перьями.

У Совотеки все картинки-миниатюры генерируются и хранятся в отдельной папке по адресу:

sovoteka.ru/i/s/

Большие версии тех же картинок хранятся отдельно по адресу:

sovoteka.ru/i/

Всего в «Совотеке» сейчас 903 совы и для удобства каждая картинка подписывается автоматически.

Например, 100-я сова в миниатюрке имеет адрес: sovoteka.ru/i/s/sovoteka_100_s.jpg. У нее всегда размер 95×95 пикселей. Ее увеличенная копия имеет адрес: sovoteka.ru/i/sovoteka_100.jpg. Размер у нее непредсказуем.

Нужно написать такой скрипт на PHP, чтобы он смог проделать следующее:

  • автоматом подсчитать, сколько сов уже есть на сайте (я это делал через переменную, которая считает количество файлов, например, в папке /i/s/. Сколько уменьшенных копий — столько сов на сайте);
  • из множества сов выбрать 50 случайных и вывести их на экран (это можно через генерацию случайных чисел сделать, я их подставлял в имена файлов, ведь в них меняется только число — sovoteka_$chislo_s.jpg, к примеру). Важно, чтобы эти 50 сов не были повторяющимися — с этим проблемы. Случайные совы генерируются каждый раз при обновлении страницы — каждый раз разные картинки.

Результат выполнения PHP-скрипта — HTML-код вида:

<a href="/i/sovoteka_518.jpg"><img src="/i/s/sovoteka_518_s.jpg" width="95" height="95"></a>
<a href="/i/sovoteka_431.jpg"><img src="/i/s/sovoteka_431_s.jpg" width="95" height="95"></a>

Сейчас у меня такой код вышел:

$chislo = sizeof(glob('i/*.*'));
// Подсчитываю, сколько картинок в папке, следовательно столько сов на сайте

$arr = range(1, $chislo);
// Делаю случайное число от 1 до числа сов на сайте

shuffle($arr);
// Мешаю числа

for ($i=0; $i < count($arr); $i+=11) { 
// Зацикливаю вывод

echo '<a class="imgs_group" rel="gal" href="/i/sovoteka_'.$arr[$i].'.jpg">
<img src="/i/s/sovoteka_'.$arr[$i].'_s.jpg" width="95" height="95" class="ingal"></a>';
// Подставляю созданные номера в HTML — костыль, в общем.
}

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

Обновление

Спасибо Антону Сюваеву за помощь в коде. Теперь совы генерируются как надо — с выборкой из массива и проверкой на повторы.

$files = glob('i/s/*.jpg');
$rand_keys = array_rand($files, 50); // 50 случайных ключей из массива

foreach ($rand_keys as $pos) {
$thumb_name = $files[$pos];
$full_name = str_replace(array('/s','_s'),'',$thumb_name);

echo '{$thumb_name}\n'; // url мелкого файла
echo '{$full_name}\n\n'; // url крупного файла
}
2014   вопрос   интернет   программирование   совы