Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2008, 15:07   #1
МаксимNEWProgramm
Пользователь
 
Аватар для МаксимNEWProgramm
 
Регистрация: 04.04.2008
Сообщений: 57
По умолчанию Нужна дороботка

определить количесто облостей состоящих хз 1 в N*N тз 0 и 1
облость считается одной если 1 имеет соседа по горизонтали или вертикали
Пример:
5 5
1 0 1 1 1
0 0 0 1 1
1 1 0 0 0
0 0 1 0 1
1 1 1 0 0
Ответ:5
по сути код есть но он очень грамоздкий
возможно кто знает алгоритм лучше моего?
uses crt;
var a: array [0..50,1..50] of longint;
i,j,k,n,t,Nach,Kon,l,k2:longint;g,E rror,f,Er:boolean;
begin
clrscr;
write('Vvedite razmer n=');
read(n);writeln;
randomize;
for i:=1 to n do
begin
writeln;
for j:=1 to n do
begin
a[i,j]:=random(2);
write(a[i,j],' ');
end;
end;
k:=0;
for i:=1 to n do
begin
j:=1;
while j<=n do
begin
Er:=false;
while (a[i,j]<>1)and(j<=n)do
j:=j+1;
Nach:=j;
while (a[i,j]=1)and(j<=n) do
begin j:=j+1;Er:=true; end;
Kon:=j-1;
g:=true;
for l:=nach to kon do
if a[i-1,l]=1 then
g:=false;
if (g=true)and(Er=true) then
k:=k+1;
end;
end;k2:=k;
for i:=1 to n do
begin
j:=1;
while j<=n do
begin
while (a[i,j]=0)and(j<=n) do
j:=j+1;
while (a[i,j]=1)and(j<=n) do
j:=j+1;
Nach:=j-1;
Er:=false;
Kon:=j-1;
while (a[i+1,Kon]=1)and(Kon<=n) do
begin
Er:=true;
Kon:=Kon+1;
end;Kon:=kon-1;
Error:=false;
if a[i+1,j-1]=1 then
if Er=true then
for l:=Nach to Kon do
if (a[i,l]=1) and (l>Nach) and (l<=n) then Error:=true;
if Error=true then k:=k-1;
end;
end;
writeln(' K=',k);
readkey;
end.
Программированине-это не очередная пара, а искуство показать себя!!!
МаксимNEWProgramm вне форума Ответить с цитированием
Старый 22.04.2008, 08:49   #2
Povar
Новичок
Джуниор
 
Регистрация: 10.04.2008
Сообщений: 43
По умолчанию

нУ программа рабочая, и особо лишнего убрать то нечего все по делу написано, просто если что отформатируй текст и нормально смотреться будет
Povar вне форума Ответить с цитированием
Старый 22.04.2008, 10:17   #3
nikleb
Форумчанин
 
Регистрация: 04.04.2007
Сообщений: 131
По умолчанию

Если правильно понял задачку то так:
Код:
program forum;
uses crt;
var m:array[1..100,1..100]of integer;
    i,i2,n,k:integer;
begin
clrscr;
randomize;
readln(n);
for i:=1 to n do
    begin
    for i2:=1 to n do
        begin
        m[i,i2]:=random(2);
        write(m[i,i2]:2);
        end;
    writeln;
    end;
for i:=1 to n-1 do
    for i2:=1 to n-1 do
        begin
        if (m[i,i2]=0)and(m[i+1,i2]=1)and(m[i,i2+1]=1) then
           inc(k);
        if (m[i,i2]=1)and(m[i+1,i2]=0)and(m[i,i2+1]=0) then
           inc(k);
        end;
writeln(k);
readln;
end.
nikleb вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные маcсивы(дороботка). xxxPascalxxx Общие вопросы Delphi 2 27.12.2007 21:41
Двумерные маcсивы(дороботка). Hostlman Помощь студентам 2 26.12.2007 19:46