Pascal/Turbo Pascal - ayuda con eliminar ocurrencias

 
Vista:

ayuda con eliminar ocurrencias

Publicado por seba (1 intervención) el 21/10/2016 01:21:47
Hola, nececito ayuda en un modulo que recibe un vector, su dimension logica (o el valor hasta donde debe recorrer el vector), y un elemento y lo que debe hacer es eliminar del vector el elemento que recibe junto con todas sus ocurrencias (todas las veces que aparece). El modulo es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
Procedure borrarocurrencias ( var v:vector;  var dl :integer;n:integer);
var
 i,j:integer;
begin
 for i:=1 to dl do begin
  if v[i]=n then begin
   for j:=i to (dL-1) do
    v[j]:= v[j+1];
   dL:= dL - 1;
  end;
 end;
end;

mi problema, es que el modulo borra el elemento, siempre que no este en posiciones consecutivas, osea, si tengo 5,3,78,23,4,6,6,75 y quiero borrar el 6, solo va a borrar el primer 6, ya que el siguiente 6 consecutivo lo mueve a la posicion i(o la posicion j, es lo mismo) y la proxima vez que evalua el if, pregunta por i+1, es decir que el 6 que estaba en la siguiente posicion despues del primer 6 que encontro, ya no lo borra por que nunca lo evalua. Alguien se le ocurre como puedo hacer para que el modulo me borre todas las ocurrencias del elemento dentro del vector? Gracias.
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

ayuda con eliminar ocurrencias

Publicado por ramon (2158 intervenciones) el 22/10/2016 22:04:30
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
{Espero esto ayude}
 
program eliminarnumero;
  uses
     crt;
 
   const
       numeros : array[1..15] of integer = (
       12,6,9,11,23,3,5,7,7,8,1,4,7,0,2);
 
  var
    arraynumero : array[0..14] of integer;
    elimi, cont : integer;
 
 
 
    procedure carganumeros(var n : array of integer; var t : integer);
    var
       nucont : integer;
    begin
       for nucont := 0 to 14 do
       n[nucont] := numeros[nucont + 1];
       t := nucont;
    end;
 
 
    procedure eliminaocurrencia(nn : integer; var eli : array of integer);
    var
      d, k, tt, i, j : integer;
     begin
        writeln('   Eliminando De La Matriz el Numero = [',nn,']');
        writeln;
        writeln('   Matriz Actual Es');
        writeln;
        for i := 0 to cont do
        write('  ',eli[i]);
        for i := 0 to cont do
        if eli[i] = nn then
        eli[i] := 256;
        i := cont;
        for j := 0 to cont do
        if eli[j] = 256 then
        begin
           for d := j to i do
           eli[d] := eli[d + 1];
           j := j - 1;
           i := i - 1;
         end;
          if cont > i then
          cont := i;
          writeln;
          writeln('  Matriz Queda Asi');
          writeln;
          for i := 0 to cont do
          write('  ',eli[i]);
    end;
 
 
    begin
       clrscr;
       write('   Ocurrencia A Eliminar Es : ');
       readln(elimi);
       carganumeros(arraynumero, cont);
       eliminaocurrencia(elimi,arraynumero);
       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