120 likes | 272 Views
Олімпіадна задача. Схема руху робота. Y. N Північь. N 300 E 500 S 150 W 150 S 150 W 350. E Схід. W Захід. X. S Південь. Принцип розрахунку площі. S = S 1 -S 2 -S 3. Y. S 1. S 2. X. S 3. Данні. Кількість рядків програми робота n
E N D
Схема руху робота Y N Північь N 300 E 500 S 150 W 150 S 150 W 350 E Схід W Захід X S Південь
Принцип розрахунку площі S= S1-S2-S3 Y S1 S2 X S3
Данні • Кількість рядків програми робота n • Масив напрямків куди ходив робот direction • Масив пройдених шляхівS Проміжні дані • Масив відносних координат xmas, ymas Результат • Площа периметру який обійшов робот square
Процедура для зчитування програми робота • Procedure load_data_robot; • vari:integer; • begin • write('n='); • readln(n); • for i:=1to n do begin • write('Direction: '); • readln(direction[i]); • write('S='); • readln(s[i]); • end; • end;
Процедура перетворення програми робота у відносні координати • Procedureconvert_data; • varx,y:real; • i:integer; • begin • x:=0;y:=0; • xmas[1]:=0; • ymas[1]:=0; • fori:=1tondobegin • if direction[i]='w' then x:=x-s[i]; • if direction[i]='e' then x:=x+s[i]; • if direction[i]='n' then y:=y-s[i]; • if direction[i]='s' then y:=y+s[i]; • xmas[i+1]:=x; • ymas[i+1]:=y; • end; • end;
Принцип розрахунку площі S=S1+S2+S3+S4+S5+S6 S=0+S2+0-S4-0-S6 S1=(x2-x1)×y2 S=S2-S4-S6 Y S2=(x3-x2)×y3 S3=(x4-x3)×y4 S4=(x5-x4)×y5 x2,y2 x3,y3 S5=(x6-x5)×y6 S2 S6=(x7-x6)×y7 x5,y5 x4,y4 S4 x1,y1 x6,y6 X S6
Принцип розрахунку площі S1=(x2-x1)×y2 Si=(xi+1-xi)×yi+1 S2=(x3-x2)×y3 Остаточна формула S3=(x4-x3)×y4 S=S1+S2+S3+S4+S5+S6 S5=(x6-x5)×y6 Умова повернення робота: x1=xn+1, y1=yn+1 S4=(x5-x4)×y5 S6=(x7-x6)×y7
Функція для обрахунку площі Functionsquare_perimetr:real; Varsquare:real; i:integer; begin square:=0; fori:=1to n+1do square:=square+(xmas[i+1]-xmas[i])*ymas[i+1]; square_perimetr:=square; end;
Програма • Program robot; • Varxmas,ymas:array[1..30] of real; • direction:array[1..30] of char; • s:array[1..30] of real; • n:integer; • ••••••••••••• • begin • load_data_robot; • convert_data; • if (xmas[1]=xmas[n+1]) and (ymas[1]=ymas[n+1]) then • write('S= ',square_perimetr) • else • write('Error'); • readln; • end.
Перевірка програми N W E S