Autor Tema: Búsqueda dicotómica

0 Usuarios y 1 Visitante están viendo este tema.

12 Noviembre, 2008, 10:17 pm
Leído 2845 veces

Lambda

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 348
  • Karma: +0/-0
  • Sexo: Masculino
El programa es Scilab, y mediante algorítimica y los correspondientes signos, tengo que hallar en un vector ordenado ascendentemente, si se encuentra un valor dado.

He escrito lo siguiente:


Código: [Seleccionar]
function Datos
printf("Introducir el número de dígitos que tendrá el vector")
n=scanf("%d\n")
i=1
 while i<=n
  printf("Introducir el siguiente valor")
   vector(i)=scanf("%d\n")
   i=i+1
end

printf("Introducir el valor a buscar")
s=scanf("%d\n")
pri=1
ult=n
i=floor(n/2)
a=-1
if (vector(i)==s)
  printf("El número se encuentra en la posición %d\n",i)
end
while (vector(i)<>s & a=-1 & pri<=ult)
  if (vector(i)<s)
    pri=i+1
else
  (if vecotr(i)>s)
    ult=i-1
else
   (if vector(i)==s)
    a=1
  end
end
end
i=floor((pri + ult)/2)
end
if (a==(-1))
  printf("-1")
end
if (a==1)
  printf("El número se encuentra en la posición %d\n",i)
end
endfunction[\code]




Si alguien entiende y sugiere algo,. . .en el programa me da error en la lína 4, cosa que es "imposible" pues está bien definido el i=1.

Saludos,

12 Noviembre, 2008, 10:30 pm
Respuesta #1

Gerardo Exequiel Pozzi

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 120
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Hola, tenes errores de sintaxis, por ejemplo te faltan los punto y coma al final de las lineas de instrucciones, tenes paréntesis adelante del algunos if.

Es bueno indentar (espacios) el código para darle jerarquía, y en el foro encerrarlo entre las etiquetas [ code ] y [ /code ] para que sea legible.

13 Noviembre, 2008, 10:18 am
Respuesta #2

Lambda

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 348
  • Karma: +0/-0
  • Sexo: Masculino
Hola, no se a qué te referirás con puntos y coma al final de cada línea de instrucción, pero en Scilab no es necesario poner ";", basta con saltar de línea.
Lo raro es que empiece dando error en la línea 3, línea en la que se está asignando a n un valor.

13 Noviembre, 2008, 11:37 am
Respuesta #3

Gerardo Exequiel Pozzi

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 120
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Ahí te corregí los errores de sintaxis (los if que te había dicho y un = simple y no doble == en el while, más un chsipoteo de vecotr -> vector , , queda que veas los errores de la lógica.

Código: [Seleccionar]
function Datos
  printf("Introducir el número de dígitos que tendrá el vector")
  n=scanf("%d\n")
  i=1
  while i<=n
    printf("Introducir el siguiente valor")
    vector(i)=scanf("%d\n")
    i=i+1
  end
  printf("Introducir el valor a buscar")
  s=scanf("%d\n")
  pri=1
  ult=n
  i=floor(n/2)
  a=-1
  if (vector(i)==s)
    printf("El número se encuentra en la posición %d\n",i)
  end
  while (vector(i)<>s & a==-1 & pri<=ult)
    if (vector(i)<s)
      pri=i+1
    else
      if (vector(i)>s)
        ult=i-1
      else
        if (vector(i)==s)
          a=1
        end
      end
    end
    i=floor((pri + ult)/2)
  end
  if (a==(-1))
    printf("-1")
  end
  if (a==1)
    printf("El número se encuentra en la posición %d\n",i)
  end
endfunction

13 Noviembre, 2008, 12:07 pm
Respuesta #4

Lambda

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 348
  • Karma: +0/-0
  • Sexo: Masculino
¡Muchísimas gracias! djgera

Gracias a esos pequeños cambios, se ha resuelto mi problema.
Por cierto, el algoritmo estaba mal, pero cambiando otro par de detalles la cosa queda bien.

Saludos,