четвер, 17 лютого 2011 р.

Циклы


Часто в программе нужно выполнить много однотипных действий, например, нарисовать ряд окружностей.
Конечно, такую картинку можно было бы нарисовать, введя 15 команд CIRCLE, но это нерациональный путь. К тому же, если понадобится в такой программе что-то изменить, это будет очень сложно.

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

Для нашего конкретного случая общее здесь то, что рисуются окружности, у них равны радиусы и координаты Y. Различаются же они координатами X. Рисовать их нужно до тех пор, пока координата X не превышает ширину экрана, 550 пикселей.

Теперь можно приступить к написанию программы. Начинается она с двух стандартных строк:
10 SCREEN 9
20 CLS

Теперь производим инициализацию переменных, задаём их начальные значения.
30 X = 20: Y = 30: R = 15

Здесь мы в одной строке поместили несколько команд, разделив их двоеточиями.

Приступаем к рисованию собственно окружности:
40 CIRCLE(X,Y),R
Эта строка -  то основное, ради чего мы использовали цикл. Она называется телом цикла. В теле цикла может быть много строк.

Теперь производим шаг цикла – увеличиваем координату X окружности:
50 X = X+35

И проверяем, нужно ли вернуться и выполнить цикл ещё раз. Возвращаемся мы если X<550. Возвращаться нужно в 40ю строку. По-русски команда на возврат будет выглядеть так:
Если Х< 550 то перейти к 40й строке программы.
На Бейсике это выглядит так:

60 IF X<550 THEN GOTO 40

Обратите внимание, оператор GOTO пишется слитно.

Программа готова.

В шаге цикла можно изменять несколько параметров. Например, если мы хотим, чтобы окружности шли вот так:











Строка 50 должна выглядеть:
50 X = X+35: Y=Y+35: R=R+5

Пример 2.

Линия задаётся четырьмя числами: X1, Y1, X2, Y2. у всех линий координаты Y неизменны, координата X1 увеличивается, а X2 – уменьшается.

Пишем программу.
10 SCREEN 9
20 CLS
30 X1 = 0: Y1 = 0: X2 = 550: Y2 = 330
40 LINE(X1,Y1)–(X2,Y2)
50 X1 = X1+10: X2 = X2-10
60 IF X1<=550 THEN GOTO 40

Подумайте, как сделать, чтобы линии были разноцветными.

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






середа, 16 лютого 2011 р.

Олимпиадные задания


Задания можно решить дома и принести мне или Сергею Тихоновичу до конца этой недели на листочке.

1. Программа может выполнять команды рисования прямоугольников произвольного цвета. С помощью какого наименьшего количества команд она можно нарисовать красно-белую шахматную доску?

2. Сколькими способами число 2011 можно представить в виде разности квадратов натуральных чисел?

3. Составьте алгоритм и программу, которая по введённой дате (число, месяц, год) определял, сколько дней осталось до следующего Нового года.

4. На столе лежит N спичек. Петя и Вася поочерёдно берут оттуда от 1 до 5 спичек, однако нельзя повторять число, взятое соперником на предыдущем ходу. Выигрывает тот, кто забирает последнюю спичку или лишает соперника возможности сделать ход согласно правилам. Начинает Петя, своим первым ходом может взять любое количество от 1 до 5. Найдите общий вид чисел N, при которых партию выиграет Вася.

5. В доме 36 комнат. В каждой комнате лежит определённая сумма денег (указана в таблице). В дом можно зайти через одну из шести дверей с северной стороны, пройти через 6 комнат, двигаясь только прямо или по диагонали, и выйти через одну из шести дверей с южной стороны. Как организовать свой маршрут, чтобы собрать максимальное количество денег? В примере, показанном на рисунке, итоговая сумма составит 27 долларов. Как  увеличить эту сумму?
 a.
1
3
5
1
1
2
4
5
7
6
2
7
2
4
0
2
8
10
2
1
12
5
4
3
4
3
9
0
14
7
16
10
5
11
8
6

b
23
61
71
87
70
61
5
57
85
63
22
10
91
78
47
35
13
11
94
85
34
23
79
77
80
0
39
70
47
40
33
95
73
83
85
5