неділя, 28 лютого 2016 р.

Второй тур олимпиады КЛА НАУ по информатике: разработка искусственного интеллекта

После первого тура в финал вышли трое самый достойных. Это Илья Коваленко (551 к/о), Юрий Лунёв (541 к/о) и Станислав Цымбал (551 к/о). Пришло время серьёзной задачи, которая и определит победителя!

На столе лежит куча спичек. Три игрока по очереди берут оттуда 1, 2, 3 или 4 спички. Тот игрок, после чьего хода куча опустеет, прогрывает, а другие два в этом случае получают по одному очку. Ваша задача написать компьютерного игрока для этой игры, который победит компьютерных игроков, написанных вашими соперниками.

Скачайте этот архив: https://dl.dropboxusercontent.com/u/22620118/Glau/Olympiad.zip . Распакуйте его. Откройте index.html хромом и откройте консоль. Вы увидите одну партию между тремя ботами.

Бот MyBot - ваш. Редактировать его поведение вы можете, редактируя скрипт MyBot.js
Функция doStep принимает текущее число спичек и возвращает то число спичек, которое нужно брать.

В файле  index.html можете поменять параметры в строке game.init(1,1);
Первый параметр - сколько раундов сразу запускать. Каждый раунд начинается со случайного числа от 50 до 149 и начинающий игру бот определяется случайно.
Второй параметр - через сколько раундов включать детальное логирование партии.

Финальная схватка между ботами произойдёт на настройках game.init(1000,1000);

середа, 17 лютого 2016 р.

Задачи для олимпиады по информационным технологиям

Первый тур

1. Исправна ли лампочка
На проводе между лампой и источником питания три выключателя, соединённых последовательно:
(питание) - (выключатель) - (выключатель) - (выключатель) - (лампочка)

Каждый выключатель может находиться в двух состояниях: выключен и включён. Но по внешнему виду состояние выключателя определить нельзя. Известно, что все выключатели исправны.

Лампочка в данный момент не горит. Неизвестно, не горит ли она из-за того, что перегорела или из-за того, что просто какой-то из выключателей выключен. Какое минимальное число переключений выключателями нужно сделать, чтобы гарантированно доказать, что лампочка перегорела?

Если бы выключатель был один, нужно было просто его щёлкнуть один раз. Раз лампочка не горела в одном его состоянии и не горит в другом, значит, она перегорела.

2. Прогрессивные налоги
В Тридевятом царстве ввели следующую прогрессивную налоговую шкалу. Первая заработанная в году тысяча золотых налогом не облагается. С суммы до второй тысячи берётся налог в 1%. До третьей - 2%, до четвёртой тысячи - 3% и т.д., до сотой тысячи берётся налог в 99%, а всё, что превышает 100 000 просто забирается государством.

Разработайте алгоритм и программу для вычисления оставшейся у подданного Тридевятого царства суммы после выплаты налогов.

Пример. Если заработано 4500 золотых, то с 1000 налог не берётся, ещё с 1000 нужно уплатить 1%, т.е. 10 золотых, ещё с 1000 - 2;, т.е. 20 золотых, ещё с 1000 - 3%, т.е. 30 золотых, и с 500 нужно уплатить 4%, т.е. 20 золотых. Всего нужно уплатить 10+20+30+20  = 80 золотых и у подданного останется 4500-80 = 4420 золотых.

3. Рулетка
Смоделируйте следующий процесс и создайте программу. У игрока имеется некоторая сумма денег. Игрок вводит случайное целое число от 0 до 36. Компьютер определяет случайное число от 0 до 36. Если числа игрока и компьютера совпадают, то сумма денег игрока увеличивается на 3600. В противном случае она уменьшается на 100.
Продолжать процесс загадывания числа можно до тех пор, пока сумма денег у игрока не меньше 100.

Свои решения присылайте на izvalov.klanau [at] gmail.com

понеділок, 8 лютого 2016 р.

Основы программирования: как разработать алгоритм и написать программу

Рассматриваем пример: как разработать программу, которая бы вычисляла сумму налогов по прогрессивной шкале.



Работа состоит из следующих этапов:
1. Пробуем выполнить задачу самостоятельно
2. Подмечаем закономерности
3. Составлем инструкцию, по которой другой человек мог бы выполнить задачу
4. Строим блок-схему алгоритма решения задачи
5. Пишем программу, в которой реализуется эта блок-схема
6. Тестируем программу, при необходимости вносим модификации


четвер, 28 січня 2016 р.

Основы программирования: как стартовать в Javascript

Как стартовать в JavaScript.
 Вместо обычного блокнота можете скачать Notepad++ - в нём удобнее.

Видео снималось в начале 2го семестра обучения группы Компьютерных систем, с него и начнём курс.

понеділок, 30 листопада 2015 р.

Лабораторная работа по теме "Графики функций"

1. Введите скрипт, который был дан на лекции.
2. Измените его так, чтобы выводился график функции y=x3-3x
3. Добавьте на оси координат насечки, отмечающие целые значения х и у.
4. Подумайте, что нужно изменить в скрипте, чтобы точки соединялись линией, а не рисовались отдельно
5. Особенно интересные графики получаются, если задаётся выражение не у от х, а и х, и у выражаются от некоторого t. Зайдите в исходный код страницы, и разберитесь, как этот код работает и зарисуйте в конспект блок-схему его алгоритма.

неділя, 1 листопада 2015 р.

Циклы на Javascript


Часто в программе нужно выполнить много однотипных действий. Например, нарисовать ряд из девяти окружностей. 
Допустим для определённости, что радиус каждой окружности должен быть равен 30 пикселей, координаты центра самой левой окружности равны (100, 50) и все расстояния между центрами должны быть по 50 пикселей по горизонтали.

Как решать эту задачу "в лоб"? Очень просто: написав такой скрипт (первый две стандартный строки, с которых должно начинаться рисование, я тут не пишу - вспоминайте!)

ctx.strokeStyle="#ff0000";//задали красный цвет линий
ctx.beginPath(); 
ctx.arc(50, 100, 30, 0, 2*Math.PI);//рисуем полную окружность с центром в (50, 100) и радиусом 30
ctx.stroke();//обводим её

ctx.beginPath(); 
ctx.arc(100, 100, 30, 0, 2*Math.PI);//рисуем полную окружность с центром в (100, 100) и радиусом 30
ctx.stroke();//обводим её

ctx.beginPath(); 
ctx.arc(150, 100, 30, 0, 2*Math.PI);//рисуем полную окружность с центром в (150, 100) и радиусом 30
ctx.stroke();//обводим её

ctx.beginPath(); 
ctx.arc(200, 100, 30, 0, 2*Math.PI);//рисуем полную окружность с центром в (200, 100) и радиусом 30
ctx.stroke();//обводим её

ctx.beginPath(); 
ctx.arc(250, 100, 30, 0, 2*Math.PI);//рисуем полную окружность с центром в (250, 100) и радиусом 30
ctx.stroke();//обводим её

ctx.beginPath(); 
ctx.arc(300, 100, 30, 0, 2*Math.PI);//рисуем полную окружность с центром в (300, 100) и радиусом 30
ctx.stroke();//обводим её

ctx.beginPath(); 
ctx.arc(350, 100, 30, 0, 2*Math.PI);//рисуем полную окружность с центром в (350, 100) и радиусом 30
ctx.stroke();//обводим её

ctx.beginPath(); 
ctx.arc(400, 100, 30, 0, 2*Math.PI);//рисуем полную окружность с центром в (400, 100) и радиусом 30
ctx.stroke();//обводим её

ctx.beginPath(); 
ctx.arc(450, 100, 30, 0, 2*Math.PI);//рисуем полную окружность с центром в (450, 100) и радиусом 30
ctx.stroke();//обводим её

Этот скрипт выдаст нам желаемый результат. Более того, некоторые недобросовестные программисты, которые получают деньги за объём кода, а не за эффективность решения, что-то подобное и делают.

В чём недостатки такого подхода?
1. Большой объём программного кода, в котором сложно разобраться и немудрено сделать ошибку
2. Большая сложность модификаций (если бы мы решили уменьшить радиус всех окружностей, то понадобилось бы вносить исправления в 9-ти строках)

Поэтому нужно применить другой подход – зацикливание программы. Чтобы составить циклический алгоритм, следует ответить на 3 вопроса:
  1. Что общего в командах?
  2. Чем они отличаются?
  3. До каких пор нужно продолжать выполнять команды?
Для нашего конкретного случая общее здесь то, что рисуются окружности, у них равны радиусы и координаты Y. Различаются же они координатами X. Рисовать их нужно до тех пор, пока координата X не превышает значение 450 пикселей.

Вот, как будет выглядеть блок-схема циклического алгоритма.


Теперь можно приступить к написанию более эффективной программы. Начинается она с двух стандартных строк:
var canvas=document.getElementById("C1");//получаем сам холст из тела документа 
var ctx = canvas.getContext("2d");//получаем контекст этого холста, к которому далее будем обращаться с командами

Теперь производим инициализацию переменных, задаём их начальные значения.
var x = 50
var y = 100
var r = 30

Теперь нужно проверить, не превысило ли х значения 450. Но нужно использовать не if, а другое ключевое слово: while, так как это вход не в ветку, а в цикл.

while (x<=450){

Теперь рисуем окружность с центром в (х, у) и радиусом r.
ctx.strokeStyle="#ff0000";//задали красный цвет линий
ctx.beginPath(); 
ctx.arc(x, y, y, 0, 2*Math.PI);//рисуем полную окружность с центром 
ctx.stroke();//обводим её

Теперь увеличиваем х на 50 и закрываем цикл
x = x+50
}

Вот и всё! Этот короткий скрипт нарисует то же самое, что и предыдущий длинный.

Самостоятельные задания:
1. Как сделать так, чтобы радиус окружностей был 20 пикселей?
2. Как сделать так, чтобы окружности были внутри сиреневого цвета?
3. Как сделать так, чтобы окружности шли не в ряд, а в столбик?

В шаге цикла можно менять сразу несколько параметров.

Допустим, нужно нарисовать вот такую картину:














Тогда, кроме
x = x+50
нужно дописать:
y = y+35;
r = r+10;

и всё будет работать так, как надо.

Пример 2.

Обратив внимание, что это пучок отрезков. Отрезок задаётся четырьмя числами: x1, y1, x2, y2. У всех отрезков координаты у неизменны, координата х1 увеличивается, а х2 – уменьшается.

Вот как будет выглядеть цикл

Пишем скрипт.
var x1 = 0
var y1 = 0
var x2 = 800
var y2 = 600

ctx.strokeStyle="#ff00ff";//цвет линий можно задать один раз, вне цикла
while (x1<=800){
ctx.beginPath(); 
ctx.moveTo(x1, y1);//ставим карандаш в точку (х1, у1)
ctx.lineTo(x2, y2);//ведём его в точку (х2, у2)
ctx.stroke();//прорисовываем линию

x1 = x1+10
x2 = x2-10
}


Задания для самостоятельной работы (для каждого из них в конспекте должна быть составлена программа)







середа, 21 жовтня 2015 р.

Создание кроссплатформенного приложения на АС3: как начать

Видео находится здесь: https://dl.dropboxusercontent.com/u/22620118/Glau/tutorials/Flash/Flash.html

Должно открываться.

Если ещё не скачивали, скачайте Flash Develop: http://www.flashdevelop.org/community/viewtopic.php?f=11&t=12455 (Можете скачать zip и распаковать). Там же написано, что нужно дополнительно иметь, если вдруг не пойдёт. Нужны * Microsoft .NET 3.5 runtime и Java 1.6+ 32-bits. Если FD сразу пошёл, значит, они у вас, скорее всего, есть.

И старый Flash: https://dl.dropboxusercontent.com/u/22620118/Adobe%20Flash%20CS3.exe Скачиваем в ознакомительных целях (Adobe предоставляет 30-дневный период бесплатного использования). А через 30 дней научимся компилировать прямо из Флеш Девелопа.

понеділок, 19 жовтня 2015 р.

Успеваемость групп 551 и 651

Данные в таблице: https://goo.gl/SvQgMu

Основные текущие недочёты:
  • После каждой лекции вам нужно потратить 6 часов на осмысление материала и поиск дополнительного материала по теме. Печатать реферат не надо. Но надо у себя на стене в соцсети рассказать своими словами в 3-5 абзацев, что интересного вы нашли, и приложить ссылку.
  • На 1й лабораторной после того, как мы повыполняли действия в двоичной системе счисления, была работа на компьютере, в которой нужно было выполнить эксперимент по оценке точности компьютерных вычислений. Соответстсвенно, пропуски в колонке по первой л/р будут заполняться исходя из умения объяснить описываемое в эксперименте явление и предоставить вычисления в конспекте.
  • После 2й лабораторной работы, когда мы составляли алгоритмы и реализовывали их на javascript, домой было задано подумать над следующими вопросами:
    • Составить алгоритм согласования существительного русского языка с числительным (1 дом, 2, 3, 4 дома, 5 домов, ...)
    • Составить общий алгоритм решения уравнения ax2+bx+c=0, a, b, c - любые действительные числа
    • Составить алгоритм определения, является ли год с номером n високосным
    Пустые ячейки по второй л/р будут закрываться по наличию в конспекте этих блок-схем и умению их объяснить.
  • На контрольной работе многие также не справились с заданиями третьей части. Им стоит уделить дополнительное время на консультациях. Кто уже был на консультациях и ходит на спецкурс - большие молодцы!

четвер, 15 жовтня 2015 р.

Основы графики на javascript

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

понеділок, 5 жовтня 2015 р.

Задания для контрольной работы группам 651 и 551: Часть 1, 2 и 3.

Алгоритм выполнения заданий Части 1.
По этому алгоритму нужно выбрать 4 задания и решить их. На листике пишите свою группу, фамилию и номер в журнале.

Не своё задание, пусть и правильно сделанное, считается за ошибку (это ведь ошибка в чтении блок-схемы).
Задания части 1
I. Задания на сложение. Перевести числа в двоичную систему, выполнить действия и перевести результат обратно в десятичную систему.
  1. 60 + 87
  2. 69 + 42
  3. 64 + 43
  4. 64 + 47
  5. 35 + 67
  6. 87 + 64
  7. 75 + 94
  8. 66 + 56
  9. 42 + 83
  10. 41 + 78


II. Задания на умножение. Перевести числа в двоичную систему, выполнить действия и перевести результат обратно в десятичную систему.
  1. 17 х 27
  2. 11 х 17
  3. 17 х 14
  4. 15 х 12
  5. 11 х 15
  6. 29 х 17
  7. 10 х 16
  8. 13 х 24
  9. 27 х 12
  10. 22 х 18
  11. 24 х 21
  12. 24 х 16
  13. 28 х 13
  14. 24 х 12

III. Задания на вычитание. Перевести числа в двоичную систему, выполнить действия и перевести результат обратно в десятичную систему.

  1. 50 - 41
  2. 96 - 30
  3. 46 - 9
  4. 65 - 39
  5. 70 - 33
  6. 99 - 51
  7. 114 - 62
  8. 132 - 66
  9. 30 - 21
  10. 38 – 26
  11. 75 - 25
  12. 120 - 64

IV. Задания на деление (с остатком). Перевести числа в двоичную систему, выполнить действия и перевести результат обратно в десятичную систему.


  1. 26 : 3
  2. 131 : 10
  3. 140 : 10
  4. 36 : 5
  5. 38 : 3
  6. 106 : 9
Алгоритм выполнения заданий части 2 и 3
Обратите внимание: в первом условии (n>=10) выходы "да" и "нет" я ошибочно написал в неправильном порядке. Учтите это при выборе задания. И спасибо Илье из 551 группы за указание на ошибку, за это он получает бонусные баллы.
Задания части 2
Сформулировать логическое условие для числа а на языке javascript, под которое должны подпадать:
  1. Числа от 1 до 25 включительно
  2. Чётные числа, большие 12-ти
  3. Нечётные числа, делящиеся на 3
  4. Числа, которые делятся или на 5 или на 7, но не на оба сразу
  5. Отрицательные числа или чётные
  6. Числа, не делящиеся ни на 3, ни на 4
  7. Числа, делящиеся на 5 , большие 100
  8. Числа, которые или больше 20 или меньше 2
  9. Числа, которые, либо меньше 50, либо делятся на 3, но не то и другое сразу
  10. Числа, которые, меньше 50 и делятся на 3

Напоминание:
Оператор && - логическое «И», одновременное выполнение условий
Оператор || - логическое «ИЛИ», выполнение хотя бы одного условия
Оператор != - может использоваться для проверки оператора «XOR», выполнение ровно одного условия из двух
Оператор % - вычисление остатка от деления. Проверка того, что число n делится на число b выглядит как: if (n%b == 0). Соответственно, проверка не делимости выглядит как: if (n%b != 0)
Чётное число – это делящееся на 2

Часть 3.
Составить алгоритм и программу, которые:
  1. Получают на вход три числа: d, m, y и определяет, задаёт ли эта тройка корректную дату (в которой d – это число, m – месяц, y - год).
  2. Получают на вход 3 числа: a, b, c и определяет, сколько среди этих чисел одинаковых
  3. Получают на вход 3 числа: a1, a2, b и определяет, как расположено число b на числовой оси относительно диапазона, ограниченного числами a1 и a2. 

вівторок, 29 вересня 2015 р.

Материалы к дисциплине "Основы информатики" курса "Информационные технологии в предпринимательской деятельности"

В предпринимательской деятельности можно рассматривать следующие уровни вовлечения ИТ.

1. Автоматизация документооборота. С этим имеет дело любая организация и предприниматель, вне зависимости от того, чем они занимаются. Рассмотрим пакет офисных программ, функции которых: составление бланков, документов, расчёты, анализ показателей, организация хранения и обработки информации, представление данных в виде презентации.

2. Использование интернета для развития бизнеса. Как говорил Билл Гейтс: "Если вашего бизнеса нет в интернете - вас нет в бизнесе". Рассмотрим методы разработки сайтов и привлечения посетителей, технологии вирусной рекламы в соцсетях, методы монетизации сайта.

3. Ориентация бизнеса исключительно на информационные технологии. Сейчас всё больше предпринимателей создают исключительно цифровой продукт. Это программисты (программированию посвящена отдельная дисциплина курса), цифровые художники, 3Д-моделлеры. При этом они могут работать как в организации, так и на себя. Рассмотрим пакеты мультимедийных редакторов.

На первом занятии рассмотрим обзорно историю вычислительной техники и современные тенденции её развития.

Интересные материалы по теме: