Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Олимпиадные задачи по информатике

Rusa


Особый интерес у студентов и школьников, увлекающихся ин­форматикой, вызывают олимпиадные задачи - наиболее сложные задачи из курса информатики, с помощью к 22222n1324w 086;торых в форме сорев­нования выявляются наиболее талантливые и способные учащиеся.



Basic.

n 60%/(n -

Basic.

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

4 4

не меньше проходного:

<фам> <имя> <мат> <инф> <язык>

..............

проходной балл=? <b1>

<фам> <имя>

.....

<фам> <имя> <sum>

.......

cls

? «оценки учащихся:»

do

read fm$, nm$, mt, in, zk fm$, nm$, mt, in, zk

if fm$ then exit do fm$

? fm$, nm$, mt, in, zk (fm$, nm$, mt, in, zk)

loop

input «проходной балл=»,b1 запрос («проходной балл=»,b1)

restore ocenki ocenki

n

do

read fm$, nm$, mt, in, zk fm$, nm$, mt, in, zk

if fm$ = «» then exit do fm$ = «»

if mt=5 and in=5 and zk=5 then mt=5 in = 5 zk=5

? fm$, nm$ (fm$, nm$)

n = n + 1 n = n

end if

loop кцикл

if n=0 then ?

restore ocenki

n = 0

do

read fm$, nm$, mt, in, zk fm$, nm$, mt, in, zk

if fm$ = «» then exit do fm$ = «»

sum = mt + in + zk sum = mt + in + zk

if sum >= hi then sum >= bl

? fm$, nm$, sum (fm$, nm$, sum)

n = n + 1 n = n +

end if

loop кцикл

if n = 0 then ?

end

ocenki:

data

data

data

data «», «»,

задач. С этой задачей справилось большинство участников олимпиады. Однако далеко не все преду­смотрели исключительные ситуации и в результате многие из них потеряли определенную часть баллов на указанных тестах.

<строка>

<строка'>

cls

line input st$ (st$)

st$ st$

In len(st$) in len(st$)

s$ st$ s$ st$

do

k instr(s$,«»)  k instr(s$,«»)

if k then k

s$ (s$)

exit do выход

end if кесли

lf$ left$(s$,k-l) lf$ left$(s$,k-l)

rt$ right(s$,ln-k) rt$ = right(s$,ln-k)

ns$ rt$ lf$ ns$ rt$ + «» + lf$

ns$ (ns$

if ns$ st$ then exit do при ns$ st$ выход

s$ ns$  s$ = ns$

loop кцикл

end кон

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

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


<х1> <у1>

<х4> <у4>

<ml> <m2> <m3> <m4>

длина = <mх>

<n1> <n2> <n3> <n4>

<mn>

cls

n = 4

dim x(n),y(n),r(n,n)  dim x(n),y(n),r(n,n)

? «координаты точек»

gosub vvdan

restore mrshrt

mr mr

mx

for l = 1 to mr l = 1 до mr

read k1, k2, k3, k4 k1, k2, k3, k4

dl r(kl,k2) r(k2,k3) dl r(kl,k2) r(k2,k3)

d3 r(k3,k4) r(k4,kl)  d3 r(k3,k4) r(k4,k1)

d dl d3  d d1 + d3

kl; k2; k3; k4, d (k1; k2; k3; k4, d)

if mx then

mx = d: mn = d mx = d: mn = d

ml = kl: m2 = k2 ml = k1: m2 = k2

m3 = k3: m4 = k4 m3 = k3: m4 = k4

nl = kl: n2 = k2 n1 = k1: n2 = k2

n3 = k3: n4 = k4 n3 = k3: n4 = k4

elseif d > mx then инеc d > mx

mx = d mx = d

ml = kl: m2 = k2 m1 = k1: m2 = k2

m3 = k3: m4 = k4 m3= k3: m4 = k4

elseif d < mn then инеc d < mn

mn = d mn = d

nl = kl: n2 = k2 n1 = k1: n2 = k2

n3 = k3: n4 = k4 n3 = k3: n4 = k4

end if

next 1

? ml; m2; m3; m4 (m1; m2; m3; m4)

=»; mx =»; mx)

? nl; n2; n3; n4 (n1; n2; n3; n4)

=»; mn =»; mn)

end кон

vvdan:

restore tchks

for k = 1 to n k = 1

read x(k),y(k) x(k),y(k)

? x(k),y(k) x(k),y(k)

next k кцикл

for k = 1 to n k =

for l = 1 to n l = 1

dx = x(k) - x(l) dx = x(k) - x(l)

dy = y(k) - y(l) dy = y(k) - y(l)

rs = dx*dx + dy*dy rs = dx*dx + dy*dy

r(k,l) = sqr(rs) r(k,l) = sqr(rs)

next 1 кцикл

next k кцикл

return

mrshrt:

data

data

data

data

data

data

tchks: 'координаты точек

data

data

data

data

1 4 3 2 16

Tecт1.

точек: <n>

<k>: <x> <у>

....

<k> - <k+l>

отрезок: <1> <1+1>

точка: <х> <у>

...

Метод решения данной задачи может быть основан на вычислении точек пересечения отрезков (х1, у1) - (x2, у2) и (х3, y3) - (х4, y4) как точек пересечения линий, проходящих через заданные отрезки, с помощью системы уравнений:

(y2 - y1 x - x1) - (x2 - x1) (y

4 - у3) (x - x3) - (x - x3) (у - y3) =

D, Dx, Dy

2 - у1 - (х2 - х1 y1) х1 - (x2 - x1) y1;

4 - y3) = (у4 - у3) х3- (x4 - x3 y3,

Dx/D;

Dy/D;

D 4 - x3) - (x2 - x1) (y4 - y3);

Dx y2 - yl) xl x1) y1 - (x4 - х3) - (x2 - x1) [(y4 - y3) x3 - (х4 - х3) y3

Dy х3 - (x4 - x3) y1) x1 x1) y1] (y4 - y3).

[(x1, y1

x1) (y3 4 - x1) - (х2 - x1) (y4 y1)

- (х2, у2)] и [(х3, у3) - (х4, у4)] на прямой. В данной ситуации взаиморасположение вершин отрезков можно выяснить, вычислив взаиморасположение между ними на прямой относительно отрезка [(х1, у1) - (х2, у2)] по следующим фор­мулам:

d1

d2

d3 (x2

d4 = y1) (y2 -

d2 < min (d3, d4) или max (d3, d4) < 0, то отрезки не пересе­каются. В противном случае необходимо выделить и отбросить две крайние точки, и тогда оставшиеся две точки зададут общую часть этих отрезков.

nt data

nt = 200

dim x(nt), y(nt)

gosub wod

np

for k = to nt

xl x(k): yl y(k)

x2 x(k I): y2 y(k

for k to nt

x3 x(I): y3 y(I)

x(I 1): y4 y(I

gosub pint

next

next k

if np then

end

pint:

d213 yl)*(x3

d214

d431

d432

if d213*d2l4 > or d431*d432 > 0 then

elseifd213*d214 < or d431*d432 < 0 then

gosub tchki

else

gosub lin 1

end if

return

tchki:

np np+1

k; k

I; I

D yl)*(x4

Dx

Dx = Dx -

Dy

Dy Dy yl)*xl

Dx/D

Dy/D

return

lin

d2

d3

d4 = xl)*(x2

if d3 > d2 and d4 > d2 then

Iseif d3 < 0 and d4 < 0 then

else

gosub otrеz

end if

return

otrez:

np = np + 1

if d3 < 0 or d4 < 0 then

elseif d3 < d4 then

else 

end if

if d2 < d3 or d2 < d4 then

elseif d3 < d4 then

? x3; y3

else

end if

return

vvod: '

restore test1

read n

? «точек:»;nt

for k = 1 to nt

read x(k), y(k)

? x(k); y(k)

next kn

t = nt + 1

x(nt) = x(l)

y(nt) = y(l)

return

test1:

data 4

data

data 1,

data 0, 1

data 1, 1

test2:

data

data

data 1,

data

data

test1 или test2 в операторе перезагрузки restore


Document Info


Accesari: 981
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )