Encontrar la menor diferencia entre dos vectores

Buenas.

Necesito hacer un programa que me compare dos arreglos, para encontrar el valor del indice con la menor diferencia. Eh estado intentando con un programa de prueba que consiste en recorrer ambos vectores en ciclo for, tomando el valor absoluto de la resta de cada valor para luego compararlo mediante un if con el valor de la resta anterior, guardando el número menor, pero no me da resultado.
La verdad es que no se en que me estoy equivocando, probé la lógica del código en C y no me arrojo ningún problema, mostrando el valor del arreglo 9 y el indice 9.

Si alguien me pudiera orientar lo agradecería mucho.

int vector1[20]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9,10,19,5,10,11,12,16,17,18,19,29};
int vector2[20]={20,19,18,17,16,15,14,13,9,11,10,9, 8, 7, 6, 5, 4, 3, 2, 1};
int ptoy=0,ptox=0,absc=0,actu=0,anter=0;
void setup() {

  Serial.begin(9600);
}

void loop() {


for (int i=0;i<=20;i++){
        actu=(vector1[i]-vector2[i]);
        
        if (actu<0){
          absc=actu*-1; //valor absoluto de la resta
          }
          if(absc<anter){
          ptoy=vector1[i];
          //Serial.println(ptoy);
          ptox=i;
       
              } 
          int anter=absc;
  }
  Serial.print(ptoy);
  Serial.print("/");
  Serial.println(ptox);
}

Primero entender que debe dar, haciendolo manualmente cual es la respuesta?

surbyte:
Primero entender que debe dar, haciendolo manualmente cual es la respuesta?

Es un poco confuso de explicar, tiene que entregar tanto el valor y el indice del dato dentro de los vectores que sea el mas parecido o igual entre ambos, en este caso seria el dato ubicado en la posición 9 y de valor 9

Justamente por eso te pregunté porque para mi hay muchas respuestas que satisfacen tu diferencia en valor absoluto.

No veo diferencia entre el 9 en la pos 9 vs muchos valores que tienen dif 1 tmb.

Explicate como discriminas

surbyte:
Justamente por eso te pregunté porque para mi hay muchas respuestas que satisfacen tu diferencia en valor absoluto.

No veo diferencia entre el 9 en la pos 9 vs muchos valores que tienen dif 1 tmb.

Explicate como discriminas

Los discrimino comparando el resultado del valor absoluto de la resta en cada dato, teniendo que el valor del resultado que sea menor correspondería a los datos que serian mas cercanos o iguales en este caso teniendo 0 en su resta

No comprendo como no lo puedes explicar con ejemplo.

primero, puedes calcular el valor absoluto usando abs() directamente y no hacer la resta de dos valores y luego comparar su signo. Pierde tiempo cuando esta hecho, aunque esto no cambia nada.

Ya veo errores…

Defines variables locales que antes has definido como globales como anter

prueba esto

int vector1[20]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9,10,19,5,10,11,12,16,17,18,19,29};
int vector2[20]={20,19,18,17,16,15,14,13,9,11,10,9, 8, 7, 6, 5, 4, 3, 2, 1};
int ptoy=0, ptox=0, actu = 0, anter=0;

void setup() {

  Serial.begin(9600);
}

void loop() {

    for (int i=0;i<=20;i++){
        actu = abs(vector1[i]-vector2[i]);
        
        if (actu < anter){
            ptoy = vector1[i];
            //Serial.println(ptoy);
            ptox = i;
        } 
        anter = actu ;
  }
  Serial.print(ptoy);
  Serial.print("/");
  Serial.println(ptox);
}

NOTA: no entiendo tu lógica pero tal vez se corrija con ese detalle.

Disculpa mi mala forma de explicar, pero la logica seria; resto 2 datos de un mismo indice y guardo el valor absoluto del resultado en una variable (en este caso no ocupe la función abs() por descartar errores), luego mediante un "if" veo si este resultado es menor con respecto al valor de la resta de los datos anteriores, guardando tanto su valor y posición en el vector si se cumple la condición, de este modo espero obtener el valor del dato entre ambos vectores que este mas próximo, encontrando su intersección.

surbyte:
Ya veo errores..

Defines variables locales que antes has definido como globales como anter

También intente cambiando las variables a locales cuando fui descartando errores y eh tenido el mismo resultado.

el problema es que anter comienza con 0 y de ese modo nunca vas a encontrar un valor menor.

Y había otro error que ya corregí

int vector1[20] = {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9,10,19,5,10,11,12,16,17,18,19,29};
int vector2[20] = {20,19,18,17,16,15,14,13,9,11,10,9, 8, 7, 6, 5, 4, 3, 2, 1};
int ptoy = 0, ptox = 0, actual = 0, anter = 100;
//char buffer[40];

void setup() {

  Serial.begin(9600);
  Serial.println("Iniciando.");
  for (int i=0; i<=20; i++) {
        actual = abs(vector1[i]-vector2[i]);
        
        if (actual < anter){
            ptoy = vector1[i];
            ptox = i;
            anter = actual ;
  		}
		//sprintf(buffer, "actual %3d anter %3d poty %2d potx %2d", actual, anter, ptoy, ptox);            
        //Serial.println(buffer);

  }
  Serial.print(ptoy);
  Serial.print("/");
  Serial.println(ptox);
}

void loop() {


}

Tienes razón, poniendo un valor distinto de 0 en anter funciona aunque no entiendo muy bien porque.
Muchas gracias

Solo añadir que el indice se sale fuera del tamaño de array.

El for debería ser for(int i=0; i<20; i++), en vez de i<=20.

saludos.

poniendo un valor distinto de 0 en anter funciona aunque no entiendo muy bien porque

Cuando comparas el valor diferencia actual con antes usas esto

 if (actual < anter){

dime que pasa cuando actual vale 2 y anter vale 0 como lo habías puesto tu?
Se da alguna vez la condición? No jamás.

O sea actual jamás será menor que anter y ni hablar en valor absoluto.

La otra forma es que arranques con un anter = a la primera diferencia no importa cual sea el resultado y luego sigas con ese valor buscando la menor.