Глава 2. Организация ветвлений в программах.

Глава 2
Организация ветвлений в программах

  Условный оператор

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

if В {31} else {32}

где в — выражение логического типа; si и 32 — операторы. Выполнение условного оператора осуществляется следующим образом. Вычисляется значение выражения в. Если оно истинно, то выполняются операторы si, если ложно — операторы S2. Если последовательность операторов si или 32 состоит лишь из одного оператора, то фигурные скобки можно опустить. Возможна сокращенная форма условного оператора:

if В {S}

где в — выражение логического типа; з — последовательность операторов. Выполнение краткого условного оператора осуществляется так: вычисляется значение выражения в, если оно истинно, то выполняются операторы з.

  Максимальное значение

Для трех заданных значений а, Ь, с необходимо написать сценарий, определяющий максимальное значение.

На рис. 2.1 приведен вид документа после введения данных и выполнения сценария, определяющего максимальное значение из введенных.

Поступим следующим образом. Сначала максимальным значением m будем считать значение а, далее значение ь сравним с максимальным. Если окажется, что ь больше т, то максимальным становится ь. И, наконец, значение с сравнивается с максимальным значением из предыдущих значений а и ь. Если с больше т, то максимальным становится с. Оператор присваивания obj.res.vaiue=m обеспечивает запись вычисленного максимального значения в соответствующее поле формы. Функция Number (s) преобразует объект s, заданный в качестве параметра, в число. Полностью сценарий может быть записан так, как представлено в листинге 2.1.

Рис 2.1. Максимальное значение последовательности из трех элементов 

 Листинг 2.1. Вычисление максимального значения из трех заданных

<HTML> 

<HEAD>

<TITLE>Вынисление максимального значения</TITLE>

<script language="JavaScript"> 

<!-— //

function maxval (obj ) 

var a = Number(obj.numl.value); 

var b = Number(obj.num2.value); 

var с = Number{obj.num3.value); 

var m=a

if (b > m) m=b 

if (c > m) m=c 

obj.res.value=m }

//--> </script>

</HEAD>

<BODY>

<Н4>Вычисление максимального значения</Н4> 

<FORM name="form1">

Число 1: <input type="text" size=8 name="numl"><hr> 

Число 2: <input type="text" size=8 name="num2"><hr> 

Число 3: <input type="text" size=8 name="num3"><hr> 

Максимальное значение равно

<input type="button" value=OnpefleroiTb onClick="maxval(forml)"> 

<input type="text" size=8 name="res"><hr> 

<input type="reset"> 

</FORM> 

</BODY> 

</HTML>

Решим рассмотренную задачу другим способом. Вспомним, что стандартный объект Math имеет метод max, который определяет наибольшее значение двух аргументов. Опишем функцию maxval 1, которая определяет максимальное значение из трех заданных значений и использует объект Math.

function maxval1 (obj ) 

var a = Number(obj.numl.value);

var b = Number(obj.num2.value);

var с = Number(obj.num3.value);

obj.res.value=Math.max(Math.max(a,b) , c) 

}

Если бы требовалось определить максимальное из четырех заданных значений а, ь, с, d, то можно было бы воспользоваться формулой

Math.max(Math.max(a,b), Math.max(c,d))

  Максимальное и минимальное значения

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

Переменную 1 будем использовать для хранения минимального значения, переменную t — максимального. В результате выполнения условного оператора

if (а > b) {1= b; t = a} else {t = b; 1 = а}

переменная i получит минимальное значение из двух рассмотренных а и ь, переменная t примет максимальное значение из значений а и ь. Затем значение с сравнивается с максимальным значением. Если оказывается, что с больше t, то максимальным становится с. Если же значение с меньше минимального 1, то минимальным становится с. Приведем документ со сценарием решения задачи (листинг 2.2).

Листинг 2.2. Максимальное и минимальное из трех заданных значений:

<HTML> 

<HEAD>

<TITLE>Вычисление максимального и минимального значений</TITLE> 

<script language="JavaScript"> 

<!-— //

function maxminval (obj)  

{  

var a = Number(obj.numl.value); 

var b = Number(obj.num2.value); 

var с = Number(obj.num3.value);

var t if (a > b) {1= b; t = a}

else {t = b; 1 = a} 

if (b > t) t =b 

if (c < 1) l=c obj . resmax. value=t obj.resmin.value=l }

//--> 

</script> 

</HEAD> 

<BODY>

<Н4>Вычисление максимального и минимального значений</Н4>

<FORM name="forml">

Число 1: <input type="text" size=8 name="numl"><br> 

Число 2: <input type="text" size=8 name="num2"><br> 

Число 3: <input type="text" size=8 name="num3"><hr> 

<input type="button" value=Вычислить

onClick="maxminval(forml)"><hr>

<input type="text" size=8 name="resmax">максимальное значение<br> 

<input type="text" size=8 пате="resmin">минимальное значение<br> 

<input type="reset">

</FORM> 

</BODY> 

</HTML>

Стандартный объект Math содержит метод min, определяющий минимальное значение из двух заданных величин. Используя стандартный объект Math и его методы, опишем функцию maxminvi, определяющую максимальное и минимальное из трех заданных значений следующим образом.

function maxminvall (obj) 

var a = Number(obj.numl.value);

var b = Number(obj.num2.value);

var с = Number(obj.num3.value);

obj.resmax.value=Math.max(Math.max(a,b) , c)

obj.resmin.value=Math.min(Math.min(a,b) , c) 

}

  Сортировка чисел

Заданы четыре значения a, b, c, d. Требуется написать сценарий, который сортирует эти числа в порядке возрастания. Вводимые данные представлены так, как указано на рис. 2.2.

Рис 2.2. Пример сортировки последовательности из четырех элементов

Сначала сравниваются значения двух переменных а и ь. Если окажется, что а больше ь, то переменные обмениваются значениями. Далее сравнивается значение а со значением с. Если значение а больше с, то опять эти переменные обмениваются значениями. И, наконец, сравниваются а и d, при необходимости обмениваюся значениями. Таким образом, после описанных действий значение переменной а — минимальное из четырех рассмотренных. Далее значение ь сравнивается последовательно со значением с и а, если необходимо, то осуществляется обмен значений. Значение ь станет минимальным из рассмотренных ь, с, d. Последний шаг — сравнение значений с и d. Полностью программа решения задачи может быть записана так, как представлено в листинге 2.3.

Листинг 2.3. Сортировка последовательности из четырех чисел

<HTML>

<HEAD>

<title>Сортировка последовательности из четырех чисел</title>

<script language="JavaScript">

<!—- //

function sortval(obj)

{ var a = Number(obj.numl.value);

var b = Number(obj.num2.value);

var с = Number(obj.numS.value);

var d = Number(obj.num4.value);

if (a > b) { r =a; a = b; b= r}

if (a>c) { r=a; a=c; c=r}

if (a > d) { r =a; a = d; d= r}

if (b > c) { r =b; b = c; c= r)

if (b > d) { r =b; b = d; d= r}

if (c > d) { r = с; с = d; d= r}

obj.numl.value=a

obj.num2.value=b

obj.num3.value=c

obj.num4.value=d

}

//—->

</script>

</HEAD>

<BODY>

<H4>Сортировка последовательности из четырех чисел</H4>

<FORM name="forml">

Число 1: <input type="text" size=10 name="numl"><hr>

Число 2: <input type="text" size=10 name="num2"><hr>

Число 3: <input type="text" size=10 name="num3"><hr>

Число 4: <input type="text" size=10 name="num4"><hr>

<input type="button" value=Copтировать

onClick="sortva1(form1)"><hr>

<input type="reset" value=Очистить>

</FORM>

</BODY>

</HTML>

После нажатия кнопки Сортировать будет выполнен сценарий, осуществляющий сортировку чисел по возрастанию, и документ примет вид как на рис. 2.3.

Рис 2.3. Отсортированная последовательность

  Вычисление размера стипендии

Требуется написать сценарий определения размера стипендии в зависимости от оценок, полученных во время сессии. Стипендия начисляется по следующим правилам:

  • студенту, сдавшему экзамены на все оценки "отлично", начисляется стипендия в 100 у. е.;
  • если студент получил четверки и пятерки (наличие хотя бы одной пятерки обязательно), то ему полагается стипендия в размере 75 у. е.;
  • если все оценки четверки, то размер стипендии 50 у. е.; 
  • в остальных случаях стипендия не назначается.

При решении задачи поступим следующим образом. Вычислим максимальную и минимальную из оценок, полученных на экзамене. Далее будем исследовать эти значения. Если окажется, что минимальная оценка равна 5, то это означает, что студент все экзамены сдал на оценку "отлично". Если максимальная из оценок равна 5, а минимальная 4, то студенту полагается стипендия в размере 75 у. е. Если и минимальная из оценок, и максимальная равны 4, то все экзамены сданы на 4, поэтому размер назначаемой стипендии — 50 у. е. В остальных случаях стипендия не назначается. Документ с введенными оценками и результатом их анализа представлен на рис. 2.4.

Рис 2.4. Вычисление размера стипендии Приведем документ и текст сценария решения задачи (листинг 2.4).

Листинг 2.4. Вычисление размера стипендии

<HTML> 

<HEAD>

<TITLE>Вычисление размера стипендии</TITLE> 

<script language="JavaScript"> 

<!-— //

function st (obj )

{ var a = Number(obj.numl.value) ;

var b = Number(obj.num2.value);

var с = Number(obj.num3.value);

var d = Number(obj.num4.value);

var 1; var t

var m = 0

if (a > b) {1= b; t = a}

else {t = b; 1 = a}

if (b > t) t=b; if (c > t) t=c; if (d > t) t=d; 

if (b < 1) 1=b; if (c < 1) l=c; if (d < 1) l=d; 

if (1 ==5) {m=100} 

else

if ((t ==5)S& (1 ==4)) {m=75)

else

if ((t ==4)&& (1 ==4)) {m=50} 

if (m==0)

obj.stip.value="K сожалению, Вам стипендия не назначена" 

else

obj.stip.value="BaM назначена стипендия в размере "+m+" y.e."

}

//-—> 

</script> 

</HEAD> 

<BODY>

<Н4>Вычисление размера стипендии по результатам сессии</Н4>

<Н4>Введите полученные оценки в любом порядке</Н4>

<FORM name="form1">

Оценка 1: <input type="text" size=8 name="numl"><br> 

Оценка 2: <input type="text" size=8 name="num2"><br> 

Оценка 3: <input type="text" size=8 name="num3"><br> 

Оценка 4: <input type="text" size=8 name="num4"><hr> 

Для определения размера стипендии нажмите на кнопку:<br> 

<input type="button" value=Определить onClick="st (forml) "><br> 

<input type="text" size=50 name.= "stip"><hr> 

<input type="r.eset" value=Отменить> 

</FORM> 

</BODY> 

</HTML>

Как и в предыдущих случаях, функцию st можно описать по-другому, используя свойства стандартного объекта Math. Приведем описание функции sti.

function stl (obj) 

{ var a = Number(obj.numl.value);

var b = Number(obj.num2.value);

var с = Number(obj.num3.value);

var d = Number(obj.num4.value);

var 1 = Math.max(Math.max(a,b),Math.max(c,d))

var t = Math.rain(Math.min(a,b), Math.min(c,d))

var m = 0

if (1 ==5) {m=100}

else

if ( (t ==5)&& (1 ==4)) {m=75} 

else

if ( (t =4)&& (1 ==4)) {m=50} 

obj.stip.value=m 

}

  Расположение точки относительно треугольника

Точка на плоскости задается своими координатами. Треугольник на плоскости _ координатами вершин. Необходимо написать сценарий, определяющий, лежит ли заданная точка внутри треугольника. 

Прежде чем писать программу, сделаем несколько замечаний. Площадь треугольника с вершинами А, В, С обозначим SАВC- При решении задачи будем использовать тот факт, что, если точка Р лежит внутри треугольника с вершинами А, В, С или на его стороне, то выполняется равенство (рис. 2.5):

SABC = SАРВ + SВРС + SАРС.

Если же точка Р лежит вне треугольника (рис. 2.6), то последнее равенство будет нарушено.

Рис 2.5. Точка Р внутри треугольника

Рис 2.6. Точка Р вне треугольника

Опишем функцию саге, которая вычисляет площадь треугольника, если заданы координаты его вершин.

function care (ax,ay,bx,by,ex,су)

{ var s = Math.abs(ax*(by-cy)+bx*(cy-ay)+cx*(ay-by)); return s}

Работая с величинами вещественного типа, необходимо помнить, что вещественные числа представляются в памяти компьютера приближенно, поэтому для них следует избегать проверки равенства Р = Q, а надо использовать выражение |Р — Q| < eps, где eps некоторое заранее заданное маленькое число. Поэтому в программе после вычисления площадей

var s= care (ax, ay,bx,by,ex,су)

var sl=care (ax,ay,bx,by,x,y)

var s2=care (ax, ay,x, y, ex, cy)

var s3=care (x,y,bx,by,ex,cy)

будет проверяться условие

Math.abs(s-sl-s2-s3)< 0.001

т. к. величины s, s1, s2, s3 вещественного типа. Приведем документ со сценарием, решающим задачу (листинг 2.5).

Листинг 2.5. Расположение точки относительно треугольника

<HTML> 

<HEAD>

<TITLE>Точка внутри треугольника</TITLE> 

<script language="JavaScript"> 

<!-— //

function care (ax,ay,bx,by,ex,cy) 

{ var s = Math.abs(ax*(by-cy)+bx*(cy-ay)+cx*(ay-by))

return s }

function poinpoly (obj)

var x= Number(obj.x.value); 

var y= Number(obj.y.value) 

var ax= Number(obj.ax.value); 

var ay= Number(obj.ay.value) 

var bx= Number(obj.bx.value); 

var by= Number(obj.by.value) 

var cx= Number(obj.ex.value); 

var cy= Number(obj.cy.value) 

var s=care (ax,ay,bx,by,ex,cy) 

var sl=care (ax,ay,bx,by,x,y) 

var s2=care (ax,ay,x,y,ex,cy) 

var s3=care (x,y,bx,by,ex,cy) 

if (Math.abs(s-sl-s2-s3) <= 0.001)

obj.res.value="точка лежит внутри треугольника"

else

obj.res.value="TO4Ka не лежит внутри треугольника" 

}

//--> 

</script> 

</HEAD> 

<BODY>

<Н4>Лежит ли точка внутри заданного треугольника?</Н4> 

<FORM name="form1"> 

<PRE> 

Координаты первой вершины треугольника:

x=<input type="text" size=7 name="ax"> 

y=<input type="text" size=7 name="ay">

Координаты второй вершины треугольника:

x=<input type="text" size=7 name="bx"> 

y=<input type="text" size=7 name="by">

Координаты третьей вершины треугольника:

x=<input type="text" size=7 name="cx"> 

y=<input type="text" size=7 name="cy"><hr>

Введите координаты точки:

x=<input type="text" size=7 name="x"> 

y=<input type="text" size=7 name="y"><hr>

<input type="button" value=Вычислить onClick=" poinpoly(forml)"><hr> 

Результат: <input type="text" size=40 name="res"><hr> 

<input type="reset" value=0тменить>

</FORM> 

</BODY> 

</HTML>

  Точка внутри области треугольника

Треугольник ABC на плоскости задан координатами вершин. Построим еще один треугольник, соединив середины сторон данного треугольника отрезками (рис. 2.7). Напишите сценарий, проверяющий, принадлежит ли заданная точка одному из заштрихованных треугольников. Будем использовать функцию

poinpoly(ax,ay,bx,by,cx,cy,x,y)

которая проверяет, лежит ли точка с координатами (х, у) внутри треугольника, задаваемого координатами вершин. В программе необходимо найти координаты точек D, E, F, зная координаты точек А, В, С. Выяснить, принадлежит ли точка заштрихованной области можно, проверив значение логического выражения

(poinpoly (ax,ay,dx,dy,fx,fy,x,у)

poinpoly (dx,dy,bx,by,ex,ey,x,y)

poinpoly (fx,fy,ex,ey,cx,cy,x,y))

Рис 2.7. Вложенные треугольники

Если точка принадлежит одному из заштрихованных треугольников, то значение выражения равно true; если же точка ни одному из треугольников не принадлежит, то значение выражения — false. Однако число вызовов функции poinpoly (ax,ay,bx,by,ex,су,х,у) можно сократить что точка принадлежит заштрихованной области, если она лежит внутри треугольника с вершинами А, В, С, и вне треугольника с вершинами E, D, F, или, другими словами, когда истинно выражение

(poinpoly (ax,ay,bx,by,ex,cy,x,у) && 

!(poinpoly (fx,fy,dx,dy,ex,ey,x,y))

В документе оставлены поля, выдающие дополнительную информацию о принадлежности точки каждому из заштрихованных треугольников. Результат решения приведен в листинге 2.6.

Листинг 2.6. Точка внутри заштрихованной области треугольника

<HTML> 

<HEAD>

<TITLE>Toчкa внутри заштрихованной области треугольника</TITLE> 

<script language="JavaScript"> 

<!-— //

function care (ax,ay,bx,by,ex,су)

var s = Math.abs(ax*(by-cy)+bx*(су-ay)+cx*(ay-by)); return s 

function poinpoly (ax,ay,bx,by,cx,cy,x,y) 

var s=care (ax,ay,bx,by,ex,cy) 

var s1=care (ax,ay,bx,by,x,y)

var s2=care (bx,by,x,y,cx,су) 

var s3=care (x,y,ax,ay,ex,cy) 

var p=false

if (Math.abs(s-sl-s2-s3}<0.1} {p= true} 

return p 

}

function ppl (obj)

var x =Number(obj.x.value); var y=Number(obj.y.value) 

var ax=Number(obj.ax.value); var ay=Number(obj.ay.value) 

var bx=Number(obj.bx.value); var by=Number(obj.by.value) 

var cx=Number(obj.ex.value); var cy=Number(obj.cy.value) 

var dx= (ax + bx)/2; var dy= (ay + by)/2 

var ex= (bx + ex)/2; var ey= (by + cy)/2 

var fx= (ax + cy.)/2; var fy= (ay + cy)/2 

obj.test.value = poinpoly (ax,ay,bx,by,cx,cy,x,y)

obj.testl.value= poinpoly (ax,ay,dx,dy,fx,fy,x,y)

obj.test2.value= poinpoly (dx,dy,bx,by,ex,ey,x,y)

obj.tests.value= poinpoly (fx,fy,ex,ey,ex,cy,x,y)

obj.test4.value= poinpoly (fx,fy,dx,dy,ex,ey,x,y) 

var restl="Tочка вне заштрихованной области" 

if( poinpoly (ax,ay,dx,dy,fx,fy,x,y) ||

poinpoly (dx,dy,bx,by,ex,ey,x,y) ||

poinpoly (fx,fy,ex,ey,cx,cy,x,y) )

rest1="Tочка принадлежит заштрихованной области" 

obj.res Lvalue = rest1.

var rest2="Tочка вне заштрихованной области" 

if (poinpoly(ax,ay,bx,by,ex,cy,x,у) && !

poinpoly(fx,fy,dx,dy,ex,ey,x,y))) 

rest2 = "точка принадлежит заштрихованной области" 

obj.res2.value = rest2 

}

//-—> 

</script> 

</HEAD> 

<BODY>

<H4>Определение, лежит ли точка внутри заштрихованной области</Н4>

<FORM name="forml"> 

<pre>

Координаты первой вершины треугольника:

x=<input type="text" size=7 name="ax"> 

y=<input type="text" size=7 name="ay">

Координаты второй вершины треугольника:

x=<input type="text" size=7 name="bx"> 

y=<input type="text" size=7 name="by">

Координаты третьей вершины треугольника:

x=<input type="text" size=7 name="cx"> 

y=<input type="text" size=7 name="cy"><hr>

Введите координаты точки:

x=<input type="text" size=7 name="x"> 

y=<input type="text" size=7 name="y"><hr>

<input type="button" value=Bычиcлить onClick=" ppl(forml)"><hr> 

Первый вариант решения: <input type="text" size=50 name="res1"> 

Второй вариант решения: <input type="text" size=50 name="res2"> 

Тесты

Внутри ABC: <input type="text" size=20 name="test"> 

Внутри ADF: <input type="text" size=20 name="testl"> 

Внутри DBE: <input type="text" size=20 name="test2"> 

Внутри FEC: <input type="text" size=20 name="test3"> 

Внутри DFE: <input type="text" size=20 name="test4"> 

<input type="reset" value=Oтменить>

</FORM> 

</BODY> 

</HTML>

  Циклическая смена изображений

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

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

Метод setTimeout выполняет действие, задаваемое первым параметром, по истечении указанного в миллисекундах промежутка времени, определенного вторым параметром. В рассмотренном примере в качестве первого параметра задается функция succpict о, тем самым обеспечивается повторение вызова функции через каждые две секунды. Просмотр изображений будет прекращен после нажатия кнопки Остановить. Если просмотр изображений требуется продолжить, то следует щелкнуть по кнопке Начать снова.

Рис 2.8. Чередование рисунков

Мы уже неоднократно пользовались тем фактом, что страница содержит объекты, зависящие от ее содержания, и эти объекты являются наследниками объекта document. Ссылка на объект может быть осуществлена по имени, заданному параметром name тега <HTML>. Изображение в документе может быть задано с помощью тега <IMG>, например, так:

<IMG src="ml.gif" name="mypict">

Доступ к объекту image в этом случае может быть осуществлен следующим образом:

document.mypict

Документ с описанным сценарием выглядит так, как представлено в листинге 2.7. 

Листинг 2.7. Использованиё функции setTimeout

<HTML>

<HEAD>

<ТITLE>Повторение с помощью функции setTimeout</TITLE> 

<script language="JavaScript"> 

<!-— // 

var k=l function ref ()

(k=5) function succpict ()

var d= document 

if (k<=4) {if (k==l)

{d.mypict.src="ml.gif"; k++} else if (k==2)

{d.mypict.src="m2.gif"; k++} 

else

if (k=3)

{d.mypict.src="m3.gif"; k++} 

else

if (k==4)

{d.mypict.src="m4.gif"; 

k=l} setTimeout("succpict()", 2000) 

}

//-—> 

</script> 

</HEAD>

<BODY onLoad="succpict ()"> <Р>Просмотр рисунков</Р>

<IMG src="ml.gif" name=mypict width=100> 

<FORM name="forml">

<input type="reset" value=Ocтановить onClick=ref()> 

<input type="button" value="Haчать снова" onClick="k=l;

succpict()"> 

</FORM> 

</BODY> 

</HTML>

  Смена изображений при наведении указателя мыши

Напишем сценарий, во время работы которого смена рисунков происходит при наведении курсора мыши на изображение.

При перемещении пользователем курсора мыши над изображением возникает событие MouseOver. Опишем функцию succpict о , которая будет реакцией на это событие, и определит, какое изображение следует поместить в документ. Воспользуемся тем фактом, что загружаемые изображения хранятся в файлах с именами ml.gif, ..., m4.gif. Для загрузки А;-го изображения формируется имя файла по формуле "m"+k+".gif". Приведем сценарий в листинге 2.8.

Листинг 2.8. Смена изображений при попадании курсора на рисунок

<HTML> 

<HEAD>

<ТITLE>Смена рисунков при перемещении курсора мыши над изображением</TITLE> 

<script language="JavaScript"> 

<!—- // 

var k=l

function succpict () { var d= document if (k < 4)

k=k+l else k=l

d.mypict.src="m"+k+".gif" 

}

//-—> 

</script> 

</HEAD> 

<BODY>

<Н4>Для смены изображения поместите курсор мыши над рисунком.</Н4> 

<IMG src="ml.gif" name=mypict width=150 onMouseOver="succpict{)"> 

</BODY> 

</HTML>

  Эффект визуального удаления изображения

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

При решении такой задачи воспользуемся свойством width объекта image. При каждом вызове функции succpict () изменяется размер выводимого изображения и этим достигается эффект удаления от зрителя. Функция setTimeout ("succpict () ",500) Производит повторный вызов функции succpict () через каждые полсекунды. Когда размер изображения уменьшится до заданного, движение прекратится. В начальный момент документ имеет вид как на рис. 2.9.

Рис 2.9. Эффект удаления от зрителя

Для каждого рисунка параметры уменьшения размера изображения и время обновления следует подобрать индивидуально. Сценарий описан в листинге 2.9.

Листинг 2.9. Эффект удаления изображения от зрителя

<HTML> 

<HEAD>

<TITLE>Удаляющееся изображение</TITLE> 

<script language="JavaScript"> 

<!—-//

function succpict () 

var d=document;

var w=d.mypict.width 

if (w>150)

{d.mypict.width=w—10 d.mypict.src="msm.jpg" setTimeout("succpict()", 500)

}  

//—>

</script> 

</HEAD> 

<BODY>

<H4>При наведении курсора мыши над рисунком изображение начинает удаляться от зрителя.</Н4> 

<IMG src="msm. jpg" name=mypict onMouseOver="succpict()"> 

</BODY> 

</HTML>

  Эффект визуального приближения изображения

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

Эта задача в некотором смысле является обратной к только что рассмотренной. Будем увеличивать при каждом вызове функции размер изображения до тех пор, пока оно не достигнет заданного размера. Повторные вызовы функции grpict () обеспечиваются функцией setTimeout, параметры которой следует подобрать в зависимости от изображения. В начальный момент документ имеет вид как на рис. 2.10. Текст сценария и документ, его содержащий, приведены в листинге 2.10.

Листинг 2.10. Эффект приближения изображения

<HTML> 

<HEAD>

<TITLE>Увеличивающееся изображение</TITLE> 

<script language="JavaScript"> 

<!—- //

function grpict () { var d= document var w= d.mypict.width 

if (w < 300)

{ d.mypict.width=w .+ 10; d.mypict.src="mgr.jpg" setTimeout("grpict()", 500) } }

//--> 

</script> 

</HEAD>

<BODY>

<Р>При наведении курсора мыши над рисунком изображение начинает приближаться к зрителю.</Р> 

<IMG src="mgr.jpg" name=mypict width=100 onMouseOver="grpict()"> 

</BODY> 

</HTML>

Рис 2.10. Эффект приближения изображения

  Вертикальное графическое меню со стрелкой

Необходимо написать сценарий, реализующий вертикальное графическое меню. При наведении курсора мыши на пункт меню слева от выделенного пункта появляется стрелка, как изображено на рис. 2.11.

Рис 2.11. Вертикальное графическое меню со стрелкой

В файле с именем pchl.gif хранится изображение, соответствующее первому пункту меню, в файле с именем pch2.gif— второму пункту меню и т. д. При выборе некоторого пункта меню слева от изображения, соответствующего выбранному пункту, появляется стрелка. Если курсор мыши выходит из области изображения пункта меню, то стрелка исчезает. Изображение стрелки хранится в файле с именем butl.gif, а в файле but0.gif размещается изображение, совпадающее с цветом фона, и использующееся тогда, когда пункт меню не выбран. В документе располагается десять изображений по два на отдельной строке. Пары изображений, которые нельзя размещать на разных строках, заключаются в теги <nobr> и </nobr>. Первая пара изображений соответствует первому пункту меню и представлена в документе следующим образом:

<nobr> <IMG src="but0.gif" width="31" height="31" name="pl"> 

<A href="tchl.htm" onmouseover="IMG(pi,true)"

onmouseout="IMG(pl,false)"> 

<IMG src="pchl.gif" а1Ъ="форматирование текста" border="0"

width="103" height="35"></A> 

</nobr> <br>

При попадании курсора мыши в область изображения возникает событие Mouseover, параметр обработки события onMouseOver получает значение

IMG(pl,true).

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

function IMG (pict, action) 

if (action)

{pict.src="butl.gif" } 

else

{ pict.src="butO.gif" } 

}

Какой пункт меню выбран, задается первым параметром, второй параметр определяет, помещать или убирать стрелку с помощью загрузки изображения из файла but0.gif или butl.gif.

Документ со сценарием, реализующим графическое меню, представлен в листинге 2.11.

Листинг 2.11. Вертикальное меню со стрелкой 

<HTML> 

<HEAD>

<TITLE>Вертикальное меню со стрелкой</TITLE> 

<script language="JavaScript"> 

function IMG (pict, action) 

{

if (action)

{ pict.src="butl.gif" } 

else

{ pict.src="butO.gif" } 

}

</script> 

</HEAD> 

<BODY background="fon1.jpg">

<H2><FONT соlоr="#0000ff">Содержание</FONT></Н2> 

<nobr> <IMG src="but0.gif" width="31" height="31" name="pl"> 

<A href="tchl.htm" onmouseover="IMG(pl,true)"

onmouseout="IMG(pi,false)"> 

<IMG src="pchl.gif" аlt="форматирование текста" border="0" 

width="103" height="35"></A>

</nobr> <br> 

<nobr><IMG src="but0.gif" width="31" height="31" name="p2">

<A href="tch2.htm" onmouseover="IMG(p2, true)"

onmouseout="IMG(p2, false)"> 

<IMG src="pch2.gif" alt="co3flaHMe списков" border="0" width="103" 

height="35"></A> 

</nobr> <br>

<nobr><IMG src="but0.gif" width="31" height="31" name="p3"> 

<A href="tch3.htm" onmouseover="IMG(p3, true)" 

onmouseout="IMG(p3, false)"> 

<IMG src="pch3.gif" alt="построение таблиц" border="0" width="103" 

height="35"></A> 

</nobr> <br>

<nobr><IMG src="but0.gif" width="31" height="31" name="p4"> 

<A href="tch4.htm" onmouseover="IMG(p4,true)" 

onmouseout="IMG(p4,false)"> 

<IMG src="pch4.gif" а="использование графики" border="0" 

width="103" height="35"></A>

</nobr> <br>

<nobr><IMG src="but0.gif" width="31" height="31" name="p5"> 

<A href="tch5.htm" onmouseover="IMG(p5,true)" 

onmouseout="IMG(p5,false)">

<IMG src="pch5.gif" alt="создание фреймовой структуры" 

border="0" width="103" height="35"></A> 

</nobr> <br> 

</BODY> 

</HTML>

  Горизонтальное графическое меню со стрелкой

Напишем сценарий, реализующий горизонтальное графическое меню. При наведении курсора мыши на пункт меню сверху от выделенного пункта появляется стрелка, как изображено на рис. 2.12.

При создании горизонтального графического меню используем таблицу, состоящую из двух строк, по пять ячеек в каждой. Пункты меню в виде графических изображений хранятся в ячейках второй строки. Если выбран некоторый пункт меню, то над ним появляется стрелка. Назначение функции IMG () такое же, как и в предыдущем примере. Обратите внимание на вызов указанной функции: вместо логического значения можно использовать 0 или 1.

Рис 2.12. Горизонтальное графическое меню со стрелкой HTML-код представлен в листинге 2.12.

Листинг 2.12. Горизонтальное меню со стрелкой

<HTML> 

<HEAD>

<TITLE>Горизонтальное меню</TITLE> 

<script language="JavaScript"> 

function IMG(pict, action) 

if (action)

{pict.src="rbutl.gif"} 

else

{pict.src="rbutO.gif"} 

}

</script>

</HEAD> 

<BODY background="fonl.jpg">

<H2><FONT colorг="0000ff">Содержание</FONT></Н2> 

<TABLE cellspacing=0 cellpadding=0> 

<TR>

<TD align=center><IMG src="rbut0.gif" 

width="31" height="31" name="pl"></TD> 

<TD align=center><IMG src="rbut0.gif" 

width="31" height="31" name="p2"></TD> 

<TD align=center><IMG src="rbut0.gif" 

width="31" height="31" name="p3"></TD> 

<TD align=center><IMG src="rbut0.gif" 

width="31" height="31" name="p4"></TD>

<TD align=center><IMG src="rbut0.gif" 

width="31" height="31" name="p5"></TD> 

</TR> 

<TR>

<TD><A href="tchl.htm" target="Main" onmouseover="IMG(pl, 1)" 

onmouseout="IMG(pl, 0)"> 

<IMG src="pchl.gif" а="форматирование текста" 

border="0" width="103" height="35"></A></TD> 

<TD><A href="tch2.htm" target="Main" onmouseover="IMG(p2, 1)" 

onmouseout="IMG(p2, 0}"> 

<IMG src="pch2.gif" а="создание списков" 

border="0" width="103" height="35"></A></TD> 

<TD><A href="tch3.htm" target="Main" onmouseover="IMG(p3, 1)" 

onmouseout="IMG(p3, 0}">

<IMG src="pch3.gif" alt="nocTpoemie таблиц" 

border="0" width="103" height="35"></A></TD> 

<TD><A href="tch4.htm" target="Main" onmouseover="IMG(p4, 1)" 

onmouseout="IMG(p4, 0)"> 

<IMG src="pch4.gif" а="использование графики" 

border="0" width="103" height="35"></A></TD> 

<TD><A href-"tch5.htm" target="Main" onmouseover="IMG(p5, 1)" 

onmouseout="IMG(p5, 0)"> 

<IMG src="pch5.gif" alt="создание фреймовой структуры" 

border="0" width="103" height="35"></A></TD> 

</TR> 

</TABLE> 

</BODY> 

</HTML>

  Оператор switch и его свойства

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

switch.

Синтаксис оператора switch следующий:

switch (В)

{ case L1: S1;

case L2: S2;

... ... ...

case Ln: Sn; 

default: S 

}

где в — выражение; L1, L2, ..., Ln — литералы; si, S2, ..., sn; s — операторы. Выполнение переключателя происходит так: вычисляется значение выражения в. Если значение в равно ы, то выполняются операторы si, а затем все остальные операторы либо до первого оператора break, либо до конца оператора switch. Если значение в равно L2, то выполняются операторы S2, а затем все остальные операторы либо до первого оператора break, либо до конца оператора switch и т. д. Если же значение в не равно ни одному из значений ы, L2, ..., Ln, то выполняются операторы s. Часть default: s может отсутствовать, тогда переключатель имеет вид

switch (В) 

{ case L1: S1; 

case L2: S2;

... ... ...

case Ln: Sn; 

}

В этом случае, если значение выражения в не равно ни одному из значений L1, L2, ..., Ln, то оператор switch завершает свою работу, что эквивалентно пустому оператору. На самом деле переключатель удобно записывать в виде:

switch (В)

{ case L1: S1; break; 

case L2: S2; break;

... ... ...

case Ln: Sn; break; 

default: S 

}

В этом случае оператор break обеспечивает завершение работы переключателя после выполнения очередного варианта.

  День недели

Напишем программу, которая по номеру дня определяет его название. Задачу можно решить с использованием условных операторов, в этом случае программа будет ненаглядной. При решении такого рода задач удобно использовать переключатель. Переменной s в зависимости от номера дня недели будет присвоено его название. В листинге 2.13 приведен требуемый сценарий.

Листинг 2.13. Определение по номеру дня его названия

<HTML> 

<HEAD>

<TITLE>Onpeделение по номеру дня его названия</TITLE> 

<script language="JavaScript"> 

<!-— //

function numday (obj) 

{ var m = Number(obj.numl.value); 

d= document 

var s 

switch (m)

{ case 1: s="понедельник"; break; 

case 2: s="вторник"; break; 

case 3: s="среда"; break; 

case 4: s="четверг"; break; 

case 5: s="пятница"; break; 

case 6: s="суббота"; break; 

case 7: s="воскресенье"; break; 

default: s="ошибка в номере дня" 

}

obj.res.value=s 

}

//--> 

</script> 

</HEAD> 

<BODY>

<Р>Определение названия дня по его номеру</Р> 

<FORM name="form1">

Введите номер дня: 

<input type="text" size=7 name="num1"><hr>>

Название дня:

<input type="button" value=0пpeдeлить onClick=" numday(forml)"> 

<input type="text" size=20 name="res"><hr>> 

<input type="reset"> 

</FORM> 

</BODY> 

</HTML>

  Номер квартала

Необходимо написать программу, которая по номеру месяца определяет, в какой квартал он попадает.

Напомним, что в первый квартал попадают январь, февраль, март, во второй — апрель, май, июнь и т. д. Обратите внимание на формулу, которая обеспечивает вычисление номера квартала:

m=(n-l-(n-l)%3)/3+1

HTML-код приведен в листинге 2.14.

 Листинг 2.14. Определение по номеру месяца номера квартала 

<HTML>

<HEAD>

<TITLE>Определение по номеру месяца номера квартала</TITLE> 

<script language="JavaScript"> 

<!-— //

function numkv (obj) 

{ var n = Number(obj.numl.value); 

d = document 

var m=(n-l-(n-1)%3)/3+1; 

obj.res.value=m 

switch (m)

{ case 1: d.write("первый квартал"); break; 

case 2: d. write ("второй квартал"); break;

case 3: d.write("третий квартал"); break; 

case 4: d.write("четвертый квартал"); break; 

default: d.write("ошибка") 

} }

function test () 

{ for (var n=l; n<= 12; ++n)

document.write (n, " ",(n-1-(n-1)%3)/3+1,"<br>" ) 

}

//--> 

</script> 

</HEAD> 

<BODY>

<Р>Вычисление номера квартала по номеру месяца</Р> 

<FORM name="form1">

Введите номер месяца: <input type="text" size=7 name="numl"><hr>> 

Месяц относится к кварталу номер

<input type="button" value=0пределить onClick="numkv (forml)"> 

<input type="text" size=7 name="res"><hr>> 

<input type="reset"> 

</FORM> 

</BODY> 

</HTML>

  Определение номера дня по его названию

Напишем программу, которая по названию дня определяет его номер. Обратите внимание, что при описании синтаксиса переключателя в качестве метки варианта L выступает литерал. В языке JavaScript строка является литералом. В других языках строка, как правило, относится к сложным структурам данных. В переключателе можно использовать в качестве метки варианта строковое значение, что облегчает решение задачи. Приведем только сценарий для данной задачи (листинг 2.15).

Листинг 2.15. Определение номера по его названию

<HTML> 

<HEAD>

<TITLE>Определение по названию номера дня</TITLE> 

<script language="JavaScript"> 

<!-- //

function daynum (obj) 

{ var m = obj.numl.value; 

var s 

switch (m)

{ case 'понедельник': s=l; break; 

case 'вторник': s=2; break; 

case 'среда': s=3; break; 

case 'четверг': s=4; break; 

case 'пятница': s=5; break; 

case 'суббота': s=6; break; 

case 'воскресенье': s=0; break; 

default: s=' ошибка в названии дня' 

}

obj.res.value=s 

//-—> 

</script> 

</HEAD> 

<BODY>

<Р>Определение по названию дня его номера</Р> 

<FORM name="form1">

Введите день: <input type="text" size=20 name="numl"><hr>>

Номер дня:

<input type="button" value=0пpeдeлить onClick="daynum (form1)"> 

<input type="text" size=25 name="res"><hr>> 

<input type="reset" value="Обновить"> 

</FORM> 

</BODY> 

</HTML>

  Траектория движения точки

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

Вид документа при выполнении теста приведен на рис. 2.13.

Рис 2.13. Пример движения точки вдоль ломаной

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

HTML-код приведен в листинге 2.16.

Листинг 2.16. Движение точки вдоль ломаной на один шаг

<HTML>

<TITLE>Движение вдоль ломаной</TITLE> 

<HEAD>

<script>

<!--//

function movepoint(obj) 

{ var a=Number(obj.num.value) 

var b=a%5 

var c=a-b 

var d=c/5 

var e=d 

var f=2*d 

if (a>0) 

{ switch (b) 

{ case 1: f+=f; break;

case 2: f+=f; e+=l; break; 

case 3: f+=l; e+=2; break; 

case 4: f+=2; e+=2; break; 

} }

else

{ switch (b) 

{ case -1: e+=l; break;

case -2: f-=l; e+=l; break; 

case -3: f-=l; break; 

case -4: f-=l; e-=l; break; 

} } 

obj.x.value=e

obj.y.value=f 

}

//-—> 

</script> 

</HEAD> 

<BODY bgcolor=F8F8FF>

<H4 align=center>Движeниe вдоль ломаной</Н4> 

<FORM name="form1'">

<IMG src="Graf_2.jpg" name="cl" border=2> 

<PRE>

Точка начинает движение из начала координат. 

Положительное число шагов — движение вверх. 

Отрицательное число шагов — движение вниз. 

Число шагов: <input name="num" type="text" size=5><br>

<input type="button" value="Вычислить" name="bl" OnClick="movepoint(forml)">

Координаты точки: x <input name="x" type="text" size=5> у <input name="y" type="text"size=5>

<br>

<input type="reset" value="Отменить">

</PRE> 

</FORM> 

</BODY> 

</HTML>

  Перестановка изображений

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

Считаем, что изображения пронумерованы слева направо, начиная с нуля. Если значения номеров рисунков введены неправильно, то требуется выдать сообщение об ошибке. Документ после обмена первого и второго изображений приведен на рис. 2.14.

В функции ch3pict () исследуются введенные пользователем значения. Если значения менее 1 или более 3, то выдается сообщение о недопустимых исходных данных. Далее исследуются варианты обмена в следующх парах: 1 и 2, 1 и 3, 2 и 3, 2 и 1, 3. и 1. Все эти случаи рассмотрены и реализованы с помощью условных операторов. Приведем HTML-код документа в листинге 2.17.

Рис 2.14. Перестановка изображений

Листинг 2.17. Обмен трех изображений

<HTML> 

<HEAD>

<TITLE>Обмен трех изображений</TITLE> 

<script language="JavaScript"> 

<!-— //

function ch3pict () 

{ var d=document

var a= d.form1.num1.value 

var b= d.form1.num2.value 

var 1 

if (a<l||a>3||b<l||b>3)

alert ("Неверно заданы параметры") 

else

{ if (a==l) 

{ l=d.pml.src 

if (b==2)

{ d.pml.src=d.pm2.src; d.pm2.src=l } 

else

if (b==3)

{ d.pml.src=d.pm3.src; d.pm3.src=l }

}

else

if (a==2)

{ l=d.pm2.src 

if (b==l)

{ d.pm2.src=d.pml.src; d.pml.src=l } 

else

if (b==3)

{ d.pm2.src=d.pm3.src; d.pm3.src=l } 

else

if (a==3)

{ l=d.pm3.src 

if (b==l)

{ d.pm3.src=d.pml.src; d.pml.src=l } 

else 

if (b==2)

{ d.pm3.src=d.pm2.src; d.pm2.src=l } 

} } }

//—-> 

</script> 

</HEAD>

<BODY bgcolor=F8F8FF> 

<CENTER>

<Н4>Обмен трех изображений</Н4> 

<IMG src="m1.gif" name=pml width=100> 

<IMG src="m2.gif" name=pm2 width=100> 

<IMG src="m3.gif" name=pm3 width=100> 

<FORM name="form1">

<input type="text" name="numl" size=3> и 

<input type="text" name="num2" size=3>

<input type="button" value="Обменять" onClick="ch3pict()"> 

</FORM> 

</CENTER> 

</BODY> 

</HTML>

Функцию ch3pict () можно упростить, если объединить варианты "1 и 2" и "2 и 1"; "1 и 3" и "3 и 1", "2 и 3" и "3 и 2". Для этого надо найти максимальное и минимальное из введенных пользователем значений. Если эти значения не совпадают, то исследовать надо следующие варианты: "1 и 2", "1 и 3" и "2 и 3". Приведем пример функции ch3pict ().

function ch3pict() 

{ var d=document

var a= d.forml.numl.value 

var b= d.forml.num2.value 

var a1=Math.min(a,b) 

var.b1=Math.max(a,b) 

var 1 

if (a1<1||b1>3)

alert ("Неверно заданы параметры") 

else

{if (al != bl) 

{if (a1==1)

{l=d.pml.src

if (b1==2)

{d.pml.src=d.pm2.src; d.pm2.src=l} 

else

if (b1==3)

{d.pm1.src=d.pm3.src; d.pm3.src=l} 

else

if (al==2)

{l=d.pm2 .src; d.pm2.src=d.pm3.src; d.pm3.src=l} 

}

В третьем варианте описания функции chSpicto используется переключатель. Он позволяет текст функции сделать более наглядным.

function ch3pict() 

{ var d=document

var a= d.forml.numl.value 

var b= d.forml.num2.value 

var a1=Math.min(a,b) 

var b1=Math.max(a,b) 

var 1 

if (a1<1||b1>3)

alert ("Неверно заданы параметры") 

else

{if (a1 != b1) 

switch (a1) 

{case 1: l=d.pm1.src; 

switch (b1)

{case 2: d.pml.src=d.pm2.src; d.pm2.src=l; break; 

case 3: d.pml.src=d.pm3.src; d.pm3.src=l; break 

}; break; 

case 2: l=d.pm2.src;

d.pm2.src=d.pm3.src; d.pmS.src=l; break 

}

  Принятие решения о принадлежности точки некоторой оболасти

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

Рис 2.15. Точка и область

Точка с координатами (х, у) лежит внутри ромба, четыре вершины которого задаются координатами (г, 0), (0, -г), (-г, 0), (0, л), в случае, если выполняется следующее неравенство |х( + [у| < г. При решении задачи нас интересует область, которая расположена внутри ромба с координатами R и вне ромба с координатами г. Для определения абсолютного значения некоторой величины следует обратиться к методу abs стандартного объекта Math. Функция pointcare (obj) выполняет требуемую проверку.

Полностью HTML-код документа приведен в листинге 2.18.

Листинг 2.18. Точка и область

<HTML> 

<HEAD>

<TITLE>Точка и область. Жукова E.</TITLE>

<script>

<!-- //

function pointcare(obj) 

{ var x = Number(obj.numla.value) 

var у = Number(obj.num2a.value) 

var r = Number(obj.numSa.value) 

var R = Number(obj.num4a.value) 

var e=Math.abs(x)+Math.abs(y) 

if ((e>=r)&&(e<=R))

{obj.res.value = "Точка принадлежит области"} 

else

{obj.res.value = "Точка не принадлежит области"}} 

//-—> 

</script> 

</HEAD>

<BODY bgcolor=F8F8FF> 

<CENTER>

<H4Принадлежит ли точка заданной области?</Н4> 

<FORM name = "forml"> 

Введите размеры r и R:

r: <input type = "text" name = "num3a" size = 7> 

R: <input type = "text" name = "num4a" size = 7> 

<br><IMG src = "l.jpg" border=l hspace=10 vspace=10><br> 

Точка: 

x: <input type = "text" name = "numla" size = 7>

y: <input type = "text" name = "num2a" size = 7><br> 

<input type = "button" value = "Вычислить" 

onclick = "pointcare(forml)"><br> 

Результат:

<input type = "text" name = "res" size = 30><br> 

<input type = reset><br> 

</FORM> 

</CENTER> 

</BODY> 

</HTML>

  Упражнения

1. Вводится последовательность из пяти чисел. Напишите сценарий, в котором определяется число максимальных элементов.

2. Напишите программу, которая определяет, можно ли построить треугольник с заданными длинами сторон.

3. Точка на плоскости задается своими координатами. Определите, какой из четвертей прямоугольной системы координат принадлежит заданная точка.

4. Участникам тестирования было предложено шесть задач. За решение каждой из задач ставились баллы: 0, 1/3, 2/3 или 1. Всех участников, проходивших тестирование, распределили по четырем категориям в зависимости от результатов. В первую категорию включили участников, все решения которых оценены максимальным баллом 1. Во вторую категорию вошли участники, все задачи которых оценивались не ниже, чем 2/3, но обязательно была хоть одна задача, решение которой оценено на 1. В третью категорию попали участники, у которых все задачи были оценены на 2/3 балла. Остальных участников отнесли к четвертой категории.

• Создайте анкету конкретного участника тестирования. В анкете должна быть указана фамилия, номер школы, оценки за решения задач. Цри обработке анкеты для участника требуется определить сумму набранных баллов и категорию, в которую зачислен участник.

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

5. По результатам сдачи экзаменов в сессию решено назначить стипендию по следующим правилам. Учащимся, сдавшим все шесть экзаменов на оценку 5, назначается стипендия в размере 200 у. е. Тем учащимся, которые получили оценку не ниже 4 и три из экзаменов сданы на 5, назначается стипендия в 100 у. е. Студентам, все экзамены которых сданы на оценку 4, назначается стипендия в размере 50 у. е. Все остальные студенты стипендию не получают.

• Создайте анкету учащегося, в которой указана фамилия, номер группы и результаты оценок за шесть экзаменов, сданных во время сессии. При обработке анкеты требуется определить средний балл за экзамен и размер назначенной стипендии.

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

6. Напишите программу, которая по заданному значению х вычисляет и выводит значение у. График зависимостей значений у от значений х приведен на рис. 2.16.

Рис 2.16. График функции

7. Участникам Олимпиады было предложено шесть задач. За решение каждой из задач ставились баллы: 0, 10, 20 или 30. Первое место присуждалось участникам, все задачи которых были оценены максимальным числом баллов. Второе место заняли участники, решения всех задач которых были оценены не ниже, чем на 20 баллов, причем, по крайней мере, одна задача имела высший балл. Третье место заняли участники, решения всех задач которых оценивались 20 баллами. Призовые места остальным участникам не присуждались.

• Создайте анкету участника Олимпиады. При обработке анкеты требуется определить сумму набранных за решения задач баллов и место, на которое участник Олимпиады претендует.

• Подготовьте три рисунка, на каждом из которых указано место (1, 2 или 3). Напишите сценарий обработки анкеты, при выполнении которого в документе появляется рисунок с номером присужденного места.

8. Точка движется по ломаной, указанной на рис. 2.17, передвигаясь за один шаг по целым значениям. Напишите программу, которая определяет координаты точки в конце шага, если известны координаты точки в начале шага. Значения координат — целые.

Рис 2.17. Изображение ломаной

9. Участники конкурса представляют по семь работ. Каждая из работ оценивается 3, 5, 7 или Ю баллами. За участие в конкурсе претендентам назначалась премия в зависимости от результатов оценки работ. Участникам, все работы которых получили высшую оценку, назначается премия в размере 500 у. е. Участникам, все работы которых получили балл не менее 7, но хотя бы одна работа была оценена высшим баллом, назначается премия в размере 300 у. е. Участникам, все работы которых были оценены на 7, назначается премия в размере 200 у. е. Остальным участникам конкурса была назначена премия в 50 у. е.

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

• Подготовьте четыре рисунка, на каждом из которых приведен размер назначенной премии (500, 300, 200 или 50). Напишите сценарий обработки анкеты, при выполнении которого в документе появляется рисунок с размером назначенной премии.

10. Заданы три целых значения. Напишите сценарий, при выполнении которого определяется и выводится в документ информация о том, можно ли построить треугольник с длинами сторон, равными заданным значениям. Если треугольник построить можно, то требуется выяснить его вид: прямоугольный, остроугольный, тупоугольный. При определении вида треугольника в документе должно появиться соответствующее изображение.

11. Напишите программу, которая определяет, находится ли точка с заданными координатами внутри заштрихованной области. Область представлена на рис. 2.18.

Рис 2.18. Точка и заштрихованная область

12. Три точки на плоскости задаются координатами своих вершин. Напишите сценарий, при работе которого определяется, можно ли построить треугольник с вершинами в заданных точках и выводится соответствующая информация. Если треугольник построить можно, то требуется выяснить его вид: равносторонний, равнобедренный, разносторонний. При определении вида треугольника в документе должно появиться изображение треугольника соответствующего вида.

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

14. Отрезок на плоскости задается координатами своих концов. Напишите сценарий, который для точки на плоскости, заданной собственными координатами, определяет:

• лежит ли заданная точка на отрезке;

• точка не лежит на отрезке, но находится на той же прямой, что и отрезок;

• точка не лежит на отрезке и не принадлежит прямой, содержащей oтрезок.

Для каждого из вариантов ответа требуется вывести изображение, соответствующее ситуации.

15. Два круга на плоскости задаются координатами центра и радиусом. Напишите сценарий, в результате работы которого определяется положение кругов относительно друг друга. Варианты могут быть следующие:

• один круг лежит внутри другого;

• круги не имеют общих точек;

• круги пересекаются;

• круги имеют точку касания.

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

16. Круг на плоскости задается координатами центра и радиусом, квадрат — координатой левой верхней вершины и длиной стороны. Напишите сценарий, определяющий взаимное положение круга и квадрата. Возможны следующие варианты:

• круг и квадрат не имеют общих точек;

• круг лежит внутри квадрата;

• квадрат лежит внутри круга;

• круг и квадрат пересекаются.

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

17. Треугольник на плоскости задается координатами своих вершин. Напишите сценарий, в результате работы котороговыясняется, лежит ли заданная точка на плоскости внутри треугольника, вне его или на одной из сторон. В каждом из вариантов ответа должно быть выведено соответствующее графическое изображение.

18. Точка может двигаться вдоль ломаной, указанной на рис. 2.19, смещаясь за один шаг на одну клетку. Напишите программу, которая определяет координаты точки в конце шага, если известны координаты в начале шага.

19. Напишите сценарий, определяющий координаты точки, которая движется вдоль ломаной через заданное число шагов. Вид документа, содержащего рисунок ломаной и поля для ввода числа шагов и вывода результата, приведен на рис. 2.19.

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

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

22. Напишите программу, которая по номеру дня недели определяет, является он рабочим или выходным.

23. Напишите программу, которая по номеру учебной пары определяет время начала и конца занятий.

24. Напишите программу, которая в зависимости от номера месяца в году определяет, к какому времени года относится месяц.

Рис 2.19. Движение точки вдоль ломаной

Рис 2.20. Точка и заданная область


Опубликовал admin
12 Авг, Четверг 2004г.



Программирование для чайников.