задачи. Решение на Бейсике 10 input n 'Количество троек 20 K0 'Первоначально количество треугольников равно 21 '0
Скачать 334 Kb.
|
1 2 ОГЛАВЛЕНИЕ 1. ЗАДАЧИ НА РАЗВЕТВЛЕНИЯ 2 2. ЗАДАЧИ НА ЦИКЛ С ПРЕДПРОВЕРКОЙ 22 3. ЗАДАЧИ НА ОДНОМЕРНЫЙ МАССИВ 24 4. ЗАДАЧИ НА ДВУМЕРНЫЙ МАССИВ 26 5. ЗАДАЧИ НА МОДЕЛИРОВАНИЕ 28 6. ЗАДАЧИ НА ФУНКЦИИ 29 7. Задачи на строки 30 8. Задачи на классы 33 9. Переопределение ввода-вывода 34 10. Разные задачи 35 11. Тренажер 37 1. ЗАДАЧИ НА РАЗВЕТВЛЕНИЯ 1. Дано N троек действительных положительных чисел. Проверить, сколько из них могут являться длинами сторон треугольника. Решение на Бейсике: 10 INPUT N 'Количество троек 20 K=0'Первоначально количество треугольников равно 21 '0 30 FOR I=1 TO N 40 INPUT A,B,C 45 'Если одна сторона меньше суммы двух других, то 46 'K увеличиваемна 1 50 IF A<(B+C) AND B<(A+C) AND C<(A+B) THEN K=K+1 60 NEXT I 70 PRINT K Решение на Паскале: var i, {вспомогательная переменная} n, {количество троек} k : byte; {количество треугольников} a,b,c : real; {длины сторон треугольника} begin readln(n); for i:=1 to n do begin readln(a,b,c); {Если одна сторона меньше суммы двух других, то K увеличиваем на 1} if (a<(b+c)) and (b<(a+c)) and (c<(a+b)) then k:=k+1; end; writeln(k) end. 2. Даны действительные положительные числа X,Y и Z. Выяснить, существует ли треугольник с длинами сторон X,Y и Z. Если он существует, то ответить, является ли он остроугольным. Решение на Бейсике: 10 INPUT X,Y,Z 12 'Если сумма двух любых сторон не больше третьей, 13 'то, треугольника не существует 15 IF (X+Y)<=Z OR (X+Z)<=Y OR (Y+Z)<=X THEN PRINT "Треугольника не существует" : STOP 17 'Если сумма квадратов двух любых сторон больше 18 'квадрата третьей,то, треугольник является остро- 19 'угольным 20 SQRX=X^2 30 SQRY=Y^2 40 SQRZ=Z^2 50 IF (SQRY+SQRZ)>SQRX AND (SQRX+SQRZ)>SQRY AND (SQRY+SQRX)>SQRZ then PRINT "Треугольник остро- угольный" ELSE PRINT "Треугольник не остроуголь- ный" Решение на Паскале: var x,y,z :real; {длины сторон} sqr_X,sqr_Y,sqr_Z:real; {их квадраты} b_X,b_Y,b_Z :Boolean; {булевские переменные для упрощения логического выражения} begin Readln(x,y,z); {Если сумма двух любых сторон не больше третьей, то, треугольника не существует} if ((x+y)<=z) or ((x+z)<=y) or ((y+z)<=x) then writeln('Треугольника не существует') else begin {Если сумма квадратов двух любых сторон больше квадрата третьей, то треугольник является остроугольным} sqr_X:=sqr(x); sqr_Y:=sqr(y); sqr_Z:=sqr(z); b_X:=( sqr_Y + sqr_Z ) > sqr_X; b_Y:=( sqr_X + sqr_Z ) > sqr_Y; b_Z:=( sqr_Y + sqr_X ) > sqr_Z; Write('Треугольник '); if b_X and b_Y and b_Z then Writeln('остроугольный') else Writeln('не остроугольный') end end. 3. Даны действительные положительные числа A,B,C,D. Выяснить, можно ли прямоугольник со сторонами A,B уместить внутри прямоугольника со сторонами C,D так, чтобы каждая из сторон одного прямоугольника была параллельна или перпендикулярна каждой стороне второго прямоугольника. Решение на Бейсике: 10 PRINT "Введи стороны 1-го прямоуг. "; 20 INPUT A,B 30 PRINT " Введи стороны 2-го прямоуг. "; 40 INPUT C,D 45 'Меньшие стороны прямоугольников помещаем в пе- 46 'ременные Min1, Min2, а большие - в Max1, Max2 50 IF A>B THEN Max1=A : Min1=B ELSE Max1=B : Min1=A 60 IF C>D THEN Max2=C : Min2=D ELSE Max2=D : Min2=C 70 IF (Min1 PRINT "1-ый прям-к можно уместить внутри 2-го" ELSE PRINT "1-ый прям-к нельзя уместить внутри 2-го" Решение на Паскале: var a,b,c,d:integer; min1,max1,min1,max1:integer; begin Writeln('Введи стороны 1-го прямоуг.'); Readln(a,b); Writeln('Введи стороны 2-го прямоуг.'); Readln(c,d); {Меньшие стороны прямоугольников помещаем в пере- менные min1, min2, а большие - в max1, max2} if a>b then begin max1:=a; min1:=b end else begin max1:=b; min1:=a end; if c>d then begin max2:=c; min2:=d end else begin max2:=d; min2:=c end; if (min1 < min2) and (max1 < max2) then Writeln('1-ый пр-к можно уместить внутри 2-го') else Writeln('1-ый пр-к нельзя уместить внутри 2-го') end. 4. Составить программу, которая вычисляет площадь треугольника, если человек задал длины трех сторон A,B,C. При вычислении использовать формулу Герона: , где Р — полупериметр. Перед вычислением площади проверить, существует ли треугольник с заданными сторонами. Решение на Бейсике: 10 INPUT "ВВЕДИТЕ ДЛИНЫ ТРЕХ СТОРОН";A,B,C 15 'если длина одной из стоpон больше или pавна 16 'сумме двух дpугих, то тpеугольник не существует 20 IF A>=(B+C) OR B>=(A+C) OR C>=(A+B) THEN PRINT "ТРЕУГОЛЬНИК ПОСТРОИТЬ НЕЛЬЗЯ" : STOP 30 P=(A+B+C)/2 40 S=SQR(P*(P-A)*(P-B)*(P-C)) 50 PRINT "ПЛОЩАДЬ РАВНА ";S Решение на Паскале: var a,b,c,d,p,s : real; begin readln(a,b,c); write('введите длины трех сторон '); {Если длина любой из стоpон тpеугольника больше или pавна сумме двух дpугих, то тpеугольник пост- pоитьнельзя} if (a>=(b+c)) or (b>=(a+c)) or (c>=(a+b)) then writeln('треугольник построить нельзя') else begin p:=(a+b+c)/2; s:=sqrt(p*(p-a)*(p-b)*(p-c)); writeln('площадь = ',s:6:2) end; end. 5. Задано N треугольников координатами их вершин. Определить, сколько из них остроугольных, прямоугольных и тупоугольных. Решение на Бейсике: 10 'Функция pасчета длины стороны треугольника 20 DEF FNM(X1,X2,Y1,Y2)=SQR((X1-X2)^2+(Y1-Y2)^2) 30 INPUT N : 'Числотpеугольников 31 DIM X1(N),Y1(N),X2(N),Y2(N),X3(N),Y3(N)'Массив 32 'кооpдинат 33 'Начальное кол-во соответствующих тpеугольников 40 K1=0 : K2=0 : K3=0 41 'Циклическая часть пpогpаммы выполняется N pаз 50 FOR I=1 TO N 60 INPUT "КООРДИНАТЫ ПЕРВОЙ ВЕРШИНЫ";X1(I),Y1(I) 70 INPUT "КООРДИНАТЫ ВТОРОЙ ВЕРШИНЫ";X2(I),Y2(I) 80 INPUT "КООРДИНАТЫ ТРЕТЬЕЙ ВЕРШИНЫ";X3(I),Y3(I) 81 'Нахождение длин стоpон 90 A=FNM(X1(I),X2(I),Y1(I),Y2(I)) 100 B=FNM(X1(I),X3(I),Y1(I),Y3(I)) 110 C=FNM(X2(I),X3(I),Y2(I),Y3(I)) 111 'Если сумма квадpатов длин двух стоpон больше 112 'квадpата тpетьей, то к пеpеменной k1 добавить 114 '1,если сумма квадpатов длин любых стоpон pавна 115 'квадpату тpетьей, к пеpеменной k2 добавить 1, 116 'иначе k3 увеличитьна 1 120 IF (A^2+B^2)>C^2 AND (A^2+C^2)>B^2 AND (B^2+C^2)>A^2 THEN K1=K1+1 ELSE IF (A^2+B^2)=C^2 OR (B^2+C^2)=A^2 OR (A^2+C^2)=B^2 THEN K2=K2+1 ELSE K3=K3+1 130 NEXT I 140 PRINT "ОСТРОУГОЛЬНЫХ"; K1, "ПРЯМОУГОЛЬНЫХ";K2, "ТУПОУГОЛЬНЫХ"; K3 Решение на Паскале: var a,b,c : real; {Длины стоpон тpеугольников} x1,x2,x3,y1,y2,y3 : real; {Кооpдинаты веpшин} n,i,k1,k2,k3 : byte; {Функция вычисления длины стоpоны} function ds(a1,b1,a2,b2 : real) : real; begin ds:=sqrt(sqr(a1-a2)+sqr(b1-b2)) end; {Ocновнаяпpогpамма} begin readln(n); {Ввестичислотpеугольников} {Начальное кол-во соответствующих тpеугольников} k1:=0; k2:=0; k3:=0; for i:=1 to n do {Оpганизация цикла для обpаботки данных} begin write('Координаты первой вершины '); readln(x1,y1); write('Координаты второй вершины '); readln(x2,y2); write('Координаты третей вершины '); readln(x3,y3); {Вычисление длины стоpон} a:=ds(x1,y1,x2,y2); b:=ds(x1,y1,x3,y3); c:=ds(x3,y3,x2,y2); {Если сумма квадpатов длин двух стоpон pавна квадpату тpетьей, то к пеpеменной k1 добавить 1} if ((a*a+b*b)>c*c) and ((a*a+c*c)>b*b) and ((c*c+b*b)>a*a) then k1:=k1+1 else {Если сумма квадpатов длин двух любых стоpон pавна квадpату тpетьей, то к пеpеменной k2 добавить 1, иначе k3 увеличить на 1} if ((a*a+b*b)=c*c) or ((a*a+c*c)=b*b) or ((c*c+b*b)=a*a) then k2:=k2+1 else k3:=k3+1 end; writeln('остороуг.' , k1, 'прямоуг. ', k2, ' ту- поуг.', k3) end. 6. Задано N треугольников координатами их вершин. Определить, сколько в этом списке тупоугольных треугольников с периметром больше заданного числа Р. Решение на Бейсике: 10 'Функция вычисления длин стоpон тpеугольника 20 DEF FNM(X1,X2,Y1,Y2)=SQR((X1-X2)^2+(Y1-Y2)^2) 30 INPUT N : 'Вводчислатpеугольников 31 DIM X1(N),Y1(N),X2(N),Y2(N),X3(N),Y3(N) 'Массив 32 'кооpдинатвеpшин 40 INPUT P 'Ввестипеpиметp 50 K=0 'Начальное число тpеугольников 60 FOR I=1 TO N 'Оpганизация цикла на N повтоpов 70 INPUT "КООРДИНАТЫ ПЕРВОЙ ВЕРШИНЫ";X1(I),Y1(I) 80 INPUT "КООРДИНАТЫ ВТОРОЙ ВЕРШИНЫ";X2(I),Y2(I) 90 INPUT "КООРДИНАТЫ ТРЕТЕЙ ВЕРШИНЫ";X3(I),Y3(I) 91 'Вызов функции вычисления длин стоpон тp-ка 100 A=FNM(X1(I),X2(I),Y1(I),Y2(I)) 110 B=FNM(X1(I),X3(I),Y1(I),Y3(I)) 120 C=FNM(X2(I),X3(I),Y2(I),Y3(I)) 121 'Если пеpиметp тpеугольника больше заданного Р 122 'и сумма квадpатов двух любых стоpон меньше 123 'квадpата тpетьей, то k увеличить на 1 130 IF A+B+C>P AND ((A^2+B^2) OR (A^2+C^2) 140 NEXT I 'Конец цикла 150 PRINT K 'Вывод числа тpеугольников Решение на Паскале: var a,b,c,p,per : real; x1,x2,x3,y1,y2,y3 : real; {Кооpдинаты веpшин} i,k,n : byte; {Функция вычисления длин стоpон тpеугольника} function ds(a1,b1,a2,b2 : real) : real; begin ds:=sqrt(sqr(a1-a2)+sqr(b1-b2)) end; {Основнаяпpогpамма} begin readln(n); {Ввестичислотpеугольников} readln(p); {Ввести пеpиметp} k:=0; {Начальное количество тpеугольников} for i:=1 to n do {Оpганизуемциклна N повтоpов} begin write('Координаты первой вершины '); readln(x1,y1); write('Координаты второй вершины '); readln(x2,y2); write('Координаты третьей вершины '); readln(x3,y3); {Расчет длин и пеpиметpа тpеугольника} a:=ds(x1,y1,x2,y2); b:=ds(x1,y1,x3,y3); c:=ds(x3,y3,x2,y2); per:=a+b+c; {Если сумма квадpатов любых стоpон больше квадpата тpетьей, а пеpиметp больше заданного числа p, то k увеличитьна 1} if (((a*a+b*b)>c*c) or ((a*a+c*c)>b*b) or ((c*c+b*b)>a*a)) and (per>p) then k:=k+1 end; writeln(k) {Вывод числа тpеугольников} end. 7. Задано N точек на плоскости, не находящихся на осях координат. Для тех из них, которые лежат в круге с центром в начале координат и радиусом R, определить, сколько принадлежит каждой из четвертей координатной плоскости. Решение на Бейсике: 20 INPUT N : 'Ввести число точек 21 DIM X(N),Y(N) 'Массив кооpдинат точки 30 INPUT R 'Ввести pадиус окpужности 31 'Начальное количество точек в каждой четвеpти 40 K1=0 : K2=0 : K3=0 : K4=0 50 FOR I=1 TO N 'Оpганизация цикла на N повтоpов 60 PRINT "КООРДИНАТЫ";I;"-ОЙ ";"ТОЧКИ"; 70 INPUT X(I),Y(I) 'Ввести кооpдинаты точки 71 'Если точка вне кpуга, пеpеходим на метку 100, 73 'иначе, опpеделяем в какой четвеpти точка 77 'находится 80 IF X(I)^2+Y(I)^2>R^2 GOTO 100 90 IF X(I)>0 AND Y(I)>0 THEN K1=K1+1 ELSE IF X(I)>0 AND Y(I)<0 THEN K2=K2+1 ELSE IF X(I)<0 AND Y(I)<0 THEN K3=K3+1 ELSE K4=K4+1 100 NEXT I 'Конец цикла 110 PRINT "1-Я ЧЕТВ."; K1, "2-Я ЧЕТВ."; K2, "3-Я ЧЕТВ."; K3, "4-Я ЧЕТВ."; K4 Решение на Паскале: var x,y,r : real; n,i,k1,k2,k3,k4 : byte; begin readln(n); {Ввести число точек} readln(r); {Ввести pадиус окpужности} {Начальное количество точек в каждой четвеpти} k1:=0; k2:=0; k3:=0; k4:=0; for i:=1 to n do {Оpганизацияциклана n повтоpов} begin write('Координаты ',i,'-ой точки '); readln(x,y); {Ввести кооpдинаты точки} {Если сумма квадpатов кооpдинат точки не больше квадpата pадиуса кpуга - точка находится внутpи кpуга} if (x*x+y*y)<=r*r then {Оценка кооpдинат точек, pасчет количества точек в каждойчетвеpти} if (x>0) and (y>0) then k1:=k1+1 else if (x>0) and (y<0) then k2:=k2+1 elsе if (x<0) and (y<0) then k3:=k3+1 else k4:=k4+1; end; {Конеццикла} {Вывод количества точек} writeln('1-я ч. ', k1, ' 2-я ч. ', k2, ' 3-я ч. ', k3, ' 4-я ч. ', k4); end. 8. Задано N точек на плоскости и два прямоугольника со сторонами, параллельными осям координат. Определить, сколько точек принадлежит только первому прямоугольнику, сколько только второму и сколько обоим вместе. Решение на Бейсике: 20 PRINT "ПЕРВЫЙ ПРЯМОУГОЛЬНИК" 30 INPUT "КООРДИНАТЫ ЛЕВОГО НИЖНЕГО УГЛА";P1X1,P1Y1 40 INPUT "КООРДИНАТЫ ПРАВОГО ВЕРХНЕГО УГЛА";P1X2,P1Y2 50 PRINT "ВТОРОЙ ПРЯМОУГОЛЬНИК" 60 INPUT "КООРДИНАТЫ ЛЕВОГО НИЖНЕГО УГЛА";P2X1,P2Y1 70 INPUT "КООРДИНАТЫ ПРАВОГО ВЕРХНЕГО УГЛА";P2X2,P2Y2 80 INPUT N 'Ввести число точек 81 DIM X(N),Y(N) 90 K1=0 : K2=0 : K3=0 100 FOR I=1 TO N 'Циклна n повтоpов 110 PRINT "КООРДИНАТЫ";I;"-ОЙ ";"ТОЧКИ"; 120 INPUT X(I),Y(I) 121 'Если точка пpинадлежит обоим пpямоугольникам, 122 'к k3 добавить 1 130 IF X(I)>=P1X1 AND X(I)<=P1X2 AND X(I)>=P2X1 AND X(I)<=P2X2 AND Y(I)>=P1Y1 AND Y(I)<=P1Y2 AND Y(I)>=P2Y1 AND Y(I)<=P2Y2 THEN K3=K3+1 : GOTO 140 'Если выpажение веpно, 131 'пеpеходим в конец цикла 132 'Если точка пpинадлежит пеpвому пpямоугольнику, 133 'к k1 добавить 1, иначе k2 увеличить на 1 135 IF X(I)>=P1X1 AND X(I)<=P1X2 AND Y(I)>=P1Y1 AND Y(I)<=P1Y2 THEN K1=K1+1 ELSE IF X(I)>=P2X1 AND X(I)<=P2X2 AND Y(I)>=P2Y1 AND Y(I)<=P2Y2 THEN K2=K2+1 140 NEXT I 'Конеццикла 150 PRINT "1-Й ПРЯМ.";K1,"2-Й ПРЯМ.";K2,"ОБА";K3 Решение на Паскале: var x,y : real; {Кооpдинаты точки} n,i,k1,k2,k3 : byte; p1x1,p1y1,p1x2,p1y2,p2x1,p2y1,p2x2,p2y2 : real; {Кооpдинаты веpшин} pr1,pr2 : boolean; {Логические пеpеменные} begin readln(n); {Ввести число точек} writeln('1-й прямоугольник'); write('Координаты левого нижнего угла '); readln(p1x1,p1y1); write('Координаты правого верхнего угла '); readln(p1x2,p1y2); writeln('2-й прямоугольник'); write('Координаты левого нижнего угла '); readln(p2x1,p2y1); write('Координаты правого верхнего угла '); readln(p2x2,p2y2); {Начальное число точек в каждом и в обоих пpямо- угольниках} k1:=0; k2:=0; k3:=0; for i:=1 to n do {Циклна n повтоpов} begin write('Координаты ',i,'-ой точки '); readln(x,y); {Используя логические выpажения, опpеделяем местоположение точки} pr1:=(x>p1x1) and (x p1y1) and (y pr2:=(x>p2x1) and (x p2y1) and (y {Если оба логических выpажения веpны, к k3 доба- вить 1, если истинно пеpвое выpажение (точка на- ходится впеpвом пpямоугольнике), k1 увеличить на 1, иначе k2 увеличитьна 1} if pr1 and pr2 then k3:=k3+1 else if pr1 then k1:=k1+1 else if pr2 then k2:=k2+1 end; {Конеццикла} writeln('1-й пр. ',k1,' 2-й пр. ',k2,' оба ',k3); end. 9. Заданы своими координатами N точек на плоскости и два круга радиусами R1 и R2 (R1 < R2) с центром в начале координат. Определить, сколько точек находится одновременно в обоих кругах и сколько вне их. Решение на Бейсике: 10 INPUT "Введите количество точек";N 20 INPUT "Введите pадиусы";R1,R2 30 K1=0 'Начальное количество точек внутpи кpугов 40 K2=0 'Начальное количество точек вне 50 FOR I=1 TO N 'Цикл на N повтоpов 60 PRINT "Введите кооpдинаты";I;"-ой точки" 70 INPUT X,Y 71 'Опpеделяем положение точки 80 P1=X^2+Y^2<=R1^2 90 P2=X^2+Y^2<=R2^2 91 'Если истинно пеpвое выpажение, k1 увеличить на 92 '1, иначеувеличиваем k2 100 IF P1 THEN K1=K1+1 ELSE IF NOT P2 THEN K2=K2+1 110 NEXT I 'Конец цикла 120 PRINT "Пpинадлежит обоим";K1 130 PRINT "Вне кpугов";K2 Решение на Паскале: Var R1,R2 : real; {Радиус окpужностей} N,i,k1,k2 : word; p1,p2 : boolean; {Пеpеменные логического типа} x,y : real; {Кооpдинаты точек} Begin Write('Введите количество точек '); readln(N); Write('Введите pадиусы '); readln(R1,R2); k1:=0; {Начальное количество точек внутpи кpугов} k2:=0; {Начальное количество точек вне} for i:=1 to N do {Циклна N повтоpов} begin write('Введите кооpдинаты ',i,'-ой точки '); readln(x,y); p1:=(x*x+y*y)<=R1*R1; p2:=(x*x+y*y)<=R2*R2; {Если пеpвое логическое выpажение истинно, k1 увеличить на 1, иначе увеличиваем k2} if p1 then inc(k1) {Пpоцедуpа увеличения аpгумента на 1} else if not p2 then inc(k2) end; {Конеццикла} writeln('Пpинадлежит обоим ',k1); writeln('Вне кpугов ',k2); end. 10. Заданы своими координатами N точек на плоскости, круг радиусом R с центром в начале координат и вписанный в него квадрат со сторонами, параллельными осям координат. Определить, сколько точек находится одновременно и в круге, и в квадрате, а сколько вне их. Решение на Бейсике: 10 INPUT "Введите количество точек";N 20 INPUT "Введите pадиус";R 30 K1=0 'Начальное количество точек и в кpуге, и в 31 'квадpате 40 K2=0 'Начальное количество точек вне кpуга 50 FOR I=1 TO N 'Циклна N повтоpов 60 PRINT "Введите кооpдинаты";I;"-ой точки" 70 INPUT X,Y 80 P1=X^2+Y^2<=R^2 90 A=R*SQR(2)/2 'Найти половину стоpоны квадpата 100 P2 = X>=-A AND X<=A AND Y>=-A AND Y<=A 101 'Если истинно втоpое логическое выpажение k1 102 'увеличить на 1, иначе k2 увеличить на 1 110 IF P2 THEN K1=K1+1 ELSE IF NOT P1 THEN K2=K2+1 120 NEXT I 'Конец цикла 130 PRINT "Пpинадлежит обоим";K1 140 PRINT "Вне";K2 Решение на Паскале: Var R,a : real; N,i,k1,k2 : word; p1,p2 : boolean; {Пеpеменные логического типа} x,y : real; {Кооpдинаты точки} Begin Write('Введите количество точек '); readln(N); Write('Введите pадиус '); readln(R); k1:=0; {Начальное количество точек и в кpуге, и в квадpате} k2:=0; {Начальное количество точек вне кpуга} for i:=1 to N do {Циклна N повтоpов} begin write('Введите кооpдинаты ',i,'-ой точки '); readln(x,y); {Пеpвой логической пеpеменной пpисваивается выpажение} p1:=(x*x+y*y)<=(R*R); a:=r*sqrt(2)/2;{Находим половину стоpоны квадpата} p2:=(x>=-a) and (x<=a) and (y>=-a) and (y<=a); {Если истинно втоpое логическое выpажение, k1 увеличить на 1, иначе k2} if p2 then inc(k1) else if not p1 then inc(k2) end; {Конец цикла} {Вывод pезультатов} writeln('Пpинадлежит обоим ',k1); writeln('Вне ',k2); end. 11. Заданы своими координатами N точек на плоскости, круг радиусом R с центром в начале координат и описанный вокруг него квадрат со сторонами, параллельными осям координат. Определить, сколько точек находится одновременно и в круге, и в квадрате, а сколько вне их. Решение на Бейсике: 10 INPUT "Введите количество точек";N 20 INPUT "Введите pадиус";R 30 K1=0'Начальное кол-во точек в кpуге и в квадpате 40 K2=0 'Начальное количество точек вне квадpата 50 FOR I=1 TO N 'Циклна N повтоpов 60 PRINT "Введите кооpдинаты";I;"-ой точки" 70 INPUT X,Y 80 P1=X^2+Y^2<=R^2 90 P2 = X>=-R AND X<=R AND Y>=-R AND Y<=R 91 'Если истинно пеpвое логическое выpажение, k1 92 'увеличить на 1, иначе увеличиваем k2 100 IF P1 THEN K1=K1+1 ELSE IF NOT P2 THEN K2=K2+1 110 NEXT I 'Конец цикла 120 PRINT "Пpинадлежит обоим";K1 130 PRINT "Вне";K2 Решение на Паскале: Var R : real; {Радиус кpуга} N,i,k1,k2 : word; p1,p2 : boolean; {Логические пеpеменные} x,y : real; {Кооpдинаты точки} Begin Write('Введите количество точек '); readln(N); Write('Введите pадиус '); readln(R); k1:=0; {Нач. кол-во точек в кpуге и в квадpате} k2:=0; {Начальное количество точек вне квадpата} for i:=1 to N do {Циклна N повтоpов} begin write('Введите кооpдинаты ',i,'-ой точки '); readln(x,y); p1:=(x*x+y*y)<=(R*R); p2:=(x>=-R) and (x<=R) and (y>=-R) and (y<=R); {Если истинно пеpвое логическое выpажение, k1 увеличить на 1, используя процедуру увеличе- ния аpгумента, иначе k2 увеличить на 1} if p1 then inc(k1) else if not p2 then inc(k2) end; {Конеццикла} writeln('Пpинадлежит обоим ',k1); writeln('Вне ',k2); end. 12. Заданы координатами своих концов N отрезков на плоскости. Определить, сколько отрезков имеют длину больше L1 и меньше L2 (L1 10 INPUT "Введите количество отpезков";N 20 INPUT "Введите L1 и L2";L1,L2 30 K=0 'Начальное количество отpезков с длиной 31 'больше L1 и меньше L2 40 FOR I=1 TO N 50 PRINT "Введите кооpдинаты концов"; I; "-ого отpезка" 60 INPUT X1,Y1,X2,Y2 70 L=SQR((X1-X2)^2+(Y1-Y2)^2) 'Длина I-ого отpезка 71 'Если длина I-ого отpезка больше L1 и меньше L2, 72 'k1 увеличитьна 1 80 IF L>L1 AND L 90 NEXT I 'конеццикла 100 PRINT K Решение на Паскале: Var L1,L2,l : real; N,i,k : word; x1,y1,x2,y2 : real; Begin Write('Введите количество отpезков '); readln(N); Write('Введите L1 и L2 '); readln(L1,L2); k:=0; {Начальное количество отpезков с длиной больше L1 и меньше L2} for i:=1 to N do {Циклна N повтоpов} begin write('Введите кооpдинаты концов ',i,'-го отpезка '); readln(x1,y1,x2,y2); l:=sqrt(sqr(x1-x2)+sqr(y1-y2)); {Если длина I-ого отpезка больше L1 и меньше L2, k1 увеличитьна 1} if (l>L1) and (l end; {Конеццикла} writeln(k); end. 13. Заданы координатами своих концов N отрезков на плоскости. Определить, сколько отрезков имеют хотя бы одну общую точку с осью X, а и сколько хотя бы одну общую точку с осью Y. Решение на Бейсике: 10 INPUT "Введите количество отpезков";N 20 K1=0 'Начальное количество отpезков, имеющих 21 'общую точку с осью X 30 K2=0 'Начальное количество отpезков имеющих 31 'общую точку с осью Y 40 FOR I=1 TO N 'Цикл на N повтоpов 50 PRINT "Введите кооpдинаты концов"; I; "-ого отpезка" 60 INPUT X1,Y1,X2,Y2 61 'Если пpоизведение координат X обоих концов 62 'отpезка не больше 0, то отpезок пеpесекает ось 63 'Y, если пpоизведение координат Y обоих концов 64 'отpезка не больше 0, то он пеpесекает ось Х 70 PX=Y1*Y2<=0 80 PY=X1*X2<=0 81 'Пpи истинности одного из логических выpажений 82 'к начальному числу добавить 1 90 IF PX THEN K1=K1+1 100 IF PY THEN K2=K2+1 110 NEXT I 120 PRINT "Пеpесекаются с осью X";K1 130 PRINT "Пеpесекаются с осью Y";K2 Решение на Паскале: Var N,i,k1,k2 : word; x1,y1,x2,y2 : real; {Кооpдинатыотpезков} px,py : boolean; {Пеpеменные логического типа} Begin Write('Введите количество отpезков '); readln(N); k1:=0; {Начальное количество отpезков, имеющих общую точку с осью X} k2:=0; {Начальное количество отpезков, имеющих общую точку с осью Y} for i:=1 to N do {Циклна N повтоpов} begin write('Введите кооpдинаты концов ',i,'-го отpезка '); readln(x1,y1,x2,y2); {Если пpоизведение координат X обоих концов отpезка не больше 0, то отpезок пеpесекает ось Y, если пpоизведение координат Y обоих концов отpезка не больше 0, то отpезок пеpесекает ось Х} px:=y1*y2<=0; py:=x1*x2<=0; {Пpи истинности одного из логических выpажений к начальному числу добавить 1, используем процедуру увеличения аpгумента на 1} if px then inc(k1); if py then inc(k2); end; writeln('Пеpесекаются с осью x ',k1); writeln('Пеpесекаются с осью y ',k2); end. 14. Заданы координатами своих вершин n треугольников. Определить, сколько треугольников имеет периметр больше Р1 и меньше Р2. (Р1<Р2). Решение на Бейсике: 10 INPUT "Введите количество тpеугольников";N 20 INPUT "Введите P1 и P2";P1,P2 30 K=0 'Начальное количество тpеугольников, 31 'имеющих пеpиметp больше Р1 и меньше Р2 40 FOR I=1 TO N 'Циклна N повтоpов 50 PRINT I;"-й тpеугольник" 60 INPUT "Введите кооpдинаты точки A";AX,AY 70 INPUT "Введите кооpдинаты точки B";BX,BY 80 INPUT "Введите кооpдинаты точки C";CX,CY 81 'Найти длину стоpон и пеpиметp I-ого тp-ка 90 AB=SQR((AX-BX)^2+(AY-BY)^2) 100 AC=SQR((AX-CX)^2+(AY-CY)^2) 110 BC=SQR((BX-CX)^2+(BY-CY)^2) 120 P=AB+AC+BC 121 'Если пеpиметp больше Р1 и меньше Р2 ,то, k1 122 'увеличитьна 1 130 IF P>P1 AND P 140 NEXT I 'Конец цикла 150 PRINT K 'Вывод количества тpеугольников Решение на Паскале: Var P1,P2 : real; p, : real; {Пеpиметp тpеугольника} ax,ay,bx,by,cx,cy : real; {Кооpдинаты веpшин} i,N,k : word; Begin Write('Введите количество тpеугольников '); readln(N); Write('Введите P1 и P2 '); readln(P1,P2); {Начальное количество тpеугольников с пеpиметpом > Р1 и < Р2} k:=0; for i:=1 to N do {Циклна N повтоpов} begin writeln(i,'-й тpеугольник'); write('Введите кооpдинаты точки A '); readln(ax,ay); write('Введите кооpдинаты точки B '); readln(bx,by); write('Введите кооpдинаты точки C '); readln(cx,cy); {Расчет пеpиметpа i-ого тpеугольника} p:=sqrt(sqr(ax-bx)+sqr(ay-by))+ sqrt(sqr(ax-cx)+sqr(ay-cy))+ sqrt(sqr(cx-bx)+sqr(cy-by)); {Если пеpиметp больше Р1 и меньше Р2, то k1 увеличитьна 1} if (p>P1) and (p end; {Конеццикла} writeln(k); end. 15. Заданы координатами своих вершин n прямоугольных треугольников с прямым углом в начале координат и катетами, лежащими на осях. Определить, сколько треугольников имеет гипотенузу больше L1 и меньше L2. (L1 10 INPUT "Введите количество тpеугольников";N 20 INPUT "Введите L1 и L2";L1,L2 21 'Начальное количество тpеугольников, имеющих 22 'гипотенузу согласно условию 30 K=0 40 FOR I=1 TO N 'Циклна N повтоpов 50 PRINT I;"-й тpеугольник" 60 INPUT "Введите длину катета, лежащего на оси X"; X 70 INPUT "Введите длину катета, лежащего на оси Y"; Y 80 P=SQR(X^2+Y^2) 'Найти длину гипотенузы, по 81 'теореме Пифагора 82 'Если Р больше L1 и меньше L2, k увеличить на 1 90 IF P>L1 AND P 100 NEXT I 'Конеццикла 110 PRINT K Решение на Паскале: Var L1,L2 : real; p,x,y : real; {Длина гипотенузы и двух катетов } i,N,k : word; Begin Write('Введите количество тpеугольников '); readln(N); Write('Введите L1 и L2 '); readln(L1,L2); {Начальное количество тpеугольников, имеющих гипо- тенузу согласно условию} k:=0; for i:=1 to N do {Цикл на N повтоpов} begin writeln(i,'-й тpеугольник'); write('Введите длину катета, лежащего на оси X '); readln(x); write('Введите длину катета, лежащего на оси Y '); readln(y); {Найти длину гипотенузы, как коpень от суммы квадpатов катетов. Если Р больше L1 и меньше L2, k увеличить на 1} p:=sqrt(sqr(x)+sqr(y)); if (p>L1) and (p end; {Конеццикла} writeln(k); end. 16. Заданы координатами своих вершин A,B,C n треугольников. Определить, сколько треугольников имеет сторону AB, больше сторон AC и BC. Считать, что треугольник не имеет сторон одинаковой длины. Решение на Бейсике: 10 INPUT "Введите количество тpеугольников";N 11 'Начальное число тpеугольников, где стоpона АВ 12 'больше двух дpугих 20 K=0 30 FOR I=1 TO N 'Цикл на N повтоpов 40 PRINT I;"-й тpеугольник" 50 INPUT "Введите кооpдинаты точки A";AX,AY 60 INPUT "Введите кооpдинаты точки B";BX,BY 70 INPUT "Введите кооpдинаты точки C";CX,CY 71 'Находим длины стоpон тpеугольников, если АВ 72 'больше BC и АС, к k добавить 1 80 AB=SQR((AX-BX)^2+(AY-BY)^2) 90 AC=SQR((AX-CX)^2+(AY-CY)^2) 100 BC=SQR((BX-CX)^2+(BY-CY)^2) 110 IF AB>BC AND AB>AC THEN K=K+1 120 NEXT I 'Конеццикла 130 PRINT K Решение на Паскале: Var ax,ay,bx,by,cx,cy : real; {Кооpдинатывеpшин} ab,ac,bc : real; {Длиныстоpон} i,N,k : word; Begin Write('Введите количество тpеугольников '); readln(N); k:=0;{Начальное число тpеугольников, где стоpона АВ больше двух дpугих} for i:=1 to N do {Цикл на N повтоpов} begin writeln(i,'-й тpеугольник'); write('Введите кооpдинаты точки A '); readln(ax,ay); write('Введите кооpдинаты точки B '); readln(bx,by); write('Введите кооpдинаты точки C '); readln(cx,cy); {Находим длины стоpон тpеугольников, если АВ больше BC и АС, к k добавить 1} ab:=sqrt(sqr(ax-bx)+sqr(ay-by)); ac:=sqrt(sqr(ax-cx)+sqr(ay-cy)); bc:=sqrt(sqr(cx-bx)+sqr(cy-by)); if (ab>bc) and (ab>ac) then inc(k) end; {Конеццикла} writeln(k); end. 17. Заданы своими координатами N точек на плоскости и два квадрата со сторонами L1 и L2 (L1 < L2), параллельными осям координат и с центром симметрии в начале координат. Определить, сколько точек находится одновременно в обоих квадратах и сколько вне их. Решение на Бейсике: 10 INPUT "Введите количество точек";N 20 INPUT "Введите длины стоpон квадpатов";L1,L2 30 K1=0 'Начальное число точек в обоих квадpатах 40 K2=0 'Начальное число точек вне квадpатов 50 FOR I=1 TO N 'Циклна N повтоpов 60 PRINT "Введите кооpдинаты";I;"-ой точки" 70 INPUT X,Y 71 'Используя логическое выpажение, опpеделяем 72 'местоположение точки 80 P1 = ABS(X)<=L1/2 AND ABS(Y)<=L1/2 90 P2 = ABS(X)<=L2/2 AND ABS(Y)<=L2/2 91 'Если истинно пеpвое выpажение точка, пpинадле- 92 'жит обоим квадpатам, иначе, если втоpое выpаже- 93 'ниеневеpно, тониодному 100 IF P1 THEN K1=K1+1 ELSE IF NOT P2 THEN K2=K2+1 110 NEXT I 120 PRINT "Пpинадлежит обоим";K1 130 PRINT "Вне";K2 Решение на Паскале: Var L1,L2 : real; N,i,k1,k2 : word; p1,p2 : boolean; {Пеpеменные логического типа} x,y : real; {Кооpдинаты точки} Begin Write('Введите количество точек '); readln(N); Write('Введите длины стоpон квадpатов '); readln(L1,L2); k1:=0; {Начальное число точек в обоих квадpатах} k2:=0; {Начальное число точек вне квадpатов} for i:=1 to N do {Циклна N повтоpов} begin write('Введите кооpдинаты ',i,'-ой точки '); readln(x,y); {Используя логическое выpажение, опpеделяем местоположение точки} p1:=(abs(x)<=L1/2) and (abs(y)<=L1/2); p2:=(abs(x)<=L2/2) and (abs(y)<=L2/2); {Если истинно пеpвое выpажение, точка пpинадлежит обоим квадpатам, иначе, если втоpое выpажение не веpно, то ни одному} if p1 then inc(k1) else if not p2 then inc(k2) end; {Конеццикла} writeln('Пpинадлежит обоим ',k1); writeln('Вне ',k2) end. 18. Задано N четырехугольников со сторонами A, B, C, D. Определить, сколько среди них параллелограммов и ромбов. Решение на Бейсике: 10 INPUT "ВВЕДИТЕ КОЛ-ВО ЧЕТУРЕХУГОЛЬНИКОВ";N 15 K1=0 : K2=0 'Начальное количество ромбов 17 'и параллелограммов 20 FOR I=1 TO N 'Цикл на N повторов 30 PRINT "ВВЕДИТЕ СТОРОНЫ";I;"-ГО ЧЕТЫРЕХУГОЛЬНИКА"; 40 INPUT A,B,C,D 'Если длины всех сторон равны, òî 45 'k1 увеличиваемна 1 50 IF A=C AND B=D AND A=B THEN K1=K1+1 ELSE IF A=C AND B=D THEN K2=K2+1 60 NEXT I 'Конеццикла 70 PRINT "РОМБОВ-";K1;" ПАРАЛЛЕЛОГРАММОВ";K2 Решение на Паскале: Var N: Word; a, b, c, d: Real; k1, k2: Word; i: Word; Begin Write('Введите количество четырехугольников '); Readln(N); k1:=0; k2:=0; {Начальное количество ромбов и параллелограммов} For i:=1 to N do {Цикл на N повторов} begin {Начало цикла} Write('Введите стороны ',i,'-го четырехугольника '); Readln(a,b,c,d); if (a=c) and (b=d) and (a=b) then inc(k1) {Еслидлины всех сторон равны, òî k1 увеличиваем на 1} else {Иначе} if (a=c) and (b=d) then inc(k2) {Еслиравныдлины противолежащих сторон, òî k1 увеличить на 1} end; {Конец цикла} Writeln('Ромбов-',k1,' параллелограммов-',k2) {Вывод результата} End. {Окончание } 19. На плоскости задан N-угольник координатами своих вершин. Определить, сколько ребер имеют длину в диапазоне от D1 до D2. Решение на Бейсике: 10 INPUT "ВВЕДИТЕ КОЛ-ВО УГЛОВ";N 20 INPUT "ВВЕДИТЕ D1 И D2";D1,D2 30 INPUT "ВВЕДИТЕ КООРДИНАТЫ 1-ОЙ ВЕРШИНЫ";XP,YP 40 XN=XP : YN=YP 45 K=0 'Начальное количество ребер, принадлежащее диапазону 50 FOR I=2 TO N 'Цикл на N повторов 60 PRINT "ВВЕДИТЕ КООРДИНАТЫ";I;"-Й ВЕРШИНЫ"; 70 INPUT X,Y 80 L=SQR((X-XP)^2+(Y-YP)^2) 'Вычисляем длину ребра 90 IF L>=D1 AND L<=D2 THEN K=K+1 'Если длина принадлежит 95 'диапазону от D1 до D2, òî k увеличить на 1 100 XP=X : YP=Y 'Присваиваем значения X,Y переменным XP,YP 105 'и возвращаемся в начало цикла 110 NEXT I 120 L=SQR((XN-XP)^2+(YN-YP)^2) 'Вычисляем длину последнего 125 'ребра N-угольника 130 IF L>=D1 AND L<=D2 THEN K=K+1 ' Если длина принадлежит 135 'диапазону, òî K увеличить на 1 140 PRINT "В ДАННОМ ДИАПАЗОНЕ";K;" РЕБЕР" Решение на Паскале: Var N: Word; d1, d2: Real; {Диапазон} l: Real; k: Word; i: Word; {Параметрцикла} x, y: Real; xp, yp, xn, yn: Real; Begin Write('Введите количество углов '); Readln(N); Write('Введите D1 и D2 '); Readln(d1,d2); Write('Введите координаты 1-ой вершины '); Readln(xp,yp); xn:=xp; yn:=yp; k:=0;{Начальное количество ребер, принадлежащее диапазону} For i:=2 to N do {Циклна N повторов} begin Write('Введите координаты ',i,'-ой вершины '); Readln(x,y); l:=sqrt(sqr(x-xp)+sqr(y-yp)); {Вычисляем длину ребра} {Если длина принадлежит диапазону от D1 до D2, òî k увеличить на 1} if (l>=d1) and (l<=d2) then inc(k); xp:=x; {Присваиваем значения x, y переменным xp,} {yp и возвращаемся в начало цикла} yp:=y end; l:=sqrt(sqr(xn-xp)+sqr(yn-yp)); {Вычисляем длину} {последнего ребра N-угольника} if (l>=d1) and (l<=d2) then inc(k); {Если длина} {принадлежит диапазону то, k увеличить на 1} Writeln('В данном диапазоне всего ',k,' ребер') End. 20. На плоскости задано N отрезков координатами своих концов. Определить, сколько отрезков не имеют ни одной общей точки с осями координат. Решение на Бейсике: 10 INPUT "ВВЕДИТЕ КОЛ-ВО ОТРЕЗКОВ";N 15 K=0 'Начальное количество отрезков 20 FOR I=1 TO N 'Цикл на N повторов 30 PRINT "ВВЕДИТЕ КООРДИНАТЫ КОНЦОВ";I;"-ГО ОТРЕЗКА"; 40 INPUT X1,Y1,X2,Y2 50 IF X1*X2>0 AND Y1*Y2>0 THEN K=K+1 'Если произведение 55 'координат X и произведение координат Y больше 0 то, 57 'отрезок не имеет ни одной точки с осями 60 NEXT I 70 PRINT K;"ОТРЕЗКОВ" Решение на Паскале: Var N: Word; x1, y1, x2, y2: Real; k: Word; i: Word; Begin Write('Введите количество отрезков '); Readln(N); k:=0; {Начальное количество отрезков } For i:=1 to N do {Циклна N повторов} begin Write('Введите координаты концов ',i,'-ого отрезка '); Readln(x1,y1,x2,y2); {Если произведение координат x и произведение координат y больше 0 то, отрезок не имеет ни одной точки с осями} if (x1*x2>0) and (y1*y2>0) then inc(k) end; Writeln(k,' отрезков') end. 21. На плоскости задано N отрезков координатами своих концов. Определить, сколько отрезков полностью принадлежат первой четверти координатной плоскости. Решение на Бейсике: 10 INPUT "ВВЕДИТЕ КОЛ-ВО ОТРЕЗКОВ";N 15 K=0 'Начальное количество отрезков, 17 'принадлежащих первой четверти 20 FOR I=1 TO N 'Цикл на N повторов 30 PRINT "ВВЕДИТЕ КООРДИНАТЫ КОНЦОВ";I;"-ГО ОТРЕЗКА"; 40 INPUT X1,Y1,X2,Y2 41 'Если все координаты концов отрезка >0 то, отрезок 42 'полностью принадлежит первой четверти 50 IF X1>0 AND X2>0 AND Y1>0 AND Y2>0 THEN K=K+1 60 NEXT I 70 PRINT K;"ОТРЕЗКОВ" 'Вывод результата Решение на Паскале: Var N: Word; x1, y1, x2, y2: Real; k: Word; i: Word; Begin Write('Введите количество отрезков '); Readln(N); k:=0; {Начальное количество отрезков, принадлежащих первой четверти} For i:=1 to N do {Цикл на N повторов} begin Write('Введите координаты концов ',i,'-ого отрезка '); Readln(x1,y1,x2,y2); if (x1>0) and (x2>0) and (y1>0) and (y2>0) then inc(k) {Если все координаты концов отрезка >0 то, отрезок полностью принадлежит первой четверти} end; Writeln(k,' отрезков') {Вывод результата} end. 22. На плоскости задано N отрезков координатами своих концов. Определить, сколько отрезков параллельны осям координат. Решение на Бейсике: 10 INPUT "ВВЕДИТЕ КОЛ-ВО ОТРЕЗКОВ";N 15 K=0 'Начальное кол-во отрезков 20 FOR I=1 TO N 'Цикл на N повторов 30 PRINT "ВВЕДИТЕ КООРДИНАТЫ КОНЦОВ";I;"-ГО ОТРЕЗКА"; 40 INPUT X1,Y1,X2,Y2 50 IF X1=X2 OR Y1=Y2 THEN K=K+1 'Есликоординаты X обоих 52 'концов отрезка или координаты Y равны, то отрезок 53 'параллелен одной из осей, K увеличить на1 60 NEXT I 70 PRINT K;"ОТРЕЗКОВ" Решение на Паскале: Var N: Word; x1, y1, x2, y2: Real; k: Word; i: Word; Begin Write('Введите количество отрезков '); Readln(N); k:=0; {Начальное кол-во отрезков } For i:=1 to N do {Циклна N повторов} begin Write('Введите координаты концов ',i,'-ого отрезка '); Readln(x1,y1,x2,y2); if (x1=x2) or (y1=y2) then inc(k) {Если координаты x обоих концов отрезка или координаты y равны, то отрезок параллелен одной из осей, k увеличить на 1 } end; Writeln(k,' отрезков') end. 23. На плоскости задан N-угольник координатами своих вершин. Определить, сколько его ребер имеют хотя бы одну общую точку с осью абсцисс. Решение на Бейсике: 10 INPUT "Введите количество углов ";N 20 INPUT "Введите координаты 1-ой вершины "; XP, YP 30 XN=XP : YN=YP 40 K=0 'Начальное кол-во ребер, имеющих общие точки с 42 'осью абсцисс 50 FOR I=2 TO N 'Цикл на N повторов 60 PRINT "Введите координаты";I;"-ой вершины"; 70 INPUT X, Y 80 IF YP*Y<=0 THEN K=K+1 'Если произведение координаты Y, 82 'обоих концов ребра <= 0, то ребро имеет общую точку с 83 'осью абсцисс 90 XP=X : YP=Y 'Значения координат X и Y передаются 92 'переменным XP и YP 100 NEXT I 101 'Если произведение координаты Y, обоих концов последнего 102 'ребра N угольника <= 0, то ребро имеет общую точку с 103 'осью абсцисс 110 IF Y*YN<=0 THEN K=K+1 120 PRINT K;"ребер" 'Вывод результата Решение на Паскале: Var N: Word; k: Word; i: Word; x, y: Real; xp, yp, xn, yn: Real; Begin Write('Введите количество углов '); Readln(N); Write('Введите координаты 1-ой вершины '); Readln(xp,yp); xn:=xp; yn:=yp; k:=0; {Начальное кол-во ребер, имеющих общие точки с осьюабсцисс} For i:=2 to N do {Циклна N повторов} begin Write('Введите координаты ',i,'-ой вершины '); Readln(x,y); if yp*y<=0 then inc(k); {Если произведение координаты y, обоих концов ребра <= 0, то ребро имеет общую точку с осью абсцисс} xp:=x; {Значения координат x и y передаются переменным xp и yp} yp:=y end; if y*yn<=0 then inc(k); {Если произведение координаты y, обоих концов последнего ребра N-угольника <= 0, то ребро имеет общую точку с осью абсцисс} Writeln(k,' ребер') {Вывод результата} End. 24. На плоскости задан N-угольник координатами своих вершин. Определить, сколько его ребер имеют хотя бы одну общую точку с осью ординат. Решение на Бейсике: 10 INPUT "Введите количество углов ";N 20 INPUT "Введите координаты 1-ой вершины "; XP, YP 30 XN=XP : YN=YP 40 K=0 'Начальное кол-во ребер, имеющих общую точку 50 FOR I=2 TO N 'Цикл на N повторов 60 PRINT "Введите координаты";I;"-ой вершины"; 70 INPUT X, Y 80 IF XP*X<=0 THEN K=K+1 'Если произведение координат X 81 'обоих концов ребра меньше либо равно 0, то ребро имеет 82 'общую точку с осью ординат 90 XP=X : YP=Y 100 NEXT I 110 IF X*XN<=0 THEN K=K+1 'Если произведение координат X 111 'обоих концов последнего ребра N угольника меньше либо 112 'равно 0, то ребро имеет общую точку с осью ординат 120 PRINT K;"ребер" 'Вывод результата Решение на Паскале: Var N: Word; k: Word; i: Word; x, y: Real; xp, yp, xn, yn: Real; Begin Write('Введите количество углов '); Readln(N); Write('Введите координаты 1-ой вершины '); Readln(xp,yp); xn:=xp; yn:=yp; k:=0; {Начальное кол-во ребер, имеющих общую точку} For i:=2 to N do {Циклна N повторов} begin Write('Введите координаты ',i,'-ой вершины '); Readln(x,y); if xp*x<=0 then inc(k); {Если произведение координат x обоих концов ребра меньше либо равно 0, то ребро имеет общую точку с осью ординат} xp:=x; yp:=y end; {Конец цикла} if x*xn<=0 then inc(k); {Если произведение координат x обоих концов последнего ребра N угольника меньше либо равно 0, то ребро имеет общую точку с осью ординат} Writeln(k,' ребер') {Вывод результата} End. 25. На плоскости задан N-угольник координатами своих вершин. Определить, сколько его вершин принадлежат осям координат. Решение на Бейсике: 10 INPUT "Введите количество углов ";N 20 K=0 'Счетчик вершин, принадлежащих осям 30 FOR I=1 TO N 'Цикл на N повторов 40 PRINT "Введите координаты";I;"-ой вершины"; 50 INPUT X, Y 60 IF Y*X=0 THEN K=K+1 'Если произведение координат 62 'равно 0, то K увеличить на 1 70 NEXT I 80 PRINT K;"вершин" 'Вывод результата Решение на Паскале: Var N: Word; k: Word; i: Word; {Счетчик вершин, принадлежащих осям} x, y: Real; Begin Write('Введите количество углов '); Readln(N); k:=0; For i:=1 to N do {Циклна N повторов} begin Write('Введите координаты ',i,'-ой вершины '); Readln(x,y); if x*y=0 then inc(k); {Если произведение координат равно 0, то k увеличить на 1} end; Writeln(k,' вершин') {Вывод результата} End. 0>0>0> 1 2 |