понеділок, 25 березня 2013 р.
неділя, 24 березня 2013 р.
Високосные годы
Знаете, по какому правилу определяется. является ли год високосным?
Високосные годы - те, которые делятся на 4. Но есть исключения. Если номер года оканчивается на два нуля, но не делится на 400, такой год не будет високосным.
Так, високосные годы 1904, 2004, 2008, 2012. Високосным были и 2000 и 1600 годы. Но годы 1700, 1800, 1900 и 2100 - не високосные.
Вам нужно написать программу, которая выведет на экран числа от 1800 до 2100 и укажет, является ли год високосным.
Результат должен быть таким:
1800 - не високосный
1801 - не високосный
1802 - не високосный
1803 - не високосный
1804 - високосный
1805 - не високосный
1806 - не високосный
1807 - не високосный
1808 - високосный
и т.д........
Напоминаю, чтобы проверить, делится ли число a на число b, нужно найти остаток от деления a на b. Этот остаток должен быть равен нулю. 
B Паскале это выглядит так:
if (a mod b = 0) then
понеділок, 18 березня 2013 р.
Как всё-таки решаются задачи с циклами
На позапрошлом занятии были даны 5 заданий на циклы for. К сожалению, даже второе вызвало у многих затруднения. Давайте ещё раз разберём их.
Для начала напомню общую структуру программы в Pascal
program Project1;//имя программы. Не играет роли
{$AppType CONSOLE} //Эту строку вставляет сама Делфи, показывает, что будет паскалевское приложение
uses SysUtils;//Используемые модули. Если работаем черед Делфи, ничего не меняйте
var //здесь объявляются переменные. Если в программе нет ни одной переменной, он не нужен
begin
//Здесь будет текст собственно программы
Readln; //Эта команда нужна, чтобы окно после завершения работы не закрывалось автоматически, а можно было увидеть результат.
end.
Напомню также структуру оператора цикла
for {переменная} := {начальное значение переменной} to {конечное значение переменной} do
begin
{действия, которые нужно выполнить}
end;
Задание 1.
Написать программу, которая выведет на экран все числа от 1 до 100
Здесь всё просто (в этом и последующий примерах я буду приводить только блок var и всё, что находится между begin и end)
var i:integer;//забили в памяти ячейку для целого числа - счётчика цикла
begin
for i := 1 to 100 do //Выполняем действие 100 раз
begin
Writeln(i); //А действие это - напечатать число
end;
Readln;
end.
Задание 2.
Написать программу, которая выведет на экран квадраты чисел от 1 до 100
Чем это задание отличается от предыдущего? Только действием. Значит и в программе надо поменять только действие:
var i:integer;//забили в памяти ячейку для целого числа - счётчика цикла
begin
for i := 1 to 100 do
begin
Writeln(i*i); //Теперь будет печататься квадрат числа
end;
Readln;
end.
Задание 3.
Написать программу, которая выведет на экран квадраты только нечётных чисел от 1 до 100
Чем эта программа отличается от предыдущей? Тем, что перед тем, как выполнить действие, выполнится проверка на чётность. Можно исопльзовать функцию odd() а можно - деление с остатком, mod.
var i:integer;
begin
for i := 1 to 100 do
begin
if odd(i) then
Writeln(i*i); //Теперь будут печататься только нечётные квадраты
end;
Readln;
end.
Задание 4.
Написать программу, которая попросит у человека ввести число, а затем найдёт сумму всех чисел от 1 до введённого числа
Вот здесь было больше всего непоняток. Чем эта программа отличается от самой первой? Тем, что верхняя граница заранее не известна, а её будет водить человек.
Значит, нужна переменная, значение которой мы попросим ввести человека, а затем используем как верхнюю границу в цикле.
var i:integer;
n:integer;//вот это вторая переменная
begin
WriteLn('Vvedite Chislo'); //Сначала объясняем человеку, что мы от него хотим
ReadLn(n);//получаем это число от человека
for i := 1 to n do //Выполняем действие n раз
begin
Writeln(i); //А действие это - напечатать число
end;
Readln;
end.
Задание 5.
Написать программу, которая выведет следующие 100 строк:
1 год
2 года
3 года
4 года
5 лет
6 лет
и т.д.
Давайте для начала сделаем английский аналог.
1 year
2 years
3 years
и т.д.
Вспомним задачу 3. Если число будет равно 1, нужнописать year, а если больше - years.
begin
for i := 1 to 100 do
begin
if i=1 then
Writeln(i, ' year')
else
Writeln(i, ' years');
end;
Readln;
end.
А для русского языка сформулируйте условия самостоятельно и напишите аналогичную программу.
Подскажу, как определить, заканчивается ли число на единицу. Последняя цифра числа - это его остаток от деления на 10. Поэтому русская фраза "Если число i оканчивается на единицу, то..." в Паскале будет выглядеть как:
if (i mod 10) = 1 then
Для начала напомню общую структуру программы в Pascal
program Project1;//имя программы. Не играет роли
{$AppType CONSOLE} //Эту строку вставляет сама Делфи, показывает, что будет паскалевское приложение
uses SysUtils;//Используемые модули. Если работаем черед Делфи, ничего не меняйте
var //здесь объявляются переменные. Если в программе нет ни одной переменной, он не нужен
begin
//Здесь будет текст собственно программы
Readln; //Эта команда нужна, чтобы окно после завершения работы не закрывалось автоматически, а можно было увидеть результат.
end.
Напомню также структуру оператора цикла
for {переменная} := {начальное значение переменной} to {конечное значение переменной} do
begin
{действия, которые нужно выполнить}
end;
Задание 1.
Написать программу, которая выведет на экран все числа от 1 до 100
Здесь всё просто (в этом и последующий примерах я буду приводить только блок var и всё, что находится между begin и end)
var i:integer;//забили в памяти ячейку для целого числа - счётчика цикла
begin
for i := 1 to 100 do //Выполняем действие 100 раз
begin
Writeln(i); //А действие это - напечатать число
end;
Readln;
end.
Задание 2.
Написать программу, которая выведет на экран квадраты чисел от 1 до 100
Чем это задание отличается от предыдущего? Только действием. Значит и в программе надо поменять только действие:
var i:integer;//забили в памяти ячейку для целого числа - счётчика цикла
begin
for i := 1 to 100 do
begin
Writeln(i*i); //Теперь будет печататься квадрат числа
end;
Readln;
end.
Задание 3.
Написать программу, которая выведет на экран квадраты только нечётных чисел от 1 до 100
Чем эта программа отличается от предыдущей? Тем, что перед тем, как выполнить действие, выполнится проверка на чётность. Можно исопльзовать функцию odd() а можно - деление с остатком, mod.
var i:integer;
begin
for i := 1 to 100 do
begin
if odd(i) then
Writeln(i*i); //Теперь будут печататься только нечётные квадраты
end;
Readln;
end.
Задание 4.
Написать программу, которая попросит у человека ввести число, а затем найдёт сумму всех чисел от 1 до введённого числа
Вот здесь было больше всего непоняток. Чем эта программа отличается от самой первой? Тем, что верхняя граница заранее не известна, а её будет водить человек.
Значит, нужна переменная, значение которой мы попросим ввести человека, а затем используем как верхнюю границу в цикле.
var i:integer;
n:integer;//вот это вторая переменная
begin
WriteLn('Vvedite Chislo'); //Сначала объясняем человеку, что мы от него хотим
ReadLn(n);//получаем это число от человека
for i := 1 to n do //Выполняем действие n раз
begin
Writeln(i); //А действие это - напечатать число
end;
Readln;
end.
Задание 5.
Написать программу, которая выведет следующие 100 строк:
1 год
2 года
3 года
4 года
5 лет
6 лет
и т.д.
Давайте для начала сделаем английский аналог.
1 year
2 years
3 years
и т.д.
Вспомним задачу 3. Если число будет равно 1, нужнописать year, а если больше - years.
begin
for i := 1 to 100 do
begin
if i=1 then
Writeln(i, ' year')
else
Writeln(i, ' years');
end;
Readln;
end.
А для русского языка сформулируйте условия самостоятельно и напишите аналогичную программу.
Подскажу, как определить, заканчивается ли число на единицу. Последняя цифра числа - это его остаток от деления на 10. Поэтому русская фраза "Если число i оканчивается на единицу, то..." в Паскале будет выглядеть как:
if (i mod 10) = 1 then
понеділок, 11 березня 2013 р.
Результаты чемпионата по поиску
Результаты 122 группы:
Компьтер 5: 96 баллов
Компьтер 6: 96 баллов
Компьтер 4: 83 балла
Компьтер 10: 77 баллов
Компьтер 9: 60 баллов
Компьтер 3: 45 баллов
Компьтер 8: 22 балла
Поздравляю! Молодцы!
Все вопросы оказались разгаданы, кроме вопроса про Александра II. Интересно, что этот вопрос взял с настоящего кубка Яндекса, а остальные я придумывал сам.
Компьтер 5: 96 баллов
Компьтер 6: 96 баллов
Компьтер 4: 83 балла
Компьтер 10: 77 баллов
Компьтер 9: 60 баллов
Компьтер 3: 45 баллов
Компьтер 8: 22 балла
Поздравляю! Молодцы!
Все вопросы оказались разгаданы, кроме вопроса про Александра II. Интересно, что этот вопрос взял с настоящего кубка Яндекса, а остальные я придумывал сам.
середа, 6 березня 2013 р.
Напишем свою собственную программу
Нашей задачей не является сделать из вас программистов. Однако одно занятие можно потратить на то, чтобы показать, как же создаются программы для компьютера. В 18 кабинете на одном из компьютеров есть хранитель экрана - мыльные пузыри. 
Мы напишем 16 строчек, которые реализуют основную функциональность этого хранителя экрана - движение круга по экрану и отражение его от стен. Работать будем на GWBASIC - языке, специально разработанном для обучения программированию. На рабочем столе должен быть ярлык на эту программу. Запустив её вы увидите чёрный экран - в 1983 году, когда создавалась эта среда, в нём не было ни поддержки Ctrl+С/Ctrl+V ни мыши. Однако, для короткой программки сойдёт.
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
Не забывайте после каждой строки нажимать Enter, чтобы та ввелась в память компьютера. 
  
Теперь добавим гравитацию - пусть круг подскакивает как мячик. Прервите программу, нажав Ctrl+Break.
Выведите текст программы. Для этого нужно набрать команду LIST
Вспоминаем физику. При движении брошенного тела, с ускорением g меняется вертикальная составляющая его скорости, VY. Значит, в программу нужно добавить 2 строки (их можно набирать внизу, они встроятся в нужное место)
Инициализируем переменную G 
Запускам программу, наблюдаем за изменениями в движении. 
Подумайте, как надо изменить программу, чтобы круг притягивался к верхнему краю экрана? А к правому или левому? 
Мы напишем 16 строчек, которые реализуют основную функциональность этого хранителя экрана - движение круга по экрану и отражение его от стен. Работать будем на GWBASIC - языке, специально разработанном для обучения программированию. На рабочем столе должен быть ярлык на эту программу. Запустив её вы увидите чёрный экран - в 1983 году, когда создавалась эта среда, в нём не было ни поддержки Ctrl+С/Ctrl+V ни мыши. Однако, для короткой программки сойдёт.
Что нужно знать для того, чтобы задать положение круга на экране?
Положение его центра (Х, 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
Теперь сформулируем алгоритм, по которому круг будет летать по экрану
- Перевести экран в графический режим
 - Инициализировать переменные
 - Стереть старое положение круга
 - Просчитать новое положение круга
 - Нарисовать круг
 - Проверить отражение
 - Перейти к пункту 3
 
Сделаем на основе алгоритма программу, используя соображения, приведённые ранее.
Пункт 1 реализуется двумя стандартными строками (здесь и далее строки с номерами - это те строки, которые нужно вводить в BASIC. Причём вводить их надо тоже с номерами, как написаны тут):
10 SCREEN 9
20 CLS
Пункт 2: зададим переменным стартовые значения
30 X=200
40 Y=150
50 R=30
60 C=14
70 DT=0.1
70 DT=0.1
80 VX=7
90 VY=5
90 VY=5
Таким образом, координата центра круга по оси х будет равна 200,  по оси у – 150, радиус круга – 30, цвет – 14 (жёлтый).
Шаг времени задаём равным 0,1 секунды, если понадобится – отрегулируем потом. Проекции скорости по осям х и у будут равны 7 и 5.
Пункт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
Запускаем программу. Для этого нужно перейти курсором на пустую строку, набрать RUN и нажать Enter. Наблюдаем, наслаждаемся плодами труда своего J
Теперь добавим гравитацию - пусть круг подскакивает как мячик. Прервите программу, нажав Ctrl+Break.
Выведите текст программы. Для этого нужно набрать команду LIST
Вспоминаем физику. При движении брошенного тела, с ускорением g меняется вертикальная составляющая его скорости, VY. Значит, в программу нужно добавить 2 строки (их можно набирать внизу, они встроятся в нужное место)
75 G=1
Вычисляем новую вертикальную скорость
135 VY=VY+G*DT 
Запускаем программу.
Добавим эффект переливания. Перед каждой отрисовкой будем случайнм образом менять цвет. Дописываем строку:
105 C = INT(1+RND*14)
Запускаем, смотрим. И ещё одна модификация - пусть круг оставляет цветной след. Для этого отключим стирание предыдущего положення круга. Это делается отключением строки 100. Её можно не удалять, а просто поставить после номера строки апостроф:
Запускаем программу.
Добавим эффект переливания. Перед каждой отрисовкой будем случайнм образом менять цвет. Дописываем строку:
105 C = INT(1+RND*14)
Запускаем, смотрим. И ещё одна модификация - пусть круг оставляет цветной след. Для этого отключим стирание предыдущего положення круга. Это делается отключением строки 100. Её можно не удалять, а просто поставить после номера строки апостроф:
100 ‘CIRCLE(X,Y),R,0
пʼятниця, 1 березня 2013 р.
Задания олимпиады по информатике
- Смоделировать бросок двух 6-гранных кубиков (вывести на экран 1 случайных числа от 1 до 6 каждое).
 - Вывести на экран все возможные перестановки из 5 чисел (от 12345 до 54321).
 - Человек вводит 10 чисел (после каждого числа нажимает Enter). Нужно сразу же после того, как она закончил ввод, вывести наибольшее число среди них.
 - Правила игры: на столе лежат N спичек. Играют двое – каждый может своим ходом взять из кучки от 1 до K штук (числа N и K вводятся при начале работы программы). Выигрывает тот, кто забирает последнюю спичку. Компьютер ходит первым. Придумайте выигрышную стратегию и запрограммируйте её.
 - Почему мой профиль Вконтакте (http://vk.com/izvalov) невозможно найти через вконтактовский поиск по имени и фамилии?
 - Как перевести RGB-цвет (67, 247, 82) в HSV представление?
 - В Excel поместите в ячейку A1 число 0,1, под ней (в ячейку A2) напишите формулу =1001*A1-100. Размножьте эту формулу примерно на 20 ячеек столбца A. Объясните полученный эффект.
 - С помощью каких команд в обычном Paint можно фигуру повернуть на 45 градусов?
 
Решения присылайте через ЛС или на почту aviglau@gmail.com
Підписатися на:
Коментарі (Atom)