№264 мектеп-лицей
Дайындаған: Информатика пәнінің мұғалімі
Баймурзаева Р.К.
2011 жыл
Turbo Pascal программалау тілінде олимпиадаға дайындалуға
арналған есептер жинағы
Компьютерде есепті шешудің негізгі кезеңдері.
Компьютерде есепті шешу процесі- бұл адам және ЭЕМ арасындағы біріктірілген сала. Бұл процесті бірнеше тізбектелген этаптар түрінде көрсетуге болады. Адамға тиісті этаптар, шығармашылық саламен байланыстысы- қойылуы, алгоритмизациясы, есепті программа және нәтижелерді талдау, ал компьютерге тиістісі- өңделген алгоритммен сәйкес келетін ақпаратты өңдеу этаптары.
Бұл этаптарды келесі мысалдарда қарастырамыз: екі бүтін санның соммасын есептеу және видеомонитордың экранына нәтижесін шығару.
Бірінші этап – есептердің қойылымы. Бұл этапта есепті қолданатын жұмыс саласын жақсы білетін адам қатысады, ол есептің мақсатын нақты анықтауы керек, есептің мазмұнына сөздік түсінік беруі және оның шешімімен жалпы жақындық ұсынуы керек. Мысалы, екі бүтін санның соммасын есептеу үшін сандар қалай қосылатын білетін адам, есепті келесі әдіспен түсіндіре алады: екі бүтін санды енгізу, оларды бір-біріне қосу және есептің нәтижесі ретінде соммасын шығару.
Екінші этап – математикалық немесе ақпараттық моделдеу. Бұл этаптың мақсаты – есеп компьютерде шешілуі үшін, есептің математикалық моделін құру. Көптеген есептердің математикалық моделінде тек қана формулалар мен логикалық шарттар келтіріледі. Бұл этап бірінші этаппен тығыз байланыста және оны бөлек қарастырмасада болады, бірақ құрылған модель үшін бірнеше шешу әдістері танымал болуы мүмкін және олардың ішінен ең ыңғайлысын таңдау керек болады.
Үшінші этап – есептің алгоритмі. Математикалық түсіндіру негізінде шешу алгоритмін құрастыру керек. Алгоритм дегеніміз – қойылған есептің шешуге бағытталған әрекеттер тобын іске асыру үшін атқарушыға түсінікті әрі дәл нұсқаулар жиынтығы. Алгоритмдерді орындайтындар адамдар, роботтар, компьютерлер болуы мүмкін.
Төртінші этап – программалау. Программа – бұл орындаушы (компьютер) орындайтын әрекеттердің жоспары. Үшінші этапта құрылған алгоритм бойынша программа алгоритмдік тілде жазылады.
Бесінші этап – жазылған программаны компьютерге программалау жүйесінде еңгізіледі.
Алтыншы этап – тестлеу және программаны жөндеу. Бұл қадамда ЭЕМ қөмегімен алгоритм орындалады, қателер ізделінеді және олар жойылады. Программаны жөндеу – бұл күрделі және стандартты емес процесс.Күрделі программалар бөлек фрагменттермен тексеріледі.
Жетінші этап - жөнделген программаның орындалуы және нетижені талдау. Бұл қадамда программа жұмысқа қосылып , алғашқы керекті мәндер беріліп. программа нәтижесі алынады. Шыққан нәтижелер талданып, нәтижелерге сай шешімдер, ұсыныстар, шығарулар жағдыланады. Талдау шешімі бойынша есептің құрылған жолдары қайтадан қарастырылып, есептің бірінші қадамына қайтып оралып, есеп жаңадан шешілуі мүмкін.
1. Екі санның қосындасын табу программасын құру керек.
Program kosindi;
Var a, b, x integer;
Begin
Write (‘a, b-сандарын енгіз');
Readln(a, b);
X:=a+b;
Writeln(‘x =’,x);
End.
2. Апта күндерінің реттік нөмірі бойынша олардың аттарын анықтайтын программа құру керек.
Program kyn;
Var kyn: integer ;
Begin
Write (‘ kynnin aptadagi rettik nomirin engizinder: ‘ );
Readln (kyn);
Case kyn of
1: writeln ( ‘ duisenbi’);
2: writeln ( ‘seisenbi’);
3: writeln ( ‘ sarsenbi’);
4: writeln ( ‘ beisenbi’);
5: writeln ( ‘ juma’);
6: writeln ( ‘senbi’);
7: writeln ( ‘ jeksenbi’);
Else writeln ( ‘ 1… 7 araligindagi sandardi engizinder’);
End
End.
3. Екі санның үлкенін табатын программа құр.
Program max;
Var a, b, max: integer;
Begin
Readln (a,b);
If a>b then max:= a else max:=b;
Writeln (‘ max= ’ , max);
End.
4. Бөлгіштер
Енгізу файлының аты: В.in
Шығару файылының аты: В. Out
Есептің жауабы файылының аты: В. pas
Уақыт шектеу: 2 секунд
Жадыға шектеу: 64 мегабайт
А оң саны В санының бөлгіші аталып жатыр, егер В А санға қалдықсыз бөлінсе. Мысалы, 15 санында 4 бөлгіш бар: 1,3,5,15. Әрбір берілген сандардың үшін, оның бөлгіштердің саны жұп сан немесе тақ сан болады ма сіздерге анықтау қажетті.
Мәліметтерді енгізу форматы
Кіріс файлдың бірінші жолында бір бүтін сан N (15) жазылған. Келесі жолда N бүтін сан Хі(1<=Xi<=1018) жазылған. Бір жолдағы сандар аралары пробелмен бөлінген.
Мәліметтерді шығару форматы
Шығыс файлда аралары пробелмен бөлінген N сан жазылу керек: i- ші сан 0 деп жазылады, егер Х, бөлгіші саны жұп сан болады, немесе 1, егер Х, бөлгіші саны тақ сан болады.
uses crt;
var i,j,k,l,m,n:longint;
function prime(n:longint):boolean;
var i:longint;
begin
prime:=true;
for i:=2 to trunc(sqrt(n))do
if(n mod i=0)then begin prime:=false;break;end;
end;
procedure aaa(l:longint);
var i:longint;
begin
k:=2;
for i:=2 to (l div 2) do
if(l mod i=0)then inc(k);
end;
begin
assign(input,'b.in');reset(input);
assign(output,'b.out');rewrite(output);
readln(n);
for i:=1 to n do
begin
read(l);
if(prime(l))then write('0 ')else begin
k:=0;
aaa(l);
if(odd(k))then write('1 ')else write('0 ');
end; end;
close(input);close(output);
end.
5. Пайда.
Енгізу файлының аты: C.in
Шығару файылының аты: C. Out
Есептің жауабы файылының аты: C. pas
Уақыт шектеу: 2 секунд
Жадыға шектеу: 64 мегабайт
Компьютер процессор бөлігінен және монитордан құралады.Қоймада цессор бөлігі және М монитор болып жатыр. І-ші процессор бөлігінің бағасы- Аі тугрик, j-ші монитордың бағасы- Вj тугрик. Дүниежүзілік қаражаттық дағдарыс артынан, і- ші процессор бөлігінен және j-ші монитордан құралған компьютердің бағасы Аi,Bj (көбейту) тугрик болады. Сіздерге дәл осылай компьютерлердің ең үлкен мүмкін саны жинау керек, олардың барынша ең көп мүмкін болған жиынтық бағасы болу үшін.
Мәліметтерді енгізу форматты
Кіріс файлдың бірніші жолда екі бүтін сан тұрады N және М (1<=N, M<=1000). Екінші жолда N бүтін сан тұрады: і-ші жолдағы сан Аі. Үшінші жолда М бүтін сан тұрады: j-ші жолдағы сан Вj(1<=Aj, Bj<=1000). Жолдағы сандар пробелмен арқылы бөлінген.
Мәліметтерді шығару форматы
Шығыс файлға пробелмен бөлінген екі бүтін сан жазылу керек-ең үлкен мүмкін болған компьютердің саны және олардың барынша ең көп мүмкін болған жиынтық бағасы.
Мысал
C.in
|
C.out
|
3 2
1 2 3
4 5
|
2 23
|
uses crt;
type mas=array[1..1000]of longint;
var
i,j,k,l,m,n,min:longint;
sum:longint;
a,b:mas;
procedure sort(var a:mas;n:longint);
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if(a[i]
l:=a[i];
a[i]:=a[j];
a[j]:=l;
end;
end;
begin
assign(input,'c.in');reset(input);
assign(output,'c.out');rewrite(output);
readln(n,m);
for i:=1 to n do read(a[i]);
for j:=1 to m do read(b[j]);
sort(a,n);sort(b,m);
if(n>m)then min:=m else
min:=n;
for i:=1 to min do
sum:=sum+(a[i]*b[i]);
write(min,' ',sum);
close(input);close(output);
end.
6. Жалқаулық.
Енгізу файлының аты: D.in
Шығару файылының аты: D. Out
Есептің жауабы файылының аты: D. pas
Уақыт шектеу: 2 секунд
Жадыға шектеу: 64 мегабайт
Оқытушы емтиханға дайындалуға үшін оқушыларына N сұрақтарды берді. Осы сұрақтардан ол емтиханға үшін А сұрақты таңдайды, ал оқушы, бесті алу үшін В сұрақты (бұларды А сұрақтан) жауап беру тиісті. Ку оқушы барлық сұрақтарды оқытуға қаламайды. Бесті алу үшін, сұрақтардың қандай ең аз саны оған жатап алу керек?
Мәліметтерді енгізу форматы
Кіріс файлдың жекеше жолында үш бүтін сан жазылған: N, A және В (1<=N<=100000, 1<=B<=A<=N). Сандар аралары пробел арқылы бөлінген.
Мәліметтерді шығару форматы
Шығыс файлда бір бүтін сан жазылу керек- есептің жауабы.
Мысал
uses crt;
var i,j,k,l,m,n:longint;
begin
assign(input,'d.in');reset(input);
assign(output,'d.out');rewrite(output);
readln(i,j,k);
writeln(i-(j-k));
close(input);close(output);
end.
7. Серіппе
Енгізу файлының аты: E.in
Шығару файылының аты: E. Out
Есептің жауабы файылының аты: E. pas
Уақыт шектеу: 2 секунд
Жадыға шектеу: 64 мегабайт
N мөлшерлі серіппе- натуральды сандарлардың NxN мөлшерімен кестесі, кесте орталығында әрқашан 1 тұрады, одан оң жақтан 2, серіппе қарсы сағаттық тілдің бұралып қалып жатыр. N мөлшерлі серіппесін шығарыңыздар.
Мәліметтерді енгізу форматы
Кіріс файлдың жекеше жолында бір бүтін сан жазылған- N(1,=N<100, N-тақ сан).
Мәліметтерді шығару форматы
Шығыс файылдың N жолда N бүтін саны жазу керек- N мөлшерлі спираль. Сандар аралары пробелмен бөлінген болу керек.
Мысал
E.in
|
E. out
|
1
|
1
|
3
|
5 4 3
6 1 2
7 8 9
|
5
|
17 16 15 14 13
18 5 4 3 12
19 6 1 2 11
20 7 8 9 10
21 22 23 24 25
|
uses crt;
var w,q,o,i,j,k,l,m,n:longint;
a:array[1..100,1..100]of longint;
b:array[1..100,1..100]of boolean;
procedure aaa(l:longint);
begin
if(n>0)then begin
inc(m);
if(m=1)then begin
for i:=1 to n do begin
if(b[l,i]=false)then begin
b[l,i]:=true;
a[l,i]:=o;
dec(o);
end;
end;
aaa(n);
end else
if(m=2)then begin
for i:=1 to n do
begin
if(b[i,l]=false)then begin
b[i,l]:=true;
a[i,l]:=o;dec(o);
end;
end;
aaa(n);
end else
if(m=3)then begin
for i:=n downto 1 do
if(b[l,i]=false)then begin
a[l,i]:=o;dec(o);
b[l,i]:=true;
end;
inc(w);
aaa(w);
end else
if(m=4)then
begin
for i:=n downto 1 do
if(b[i,l]=false)then begin
b[i,l]:=true;a[i,l]:=o;dec(o);
end;
m:=0;
if(m=0)then begin inc(k);dec(n);end;
aaa(k);
end;
end;end;
begin
assign(input,'e.in');reset(input);
assign(output,'e.out');rewrite(output);
w:=0;
readln(n);q:=n;k:=1;
m:=0;o:=sqr(n);
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),false);
aaa(1);
for i:=q downto 1 do
begin for j:=q downto 1 do write(a[i,j],' ');writeln;end;
close(input);close(output);
end.
8. Оқу.
Енгізу файлының аты / имя входного файла: D.in
Шығару файлының аты / имя выходного файла: D.out
Жомарт жолдағы әр екінші символды өткізіп (яғни, оқымайды) оқуды ұнатады. Еегер “abсdе” жолын оқыса, онда ол а-ны оқып, b-ны өткізеді, содан кейін d-ны оқып e-ні өткізеді. Жомарт қанща рет “ab” жолын оқығанын білгісі келеді.
Мәліметтерді енгізу форматы: Енгізу файлының бірінші жолында Жомарт оқыған жол S беріледі. Оның бос орны жоқ және ұзындыңы 100 аз екеніне кепілдік беріледі.
Мәліметтерді шығару форматы: Жомарт қанща рет “ab” жолын оқығанын шығарады.
Мысалы / пример:
А.in
|
А.out
|
Комментарий
|
“aсbеd”
|
1
|
Жомарт “abd” жолын оқыған. Бұл жолда “ab” бір рет кездеседі.
|
Есептің программасы:
program Oku;
var
s:string;
f,g:text;
i,k:integer;
begin
assign(f,’D.in’);
assign(g,’D.out’);
reset(f);
rewrite(g);
readln(f,s);
for i:=1 to length(s)-2 do
if (s[i]=’a') and (s[i+2]=’b') then inc(k);
writeln(g,k);
close(f);
close(g);
end
9. Қайтадан тақта.
Енгізу файлының аты / имя входного файла: Е.in
Шығару файлының аты / имя выходного файла:Е.out
NxM шақмат тақтасы берілген. Сізге бір-бірін ұрмайтындай қанша максимал ферзілер санын қоюға болатынын анықтайтын программа жазу керек.
Мәліметтерді енгізу форматы: Енгізу файлының бірінші жолында екі бүтін сан N және M (1<=N, 1<=1000000) берілген.
Мәліметтерді шығару форматы: Бір-бірін ұрмайтындай қанша максимал ферзілер санын қоюға болатынын анықтаңыз.
Мысалы / пример:
А.in
|
А.out
|
Комментарий
|
8, 8
|
8
|
8 х 8 шақмат тақтасында бір-бірін ұрмайтын 8 ферзі қоюға болады.
|
program Ferz;
uses
SysUtils;
Const N = 8; // Клеток
M = 8; // Ферзей
Type Queen = record
X,Y : Integer;
End;
Var A : Array[1..N, 1..N] Of Integer;
K : Array[1..M] Of Queen;
I,J,Q,X,Y : Integer;
Procedure ClearQueen;
Var I : Integer;
Begin
For I := 1 To M Do
Begin
K[I].X := 0; K[I].Y := 0;
End; End;
Procedure ShowQueen;
Var I : Integer;
Begin
For I := 1 To M Do
WriteLn(‘Q’,I, ‘ [', K[I].X, ‘,’, K[I].Y, ‘]’);
End;
Procedure SetQueen;
Begin
For I := 1 To M Do
If (K[I].X <> 0) And (K[I].Y <> 0) Then
A[K[I].X, K[I].Y] := I;
End;
Procedure ClearArray;
Var I,J : Integer;
Begin
For I := 1 To N Do
For J := 1 To N Do
A[I, J] := 0;
End;
Procedure ShowArray;
Var I,J : Integer;
Begin
For I := 1 To N Do
Begin
For J := 1 To N Do
Write(A[I, J]:3);
WriteLn;
End;
End;
Procedure SetArray(X,Y : Integer);
Var I,J : Integer;
Begin
For I := 1 To N Do Inc(A[I,Y]);
For I := 1 To N Do Inc(A[X,I]);
For I := -N To N Do
If (X+I>=1) And (X+I<=N) And (Y+I>=1) And (Y+I<=N) Then
Inc(A[X+I,Y+I]);
For I := -N To N Do
If (X+I>=1) And (X+I<=N) And (Y-I>=1) And (Y-I<=N) Then
Inc(A[X+I,Y-I]);
End;
Function CountArray:Integer;
Var I,J,S : Integer;
Begin
S := 0;
For I := 1 To N Do
For J := 1 To N Do
If A[I, J] = 0 Then Inc(S);
CountArray := S;
End;
Begin
ClearArray; ClearQueen;
Q := 1;
I := 1;
While (Q <= M) Do
Begin
X := Trunc((I-1)/N)+1; Y := I-N*(X-1);
If A[X,Y] = 0
Then
Begin
SetArray(X,Y);
K[Q].X := X; K[Q].Y := Y;
Inc(Q);
End
Else Inc(I);
If I > N*N
Then
Begin
Dec(Q);
I := 1+((K[Q].X – 1) * N + K[Q].Y);
K[Q].X := 0;
K[Q].Y := 0;
ClearArray;
For J := 1 To Q-1 Do SetArray(K[J].X,K[J].Y);
End; End;
ShowQueen; ClearArray;
SetQueen; ShowArray; readln;
end.
10. Ғажайып сан.
Енгізу файлының аты / имя входного файла: С.in
Шығару файлының аты / имя выходного файла: С.out
Уакыт шектеуі / ограничение по времени: 2 сек.
Жадыға шектеу / ограничение по памяти: 64Мб
Егер сан өзінен кіші бөлгіштерінің қосындысына тең болса, онда оны ғажап сан деп атайды. Берілген бүтін N санының ғажап сан немесе ғажап сан емес екенін анықтаңыз.
Мәліметтерді енгізу форматы: Енгізу файлының бірінші жолында бір бүтін сан N берілген. (1 <= N <= 1000000).
Мәліметтерді шығару форматы: Егер ғажап сан болса “YES” сөзін шығарыңыз, болмаса “NO”:
Мысалы / пример:
С.in
|
С.out
|
Комментарий
|
3
6
|
NO
YES
|
|
program Gazhapsan;
uses crt;
var i,j,k,m,sum:longint;
b:array[1..50]of longint;
begin
clrscr;
write(‘Butin san engiziniz: ‘);readln(i); sum:=0;k:=1;
for j:=1 to i-1 do if i mod j=0 then
begin
b[k]:=j;inc(k);
end;
for j:=1 to k-1 do sum:=sum+b[j];
if i=sum then begin write(‘ ‘,i,’ gajap san ‘);inc(i)end
else write(i,’ gajap san emes’);
readln;
end.
Достарыңызбен бөлісу: |