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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2010, 19:54   #1
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию МИННОЕ ПОЛЕ В Delphi

Начало зимы - время курсовых...
Подскажите пожалуйста решение такой задачи:
На квадратном клетчатом листе бумаги размером 100х100 клеток нарисована схема минных полей в виде прямоугольников.
Каждый прямоугольник состоит из целых клеток, различные прямоугольники не накладываются друг на друга и не соприкасаются. Напр:
111000111110000
111000111110000
000000111110000
000000000000000
001000011100011
000000011100011
000000011100000
Задан массив размером 100х100, в котором элемент a[i,j]=1, если клетка [i,j] принадлежит какому-либо минному полю (заминирована) и a[i,j]=0 в противном случае.
Написать программу, которая сосчитает и напечатает число прямоугольников.
Программа в Delphi

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

Код:
const
  n=99;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a:array[1..n,1..n] of integer;
i,j:integer;
f:Textfile;
begin
 Assignfile(f,'ìèííîå ïîëå.txt');
 reset(f);
 for i:=1 to n do
 for j:=1 to n do
 begin
   read(f,a[i,j]);
   Stringgrid1.Cells [j,i]:= inttostr(a[i,j]);
  end;
  closefile(f);
 end;
___________________
_____
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Просто написать слово КОД: - недостаточно...
Модератор.

Последний раз редактировалось Serge_Bliznykov; 03.12.2010 в 20:24. Причина: добавил тег CODE
Оля 19 вне форума Ответить с цитированием
Старый 03.12.2010, 20:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

сразу вопрос. если массив 100 на 100 - то почему n=99 ?

а по сути вопроса надо подумать.
Выделить прямоугольники - несложно. Надо придумать, как отмечать те ячейки, которые уже посчитаны.
Я бы предложил добавить ещё один массив. Скопировать туда исходный и, в процессе подсчёта, убирать посчитанные клеточки (заносить туда нолик)

и ещё вопрос.
Ошибки можно не анализировать? Пересечения, накладки, "дырки" внутри прямоугольников - можно считать что такого нет и БЫТЬ НЕ МОЖЕТ? просто, чтобы не усложнять код подсчёта...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.12.2010, 20:46   #3
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию

=>Пересечения, накладки, "дырки" внутри прямоугольников - можно считать что такого нет и БЫТЬ НЕ МОЖЕТ?

-Да, такого нет и не будет!

А с заданием константы, в файле просто видимо одну колонку не дописала, поэтому получилось 99
Оля 19 вне форума Ответить с цитированием
Старый 03.12.2010, 21:30   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

так устроит? сделал для 10 на 10! 100 на 100 впадлу заполнять!
ну и в консоли ! с формами не интересно!
Вложения
Тип файла: rar mines.rar (35.5 Кб, 39 просмотров)
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 03.12.2010, 21:49   #5
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию

Ну, мне вообще то надо это в DELPHI, а не в консоли...
Оля 19 вне форума Ответить с цитированием
Старый 03.12.2010, 22:12   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Ну, мне вообще то надо это в DELPHI, а не в консоли...
ну а Delphi Console Application эт не Delphi уже????
и я себе плохо представляю матрицу 100 на 100 выведенную в Stringgrid)
вот для 10 на 10)
Вложения
Тип файла: rar Win32.rar (429.3 Кб, 29 просмотров)
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 03.12.2010, 22:48   #7
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию

Я хочу спросить как делать подсчет этих прямоугольников, а не саму программу в .exe
Оля 19 вне форума Ответить с цитированием
Старый 03.12.2010, 22:57   #8
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
как делать подсчет этих прямоугольников
1)идем построчно ищем 1 (for N_строки:= 1 to n do For N_столбца:=1 to n do)
2)нашли идем вниз по этому столбцу пока не 0( то есть прибавляем к индексу строки 1)
3)нашли идем вправо пока 1 ( то есть прибавляем к индексу столбца 1)
и у нас 4 угла прямоугольника
4)зануляем его (прямоугольник) и увеличиваем счетчик на 1
повторяем 1-4 пока есть в матрице хоть одна 1
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 03.12.2010 в 23:11.
Mad_Cat вне форума Ответить с цитированием
Старый 03.12.2010, 23:04   #9
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию

ага, это я понимаю, а вот как "идти" вправо и вниз(т.е. конкретные команды на ЯВУ) нет
Оля 19 вне форума Ответить с цитированием
Старый 03.12.2010, 23:16   #10
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
ага, это я понимаю, а вот как "идти" вправо и вниз(т.е. конкретные команды на ЯВУ) нет
решение в лоб оптимизации никакой-- с ней (с оптимизацией) сами как нить
Код:
const n=10;
 inp = 'mine.txt';
 var mp:array[1..n,1..n] of byte;
 i,j:integer;
 i1,j1:integer;
 i2,j2:integer;
 i3,j3:integer;
 f:textfile;
 k:integer;
{//--------------------------//}
FUNCTION oNE:boolean;
 begin
   result:=false;
 for i := 1 to n do
   for j := 1 to n do
     if mp[i,j]=1 then exit;
   result:=true;
 end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 assignfile(f,inp);
 reset(f);
 for i := 1 to n do begin
   for j := 1 to n do
    begin
     read(f,mp[i,j]);
    stringgrid1.Cells[j-1,i-1]:=inttostr(mp[i,j])
    end;
 end;
 k:=0;
 while not one do  begin
 i:=1;
 j:=1;
 while mp[i,j]<>1 do begin
 inc(j);
 if j>=n then
 begin j:=1;inc(i);
 end;
 end;
 i2:=i;
 i3:=i;
 j2:=j;
 j3:=j;
 while (mp[i3,j3]=1) and (i3<=n) do
  inc(i3);
  i3:=i3-1;
 while (mp[i3,j3]=1) and (j3<=n)  do
  inc(j3);
  j3:=j3-1;
 for i := I2 to I3 do
   for J := J2 to J3 do
     MP[I,J]:=2;
     INC(K);
 end;
   edit1.Text:=floattostr(k);
  closefile(f);
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод файлов в поле МЕМО на Delphi ChEaTeR-abc Помощь студентам 17 01.07.2010 14:59
После ввода в поле по Enter нужно перейти на другое поле! •ScReam•™ Помощь студентам 2 16.06.2009 08:47
access+delphi поиск по словам в поле memo gvozdkoff БД в Delphi 2 25.02.2009 07:13
Консоль+поле ввода в форме в Delphi KatT Помощь студентам 0 01.06.2008 16:08
Delphi 7 вычисляемое поле Riddick Помощь студентам 3 27.12.2007 06:55