Pascal/Turbo Pascal - matriz islas

 
Vista:
sin imagen de perfil

matriz islas

Publicado por marios (58 intervenciones) el 08/04/2014 14:39:34
buenas ramon queria tu ayuda para el siguiente ejercicio que es parte de un trabajo a entregar en la facultad.de antemano muchas gracias


Escriba un programa pascal que dado un mapa representado por una matriz de
tamaño N*M de ceros y unos, donde 0 representa agua y 1 tierra, imprima las islas encontradas en el
mismo. Una isla es una agrupación de celdas (al menos una) con valor 1, cada una de las cuales es
adyacente horizontal y/o verticalmente a una celda del mismo grupo. Una isla está delimitada,
horizontal y verticalmente, por celdas con valor 0 o por los límites (fronteras) del mapa.
Por ejemplo, en el siguiente mapa de tamaño 5*10, hay 6 islas.
1 1 1 0 0 1 1 1 1 1
1 1 0 0 0 0 1 0 0 1
0 0 0 1 0 0 1 0 0 0
0 0 0 0 1 0 1 0 0 0
1 1 1 0 0 0 1 1 0 1
Las 6 islas están compuestas de las siguientes celdas, cuyas coordenadas son:
Isla 1: (1,1) (1,2) (1,3) (2,1) (2,2)
Isla 2: (3,4)
Isla 3: (4,5)
Isla 4: (5,1) (5,2) (5,3)
Isla 5: (1,6) (1,7) (1,8) (1,9) (1,10) (2,10) (2,7) (3,7) (4,7) (5,7) (5,8)
Isla 6: (5,10)
Notar que (3,4) y (4,5) no forman una isla sino que son dos islas distintas.
Se pide que el programa imprima las celdas de cada isla del mapa siguiendo el formato
del ejemplo.
El orden de impresión entre las islas no es relevante, ni tampoco el orden en que se
imprimen las celdas de
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

matriz islas

Publicado por ramon (2158 intervenciones) el 10/04/2014 00:29:48
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
{Esto te ayudara}
 
 program matriz2;
 uses
   crt;
 const
    mx1 = 5;
    mx2 = 10;
    conmapa : array[1..mx1,1..mx2] of byte = (
    (1, 1, 1, 0, 0, 1, 1, 1, 1, 1),
    (1, 1, 0, 0, 0, 0, 1, 0, 0, 1),
    (0, 0, 0, 1, 0, 0, 1, 0, 0, 0),
    (0, 0, 0, 0, 1, 0, 1, 0, 0, 0),
    (1, 1, 1, 0, 0, 0, 1, 1, 0, 1));
 
  type
    mapa = array[1..mx1,1..mx2] of byte;
 
    cord = record
           x, y : integer;
          end;
 
   matrizmapa = array[1..mx1,1..mx2] of cord;
  var
   mp : mapa;
   h, i : integer;
   islas : matrizmapa;
 
   procedure asignamapa(var m : mapa);
   var
     t, r : integer;
   begin
     for t := 1 to mx1 do
      for r := 1 to mx2 do
      m[t,r] := conmapa[t,r];
   end;
 
  procedure cargaposicion(m : mapa; var pos : matrizmapa);
  var
     h1, i1 : integer;
   begin
      for h1 := 1 to mx1 do
     begin
       for i1 := 1 to mx2 do
       begin
          if m[h1,i1] = 1 then
          begin
          pos[h1,i1].x := h1;
          pos[h1,i1].y := i1;
          end
        else
          begin
          pos[h1,i1].x := 0;
          pos[h1,i1].y := 0;
          end;
       end;
     end;
   end;
 
   procedure presenta_mapa(mm : matrizmapa);
   var
    j, k, w : integer;
   begin
      k := 1;
      w := 1;
      writeln('         **** Mapa de islas ****');
      writeln;
   repeat
        j := 1;
    repeat
        if (mm[k,j].x > 0) and (mm[k,j].y > 0) then
        write(' ',mm[k,j].x,'-',mm[k,j].y)
      else
         begin
         write('    ');
         end;
        j := j + 1;
    until j > mx2;
    writeln;
    k := k + 1;
   until k > mx1;
   end;
 
 
 
  begin
     clrscr;
     writeln;
     asignamapa(mp);
     cargaposicion(mp,islas);
     presenta_mapa(islas);
 
      readkey;
  end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar