Отримання знань

дистанційна підтримка освіти школярів


Тут ви можете виконати завдання чи задати питання по змiсту цього уроку.

1 (1) 2014-08-10 20:33:17
1. Напишіть (власне, "зберіть") остаточний алгоритм, використовуючи функцію РОЗФАРБОВКА.

2. Напишіть за готовим алгоритмом програму будь-якою відомою Вам мовою програмування.

-------------------------------------------------
{Coloring}
const
max=10;
var
m,n,k,i,j:longint;
a:array[1..max,1..max] of byte;
f1,f2:text;
procedure Strike(ii,jj:longint);
begin
a[ii,jj]:=2;
if ii if a[ii+1,jj]=1 then Strike(ii+1,jj);
if ii>1 then
if a[ii-1,jj]=1 then Strike(ii-1,jj);
if jj if a[ii,jj+1]=1 then Strike(ii,jj+1);
if jj>1 then
if a[ii,jj-1]=1 then Strike(ii,jj-1);
end;
procedure Coloring;
begin
k:=0;
for i:=1 to m do
for j:=1 to n do
if a[i,j]=1 then begin
k:=k+1;
Strike(i,j);
end;
end;
begin
Assign(f1,'input.txt');
Assign(f2,'output.txt');
Reset(f1);
Rewrite(f2);
Read(f1,m,n);
for i:=1 to m do
for j:=1 to n do
Read(f1,a[i,j]);
Coloring;
Write(f2,k);
Close(f1);
Close(f2);
end.

==================================================================================
3. Придумайте 5-10 тестових прикладів до вашого розв'язку та протестуйте програму.


1)
input.txt
7 10
0 0 1 1 0 1 1 1 1 0
0 1 0 0 1 1 0 0 1 1
0 1 1 1 0 0 1 1 0 1
1 0 0 1 0 1 0 1 0 1
1 1 0 1 1 1 0 1 0 1
1 0 1 0 0 0 0 0 0 1
0 1 1 1 1 1 1 1 1 0
output.txt
6
2)
input.txt
8 10
0 0 1 1 0 1 1 1 1 0
0 1 0 0 1 1 0 0 1 1
0 1 1 1 0 0 1 1 0 1
1 0 0 1 0 1 0 1 0 1
1 1 0 1 1 1 0 1 0 1
1 0 1 0 0 0 0 0 0 1
0 1 1 1 1 1 1 1 1 0
0 1 1 1 1 1 1 1 0 1
output.txt
7
3)
input.txt
8 10
0 0 1 1 0 1 1 1 1 0
0 1 0 0 1 1 0 0 1 1
0 1 1 1 0 0 1 1 0 1
1 0 0 1 0 1 0 1 0 1
1 1 0 1 0 1 0 1 0 1
1 0 1 0 0 0 0 0 0 1
0 1 1 1 1 1 1 1 1 0
0 1 1 1 1 1 1 1 0 1
output.txt
8
4)
input.txt
3 10
0 0 1 1 0 1 1 1 1 0
0 1 0 0 1 1 0 0 1 1
0 1 1 1 0 0 1 1 0 1
output.txt
4
5)
input.txt
2 10
0 0 1 1 0 1 1 1 1 0
0 1 0 0 1 1 0 0 1 1
output.txt
3
6)
input.txt
1 1
0
output.txt
0
7)
input.txt
3 3
1 0 1
0 1 0
1 0 1
output.txt
5

1 (1) 2014-08-10 22:50:51
Задача про Ханойські вежі

Є три стержні з іменами А, В, С. На стержень А надіто N дисків різного діаметру так, що вони утворюють піраміду. Написати програму для друку (виведення на екран) послідовності переміщення дисків з стержня на стержень, необхідних для перенесення піраміди з стержня А на стержень С використовуючи стержень В як допоміжний. При цьому за одне переміщення можна переносити тільки один диск, і диск більшого діаметра не можна розміщувати зверху на диск меншого діаметра.
-------------------
{Hanoy}
var
n:longint;
procedure Hanoy(z,r,p:char;m:longint);
begin
if m=1
then WriteLn(z,'=>',r)
else begin
Hanoy(z,p,r,m-1);
WriteLn(z,'=>',r);
Hanoy(p,r,z,m-1);
end;
end;
begin
Write('n=?');
Read(n);
Hanoy('A','C','B',n);
end.
1 (1) 2014-08-19 16:41:51
Задача Вінницькі вежі.
-----------------------------------
{VinTower}
const
max=100;
var
i,n,b,w,k:longint;
ch,f:char;
a:array[1..max] of char;
f1,f2:text;
procedure Hanoy(z,p,r:char;m:longint);
begin
if (m=1)
then WriteLn(f2,z,'=>',r)
else begin
Hanoy(z,r,p,m-1);
WriteLn(f2,z,'=>',r);
Hanoy(p,z,r,m-1);
end;
end;
Procedure Vin;
begin
if f='w'
then if k Hanoy('3','2','1',w-k);
Hanoy('1','2','3',w);
end
else Hanoy('1','2','3',w);
if f='b'
then if k Hanoy('4','2','1',b-k);
Hanoy('1','2','4',b);
end
else Hanoy('1','2','4',b);
end;

begin
Assign(f1,'input.txt');
Assign(f2,'output.txt');
Reset(f1);
Rewrite(f2);
ReadLn(f1,n);
for i:=1 to n do Read(f1,a[i]);
for i:=1 to n do Write(f2,a[i]);
WriteLn(f2);
b:=0; w:=0; k:=0;
for i:=1 to n do begin
if i=1
then f:=a[i]
else f:=a[i-1];
if a[i]='b' then b:=b+1 else w:=w+1;
if (f<>a[i]) then begin
Vin;
k:=1;
end
else k:=k+1;
end;
f:=a[i];
Vin;
Close(f1);
Close(f2);
end.

Повернутися до уроку

Повернутися до перелiку уроків курсу

В системі: гості - (); користувачі - (0)