Файл: Олимпиадаа дайындалуа арналан есептер жинаЫ 1 Екі санны осындасын табу программасын ру керек.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 07.11.2023

Просмотров: 79

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Король есептің шарты бойынша үш бағытқа жүреді:



I,j I,j+1
I+1,j i+1,j+1
Бұл есеп «бұтақ (дерево)» әдісіне келеді. Королмен осы үш бағыттағы әрбір торкозге жүріп көреміз. Осы үш торкөздің әрбірінен тағы үш торкөзге жүруге болады және тағыда сол сияқты. Әрбір торкөзге жасалынған қадам санын жазып отырамыз. Король көрсетілген торкөзге жеткенде сол торкөздегі сан, ең аз қадам санын береді.

Шешімі:

Program KOROL;

Uses crt;

Const

Y: array[1..8] of string=(‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’);

Label 1;

Var I,j,k,t,f,r,l,p: 0..16;

B: array[1..8,1..8] of string [2];

C: array[1..8] of string [8];

A: array[1..8,1..8] of 0..16;

Q: string;

Procedure juru;

Begin

If(i+1<=8) and (a[i+2,j]=0) then if (f=i+1) and (r=j)

Then t:=1

Else

Begin

A[i+1,j]:=i+1;k:=1;

End

If(j+1<=8) and (a[I,j+1]=0) then if(f=i) and (r=j+1) then t:=1 else begin

A[I,j+1]:=i+1; k:=1; end;

If(j+1<=8) and (,j+1<=8) and (a[i+1,j+1]=0) then if(f=i+1) and (r=j+1) then t:=1 else begin

A[i+j+1]:=i+1; k:=1; end; end;

Procedure aqw;

Begin

If(i-1>=1) and (j-1>=1) then a[i-1,j-1]:=1;

If(i-1>=1) and (j+1<=8) then a[i-1,j+1]:=1;

A[I,j]:=0;

End; begin clrscr; p:=9; for i:=1 to 8 do

Begin p:=p-1;

For j:=1 to 8 do

Begin

Str(p,q); b[I,j]:=y[j]+q;

End; end; assign() input, ‘korol.in’);

Reset(input);

assign() output, ‘korol.out’);

rewrite(output);

for i:=1 to 8 do

readln(c[i]); close(input);

for i:-1 to 8 do

for j:=1 to 8 do

begin

if b[I,j]=q then begin f:=I; r:=j; end;

if copy(c[i],j,1)= “K” then begin a[I,j]:=2; l:=I; t:=j: end;

if copy(c[i],j,l)=”P” then a[I,j]:=1;

end; if not((1<=f) and (t<=r)) then begin writeln(“no solution”); exit; end;

if(l=f) and (t=r) then begin writeln(0); exit; end;

for i:=1 to 8 do

for j:=1 to 8 do

if a[I,j]=1 then aqw;

t:=0; l:=2; for i:=1 to 8 do

for j:=1 to 8 do

if a[I,j]=1 then juru; inc(l);

if t=1 then begin writeln(1-2); halt; end;

if k<>0 then goto 1;

writeln(“no solution”);

close(output); end.
92 Меретой. Ғасыр мерейтойы деп атақты адамдардың туылған күнінен бастап 100 немесе 200 жыл өтуін айтамыз. Қалада атақты бір ақынның ғасырлық мерейтойын тойламақшы. Осыған орай ұйымдастырушылар қала орталығында үлкен табло іліп қоюды дұрыс деп тапты. Бұл таблоның қызметі мерейтойға дейін неше күн қалғаны көрсету.

Тапсырма: осы таблоның жұмыс істеуін қамтамасыз ететін, ақынның туылған күні мен ағымдағы мерзімге қарап мерейтойға неше күн қалғанын анықтайтын программа жазу керек.

Ескерту: сіз жазған программа таблоның 1999-2099 жылдар аралығында дұрыс жұмыс жасауын қаматамасыз ету керек.

Кіру файылындағы мәліметтің форматы: кіру файлы екі қатардан тұрады. Бірініші қатарда- ақынның туылған күні мына форматта :кк:аа:жжжж; екінші қатарда , дәл осы форматтағыдай ағымдағы мерзім берілген.


Шығу файылындағы мәліметтің форматы: сіз жазған программа шығу файлына мерейтойға қалған күндердің санын, егер мерейтой өту үстінде болса немесе өтіп кеткен болса «тойлануда» деген жауап шығару керек.

Есептің алгоритмдік шешуі: бұл есепте берілген ақынның туылған күні айы, жылы мен ағымдағы күн, ай, жыл айырмашылығын есепке аламыз. Одан төмендегі шарттар туындайды:

Kyn2-kyn 1<=0

Ai2-ai1<=0

Gil2 mod 4=0 болса, онда ақпан 29-ына бітеді. Егер gil2-gil1 mod 10=9 онда, мерейтойға әлі жылға жуық уақыт бар болып, мына шарт арқылы тексереміз. Gil2 mod 4=3 then b[2]:=29;

Program mereitoi;

Uses crt;

Label 1;

Const b: array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);

Var s,r,m: string;

Q,I,j,n,k,,l,p,gil2,kyn1,kyn2,ail,ai2: integer;

Begin

Clrscr; assign(input,”input.in”)

Reset(input);

Readln(s); readln(r);

Close(input);

Assign(output,”output.out”);

Rewrite(output);

K:=pos(“.”,s); m:=copy(s,l,k-1); delete(s,1,k);

Val(m,kyn1,q);k:=post(“.”,s); m:=copy(s,l,k-1);

Delete(s,l,k); val(m,ail,q);val(s,gil1,q);

K:=pos(“.”,r): m:=copy(r,l,k-1);delete(r,l,k);

Val(m,kyn2,q);k:=pos(“.”,r); m:=cope(r-1,k-1);

Delete(r,l,k);val(m,ai2,q);

Var(r,gil2,q);p:=gil2-gil1;

Q:=p mod 10; p=0;

If q=9 then begin

If (gil2 mod 4=3) or ((ai2<3) and (gil2 mod 4=0)) then b[2]:=29;

K:b[ai2]-kyn2;

For i:=ai2+1 to 12 do

P:=p+b[i];

For i:=1 to ail-1 do

P:= p+b[i]; p:=p+kyn1+k;

Goto 1; end;

If (ai1<=ai2) and (kyn2>= kyn1) then begin writeln(“toilanyda”); exit; end;

If (ai1<=ai2) and (kyn1>= kyn2) then begin p:=kyn1-kyn2; goto 1; end;

P:=gil2 mod 4;

If p=0 then b[2]:=29;

Q:=ai1-ai2; k:=b[ai2]- kyn2;

If q=1 then begin p:=k+kyn1; goto 1; end;

Q:=0;

For i:=ai2+1 to ai1-1 do

Q:=q+b[i];p:=k+q+kyn1;

L:writeln(p);

Close(output);

End.
93 Бөліктерге ажырату. Натурал М(м<30000) санын N(N<20) бүтін, тең немесе жобамен тең бөліктерге ажырату керек. Жобамен тең бөлік деп, кез-келген екі бөліктің айырмашылығы 1-ден аспаған бөліктерді айтамыз.

Кіру файылындағы мәліметтің форматы: Бірінші қатар-М, екінші қатар- ON;

Шығу файлындағы мәліметтің форматы: Өсу ретімен реттелген N саннан тұратын бір қатар:

Кіру файлы: Шығу файлы:

Input.in Output.out

13 3 3 3 4

4

Program bolik;

Uses crt;

Var p, n, m, k: integer;

Begin clrscr;

Assigin(input,’input.in’);

Reset(input);

Readln(n);

Close(input);

Assign(output,’output.out’);

Rewrite(output);

P:=m od n; k:=m div n;

If p=0 then

For i:=1 to n do

Write(k,’ ’);

Else

Begin

For i:=1 to n-p do

Write(k,’ ‘);

For I:=1 to p do

Wr3te(k+1,’ ‘);

End;

Close(output);

End.

94 Ферзілер. Олипиадаларда жиі келетін есептердің бірі- «ферзілерді орналастыру» есебі. Бұл есептің шарты мынадай: N ферзіні n x n- шахмат тақтасына бір-біріне қауіп төндірмейтіндей етіп орналастыр және осындай орналастырулардың барлық варианттарын көрсет. Мұндай орналастыруды «қауіпсіз» орналастырулар деп те атайды. «Input.txt» файлында [4..20] аралығынан алынған n- ферзілер саны болу керек. Ал “output.txt” файлында әрбір «қауіпсіз» орналастыруға сәйкес келетін натурал сандар қатарларды болу керек. Қатардағы әрбір санның реттік нөмірі шахмат тақтасының вертикаль нөмірін, ал мәні горизонаталь нөмірін көрсету креке. Мысалға, «Input.txt» файлында 4 саны болса, онда “output.txt” файлында мынадай сан қатарлары болу керек:



1 3 5 2 4

1 4 2 5 3

Program fersi;

Type

TNom=1..20;

TPole=array[tNom] of TNom;

Var

N:TNom;

Pole:Ypole;

F:text;

Perv:Boolean;

Procedure Sohr;

Var i:TNom;

Begin

Assign(f,’output.txt’);

Append(f);

If perv then writeln(f) else perv:=true;

For i:=1 to n-1 do write(F,Pole[i],’ ‘);

Write(f,pole[n]); close(f);

End;

Function prover(i:TNom): Boolean;

Var

J:TNom;

Flag: Boolean;

Begin

J:=1;

Flag:=true;

While(j<>i) and flag do

Begin

Flag:=(pole[i]<>pole[j]) and (abs (pole[j]<>i-j); j:=j+1; end;

Prover:=flag; end;

Procedure poisk(I:TNom);

Var j,k:TNom;

Begin

For k:=1 to n do

Begin

Pole[i]:=k;

If prover(i) then

If i=n then sohr else poisk(i+1); end;end;

Begin

Assign(f,’input.txt’);

Reset(f);

Read(f,n);

Close(f);

Assign(f,’output.txt’);

Rewrite(f);

Close(f);

Perv:=false; poisk(1);

End.

95 Салыстыру. Сізге А және В екі саны берілген. Соларды салыстыру керек және салыстыру қортындысын шығару қажет.

Енгізу файлының аты: compare.in

Шығару файлының аты: compare.out

Кіріс файылдың жалғыз жолында А және В екі бүтін сан бар. Әр сан 100- ден аспайтын таңбадан тұрады. Егер санды 1-ден көп таңба болса, бірінші таңба нөл емес. Сандар бос орынмен бөлінген.

Есептің шешімі.

Program salistiru(input,output);

Type aa=array[0..100] of 0..9;

Var a,b:aa;

Code:integer;

Ch:char;

F: Boolean;

Function eq(a1,b1: aa): boolean;

Var j:integer;

Begin

Eq:=false;

If (a1[0]<>b1[0]) then exit

Else begin

J:=1;

While(j<=a[0]) and (a1[j]=b1[j]) do inc(j);

Eq:=j=a1[0]+1;

End; end;

Function more(a1,b1:aa): Boolean;

Var j: integer;

Begin if a1[0]< b1[0] then more:=false else if a1[0]>b1[0] then more:= true else begin j:=a[0];

While(j>0) and (a1[j]=b1[j]) do dec(j);

If j=0 then more:=false else if a1[j]> b1[j] then more:=true else more:= false; end; end;

Procedure printA;

Var i:byte;

Begin for i:=1 to a[0] do write(a[j]); end;

Procedure printB;

Var j: byte;

Begin for j:=1 to b[0] do write(b[j]); end;

Begin

Assign(input,’compare.in’); reset(inpuy);

F:=true;

While not(eof(input)) do

Begin

Read(ch);

If ch=’ ‘ then begin f:=false; read(ch); end;

If f then begin inc(a[0]); val(ch,a[a[0]], code); end else begin inc(b[0]); val(ch,b(b[0],code)); end; end; close(input);

Assign(output,’compare.out’); rewrite(output);

If a[0]> b[0] then begin printA; write(“>”); printB: end else

If a[0]< b[0] then begin printA; write(“<”); printB: end else

If eq(a,b) then begin printA; write(“=”); printB: end else

If more(a,b) then begin printA; write(“>”); printB: end else

Begin printA:write(“<”); printB; end;close(ouyput); end.
96 Алмалар. Азатта N алма бар. Достары Л алма сұрады. Таратқаннан кейін Азаттан қалған алмалардың жалпы салмағының қосындысы максималды болатындай етіп, Азатқа тарататын алмаларды таңдауға көмектесіңіз.

Енгізу файлының аты: apples,in

Шығару файлының аты: apples.out

Кіріс файылының бірінші жолында N және К екі сан берілген (110000). Азаттағы алманың саны және таратылған алманың саны. Екінші жолда 1-мен 10-ның арасында. N сан берілген алмалардың салмақтары. Жолдағы сандар бос орын арқылы бөлінген.

Мәліметтерді шығару форматтары. Нәтижелік шығыс файлына бір санды шығарыңыз –қалған алмалардың салмақтарының максималды қосындысы.

Есептің шешімі.

Program almalar(input,output);

Var a,c,d: array[1..10000] of 1..10;

B: array[1..10000] of Boolean;

N,k:1..10000;

M3n,max,s,j:integer;

Procedure rec(m:integer);

Var i: integer;

Begin

If m=k then begin if min< max then max:= min end else

for i:=1 to n do

if b[i] then begin

min:=min+a[i];b[i]:=false; inc(m); rec(m);

min:=min-a[i]; dec(m); b[i]:=true; end; end;

begin

filcher(b,sizeof(b), false); s:=0;

assign(input, ‘apples.in’); reset(input); read(n,k);

for j:=1 to n do begin

read(a[j]); b[j]:= true; s:=s+a[j]; end;

close(input);

max:=s; min:=0;

assign(output,’apples.out’); rewrite(output);

for i:=1 to n do begin

b[j]:=false; min:=a[j]; rec(1);b[j]:=true; end;

write(output,s-max);

close(output);

end.
№97 1) функциясын есептеу программасын ќ±ру керек, єрі формуласын ќолдану керек.

Program esepteu;

Const PI=3.14159;

Var x,y: real;

Begin

Writeln (' x енгізу');

Read(x);

Y:=exp(5*ln(x))+ln(sqrt(PI+ABS(5-x)));

Writeln ('нєтижесі');

Writeln ('y=', y);

End.
№98

функциясыныњ х аргументіне байланысты нєтижесін есепте

Program esepteu;

Var x,y: real;

Begin

Writeln (' х енгіз');

Read (x);

If (x>-5) and (x<0) then y:= sqrt (sqr(x)+abs(x))

else

if(x>=0) and (x<2) then y:= 5*sqr(x)*x+cos(x);

Writeln ('нєтижесі');

Writeln ('y=', y);

End.

99 Е=10 дєлдікпен ќосындыны есептеу программасын ќ±ру керек. Берілген дєлдікке жетті деп есептеледі, егер єрбір келесі ќосынды мєні модулі бойынша Е кіші болса. Есептеу керек:



Программасы мына т‰рде болады:

Program prsum;

Var x, S, AK: real; k: integer;

Begin

Writeln ('x пен e енгіз');

Read (x,e);

S:=0; k:=1;

Repeat

AK:=(sqr (x)+1)/(sqr(sqr(k))+k*sqrt(abs(sqr(x)*x+1))+1);

S:=S+AK;

K:=k+1;

Until abs(AK) < e;

Writeln ('s=', s:7:3, 'AK=`,AK:6:3);

End.

100 А(30) массивіндегі элементтерді µсу реті бойынша орналастыру программасын ќ±ру ќажет.
Program sarmass;

Const N=30;

Var A: array [1..N] of integer; I,L,C: integer;

Begin

Writeln (‘берілгендерді енгіз’);

For I:= to N do

Read (A[I]);

For I:=1 to N-1 do

If A[I] > A[L] then

Begin

C : = A[I];

A[I] := A[L];

A[L] := C;

End;

For I := 1 to N do

Writeln (A[I]:3);

End.
101 A[5,5] массиві берілген. Массивті кему реті бойынша реттеудіњ программасын ќұру керек.

Program sortmin;

Const N = 5;

Type mas = array [1..N, 1..N] of integer;

Var A : mas;

B : array [1..N] of integer;

I, J, L, S, V, min, C : integer;

Begin

Writeln (‘берілгендерді енгіз’);

For I := 1 to N do

For J := 1 to N do

Read (A[I,J]);

For I := 1 to N do

Begin

Min := A[I, 1];

For J := 1 to N do

If A[I,J] < min then min := A[I, J];

B[I] := min ;

End;

For J := 1 to N-1 do

For L := I+1 to N do
1   2   3   4   5   6   7

If B[I] < B[L] then


Begin C := B[I];

B[I] := B[L];

B[L] := C;

For J := 1 to N do

Begin

C := A[I ,J];

A[I,J] := A[L,J];

A[L,J] := C;

End;

End;

For I := 1 to N do

Begin

For J := 1 to N do

Write (A[I,J] : 4);

Writeln;

End;

End.
102 “а” әрпінен басталатын және “а” әрпіне бітетін сөздерді текстен алып тастау программасын ќұру керек.
Program delse;

Var T: string;

I, K: integer;

Begin

Writeln (‘тексті енгіз’);

Readln (I);

For I := 1 to length(T) do

If T[I] = ‘a’ then

If (T[I-1] = ‘’) or (I=1)then

Begin K:= 0;

Repeat

K:= K+1;

Until (T(K+I]=’ ’) or (I+K= length(T));

If T[I+K-1] = ’a’ then delete (T,I,K);

End;

Writeln (T);

End.

103 “ Программирование” атты кітаптардыњ ішінен белгілі автордыњ кітабын табу программасын ќ±ру керек.
Program sved KN;

Const N=10;

Type sved = RECORD

FIO : STRING[25];

NAZ , IZD : STRING;

GOD IZD : INTEGER;

End;

Var mas sved : array[1..N] of sved

I: integer;

OFIO:string[25];

Begin

Writeln (‘берілгендерді енгіз’);

For I:=1 to N do

With mas sved[I] do

Begin

Readln (FIO);

Readln (NAZ);

Readln (IZD);

Readln (GOD IZD)

End;

Readln (OFIO);

For I:=1 to N do

With mas sved[I] do

If (FIO =OFIO) and (POS(’программирование’, NAZ)< >0) then

Begin

Writeln (NAZ);

Writeln (IZD, GOD IZD);

End;

End.
104 А(5,5), В(5,5), С(5,5) массивтері берілген. Массивтіњ таќ баѓандарында т±рѓан ж±п оњ элементтердіњ максималды ќосындысын шыѓару программасын ќ±ру керек.

Program kontr;

Const N=5;

Type MAS=ARRAY[ 1..N] of integer;

Var A,B,C : MAS; {n-ші ретті массивті бейнелеу};

I,J : integer; {циклдердегі санаѓыштар};

Procedure INP MASS (VAR x : MAS) {массивті енгізу процедурасы}

Begin

Writeln (‘массивті енгізіњіз:’);

For I:=1 to N do

For J:=1 to N do

Read(X[I,J]);

Writeln;

End;

Function SUM(x:MAS): integer ;{элементтердіњ ќосындысын санау}

Var S : integer;

Begin

S :=0;

For I :=1 to N do

For J:=1 to N do

If J mod 2<>0 then

If (X[I,J]>0)and (X[I,J]mod2=0) then S:=S+X[I,J];

Sum:=S;

End;

Procedure OUT MASS( X:MAS);{массивті шыѓару процедурасы}

Begin

For I:=1 to N do

begin

For J:=1 to N do

Write (X[I,J]:2);

Writeln;

End;

End;

begin

INP MASS(A); INP MASS(B); INP MASS(C); {массивтерді енгізу }

if(sum (A)> sum(B))and (sum(A)> sum(C)) then out mas(A);

if (sum(B)> (sum(A))and(sum(B)> sum(C)) then out mas(B);

if (sum(C)> (sum(A))and(sum(C)> sum(B)) then out mas(C);

end.



105 Символдыќ f1 жєне f2 файлдары берілген. f1 компаненттерініњ ретін µзгертпей f2 файлына, ал f2 файлыныњ компаненттерін f1- ге кµшірудіњ программасын ќ±ру керек.

Program file;

Type TEXT = file of char; {файлдыќ тип}

VAR DATA: char; {файлдыњ компоненттерін уаќытша саќтау}

F1, F2: TEXT; {берілген символдыќ файлдар}

I, K1, K2: word;


Procedure IN – DATA (var F: TEXT; K: WORD);

{файл компоненттерін енгізу}

begin

for I:= 1 to K do

begin write (I’.:’);

readln (DATA);

write (F, DATA); {берілгендерді f файлына жазу}

end;

end; {бір файл компоненттерін екіншісіне кµшіру}

procedure paste (var H1, H2: TEXT; K:= INTEGER);

begin

reset (H1);

reset (H2);

seek (H2, filesize (H2)); {H2 файлыныњ кµрсеткішін осы файлдыњ соњына ауыстыру};

{H1 файлыныњ компоненттерін біртіндеп H2 файлына кµшіру}

for I:= 1 to K do

begin

read (H1, DATA);

write (H2, DATA);

end;

end;

procedure OUT_ DATA (var F: TEXT);

{файлда саќталѓандарды экранѓа шыѓару}

begin

reset (F); {файлды оќу ‰шін инициалдау}

{F файлыныњ компоненттерін біртіндеп оќи отырып, экранѓа шыѓару}

while NOT (EOF (F)) do

begin

read (F, DATA);

writeln (DATA: 6);

end;

end;

begin

assign (F1,’ C:\ BP\ BIN\ IN1_DATA.DAT’);

assign (F2,’ C:\ BP\ BIN\ in2_DATA.dat’);

rewrite (F1); {аќпаратты файлѓа саќтауды инициалдау}

rewrite (F2); {F1 файлыныњ компоненттерініњ санын аныќтау}

write (‘F1 файлыныњ компонент саны:’);

readln (K1);

IN_ DATA (F1,K1); {F1 файлы ‰шін компоненттерді енгізу процедурасын шаќыру}

{F2 файлыныњ компоненттер санын аныќтау}

write (‘F2 файл компоненттері саны:’);

readln (K2);

IN_DATA (F2, K2) {F2 файлы компоненттерін енгізу}

Paste (F1, F2, K1); {F1 файлыныњ компоненттерін F2 файлына кµшіру }

Paste (F2, F1, K2); {F2 файлыныњ компоненттерін F1 файлына кµшіру}

{файлдыњ компоненттерін экранѓа шыѓару}

writeln (‘біріктіруден кейін:’);

writeln (‘F1:’);

OUT_DATA (F1);

Writeln (‘F2:’)

OUT_DATA (F2);

Close (F1); {файлдарды жабу}

Close (F2);

Readln;

End.

106 Жерден ±шып шыќќан ракетаныњ анимациялыќ суретініњ программасын ќ±ру керек.
Program space;

Uses graph, crt;

Const N=1000;

Type

Pixeltype = record {ж±лдыздар координаталары}

XP,YP: integer;

End;

Var

A, U, E, X, DX, DY, I, SIZE: integer;

P: array [1..N] of pixeltype {ж±лдыздар координаталарыныњ массиві}

T : POINTER {кµрсеткіш}

Procedure starsky;

Begin

Setbkcolor (0);

Randomize;

For i:=1 to N do

With P[I] do

Begin

XP:= random ( getmax x-10);

YP:= random (getmax y-10);

End;

Repeat

For I:=1 to N do

With P[random (N)] do

Putpixel (XP, YP, 15);

If not keypressed then

For I:= N downto 1 do

With P[random (N)] do

Putpixel (XP, YP, 0);

Until keypressed ;

End;

Procedure planets;

Begin

Setcolor (12); {Сатурнды салу}

Ellipse (120, 100, 0, 360, 50, 40);

Setfillstyle (1, 12);

Floodfile (120, 100, 12);

Setcolor (14);

Setlinestyle (0, 1, 3);

Ellipse(120, 100, 155, 25, 60, 25);

Setlinestyle (0, 1, 1); {Венераны салу}