IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> подсчитать кусты роз, незнаю с чего начать
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 324
Пол: Мужской
Реальное имя: maksim

Репутация: -  1  +


задача
Старик дед растит в саду розу. Старик забыл подвязать розы и коекакие кусты роз погибли и их пришлось выкопать некоторые розы. Выкопав эти розы сечас может на некоторые маленке кустики разбиты розы, любого размера и разной формы .

напишите а)идею решения задачи
б) написать программу сколько теперь маленких кустов.

Первичные данные записаны в файле duom.txt. На первой строчке написаны два натуральных числа отделенные пробелом числа n m (1<=n<=m<=100) На остальных n строчках написано m чисел неотделанных пробелом 0 или 1:0 показывает что в этом месте роз нету , 1 - есть.

результат записываем в файл rez.txt
первичные данные и результат пример
данные
3 12
110110110111
100010010111
111011010011
результат
4
обьяснение
11 11 11 111
1 1 1 111
111 11 1 11

видно что есть 4 куста роз

вместе с этой программой напишите генератор случайных чисел для этой программы

я так незнаю с чего начать и что делать чтобы программу эту выполнил только думаю сперва все в двойной массив записать а как дальше незнаю помогите


вот написал генератор но неправильно записывает цифры в файл почему? исправьте пожалуйста
program Bevarde1;
var v: array [1..100,1..100] of byte;
i,j,n,m:integer;
t:text;
begin
assign (t, 'duom.TXT');
rewrite (t);
randomize;
n:= random(10)+1;
m:= random(10)+1;
writeln(t,n,' ',m);
for i:=1 to n do
for j:=1 to m do
v[j,i]:=random(2);

for i:=1 to n do
begin
writeln ;
for j:=1 to m do
write(t,v[j,i]);
writeln
end;
close(t);
end.


Сообщение отредактировано: Lapp -


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Вот так надо делать файл:
program Bevarde1;
var
v: array [1..100,1..100] of byte;
i,j,n,m: integer;
t: text;

begin
assign (t, 'duom.TXT');
rewrite (t);
randomize;
m:= random(10)+1;
n:= random(m)+1; { так как n<=m }
writeln(t,n,' ',m);
for i:=1 to n do begin
for j:=1 to m do Write(t,random(2));
WriteLn(t);
end;
close(t);
end.
Тебе тут не нужно было заполнять массив, можно сразу писать в файл.

Теперь по задаче. Как я понял, тебе надо подсчитать количество связных областей единиц. По этому поводу один вопрос: диагональ не считается связью? То есть вот такая конфигурация:
1100
1100
0011
0011
- это две области или одна? Но это не принципиально, зависит только как обходить окрестность.

Если размеры сада не слишком велики, то можно использовать рекурсию. Примерно вот так:
const
l=100;

var
a,b: array[1..l,1..l]of integer;
i,j,m,n,k: integer;
f: text;
c: char;

procedure Mark(i,j: integer);
begin
a[i,j]:=k;
if (i>1)and(a[i-1,j]=-1) then Mark(i-1,j);
if (i<n)and(a[i+1,j]=-1) then Mark(i+1,j);
if (j>1)and(a[i,j-1]=-1) then Mark(i,j-1);
if (j<m)and(a[i,j+1]=-1) then Mark(i,j+1)
end;

begin
Assign(f,'duom.txt');
ReSet(f);
ReadLn(f,n,m);
for i:=1 to n do begin
for j:=1 to m do begin
Read(f,c);
if c='1' then a[i,j]:=-1 else a[i,j]:=0;
b[i,j]:=0
end;
ReadLn(f)
end;
Close(f);
k:=0;
for i:=1 to n do for j:=1 to m do if a[i,j]=-1 then begin
Inc(k);
Mark(i,j)
end;
WriteLn(k,' bushes');
for i:=1 to n do begin
for j:=1 to m do if a[i,j]>0 then Write(a[i,j]) else Write(' ');
WriteLn
end
end.
В этом решении я считаю, что связь только по горизонтали или вертикали (по диагонали не считается).

Сообщение отредактировано: Lapp -


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 13.09.2025 5:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name