Проект 25&26

Страница для завсегдатаев кабинета информатики


Что это за страница и почему?

Авторы


Реклама? Да!

Сразу хотелось бы расставить точки над i. Реклама появилась здесь не в коммерческих целях. Дело вот в чем. Многие рекламные баннеры - настоящие произведения искусства. И вполне могут украсить сайт, не имеющий пока своего графического оформления. Самый интересный вариант, когда сайт становится участником баннерной сети сходной по содержанию.

К сожалению, сейчас немного развитых тематических сетей. Посмотрите на статистику сети для Вебмастеров www.wbn.ru или сети для программистов pbn.bugs.ru.

На этой странице в порядке эксперимента появилось пока два баннера: один компьютерной сети www.bannerdrive.ru, а внизу страницы баннер сети общего назначения www.rle.ru.

Так что нажимать на баннеры вовсе необязательно. И, конечно, если вы знаете более интересный и полезный вариант, расскажите.


Заметка #10 Программирование слева-направо

Технологии "снизу-вверх" и "сверху вниз" программистам хорошо известны. Если очень кратко, то в первом случае разработка алгоритма движется от частей к целому, во втором от целого к частям.

Нашему ученику удалось вдохнуть в эти понятия новый смысл, а также придумать совершенно новый подход: программирование "слева-направо". Учтите, что приводимый текст написан не по заказу, не ради прикола. Это фрагменты реальной программы.


Заметка #9 В поисках гармонии

Научиться строить графики функций, заданных в полярных координатах несложно. А оторваться от придумывания новых формул просто невозможно. Получаются все новые и новые кружевные узоры. Но не только.

Формула, придуманная учеником 8"г",
r = sin (alfa) * cos (sin (tan (alfa))) * 100;
дает вот такой график: 

Черты лица, конечно, проработаны не очень, но все остальное очень характерно. Растрепанные волосы и большие уши. Может быть, это портрет второшкольника? :-) Совсем ленивые могут скопировать фрагмент программы-построителя графика функции, заданной в полярных координатах.


Заметка #8 Сколько весит ничего

void main(){}

Вы пробовали компилировать такую программу?

Перед запуском поставьте в Options - Directories - каталог Output точку (для создания exe-файла в текущем каталоге. А потом посмотрите размер полученной программы из VC, например.
Можно ли его уменьшить?


Заметка #7 О пользе автоматической проверки

Есть лабиринт. Найти выход из него (перечислить шаги из начальной клетки до выхода) или вывести "NO SOLUTION".
Частичное решение (дающее верный ответ в некоторых, но не во всех случаях):

delay (3000); //ну это понятно зачем :-) 
f = fopen ("output.txt", "w");
fprintf (f, "NO SOLUTION");
fclose(f);

Шутка известная, но... Очный тур Московской городской олимпиады. Некоторые участники за подобное решение задачи про зеркала получили по 18 баллов.


Заметка #6 Сложно о простом. Кра-Си-во?

Перед вами текст объявления, присланный Ильей Рудольфовичем. Публикуется без изменений

// Внимание!
// Кто полностью, досконально, со знанием дела, в здравом уме и твердой памяти,
// объяснит мне приведенную ниже программу, получит 5 пятерок в журнал. 
// - Ded

#include  // for printf() only!

void main()
{
#pragma please   // вводится для надежности перед вычислением сложных выражений

int ch = ((int(far interrupt* far*)())0)[0x16](); // реверанс перед компилятором

printf ("You've pressed '%c'!\n", ch);
}


Заметка #5 Сложно о простом. Циклы? Зачем!

В "Технике - молодежи" был раздел "Зачем просто, когда можно сложно?". Нам бы хотелось, если не продолжить традицию, то поговорить о том же.

Какой известный алгоритм реализует эта процедура и как ей пользоваться?

void proc (int *q, int *p)
{
assert (q); assert (p);

static int *a = q;

if (p != q)
      {
      int *r = q++;
      if (*r > *q) { int t = *q; *q = *r; *r = t; }
      proc (q, p);
    }
else if (p != a)
      proc (a, --p);
}

Можно посмотреть ответ - другую реализацию той же идеи.
А теперь основной вопрос. Наша процедура имеет дефект. Какой и как его можно исправить без увеличения числа передаваемых параметров.


Заметка #4 Пустячок, а приятно

Вот письмо окружного методиста:

Уважаемые коллеги!
Поздравляю Вас с победителями окружной олимпиады!
Победителей отправляем на городскую олимпиаду 16.02.03., где - сообщу позже
Мне пришлите, какой язык программирования будут использовать участники.

Победители окружной олимпиады по программированию:
                              Школа   Всего баллов
Летунов Сергей   - 10 класс      2      90
Хитрин Николай - 9 класс         2      90
Марков Михаил Александрович, 11,1525    99
ОМЦ ЮЗ, лаборатория информатизации,
Смулянская Г.Б.

Конечно, это не главная победа (основные соревнования будут 16 февраля), приятно. Немало наших ребят отправятся на очный тур городской олимпиады, пройдя горнило заочного тура. Полный отчет о наших успехах на олимпиадах, а также задачи, скоро будут опубликованы на Пропаганде


Заметка #3 Не учитывать

Задача:посчитать сумму элементов последовательности из 10 элементов без учета максимального и минимального (в случае нескольких минимумов/максимумов отбрасывается только по одному).

Решение, серьезно предложенное учеником:

  int a[8];
  for (i=0; i<8;i++)scanf("%d",&a[i]);
  int s=0;
  for (i=0; i<8;i++)s+=a[i];

А как же без учета? Да очень просто! Не вводить их. :-)


Заметка #2 Андроник в камере

Надо сказать, что Арутюнов Андроник из 9 г (самый известный Андроник в школе) в камеру попадает редко. А вот берет камеру часто.

Народ:

  1. В школе есть цифровая фотокамера.
  2. Ее не только можно но и нужно(!!!) брать всем.
  3. последнее и самое главное. Ваше дело только отснимать, а все остальное сделает автор Фотохроник Николай Хитрин из 9в. Вы только отдаете ему отснятую кассету (флэшку). И ваши фотографии на школьном сайте!

Резюме: приходите в 26-й и берите фотокамеру!


Заметка #1 Не спортивно

Задача: заполнить массив закономерностью (пример для 10 элементов): 1, 10, 3, 8, 5, 6, 7, 4…

Два цикла, с шагом через один:

  int a[10];
  for (i = 0; i < 10; i += 2) a[i] = i + 1;
  for (i = 1; i < 10; i += 2) a[i] = 10 + 1 - i; 

Ну не-е-ет. Не спортивно!
Один цикл и никаких гвоздей:

  for (i = 0; i < 10; i ++)
    a[i] = (i + 1) * (i + 1) % 2 + (10 + 1 - i) * (i % 2)

Подсказки


(с) TANKISTO (Устинов Сева, 9кл.)
int Puzir (int mass[], int size)
{
return (size >= 2)?                              Puzir (mass+1, size-1) : 0,
       (mass[0] > mass[1])? Swap (mass, mass+1), Puzir (mass+1, size-1) : 0;
}

  while (a < ... )               // зависит от количества "оборотов"
  {
        alf = a * M_PI/180;      // перевод градусов в радианы 
        r = ...                  // вот здесь и проявляется фантазия
        x = r  * cos (alf) + Xc; // перевод из полярных 
        y = -r * sin (alf) + Yc; // координат в декартовы
        putpixel (x, y, BLUE);
        a +=0.5;
  }

webmaster: vv@ilyin.mccme.ru