Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Рабочая программа'
Настоящая рабочая программа составлена на основе Федерального компонента Государственного стандарта основного общего образования и Примерной программ...полностью>>
'Документ'
Работа педагогического коллектива школы №66 в 2010/2011 учебном году была направлена на выполнение основной цели общеобразовательного учреждения – под...полностью>>
'Рабочая программа'
Рабочая программа составлена на основе программы «Физика и астрономия» для общеобразовательных учреждений 7 – 11 классов, рекомендованной «Департамен...полностью>>
'Закон'
вдов ) Выпуск газет по классам по тематике о Великой Отечественной войне; 7) Конкурс на лучшее сочинение «Письмо солдата с фронта»; 8) Тематические к...полностью>>

Первый урок первая программа 8 Сохранение и запуск проекта на выполнение 11 Сохранение проекта 11

Главная > Урок
Сохрани ссылку в одной из сетей:

Четвёртый урок – использование оператора ветвления

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

Константину нужно вычислить модуль введенной числовой величины (расстояние от начала координат) с помощью программы. Он не знает стандартной функции Pascal abs. Помогите ему это сделать (использовать стандартную функцию нельзя).

Контрольный пример:

-17,78 ответ: 17,78 3 ответ: 3

После запуска форма может выглядеть так:

Место для вывода результатов.
Пока не видно


По щелчку на кнопке ОПРЕДЕЛИТЬ появится результат:

После изменения данных в любом из компонентов Edit можно снова пересчитать результат, нажав на кнопку ОПРЕДЕЛИТЬ.

Код программы

Процедура Click для кнопки ОПРЕДЕЛИТЬ с дополнительным заданием

procedure TForm1.Button1Click(Sender: TObject);

begin

a := strtofloat(edit1.Text); { получаем число }

if a < 0 then { не полная форма оператора
ветвления }

a := -a;

Label5.Caption := floattostr(a);

end;

Дополнительное задание для тех, кто сделал задачу о модуле числа:

Вывести сообщение в следующем виде после нажатия на кнопку ОПРЕДЕЛИТЬ – “модуль числа | число | = модель числа”

Пример: модуль числа | -17,78 | = 17,78

 – символ | на кнопке, где \ / на английской раскладке

Примерные задания для третьего урока

  1. Для созревания картофеля нужно 90 дней. Прошло N дней после посадки. Можно ли выкапывать картофель?

Контрольный пример:

N – 67, ответ: рано.

N – 90, ответ: можно выкапывать.

  1. *Усложним предыдущую задачу.

До 85 – “рано”, от 85 до 89, “в принципе можно”, от 90 – 110 дней – “время выкапывать”, более 110 дней – “можешь все проспать”.

  1. Молодой богатырь Данило Забияка решил мир посмотреть и себя показать. Взял с собой он сумму в A рублей (не менее 50). Вот подъезжает он к перекрестку и видит камень, на котором написано, – “налево пойдешь – пол суммы потеряешь и еще 20 рублей, направо пойдешь – утроишь свою сумму”. Данило подумал, что это вранье, да и не пристало добру молодцу кого-то бояться и поехал налево. Все случилось пописанному. Вернулся Данило к перекрестку и решил поехать направо. Снова все получилось, как написано на камне. Интересно – в проигрыше ли оказался Данило?

Контрольный пример:

A = 60 Ответ: в проигрыше

A = 200 Ответ: в выигрыше

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

Контрольный пример:

24,50 13, 48 ответ: первая сестра 5,51

20, 30 ответ: вторая сестра 5

  1. Коля, Вася и Маша решили купить в столовой комплексный обед (фиксированный набор продуктов, следовательно, фиксированная цена одного обеда) стоимостью A рублей. Смогут ли они купить обед на каждого, если у Коли B рублей, Васи С рублей, а у Маши D рублей?

Контрольный пример:

A = 19,50; B = 4,8; C = 23,1; D = 20,1 Ответ: нет

A = 19,50; B = 14,8; C = 23,1; D = 20,1 Ответ: да

  1. Коля, Вася и Маша собирали ягоды. После окончания сбора Маша решила отдать свои ягоды тому, кто меньше собрал ягод. Если же мальчики собрали одинаковое количество (в литрах), то разделить ягоды поровну. Сколько стало ягод у Коли и Васи, если ребята соответственно собрали A, B и C литров ягод?

Контрольный пример:

3 4,5 4 ответ: 7 4,5

4,5 4,5 6 ответ: 7,5 7,5

  1. Кролик и бобер участвовали в одной команде по переноске воды из одного блюда в другое, используя соответственно чашку и кружку. Их команда проиграла. Кролик обвинил бобра в том, что тот медленно бегал. На это бобер ответил, что в кружке он за один раз переносил больше воды. Помогите им определить, кто из них прав, если кролик A раз вылил воду из чашки, бобр B раз из кружки? В кружку входило по C мл, а в чашку по D мл.

Контрольный пример:

A = 5 B = 3 C = 50 D = 70 – прав кролик

A = 5 B = 4 C = 50 D = 70 – прав бобёр

A = 7 B = 5 C = 50 D = 70 – оба ошиблись

Вопросы для самоконтроля

  1. Какая функция переводит строковые данные в вещественные?

  2. Какая функция переводит строковые данные в целые?

  3. Какая функция переводит вещественные данные в строковые?

  4. Какая функция переводит целые данные в строковые?

  5. Для запуска формы нужно …?

  6. Для сохранения формы и проекта нужно …?

  7. Где нельзя ставить символ “;” в операторе ветвления?

  8. Сколько операторов можно записать после ключевых слов then и else?

Пятый урок – использование Shape для “рисования”

На этом уроке попробуем рисовать графическими примитивами (Shape), которые есть в Delphi. Данный инструмент для рисования нормальной картинки, не говоря уже о хорошей, использовать, конечно, очень трудно. Обычно Shape используется для рисования нестандартных кнопок. Для изучения возможностей попробуем что-нибудь нарисовать.

Для начала познакомимся с графическими примитивами:

  1. Они находятся в закладке Additional, компонент Shape (круг, треугольник, квадрат) – смотри рисунок № 1

компонент

рис. № 1

  1. При щелчке на форме или выделении области после выбора Shape появится прямоугольник – один из графических примитивов. Всего их шесть:

В компоненте Shape выбираем параметр Shape (смотри рисунок № 2). Появится список графических примитивов:

    • stCircle – круг;

    • stEllipse – эллипс;

    • stRectangle – прямоугольник;

    • stRoundRect – прямоугольник с закруглёнными углами;

    • stRoundSquare – квадрат с закруглёнными углами;

    • stSquare – квадрат.

Все графические примитивы располагаются в выделенной прямоугольной области. Изменяя её размеры, мы автоматически изменяем размеры графического примитива.

рис. № 2

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

  1. Каждый графический примитив имеет контур и внутреннюю заливку:

    1. контур – параметр Pen

Параметр Pen имеет четыре подпараметра

(смотри рисунок № 3):

  • Color – цвет контура, выбираем как обычно;

  • Mode –

  • Style – стиль линии, варианты смотри на рисунке № 4, запомни: psSolid – сплошная линия;

  • Width – толщина линии.

рис. № 3

рис. № 4

    1. заливка – параметр Brush

Параметр Brush имеет два подпараметра:

  • Color – цвет

  • Style – стиль заливки

рис. № 5

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

  • вызвать контекстное меню на объекте;

  • из полученного списка выбрать строку Control;

  • из появившегося списка:

Bring to Front – на передний план,

Send to Back – на задний план.

Задание:

Нарисовать картину, содержащую минимум: пять прямоугольников, квадратов; пять кругов, эллипсов; три отрезка; фон формы не стандартный. Картина должна отображать какой-нибудь сюжет.

Пусть у вас получился примерно такой рисунок сразу после запуска программы (смотри рис. № 6):

рис. № 6

На рисунке можно заметить, что одни графические примитивы имеют контур, другие нет, некоторые как бы не полностью нарисованы, например, плавник у рыбы изображен частью эллипса.

Как убрать часть графического примитива:

  • рисуем графический примитив, например, эллипс у рыбки;

  • накладываем сверху на эллипс другой графический объект так, чтобы он закрывал часть эллипса;

  • убираем у него контур (psClear для Type в Pen) и выставляем цвет закраски в Brush как цвет фона, на котором нарисован плавник.

Примерные задания для пятого урока

Нарисовать картину, содержащую минимум: пять прямоугольников (квадратов); пять эллипсов (кругов); три отрезка; фон формы не стандартный.

  1. Новый год

  2. Лето

  3. Морская или речная тема

  4. Космос

  5. Природа

  6. Твоя комната

Вопросы для самоконтроля

  1. Какие графические фигуры можно выбрать в Shape?

  2. За что отвечают параметры Pen и Brush?

  3. Как убрать контур?

  4. Как нарисовать горизонтальную линию?

  5. Как нарисовать вертикальную линию?

  6. В каких границах находится Shape?

  7. Что такое передний и задний планы объекта?

Шестой урок – использование Timer для “движения” объектов на форме

Объект Timer

Познакомимся с новым компонентом Timer, который поможет нам выполнить движение объектов на форме. Timer находится на вкладке System и выглядит как часы (смотри рис. № 1).

вкладка

таймер

рис. № 1

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

Рассмотрим параметры таймера и единственную процедуру (рис. № 2):

Активность таймера

Значение в миллисекундах,

1 сек = 1000 миллисекунд

рис. № 2

Enabled – логическая величина, следовательно имеет два значения: true и false. Если значение равно true, то через каждые миллисекунды интервала таймера (interval) выполняется процедура данного таймера. При значении false вызов процедуры таймера не происходит.

Interval – задается в миллисекундах. Использование параметра описано выше.

В закладке инспектора объекта Events – процедуры-события, находится всего одна процедура, которая вызывается, если параметр Enabled равен true.

Для движения объекта на форме воспользуемся возможностями таймера, применив, например, следующий алгоритм:

  • начальное значение параметра активности таймера равно false (чтобы графический объект при запуске формы не “поехал”);

  • интервал пусть будет 100 миллисекунд;

  • в процедуре-событии опишем движение объекта, используя параметры top и left для движения по вертикали или горизонтали;

  • запуск работы таймера по событию click на кнопке начало.

Как заставить графический объект “двигаться”?

Как это осуществить? Рассмотрим следующий пример: выполнить движение некоторого графического объекта слева направо.

Пусть картинка как на рисунке № 3 – пять объектов Shape: четыре круга и один прямоугольник. Кроме этого на форме есть кнопка “старт”, и таймер.

рис. № 3

  1. Зададим начальные значения параметрам компонента Timer1 (смотри алгоритм);

  2. В процедуре click для кнопки запишем команду:

Timer1.Enabled := true;

Включим таймер при нажатии на кнопку;

  1. Определяем Shape, у которого самая “правая” часть картинки. В нашем примере это будет Shape3;

  2. Записываем команды в процедуре таймера для движения картинки.

Примеры программ на движение

Первая программа – движение слева направо

Просмотрите код Unit1.pas для нашего примера:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons;

type

TForm1 = class(TForm)

Timer1: TTimer; { таймер }

Shape1: TShape; { первое }

Shape2: TShape; { колесо }

Shape3: TShape; { второе }

Shape4: TShape; { колесо }

Shape5: TShape; { прямоугольник }

BitBtn1: TBitBtn; { кнопка с цветным текстом,}

{ находится в закладке Additional}

procedure BitBtn1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

// Таймер активен, следовательно, через каждые

// 100 миллисекунд будет происходить вызов процедуры // Timer1Timer

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

Timer1.Enabled := true;

end;

// Ориентируемся по Shape, у которого самая

// правая граница.

// В нашем примере это Shape3.

// Правая граница Shape3 = левый отступ + длина

// шейп, т.е. Shape3.Left + Shape3.Width

// Timer1 активен пока не достигли почти правой

границы формы

procedure TForm1.Timer1Timer(Sender: TObject);

begin

// 30 пикселей не доходить до правой границы формы

if Shape3.Left + Shape3.Width <

Form1.Width – 30 then

begin

// передвигаем вправо на 3 пикселя все части

// движущейся картинки

Shape1.Left := Shape1.Left + 3;

Shape2.Left := Shape2.Left + 3;

Shape3.Left := Shape3.Left + 3;

Shape4.Left := Shape4.Left + 3;

Shape5.Left := Shape5.Left + 3;

end

else

// достигли правой границы движения –

// выключаем таймер

timer1.Enabled := false;

end;

end.

При движении по вертикали будем использовать параметр Top – отступ от верхней границы формы. Значение высоты объекта находится в параметре Height.

Разберите пример использования нескольких таймеров, а так же применение “подкладки” (Panel) под картинкой для простоты кодирования движения. В примере есть рисунок, который был нарисован в Paint и вставлен как объект Image из вкладки Additional. Для связи картинки с Image в параметре Picture

Выбор картинки – щелчок на

Для вставки картинки на форме

Параметр отображения картинки в указанной области

Прозрачный или нет белый фон картинки

рис. № 4

Вторая программа – движение ракет вверх с использованием Shape, картинки и панели

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

Расположение объектов на форме можно рассмотреть на рисунке № 5:

  • первая ракета из Shape;

  • вторая из таких же шейпов на панели (Panel находится в Standard);

  • третья нарисована в Paint и вставлена через Image.

После нажатия на кнопку старт она становится недоступной – параметр Enabled становиться равным false.

рис. № 4

рис. № 5

Просмотрите как работает программа с тремя ракетами.

var

Form1: TForm1;

step : byte = 3; { шаг смещения ракеты равен 3 пикселям }

implementation

{$R *.dfm}

// Пример движения графических объектов: Shape, Panel, Image

// Вторая ракета стартует после выхода на орбиту первой,

// то же самое и со второй.

// Вторая и третья ракета могут стартовать и при нажатии

// кнопок "старт"

// Обращение к объекту Timer происходит каждый раз по

// прошествии милисекунд, указанных в параметрах таймера.

// Если таймер имеет начальное значение параметра Enabled

// равным true, то он стартует одновременно с активизацией

// формы, иначе (значение false) только тогда, когда

// параметр Enabled будет равен true.

// Процедура движения стандартных графических образов -
// Shape

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if Shape4.Top > 50 then { пока не долетели - сдвиг на шаг }

begin

Shape1.Top := Shape1.Top - step;

Shape2.Top := Shape2.Top - step;

Shape3.Top := Shape3.Top - step;

Shape4.Top := Shape4.Top - step;

Shape5.Top := Shape5.Top - step;

Shape6.Top := Shape6.Top - step;

Shape7.Top := Shape7.Top - step;

Shape8.Top := Shape8.Top - step;

end

else

begin

timer1.Enabled := false; { выключить таймер - стоп }

// Вызов процедуры-события Click на кнопке Button2

// для автоматического старта второй ракеты

Form1.Button2.Click; { старт второй ракеты }

end;

end;

// Кнопка старт для первой ракеты

procedure TForm1.Button1Click(Sender: TObject);

begin

timer1.Enabled := true; { включить таймер - старт }

Button1.Enabled := false; { кнопка старт неактивна }

end;

// Процедура движения панели (Panel)

procedure TForm1.Timer2Timer(Sender: TObject);

begin

if Panel1.Top > 50 then { пока не долетели - сдвиг на шаг }

Panel1.Top := Panel1.Top - step

else

begin

timer2.Enabled := false; { выключить таймер - стоп }

// Вызов процедуры-события Click на кнопке Button3

// для автоматического старта третьей ракеты

Form1.Button3.Click; { старт третьей ракеты }

end;

end;

// Кнопка старт для второй ракеты

procedure TForm1.Button2Click(Sender: TObject);

begin

timer2.Enabled := true; { включить таймер - старт }

Button2.Enabled := false; { кнопка старт неактивна }

end;

// Процедура движения графического образа (Image)

procedure TForm1.Timer3Timer(Sender: TObject);

begin

if Image1.Top > 50 then { пока не долетели - сдвиг на шаг }

Image1.Top := Image1.Top - step

else

timer2.Enabled := false;

end;

// Кнопка старт для третьей ракеты

procedure TForm1.Button3Click(Sender: TObject);

begin

timer3.Enabled := true; { включить таймер - старт }

Button3.Enabled := false; { кнопка старт неактивна }

end;

end.

Как выполнить движение по диагонали?

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

Примерные задания для шестого урока

Нарисовать картину на форме или панели (минимум из 6-и Shapes) и выполнить движение:

  1. направо, затем вверх из левого нижнего угла формы;

  2. налево, затем вверх из правого нижнего угла формы;

  3. вниз, затем вправо из левого верхнего угла формы;

  4. вниз, затем влево из правого верхнего угла формы

  5. Нарисовать в Paint:

  • Бабу Ягу в ступе,

  • космический корабль;

  • автомобиль;

  • вертолёт

и

а) выполнить движения как в вариантах 1 – 4;

б) выполнить движение по диагонали в направлении:

  • левый нижний – правый верхний;

  • левый верхний угол – правый нижний;

  • правый нижний угол – левый верхний;

  • правый верхний угол – левый нижний

Вопросы для самоконтроля

  1. Какие новые компоненты Вы узнали?

  2. Расскажите алгоритм движения картинки сверху вниз.

  3. Почему параметр Enabled в Timer должен быть true при движении?

  4. Зачем при достижении конца движения нужно выключить (сделать неактивным) Timer?

  5. Сколько таймеров Вы будете использовать для первого варианта задания?

  6. Как выполнить движение графического объекта из правого нижнего угла в левый верхний?

  7. Опишите алгоритм программы движения графического объекта по периметру.

Седьмой урок – цикл с параметром (For)

Познакомимся с новым конструкцией – цикл с параметром:

For <1> := <2> to | downto <3> do

<4>;

1 – переменная порядкового типа;

2 – начальное значение переменной;

3 – конечное значение переменной;

4 – оператор;

to – шаг +1;

downto – шаг -1.

Нужно решить следующую задачу: сколько трехзначных чисел имеют удвоенную сумму цифр равную произведению цифр? Напечатать эти числа.

Пусть наша форма будет иметь следующий вид:

Label4

Label6

Код процедуры Click для кнопки определить

procedure TForm1.Button1Click(Sender: TObject);

begin

n := 0; { счетчик количества цифр }

s := ''; { строковая переменная для вывода результата }

for a := 1 to 9 do { цифра сотен }

for b := 0 to 9 do { цифра десятков }

for c := 0 to 9 do { цифра единиц }

if 2*(a + b + c) = (a * b * c) then

begin

n := n + 1;

if n mod 7 = 0 then { для вывода по семь чисел в

строке }

s := s + inttostr(100*a + 10*b + c) + #13

{ можно и chr(13) }

else

s := s + inttostr(100*a + 10*b + c) + ' ';

end;

Label4.Caption := inttostr(n);

label6.Caption := s;

end;

Вопросы для самоконтроля

  1. Какую новую конструкцию языка Pascal Вы узнали?

  2. Почему в первом цикле переменная a начинается с 1, а переменные b и c с ноля.

  3. Какие переменные и для чего используются в процедуре?

  4. Как и где можно объявить переменные, встречающиеся в процедуре?

  5. Зачем используется #13?

  6. Почему в процедуре использовали три цикла с параметром?

  7. Сколько циклов с параметром Вы запишете в алгоритме для пятизначных чисел?

  8. Для чего после вывода числа добавляли два пробела?



Скачать документ

Похожие документы:

  1. Программа социально-экономического развития пермского края на 2009-2012 годы и на период до 2017 года (1)

    Программа
    2.1.1.2.2.3.1.1. Предупреждение опасного поведения различных категорий участников дорожного движения, формирование законопослушного поведения и негативного отношения граждан к правонарушениям в сфере дорожного движения 56
  2. Программа духовно-нравственного развития, воспитания обучающихся на ступени начального общего образования на 2011-2012 учебный год (2)

    Программа
    Нормативно-правовой и документальной основой Программы духовно-нравственного развития обучающихся на ступени начального общего образования являются Закон «Об образовании», федеральный государственный образовательный стандарт начального
  3. Программа духовно-нравственного развития, воспитания обучающихся на ступени начального общего образования Конец формы

    Программа
    Программа духовно-нравственного воспитания и развития учащихся разработана в соответствии с требованиями Закона «Об образовании», Федерального государственного образовательного стандарта начального общего образования, на основании
  4. Программа духовно-нравственного развития и воспитания на ступени начального общего образования (1)

    Программа
    Программа духовно-нравственного развития и воспитания на ступени начального общего образования является частью основной образовательной программы начального общего образования Муниципального общеобразовательного учреждения Минькинская
  5. Программа "социально-экономического развития города иркутска на 2004 2007 годы"

    Программа
    Рассмотрев Программу "Социально-экономического развития города Иркутска на 2004 - 2007 годы", руководствуясь ст. 179 Бюджетного кодекса РФ, ст.

Другие похожие документы..