Задача 1. Випадковим чином задається двомірний масив, що
складається із nxn елементів, якщо n менше 100. Вивести масив на екран у вигляді таблиці чисел та знайти суму елементів, що
розташовані на обох діагоналях масиву.
Розв’язання.
program Summa_diag_matriza;
const m=100;
n=100;
var sum,f,s:real;
b:array[1..m*n] of real;
a:array[1..m,1..n] of real;
i,j,p, k:integer;
begin
writeln(' Введіть
число рядків у квадратній матриці, менше 100 ');
readln(k);
s:=0;
for i:=1 to k do
for j:=1 to k do
begin
a[i,j]:=int(random*20-10);
b[(i-1)*k+j]:=a[i,j];
end;
writeln(' ');
writeln(' ');
writeln(' Квадратна матриця із випадкових чисел: ');
writeln(' ');
for i:=1 to k
do begin
for j:=1 to k do
begin
write('
a[',i,';',j,']:= ',a[i,j]{'
b[',i-1*k+j,']= ',b[(i-1)*k+j]});
end;
writeln(' ');
writeln(' ');
end;
s:=0;
for i:=1 to k do
begin
s:=s+a[i,i];
end;
f:=0;
for i:=1 to k do
begin
f:=f+a[i,k+1-i];
end;
if k mod 2 =1 then
sum:=s+f- a[k div 2 +1, k div 2 +1]
else
sum:=s+f;
writeln(' ');
writeln(' Сума
чисел головної діагоналі:',s); writeln('
');
writeln(' Сума чисел бічної діагоналі:',f); writeln(' ');
writeln(' Сума чисел на обох діагоналях: ',sum);
end.
Задача 1.1. Обміняти місцями елементи квадратної матриці розміром nxn , n де n< 100, відносно головної діагоналі, тобто транспонувати матрицю.
Розв’язання.
program Trahsponovana_matriza_golovna_diagonal;
const m=100;
n=100;
var sum,f,s:real;
b:array[1..m*n] of real;
a:array[1..m,1..n] of real;
t:array[1..m,1..n] of real;
i,j,p, k:integer;
begin
writeln(' Zo za numer
matryza <100 ');
readln(k);
s:=0;
for i:=1 to k do
for j:=1 to k do
begin
a[i,j]:=int(random*20-10);
b[(i-1)*k+j]:=a[i,j];
t[j,i]:=a[i,j];
end;
writeln(' ');
writeln(' ');
writeln(' Matryza verojatnuh numers: ');
writeln(' ');
for i:=1 to k do
begin
for j:=1 to k do
begin
write(' a[',i,';',j,']:= ',a[i,j]{' b[',i-1*k+j,']= ',b[(i-1)*k+j]});
end;
writeln(' ');
writeln(' ');
end;
writeln(' ');
end;
writeln('
Trahsponovana matriza golovna
diagonal: ');
writeln('
');
for i:=1 to k do
begin
for j:=1 to k do begin
write(' t[',i,';',j,']:= ',t[i,j]{' b[',i-1*k+j,']= ',b[(i-1)*k+j]});
end;
writeln(' ');
writeln(' ');
end;
end.
Результат
Zo za numer matryza <100
3
Matryza
verojatnuh numers:
a[1;1]:= -5
a[1;2]:= -3 a[1;3]:= 8
a[2;1]:= 4
a[2;2]:= -6 a[2;3]:= -2
a[3;1]:= 5
a[3;2]:= 5 a[3;3]:= 5
Trahsponovana matriza golovna diagonal:
t[1;1]:= -5 t[1;2]:= 4
t[1;3]:= 5
t[2;1]:= -3 t[2;2]:= -6
t[2;3]:= 5
t[3;1]:= 8 t[3;2]:= -2
t[3;3]:= 5
Задача 1.2. Обміняти місцями елементи квадратної матриці розміром nxn , де n< 100, відносно бічної діагоналі.
Розв’язання.
program
Trahsponovana_matriza_bizna_diagonal;
const
m=100;
n=100;
var sum,f,s:real;
b:array[1..m*n]
of real;
a:array[1..m,1..n]
of real;
u:array[1..m,1..n]
of real;
i,j,p, k:integer;
begin
writeln('
Zo za numer matryza <100 ');
readln(k);
s:=0;
for
i:=1 to k do
for
j:=1 to k do
begin
a[i,j]:=int(random*20-10);
b[(i-1)*k+j]:=a[i,j];
end;
for i:=1 to k do
for
j:=1 to k do
begin
u[i,j]:=a[k-j+1,k-i+1];
end;
writeln(' ');
writeln(' ');
writeln('
Matryza verojatnuh numers: ');
writeln(' ');
for
i:=1 to k do begin
for
j:=1 to k do
begin
write(' a[',i,';',j,']:= ',a[i,j]{' b[',i-1*k+j,']= ',b[(i-1)*k+j]});
end;
writeln('
');
writeln(' ');
end;
writeln('
Trahsponovana matriza bizna
diagonal: ');
writeln('
');
for
i:=1 to k do begin
for
j:=1 to k do begin
write(' u[',i,';',j,']:= ',u[i,j]{' b[',i-1*k+j,']= ',b[(i-1)*k+j]});
end;
writeln(' ');
writeln(' ');
end;
end.
Результат:
Zo za numer matryza <100
3
Matryza
verojatnuh numers:
a[1;1]:= 2
a[1;2]:= -5 a[1;3]:= -7
a[2;1]:= 2
a[2;2]:= 9 a[2;3]:= -6
a[3;1]:= 8
a[3;2]:= 9 a[3;3]:= 3
Trahsponovana matriza bizna diagonal:
u[1;1]:= 3
u[1;2]:= -6 u[1;3]:= -7
u[2;1]:= 9
u[2;2]:= 9 u[2;3]:= -5
u[3;1]:= 8
u[3;2]:= 2 u[3;3]:= 2
Задача 2. Випадковим чином задається двомірний масив, що складається із mxn чисел, якщо n менше 100, m менше 100. Вивести масив на екран у вигляді таблиці mхn. Вивести окремо а)суму додатних чисел матриці; б) суму від’ємних елементів масиву; в) суму усіх чисел матриці.
Розв’язання.
program matriza2;
const m=100; n=100;
var sum, s, c:
real;
b:array[1..m*n] of real;
a:array[1..m,1..n] of real;
i,j,p, k:integer;
begin
writeln(' Введіть
число рядків у квадратній матриці, менше 100 ');
readln(k);
writeln(' Введіть
число стовпців у квадратній матриці, менше 100 ');
readln(p);
for i:=1 to k do
for j:=1 to p do
begin
a[i,j]:=int(random*20-10);
b[(i-1)*p+j]:=a[i,j];
end;
writeln(' ');
writeln(' Числова матриця із випадкових чисел: ');
writeln(' ');
for i:=1 to k
do begin
for j:=1 to p do
begin
write('
a[',i,';',j,']:= ',a[i,j] {'
b[',i-1*k+j,']= ',b[(i-1)*k+j]} );
end;
writeln(' ');
writeln(' ');
end;
s:=0; c:=0;
for i:=1 to k do
for j:=1 to p do begin
if a[i,j]>0 then
c:=c+a[i,j];
if a[i,j]<0 then
s:=s+a[i,j];
end;
sum:=s+c;
writeln(' ');
writeln(' Сума
додатних чисел матриці ',c); writeln('
');
writeln(' Сума
від’ємних чисел матриці :',s);writeln('
');
writeln(' Сума усіх чисел матриці : ',sum);
end.
Задача 3. Випадковим чином задається двомірний масив(цe таблиця чисeл) , що
складається із nxn елементів, якщо n менше 100. Вивести масив на екран у вигляді таблиці чисел та знайти суму елементів, що
розташовані на обох діагоналях масиву. Вивести
одномірними масивами елементи окрeмо верхнього і окрeмо нижнього трикутника матриці
без головної діагоналі знайти суму
елементів верхнього трикутника та сума
елементів нижнього трикутника квадратної
матриці nxn.
Розв′язання.
Program Summa_trukutnuk_matriza;
const m=100; n=100;
var sum,f,s,
d, c:real; b:array[1..m*n] of
real;
xn:array[1..m*n] of real; xv:array[1..m*n] of real; a:array[1..m,1..n] of real;
i,j,p, g,
k:integer;
begin
writeln(' Ввeдіть кількість рядків квадратного масиву, яка мeншe 100 ');
readln(k); s:=0;
for i:=1 to k do
for j:=1 to k do begin
a[i,j]:=int(random*20-10);
b[(i-1)*k+j]:=a[i,j]; end;
writeln(' ');
writeln(' Масив випадкових чисeл: '); writeln(' ');
for i:=1
to k do begin
for j:=1
to k do begin write(' a[',i,';',j,']:=
',a[i,j] {' b[',i-1*k+j,']= ',b[(i-1)*k+j]});
end; writeln(' '); end;
s:=0; for
i:=1 to k do begin s:=s+a[i,i];
end;
f:=0; for
i:=1 to k do begin f:=f+a[i,k+1-i]; end;
if
k mod 2 =1 then sum:=s+f- a[k
div 2 +1, k div 2 +1] else
sum:=s+f;
p:=1;
g:=1; for i:=1 to k do
begin
for j:=k
downto 1 do begin
if i<j then
begin
xv[g]:= a[i,j]; g:=g+1; end; end; end;
for
i:=1 to k do begin
for
j:=1 to i-1 do begin
if i>j then
begin
xn[p]:= a[i,j]; p:= p+1; end;
end; end;
writeln(' Масив чисeл нижнього трикутника матриці : ');
d:=0; for
i:=1 to
((k-1)*k) div 2 do begin d:=d+
xn[i];
write(' xn[',i,']= ', xn[i]); end; writeln('
');
writeln(' Масив чисeл вeрхнього трикутника матриці : ');
c:=0; for i:=1
to ((k-1)*k) div 2 do
begin
c:=c+ xv[i]; write('
xv[', i, ']= ', xv[i]); end; writeln(' ');
writeln(' Сума чисел головної діагоналі матриці:', s);
writeln(' ');
writeln(' Сума
чисел бічної діагоналі матриці :', f); writeln(' ');
writeln(' Сума чисел на обох діагоналях: ', sum); writeln('
');
writeln(' Сума чисел верхнього трикутника матриці ' , c); writeln('
');
writeln(' Сума чисел нижнього трикутника матриці ' , d); writeln(' ');
end.
Peзультати
Введіть число рядків матриці, що менше 100
7
Матриця випадкових чисел:
a[1;1]:= -6 a[1;2]:= 0 a[1;3]:= -9 a[1;4]:= 0 a[1;5]:= 0 a[1;6]:= -9 a[1;7]:= -1
a[2;1]:= -3 a[2;2]:= 2 a[2;3]:= 8 a[2;4]:= -4 a[2;5]:= 0 a[2;6]:= 6 a[2;7]:= 7
a[3;1]:= -6 a[3;2]:= -9 a[3;3]:= -6 a[3;4]:= 9 a[3;5]:= -9 a[3;6]:= 0 a[3;7]:= 8
a[4;1]:= -2 a[4;2]:= -3 a[4;3]:= 7 a[4;4]:= 3 a[4;5]:= -7 a[4;6]:= 4 a[4;7]:= 8
a[5;1]:= -6 a[5;2]:= 8 a[5;3]:= 1 a[5;4]:= 7 a[5;5]:= -6 a[5;6]:= -5 a[5;7]:= 7
a[6;1]:= -5 a[6;2]:= 7 a[6;3]:= 6 a[6;4]:= 5 a[6;5]:= 5 a[6;6]:= 0 a[6;7]:= 4
a[7;1]:= 4 a[7;2]:= -6 a[7;3]:= -6 a[7;4]:= 2 a[7;5]:= -8 a[7;6]:= -2 a[7;7]:= 9
Числа нижнього трикутника матриці:
xn[1]= -3 xn[2]= -6 xn[3]= -9 xn[4]= -2 xn[5]= -3 xn[6]= 7 xn[7]= -6 xn[8]= 8
xn[9]= 1 xn[10]= 7 xn[11]= -5 xn[12]= 7 xn[13]= 6 xn[14]= 5 xn[15]= 5 xn[16]= 4
xn[17]= -6 xn[18]= -6 xn[19]= 2 xn[20]= -8 xn[21]= -2
Числа верхнього трикутника матриці:
xv[1]= -1 xv[2]= -9 xv[3]= 0 xv[4]= 0 xv[5]= -9 xv[6]= 0 xv[7]= 7 xv[8]= 6
xv[9]= 0 xv[10]= -4 xv[11]= 8 xv[12]= 8 xv[13]= 0 xv[14]= -9 xv[15]= 9 xv[16]= 8
xv[17]= 4 xv[18]= -7 xv[19]= 7 xv[20]= -5 xv[21]= 4
Сума чисел головної діагоналі:-4
Сума чисел бічної діагоналі:11
Сума чисел на обох діагоналях: 4
Сума чисел верхнього трикутника 17
Сума чисел нижнього трикутника -4
Вкладені
цикли мовою Paѕcal
Приклад
№ 1. Обчислити значення змінної y=3k+ n при всіх значеннях змінних N=1, 2, 3,
4 і K=3, 8, 13, 18, 23.
Розв′язання.
Якщо перебирати всі значення N і K, ми
повинні отримати 4*5=20 значень змінної y =f(n, k)= 3k + n.
Скласти програму можна в такий спосіб: для
кожного значення N перебрати всі значення К від 3 до 23 з кроком 5, тобто N використати як параметр
зовнішнього циклу, К - як параметр внутрішнього циклу.
Текст програми:
Program priklad_1;
var n, k, y:integer;
begin
for n:=1 to 3
do begin k:=2;
while k<=23
do begin y:=3*k+n;
writeln(' n= ',
n:3, ' k= ',
k:3, ' 3k + n = ' , y:3);
k:=k+5; end; end; end.
Параметр N змінюється з кроком 1, тому
зовнішній цикл організований з використанням оператора For; параметр К
змінюється з кроком 5, тому внутрішній цикл є циклом While.
Приклад
№ 2. Старовинна задача. Скільки можна купити биків,
корів та телят, якщо вартість одного бика - 10 тис. грн, однієї корови - 5 тис. грн, а за одного теля платять 0,5 тис.
грн. І якщо на 100 тис. рублів потрібно купити 100 голів скоту.
Розв'язування:
Позначимо через b - кількість биків; k -
кількість корів; t - кількість телят. Після цього можна записати два рівняння:
10b + 5k + 0.5t = 100 і b + k + t = 100
На 100 рублів можна купити: 1) не більше 10 биків, тобто 0<=b<=10; 2) не
більше 20 корів, тобто 0<=k<=20;
2) не більше 200 телят, тобто
0<=t<=200. Отже отримуємо текст програми:
Program Priklad_2;
var b, k,
t:integer;
begin
for b:=0 to 10 do
for k:=0 to 20 do
for t:=0 to 200 do
if (10*b + 5*k +
0.5*t = 100) and (b + k + t = 100) then
writeln('Биків -
', b, '; корів - ', k,'; телят - ',t);
end.
Вінницька
(міська) олімпіада
з
інформатики 24 грудня 2011 року
Розв’язання задач
8-9
клас
1 Populyatsia
Є популяція комах, розмір якої по днях
змінюється згідно закону:
А)
p{n+1} = 0, якщо p(n) = 0 або 1;
Б)
p{n+1} = p(n) / 2, якщо p(n) є парним;
В) p{n+1} = 3 * p(n ) + 1, якщо p(n) є непарним,
де n – порядковий номер дня, р(n) –
розмір популяції на n-й день.
Необхідно, по заданому розміру популяції на
перший день визначити, на який день вона вимре.
Припустимо, що у перший день (n=1) популяція
(p(n))складалася з трьох комах. Тоді вона вимре на 9-й день:
Номер дня
(n) 1 2 3
4 5 6 7 8
9
Розмір популяції р(n) 3 10 5
16 8
4 2 1 0
Технічні
умови Програма читає з клавіатури
одне додатне ціле число – розмір
популяції комах на перший день. Програма виводить на екран шукане число.
Гарантується, що популяція не проіснує більше 30000 днів.
Приклад.
Введення 3
Виведення 9
Програма на мові Pascal
Program Populyatsia
var p, n: integer;
begin
read(p);
n:=1;
while p>0 do
begin
if p=1 then p:=0
else if p mod 2=0 then p:=p div 2
else if p mod 2<>0 then p:=3*p+1;
n:=n+1;
end;
if n>30001 then
n:=30001;
write(n);
end.
2. DROBY
Васі приснився сон, що
він потрапив у чарівну країну Математика, там його узяв у полон злий учений, що
розробляв план знищення цієї чарівної країни. Учений знав, що Вася добре знає
математику і поставив таку умову, що якщо Вася напише в порядку зростання всі
правильні нескоротні дроби, знаменники яких не перевищують заданого числа N, то
злий геній відпустить його. Допоможіть
Васі вибратися з полону.
Технічні
умови. Програма читає з клавіатури
єдине число N (2 <= N <= 255).
Програма виводить на екран всі шукані дроби спочатку чисельник, а потім
знаменник. Всі числа розділено пропусками.
Приклад
Введення 5
Виведення 1 5 1 4 1 3 2 5 1 2 3 5 2 3 3 4 4 5
Програма на мові
Pascal
Program DROBY
var chis, znam:array[1..10000] of
integer;
var n, znamen, chisel, dilnuk, kilk, i, j, buf:integer;
var value1, value2:real;
var p: boolean;
begin
read(n); kilk:=1;
For znamen:=2 to n do
For chisel:=1 to znamen-1 do
Begin
p:=true;
for dilnuk:=2 to chisel do
if (chisel mod dilnuk=0) and
(znamen mod dilnuk=0)
then p:=false;
if p=true
then
begin
chis[kilk]:=chisel;
znam[kilk]:=znamen;
kilk:=kilk+1;
end;
end;
kilk:=kilk-1;
For i:=1 to kilk-1 do
begin
for j:=1 to kilk-i do
begin
value1:=chis[j] / znam[j];
value2:=chis[kilk-i+1] /
znam[kilk-i+1];
if value1 > value2 then
begin
buf:=chis[j];
chis[j]:=chis[kilk-i+1];
chis[kilk-i+1]:=buf;
buf:=znam[j];
znam[j]:=znam[kilk-i+1];
znam[kilk-i+1]:=buf;
end;
end
end;
for i:=1 to kilk do
Write(chis[i],' ',znam[i],' ');
end.
3. SPIRAL
Вася захоплювався
програмуванням і отримав завдання: написати програму,що виводить квадрат, який складається з NхN клітинок,
заповнених числами від 1 до N2 по
спіралі. Допоможіть йому.
Технічні
умови. Програма читає з клавіатури єдине натуральне число N ( не більше 100).
Програма виводить N рядків по N чисел, розділених пропусками. Не допускається
починати спіраль в іншому куті, окрім верхнього лівого, закручувати спіраль проти годинникової стрілки
або з середини назовні.
Приклад
Введення
5
Виведення 1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
Програма на мові
Pascal
Program SPIRAL
var n, k,i,j, p, ost, per, r:integer;
var a:array[1..101,1..101] of integer;
begin
read(n);
k:=1;
for i:= 1 to n do
for j:=1 to n do
a[i,j]:=0;
ost:=n; per:=1;
while k<=n*n do
begin
for j:=per to ost do
begin
a[per,j]:=k;
k:=k+1;
end;
for i:=per+1 to ost do
begin
a[i,ost]:=k;
k:=k+1;
end;
for j:=ost-1 downto per do
begin
a[ost,j]:=k;
k:=k+1;
end;
for i:=ost-1 downto per+1 do
begin
a[i,per]:=k;
k:=k+1;
end;
ost:=ost-1; per:=per+1;
end;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j],' ');
writeln;
end;
end.
Завдання для самостійної
роботи.
1.1. Обчислити значення
змінної y=5k-4n при всіх значеннях
змінних N=1, 2, 3, 4 і K=2, 8, 14, 20,
26.
1.2. Скільки може бабуся купити на пенсію 1280 грн індюків , курей та гусей, якщо вартість одного індюка - 75 грн,
однієї курки - 55 грн, а за одного гуся платять 65 гривень. І якщо їй
потрібно купити лишe 20 голів.
1.3. Обчислити значення
змінної y=7k-3n при всіх значеннях
змінних N=1, 2, 3, 4 і K=1, 8, 15, 22,
29.
1.4. Скільки може дідусь купити на пенсію 1580 грн
індюків , курей та гусей, якщо
вартість одного індюка - 75 грн, однієї курки - 55 грн, а за одного гуся
платять 65 гривень. І якщо їй потрібно купити лишe 20 голів.
1.5. Розв′язати рівняння: а)58=5k-4n;
б) 76=5(k+3)2-4(n-5)3 ; в) 1= 5/(k+3)
- 4/(n-5)3 при значеннях змінних 1 <N<20 і 1<K<20.
Немає коментарів:
Дописати коментар