середа, 28 вересня 2011 р.

Лабораторная работа 3 - дополнительные компоненты



1.  Добавьте в существующий проект, который вы делали на предыдущем занятии, новую форму (командой Файл|Создать|Форма). Сохраните новую форму как Form2. Измените заголовок формы (свойство Caption) на  «Страница «Дополнительная». Установите ее свойство Position равным poScreenCenter.
2.      В форме StandartTab в список Uses добавьте модуль Addition. Для кнопки Button4  установите свойство Enable равным True. Для ее события OnClick введите код
procedure TForm1.Button4Click(Sender: TObject);
begin
  Form1.Hide; // Спрятать форму
  Form2.Show;// Показать форму
end;
Метод Hide  устанавливает свойство компонентов Visible равным False. Метод Show  устанавливает свойство формы Visible равным True и помещает  форму на передний план.
В справке найдите методы BringToFront и ShowModal. Какое их назначение?
Откомпилируйте проект. Delphi предложит включить Unit2 в Unit1 для обеспечения связи между ними. Согласитесь, а затем, после выключения приложения, поределите, что изменилось в тексте Unit1.
3.   Разместите на форме компонент Bevel, а на нем – три кнопки BitBtn.
Эти компоненты позволяют разместить как текст надписи, так и изображение (битовую матрицу). Можно с помощью редактора изображений (команда Сервис|Image Editor) самостоятельно создать файл *.bmp либо выбрать из готовой коллекции. Для этого вызовите свойство Glyph, откройте папку C:\Program Files\Common Files\Borland Shared\Images\Buttons и выберите подходящее по Вашему мнению изображение.
       Для BitBtn3 можно выбрать стандартное изображение. Для этого установите свойство кнопки Kind=bkClose. Проследите, что произойдёт с видом кнопки? Просмотрите другие стандартные типы кнопок.
4.   Для BitBtn1 в событие OnClick введите код:
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
  Form1.Show;
  Form2.Hide;
end;
5.   Для BitBtn2  свойство Enabled=False
6.    Для BitBtn3 в событие OnClick введите код:
procedure TForm2.BitBtn3Click(Sender: TObject);
begin
  Form1.Close;
end;
7.    Для правильной работы приложения в событие OnClose для формы2 добавьте код:
procedure TForm2.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Application.Terminate; // Закроется не только форма, но и очистится память
end;
8.  Добавить два компонента SpeedButton. Такие кнопки могут иметь рисунок, выглядеть нажатыми и работать в режиме «Нажата одна из группы». Для этого установите их свойство GroupIndex=1. Установите свойство Glyph для SpeedButton1 из файла Skylin16.bmp, а для SpeedButton2 из файла globe.bmp. Для SpeedButton1 установите NumGlyphs=1, а для SpeedButton2 - NumGlyphs=2. Свойством Margin  “подгоните” рисунок по центру кнопки.
Что означает свойство Flat?  Для SpeedButton1 введите подсказку, которая возникает при прохождении курсора мыши над компонентом: установите свойство ShowHint=True, в свойство Hint введите любой текст.
9.  Слева от SpeedButton1 добавьте компонент Shape и установите свойствa Shape=stEllipse; Pen.Color:=clGreen; Brush.Color:=clLime.
10.  Справа от SpeedButton2 добавьте компонент Image. Дважды щелкните на свойстве Picture  и загрузите файл пиктограммы Earth16.icoПодгоните размеры всех кнопок. Введите:
procedure TForm2.SpeedButton1Click(Sender: TObject);
begin
  if SpeedButton1.Down then
  begin
    Image1.Visible:=False;
    Shape1.Brush.Color:=clRed;
  end;
end;
procedure TForm2.SpeedButton2Click(Sender: TObject);
begin
if SpeedButton2.Down then
  begin
    Image1.Visible:=True;
    Shape1.Brush.Color:=clLime;
  end;
   end;
11. Добавьте компонент Label, переименуйте его в «Введите номер телефона», и компонент MaskEdit. Дважды щелкните на его свойстве EditMask и выберите тип Phone, сформатируйте его под принятый в Кировограде формат.
12. Добавьте компонент StringGrid. Установите количество столбцов и строк сетки: RowCount=5, ColCount=5. Установите FixedCols и FixedRows равными 0. Подберите размер сетки как на рис. Добавьте компонент Button с именем «Заполнить сетку» и введите для нее код:
procedure TForm2.Button1Click(Sender: TObject);
var x,y:integer;
begin
  with StringGrid1 do
    for x:=0 to ColCount-1 do
      for y:=0 to RowCount-1 do
        Cells[x,y]:='Coord.'+IntToStr(x)+'-'+IntToStr(y);
end;
13. Добавьте из страницы Dialogs невизуальный компонент OpenDialog, метку с именем «Имя файла», компонент Edit и кнопку с именем Обзор… и кодом
procedure TForm2.Button2Click(Sender: TObject);
begin
  OpenDialog1.FileName:='*.*';
  if  OpenDialog1.Execute then
    Edit1.Text:=OpenDialog1.FileName;
end;
Протестируйте Ваше приложение. Для защиты работы необходимо уметь объяснить, как оно работает и вносить небольшие изменения.

четвер, 22 вересня 2011 р.

Лабораторная работа №2 Страница стандартных компонентов


1.      Сохранить новый проект в папке «ЛР2»
2.      Изменить заголовок формы (свойство Caption) на «Страница Стандартных компонентов.
3.      В верхнюю часть формы добавить компонент TРanel (как показано на рис.). Используем ее как заголовок для формы. Установить свойство Caption как «Демонстрация страницы VCL «Стандартная».
4.      Добавить компонент TLabel, переименовав его согласно рис.
5.      Ниже метки расположить компонент TEdit, очистить его свойство Text.
6.      Добавить компонент TMemo. Вызвать справку по компоненту TMemo, изучить его свойства Align, ScrollBars, WordWrap, WantReturns. Попробовать задавать им различные значения, откомпилировать проект и сравнивтаь результаты. Удалить из свойства Lines текст, добавить несколько строк своего текста.
7.      Добавить компонент TRadioGroup, изменить заголовок согласно рис. В свойство Items ввести названия 4-х кнопок. Свойство ItemIndex указывает на номер кнопки, выбранной по умолчанию (-1 ничего не выбрано, 0 – выбрана 1-ая и т.д.). В код обработчика события OnClick ввести

procedure Form1.RadioGroup1Click(Sender: TObject);
begin
if RadioGroup1.ItemIndex=0 Then Form1.Color:=clSilver;
if RadioGroup1.ItemIndex=1 Then Form1.Color:=clBlue;
if RadioGroup1.ItemIndex=2 Then Form1.Color:=clYellow;
if RadioGroup1.ItemIndex=3 Then Form1.Color:=clRed;
end;
8.      Добавить компонент TScrollBar. В событие OnChange дабавить код

procedure Form1.ScrollBar1Change(Sender: TObject);
begin
RadioGroup1.ItemIndex:=ScrollBar1.Position;
end;
9.      Добавить компонент TСomboBox.
10.  Добавить компонент  TListBox, установить свойство IntegralHeigt=True (выяснить, что это означает). Ввести несколько (>3) строк.
11.  Добавить компонент TGroupBox. Добавить в группу четыре TButton, две TRadioButton, две TCheckBox. Изменить заголовки этих компонентов согласно  рис.
У одной из RadioButton установить свойство Checked=True.
12.  Для Button1 в код обработчика события OnClick ввести

procedure Form1.Button1Click(Sender: TObject);
var
   x:integer;
begin
   Memo1.Clear; //Очистка содержимого Memo
   Memo1.Lines.Add(Edit1.Text); //скопировать в Memo текст из Edit1
   Memo1.Lines.Add(ComboBox1.Text); //скопировать в Memo текст из ComboBox
   //скопировать в Memo1 выбранный текст из окна списка ListBox1
   Memo1.Lines.Add('ListBox Строка #'+IntToStr(ListBox1.ItemIndex+1));
   if RadioButton1.Checked then Memo1.Color:=clWhite;
   if RadioButton2.Checked Then Memo1.Color:=clAqua;
end;

13.  Для Button2 в код обработчика события OnClick ввести

procedure Form1.Button2Click(Sender: TObject);
begin
   if CheckBox1.Checked then Form1.Font.Style:=[fsItalic]
                              else Form1.Font.Style:=[ ];
   if CheckBox2.Checked then Form1.Font.Color:=clPurple
                              else Form1.Font.Color:=clBlack;
end;

14.  Для Button3 в код обработчика события OnClick  ввести

procedure Form1.Button3Click(Sender: TObject);
begin
   Close;
end;

15.  Код для TButton4 пока отсутствует. Временно установить ее свойство Enable=False
16.  Добавить компонент TMainMenu (невизуальный). Двойным щелчком на свойстве Items запустить конструктор меню (либо из контекстного меню). Инспектор объектов при этом изменится. Установить свойство Caption=&Файл (амперсант& сообщает, что следующую за ним букву нужно подчеркнуть и включить ее в комбинацию быстрых клавиш. Здесь – Alt+Ф).
В выпадающем меню добавить пункт &Выход. Рядом с &Файл добавить пункт &Помощь с выпадающим списком из двух команд: По&мощь и &О программе… Разделить их между собой чертою, для чего добавить дефис (-) в свойство Caption строки меню сразу под По&мощь. Для пункта меню &Выход ввести код обработчика события Button3Click. Для команды &О программе… вывести окно сообщения со своими данными (используйте функцию ShowMessage).
17.  Добавить компонент TPopupMenu. Запустить конструктор меню, добавить команды «Готово» и «Обновить шрифты». Выбрать для них события, аналогичные событиям кнопок. Свяжите созданное меню с формой: в свойстве формы PopupMenu укажите PopupMenu1.
18.  Протестировать приложение.
19.  Для защиты работы необходимо уметь ответить на вопросы по своёствам и методам используемых в ней стандартных компонентов.

понеділок, 22 серпня 2011 р.

С кем я буду работать в 2011-2012 учебном году

В I семестре я буду вести следующие дисциплины:
Информатика - 21 рота
Информационные системы и технологии - 41 рота
Информационные технологии - 61 рота
Организация баз данных и знаний - 68 рота
Основы программирования и алгоритмы. Языки программирования - 69 рота.

Во II семестре:
Информационные технологии - 61 рота
Организация баз данных и знаний - 69 рота
Основы программирования и алгоритмы. Языки программирования - 60 рота.

пʼятниця, 8 липня 2011 р.

Нужны ваши голоса!

Моя новая игра на конкурсах Kongregate и NewGrounds:
http://www.kongregate.com/games/mofunzone/i-wanna-win
http://www.newgrounds.com/portal/view/574141

Поддержите, пожалуйста

понеділок, 27 червня 2011 р.

I Wanna Win!


Наконец-то я зарелизил свою новую флеш-игру игру - I Wanna Win!


В принципе, всё было готово в конце апреля, но то одно, то другое - уже и треть лета прошла.

В игре 25 уровней, в каждом - своя миниигра на меткость, внимание, память, логику. Сейчас игра доступна по ссылке, а через неделю пойду бороться за приз от крупных порталов. Надеюсь на вашу поддержку :)

субота, 14 травня 2011 р.

Решение уравнений методом половинного деления.

Эта тема выносится на рубежный контроль и в экзаменационные вопросы.
Дано уравнение
Необходимо найти его корень с точностью до 4 знаков после запятой.
Как бы мы вычисляли корень вручную:
Оцениваем, что корень уравнения лежит между нулём и десятью, (т.к. и ). Значит 0<х<10. Находим середину интервала: (10+0)/2=5 и подставляем пятёрку в уравнение вместо х.
. Значит 0<х<5. Опять находим середину: (0+5)/2=2,5 и пробуем:
. Значит 0<х<2,5. Снова находим середину: (0+2,5)/2=1,25 и подставляем
. Т.к. теперь знак <, то двигается левая граница промежутка и 1,25<х<2,5. Теперь подставляем в равнение число (1,25+2,5)/2=1,875
и 1,25<х<1,875. Далее будем получать такие промежутки:
1,5625<х<1,875
1,5625<х<1,7188
1,6407<х<1,7188
1,6798<х<1,7188
1,6798<х<1,6993
1,6798<х<1,6896
1,6847<х<1,6896
1,6872<х<1,6896
1,6872<х<1,6884
1,6878<х<1,6884
1,6878<х<1,6881
1,6878<х<1,6880
1,6879<х<1,6880
Следовательно, x=1,6879….
Теперь запишем наше решение в виде алгоритма.
  1. Нужно найти два числа (А и В) такие, чтобы корень уравнения находился между ними. Эти числа будет вводить пользователь.
  2. Нужно определить, неравенство с каким знаком (больше или меньше) получится из уравнения, если в него подставить число А (пусть это будет переменная Z, она будет равна -1 при знаке < и 1 – при знаке >)
  3. Нужно найти точку С, середину отрезка [A;B] по формуле C=(A+B)/2 и подставить его в уравнение.
  4. Если знак получившегося неравенства будет таким же, как и при подстановке в него числа А, то корень находится на промежутке [C;B], в противном случае корень – на промежутке [A;C]. Значит, в первом случае левая граница промежутка становится равной С: А, а во втором – правая: В=С
  5. Если разность B-A больше требуемой точности (для четырёх знаков после запятой это 0,0001), то перейти к пункту 3 алгоритма, иначе – вывести решение.
Теперь можно писать программу
10 PRINT “RESHAEM URAVNENIJE X^3+9X=20”
20 PRINT “VVEDITE LEVUJU GRANICU PROMEZHUTKA”
30 INPUT A
40 PRINT “VVEDITE PRAVUJU GRANICU PROMEZHUTKA”
50 INPUT B
60 IF A^3+9*A>20 THEN Z=1 ELSE Z=-1
70 C=(A+B)/2
80 Y=C^3+9*C
90 IF (Y-20)*Z>0 THEN A=С ELSE B=C
100 PRINT A;”<х<”;B
110 IF (B-A)>0.0001 THEN GOTO 70
120 PRINT “X=”;(A+B)/2
Пояснения:
Строки 10-50 – ввод краёв интервала, где находится корень уравнения (п.1. алгоритма)
Строка 60 – находим знак неравенства в левом краю промежутка (п.2. алгоритма)
Строка 70 – находим середину отрезка
Строка 80 – подставляем это значение в уравнение (п.3. алгоритма)
Строка 90 – когда выражение (Y-20)*Z будет больше нуля? Тогда, когда Y>20 и Z=1 и когда Y<20 и Z=-1, т.е. тогда, когда знак неравенства при подстановке в него числа С такой же, как и при подстановке числа А. Это и требовалось в п.4. алгоритма
Строка 100 – выпечатываем, каким путём мы подбираемся к корню
Строка 110 – проверка, не получена ли уже требуемая точность (п.5 алгоритма)
120 – печатаем результат, ещё раз усреднив промежуток.
Для того, чтобы программа решала другое уравнение с другой точностью, нужно внести изменения в строки 10, 60, 80, 90 и 110
Задания для самостоятельной работы
уравнение
точность
1
x-10sinx=15
5 знаков после запятой
2
x+2cosx=3
3 знака после запятой
3
4 знака после запятой
P.S. По научному метод половинного деления называется «дихотомия», так что выполнив работу вы с полным правом можете употреблять это мудрёное слово :)

вівторок, 26 квітня 2011 р.

Лабораторная работа 2. Переборные задачи

Лабораторная работа 2. Переборные задачи. Тексты всех программ должны быть в конспекте. При защите работы нужно уметь ответить на вопросы по этим программам.

Задача 1. Задача “3Х+1”. Возьмём какое-нибудь натуральное число. Далее, если число чётное, разделим его на 2, а если нечётное – умножим на 3 и прибавим 1. Затем будем выполнять эти действия с полученным числом. Например, вот что будет происходить, если начать с тройки. 3–>3*3+1=10–>10/2=5 –>3*5+1=16 –>16/2=8 –> 8/2=4 –>4/2=2 –> 2/2=1 –>1*3+1=4 Круг замкнулся. Теперь мы будем постоянно получать значения 1 – 4 – 2. Требуется найти такое число, которое в конце преобразований не придёт к единице. Математика бьётся над решением этой задачи более 70 лет без успеха, не смотря на объявленную за её решение премию в 1000000$.

Задание 1а. Написать программу, которая производила бы числа по приведённому закону.
Начинается программа стандартно: приглашением пользователя ввести начальное число.
10 PRINT “ENTER A NUMBER”
20 INPUT N
Теперь в зависимости от чётности числа N его нужно или разделить на 2, или умножить на 3 и прибавить 1. Проверка чётности выражением N MOD 2 в данной версии бейсика работает корректно только для чисел, меньших 215, поэтому в качестве условия чётности используем другое выражение. Для чётного числа N его половина – целое число. Поэтому будет выполняться равенство N/2=INT(N/2). Здесь функция INT(X) возвращает целую часть числа X (от англ. integer – целый). Пишем третью строку
30 IF N/2=INT(N/2) THEN N=N/2 ELSE N=3*N+1
40 PRINT N
Теперь, если мы не достигли единицы, операцию нужно провести ещё раз. Пятая строка:
50 IF N<>1 THEN GOTO 30
Программа готова.

Задание 1б. Видоизменить программу так, чтобы она подсчитывала количество шагов, которое требуется для достижении единицы.
Для этого введём переменную T и будем увеличивать её на 1 каждый раз, когда значение N изменяется.
При видоизменении программ в полной мере ощущается удобство нумерации строк через 10. Чтобы задать начальное значение Т пишем:
25 T=0
Увеличение T должно происходиь после строки 30, поэтому пишем:
35 T=T+1
В конце работы программы печатаем полученное значение T
60 PRINT “STEPS: “;T

Задание 1в. Найдите с помощью полученной программы числа из первой сотни, которые приходят к единице дольше чем за 100 шагов. Какое число, большее 1000 придёт к единице быстрее всего?

Задание 1г. Видоизмените программу так, чтобы выводила в конце работы и пиковое значение N. Подсказка: понадобится ещё одна переменная, фиксирующая максимумы, Подмайте, в каком случае её значение должно изменяться.

Задание 1д. Найдите, какой самый высокий пик достигается числами из первой сотни? Из первых 200?

Задача 2. Проверка простоты числа. Простым числом называется такое число, которое имеет ровно два делителя: самого себя и единицу. Требуется для данного числа указать, является ли оно простым.
Задание 2а. Решить задачу полной проверкой делимости на все числа, меньшие N, «в лоб».
10 PRINT “ENTER A NUMBER”
20 INPUT N#
Здесь обозначение N# обозначает, что мы сможем работать с числами длиной до 16 знаков.
30 D#=1
40 D#=D#+1
Переменная D# будет пробегать значения всех чисел, меньших N#. Далее находим частное от деления N# на D# и для контроля работы программы выводим его на экран:
50 K#=N#/D#
60 PRINT N#;”/”;D#;”=”;K#
Если частное окажется целым, N# – составное число и перебор можно заканчивать.
70 IF K#=INT(K#) THEN PRINT N#; “ DIVIDES BY ”;D#: END
Здесь мы впервые используем двоеточие – для вывода несокльких операторов в одной строке.
Если делитель до сих пор меньше N#, его нужно увеличить на единицу и продолжить проверку
80 IF D#
Если же мы перебрали все числа и не нашли делителя, то число N# – простое
90 PRINT N#; “ IS PRIME”

Задание 2б. Найдите с помощью этой программы несколько номеров ближайших и прошедших лет, которые бли простыми числами

Задание 2в. Усовершенствуйте программу так, чтобы она перебирала делители быстрее. Подсказка: стоит ли продолжать перебор, если частное K оказывается меньше делителя D#? Для дополнительного увеличения быстробействия потребуется убрать вывод на экран промежуточных результатов. Для этого наберите на пустой строке номер строки, которую нужно удалить и нажмите Enter

Задание 2г. Проверьте с помощью усовершенствованной программы на простоту числа: 12659363, 2147483647, 514229, 344805047, 469718941, 87178291199, 99999900001, 1073676287, 7599983.

Задача 3. Подсчёт числа счастливых билетов. Номер автобусного билета состоит из 6 цифр: ABCDEF. Билет называется счастливым, если сумма первых трёх цифр равна сумме последних трёх: A+B+C=D+E+F.

Задание 3а. Написать программу, подсчитывающую число таких билетов.
Для нахождения общего количества таких билетов пробежим все 6-ти значные номера и проверим каждый на выполнение условия.
10 S=0
Переменная S будет хранить количество найденных билетов. Затем каждая из цифр пробегает от 0 до 9:
20 FOR A=0 TO 9
30 FOR B=0 TO 9
40 FOR C=0 TO 9
50 FOR D=0 TO 9
60 FOR E=0 TO 9
70 FOR F=0 TO 9
Чтобы быстро ввести данные 6 строк, вводим строку 20, нажимаем Enter. Затем поднимаемся к ней курсором, меняем 2 на 3 и A на B, снова нажимаем Enter. Затем меняем 3 на 4 и B на C и снова нажимаем Enter, и т.д. В результате в памяти компьютера останутся все 6 строк. Это можно проверить, вызвав полный текст программы на экран командой LIST.
80 IF A+B+C=D+E+F THEN S=S+1
Если выполняется условие равенства сумм, переменная S увеличивается на 1. Теперь закрываем циклы, это можно сделать одной строкой:
90 NEXT F,E,D,C,B,A
И выводим на экран результат:
100 PRINT S

Задание 3б. Билет называется весёлым, если суммы первых и последних трёх цифр различаются на 1. Напишите программу для подсчёта количества весёлых билетов.
Мы всё так же будем пробегать все номера билетов, изменится лишь строка 80 – условие увеличения переменной S. Вместо A+B+C=D+E+F можем записать A+B+C-D-E-F=1 OR A+B+C-D-E-F=-1. Можем сделать это короче, использовав модуль числа, функцию ABS (от англ. absolute - абсолютный).
80 IF ABS(A+B+C-D-E-F)=1 THEN S=S+1

Задание 3в. Найдите количество билетов, у которых произведение первых трёх цифр равно произведению последних трёх.

Задание 3г. Найдите количество шестизначных чисел, у которых цифра десятков в два раза больше цифры единиц, а сумма цифр сотен и тысяч на 1 меньше суммы цифр десятков тысяч и сотен тысяч. Подсказка: запишите приведённые условия в буквенном виде. В каких границах может изменяться первая цифра шестизначного числа?

пʼятниця, 22 квітня 2011 р.

Итоги конкурса по поиску 401А

Женька
lera
Настя
нас
,jlzy
sun
Попова, Балащ,Дербинёва
Аня
Маринка
Без подписи
Юля
1. Интернет-страница
12
10
8
7
6
5
2. Арал
12
6
10
7
8
5
3. Генерал
12
8
10
7
5
2
6
3
4
4. Демиурги
10
3
12
6
2
5
4
7
8
5. Отец кибернетики
2
10
8
6
4
7
3
5
12
6. Престолы
На этот вопрос с подвохом ответа найти не удалось
7. Пятиугольный флаг
10
8
7
12
4
5
7
6
3
8. Амбер
Вопос остался без ответа
9. Нафталин
12
10
10. Знак =
8
10
12
6
5
7
4
11. Кольцо
12
10
6
7
8
6
12.Евро
8
6
12
10
4
5
7
3
Всего:
76
61
79
74
26
15
47
32
26
55
16

Молодцы! :)

И ещё одно. За тему "Интернет" в вашей группе можно заработать 1 автомат и много дополнительных баллов. Для этого придумайте, на какую тему будете создавать блог, сделайте его, заполните материалом, и после майских проведём замер популярности. 

Автор блога, который окажется выше в выдаче Гугла по тематическому поисковому запросу, получает автомат по дисциплине "Информатика". Остальным за создание блога будут начислены баллы, которые пойдут в итоговый учёт.

понеділок, 4 квітня 2011 р.

Результаты чемпионата по поиску 403

Юля Dasha anna_nadia НадяАня artem
1 - пятиугольній флаг вопрос остался без ответа
2 - Николай II вопрос остался без ответа
3 -  Супер Гуппи 8 10 12
4 - Онегин 10 12 8 7
5 - династии 10 8 12
6 - чакра 10 12 7 6 8
7 - реактор 10 12
8 - метеорит 8 10 12 7
9 - гильдии 8 10 12 7
10 - воздушный шар 10 12
11 Луноход 10 12
12 - флаг Сейшел 10 8 7 12
Итого: 94 94 74 21 34

Молодцы!

И теперь ещё раз повторяю условие задания по раскрутке блога.

Придумываете тему, по которой вам хотелось бы создать блог. Придумываете поисковый запрос, по которому вы будете этот блог продвигать. Запрос должен содержать до 5 слов русского языка, в него не должны входить имена собственные.

Далее, если после майских каникул ваш блог окажется на первой странице гугла по соответствующему запросу, вы получаете автомат (в наличии 1) или дополнительные баллы в рейтинг.

Чемпионат по интернет-поиску

Сегодня с 9:20 в этом блоге будут появляться вопросы, ответы на которые нужно найти в интернете. Ответ на вопрос должен состоять из: собственно ответа, ссылки на сайт, на котором вы его нашли, и номера компьютера за которым сидите. Отправляйте ответы в комментарии к постам с вопросами.

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

Ваши комментарии до конца пары будут скрыты. Подсчёт очков ведётся по схеме:
1й правильный ответ - 12 баллов,
2й правильный ответ - 10 баллов,
3й и т.д.: 9, 8, 7, 6, и т.д. баллов.

середа, 23 березня 2011 р.

5 Головоломок

Моя новая флеш-игра вышла в большой интернет!


На этот раз я выпустил сборник из пяти логических задач. Сейчас она участвует в конкурсах на двух крупнейших порталах: Kongregate и Newgrounds. Очень нужна ваша поддержка в голосовании! Оно происходит по ссылкам:

5 Головоломок на Kongregate
5 Головоломок на Newgrounds

И ещё одно: В 70й и 87 ротах Сергей Тихонович согласен учитывать успешность решения задач в игре в общем рейтинге, наряду с баллами за практические и лабораторные занятия. Так что не забывайте отправлять свои результаты после прохождения уровней. :)

субота, 19 березня 2011 р.

Языки

Кто знает какие-то иностранные языки кроме английского? Напишите мне, есть интересное предложение :)

пʼятниця, 18 березня 2011 р.

Моделирование движения тел - основы

Сделаем программу, в которой цветной круг будет летать по экрану и отскакивать от краёв.
Что нужно знать для того, чтобы задать положение круга на экране?
Положение его центра (Х, Y) и радиус R. Для красоты круг можно рисовать некоторым цветом C
Что нужно знать, чтобы круг двигался?
Проекции его скорости на оси х и у: VX и VY.
На компьютере движение тела моделируется следующим образом:
Выбирается небольшой шаг времени DT, и с этим шагом каждый раз вычисляются новые координаты тела. Для прямолинейного движения формула будет:
X=X+VX*DT
Y=Y+VY*DT
Т.е. координата по оси Х будет той, что была, плюс то расстояние, на какое тело успело переместиться за время DT. Аналогично и для игрека.
Теперь как математически выразить отражение круга от края экрана?
Рассмотрим четыре его положения:
В положениях левее круга 1 и правее круга 3 происходит отражение от вертикальных границ. Это значит, что скорость VX должна поменять знак.
Если круг будет левее положения 1, то для него будет верным неравенство X<=R. Если он правее круга 3, то верно неравенство X>=600-R.
Поэтому команда отражения от вертикальных стенок будет выглядеть так:
IF X<=R OR X>=600-R THEN VX=-VX
В положениях ниже круга 2 и выше круга 4 менять знак должна скорость VY.
Поэтому, аналогично
IF Y<=R OR Y>=300-R THEN VY=-VY
Теперь сформулируем алгоритм, по которому круг будет летать по экрану
  1. Перевести экран в графический режим
  2. Инициализировать переменные
  3. Стереть старое положение круга
  4. Просчитать новое положение круга
  5. Нарисовать круг
  6. Проверить отражение
  7. Перейти к пункту 3
Сделаем на основе алгоритма программу, используя соображения, приведённые ранее.
Пункт 1 реализуется двумя стандартными строками:
10 SCREEN 9
20 CLS
Пункт 2: зададим переменным случайные стартовые значения
30 X=60+RND*400
40 Y=60+RND*200
50 R=10+RND*40
60 C=INT(1+RND*15)
70 DT=0.1
80 VX=RND*20-10
90 VY=RND*20-10
Таким образом, координата центра круга по оси х будет в пределах от 60 до 460, по оси у – от 60 до 260, радиус круга – от 10 до 50, цвет – любым целым числом от 1 до 15 (именно до 15-ти, т.к. RND всегда строго меньше единицы).
Шаг времени задаём равным 0,1 секунды, если понадобится – отрегулируем потом. Проекции скорости по осям х и у будут в пределах от -10 до 10.
Пункт3. Чтобы стереть изображение, его нужно нарисовать нулевым цветом, т.е. чёрным
100 CIRCLE(X,Y),R,0
Пункт 4. Применяем выведенные формулы
110 X=X+VX*DT
120 Y=Y+VY*DT
Пункт 5 – рисуем круг в новых координатах
130 CIRCLE(X,Y),R,C
Пункт 6 – применяем выведенные формулы отражения
140 IF X<=R OR X>=600-R THEN VX=-VX
150 IF Y<=R OR Y>=300-R THEN VY=-VY
Пункт 7 – возвращаемся к пункту 3 алгоритма, т.е. к 100й строке программы
160 GOTO 100
Запускаем программу, наблюдаем, наслаждаемся плодами труда своего J
Итак, если вы всё внимательно делали и разобрались, то удовлетворительное написание рубежа вам обеспечено. Для хороших и отличных оценок нужно уметь моделировать гравитацию и движение нескольких тел. Это вопрос будет разобран с следующей статье.