Cambio de los duplicados de un array

De Ejercicios

Contenido

Enunciado

Diseñar un procedimiento que acepte como parámetro un vector que pueda contener elementos duplicados. El procedimiento debe reemplazar cada elemento repetido por -1 y devolver el vector modificado, además del número de modificaciones hecho.

Soluciones

Diseño en Pseudocódigo

  PROCEDIMIENTO Repeticion(VAR V: ARRAY DE REALES; n: ENTERO; VAR nmodif: ENTERO)
  ENTRADAS:
    V: ARRAY DE REALES  ''(*Array que contiene los elementos repetidos. En array empieza en la posición 1*)''
    n: ENTERO           ''(*Número de elementos del array*)''
  SALIDA:
    V: ARRAY DE REALES  ''(*Array con los elementos repetidos sustituidos por -1*)''
    nmodif: ENTERO      ''(*Número de elementos modificados en el array*)''
  VARIABLES: 
    i, j: REAL 
  INICIO
    nmodif <-- 0
    PARA i <-- 1 HASTA n-1 CON INCREMENTO DE 1 HACER
      PARA j <-- i+1 HASTA n CON INCREMENTO DE 1 HACER
        SI ( V(i)=V(j) Y V(j)<>-1 ) ENTONCES
          V(j) <-- -1
          nmodif <-- nmodif+1
        FIN SI
      FIN PARA
    FIN PARA
  FIN

Programa en C

 #include <stdio.h>
 #include <stdlib.h>
 
 void Repeticion(float V[n], int n , int &nmodif){
    /*-------
    ENTRADAS:
      V: Array contiene los elementos repetidos. El array empieza en la posición 0
      n: Números de elementos del array
    SALIDAS:
      V:      Array con los elementos repetidos sustituidos por -1
      nmodif: número de elementos modificados en el array
    ---------*/
    //VARIABLES:
    float i,j;
 
    nmodif=0;
    for (i=0; i<=n-2; i++){
       for (j=i+1; j<=n-1; j++){
          if ( V[i]==V[j] && V[j] != -1 ){
             V[j]=-1;
             nmodif=nmodif+1;
          }
       }
    }         
 }

Solución en Matlab

function [v,nrepe]=Repeticion(w)
%FUNCION [v,nrepe]=Repeticion(w)
%DESCRIPCION: Cambia los elementos repetidos de un vector por -1.
%PARÁMETROS DE ENTRADA:
%   w: ARRAY DE ENTEROS, vector con elementos repetidos.
%PARÁMETROS DE SALIDA:
%   v: ARRAY DE ENTEROS, vector con los repetidos cambiados por -1
%   nrepe: ENTERO, número de repeticiones encontradas.
%VARIABLES:
%   n,pos1,pos2:ENTEROS
 
v=w;
n=length(v)
nrepe=0;
for pos1=1:n
    for pos2=pos1+1:n
        if(v(pos1))==(v(pos2))&&(v(pos2)~=-1),
            v(pos2)=-1;
            nrepe=nrepe+1;
        end
    end
end
Tipos de soluciones