Ejercicio 05 — Búsqueda lineal — leer un array y un valor

Dificultad: amarillo · Módulo 05 (Arrays y cadenas)

Enunciado

Búsqueda lineal — leer un array y un valor; indicar si existe y en qué posición (primera ocurrencia).

Diagramas de flujo

Diagrama de flujo (actividad) del ejercicio 05

Diagrama de flujo (grafo) del ejercicio 05

Cómo se resuelve

La búsqueda lineal es la forma más simple de buscar: recorrer el array de principio a fin comparando cada elemento con el valor buscado hasta encontrarlo.

  1. Usamos una variable pos como resultado, inicializada a -1. Ese -1 es un centinela que significa “todavía no encontrado”: lo elegimos porque ninguna posición válida del array es -1 (los índices empiezan en 0), así que no hay ambigüedad.
  2. Recorremos con un for; en cuanto a[i] == buscado, guardamos pos = i y hacemos break para salir del bucle. El break es lo que nos da la primera ocurrencia: si el valor apareciera más veces, no seguimos mirando.
  3. Al final, si pos sigue valiendo -1 es que nunca hubo coincidencia; en caso contrario, pos es la posición encontrada.

Trampa habitual: usar 0 como valor de “no encontrado”. Como 0 es una posición válida (la primera casilla), confundirías “está en la posición 0” con “no está”. Por eso se reserva -1, que nunca puede ser un índice real.

Para practicar — cópialo y complétalo

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

/*
 * Curso de C — Modulo 05: Arrays y cadenas
 * Ejercicio 05 — PRACTICA (rellena los TODO)
 * Enunciado: Búsqueda lineal — leer un array y un valor; indicar si existe
 *            y en qué posición (primera ocurrencia).
 * Dificultad: amarillo
 * Stdin: 5\n10\n20\n30\n40\n50\n30
 * Compilar: gcc -std=c11 -Wall ej05_practica.c -o ej05 && ./ej05
 */
 
#include <stdio.h>
 
int main(void) {
    int n;
 
    // TODO 1: Pedir N, declarar el array y leer los N enteros.
 
    // TODO 2: Pedir el valor a buscar.
 
    // TODO 3: Declara una variable 'pos' inicializada a -1.
    //         Recorre el array con un for. Si a[i] == buscado:
    //           - guarda i en pos
    //           - usa 'break' para salir del bucle (primera ocurrencia)
 
    // TODO 4: Si pos sigue siendo -1, el elemento no existe.
    //         Si no, imprime la posicion donde se encontro.
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 05: Arrays y cadenas
 * Ejercicio 05 — MODELO (resuelto)
 * Enunciado: Búsqueda lineal — leer un array y un valor; indicar si existe
 *            y en qué posición (primera ocurrencia).
 * Dificultad: amarillo
 * Stdin: 5\n10\n20\n30\n40\n50\n30
 * Compilar: gcc -std=c11 -Wall ej05_modelo.c -o ej05 && ./ej05
 */
 
#include <stdio.h>
 
int main(void) {
    int n;
    printf("Cuantos numeros (max 50)? ");
    scanf("%d", &n);
 
    if (n < 1 || n > 50) {
        printf("N debe estar entre 1 y 50.\n");
        return 1;
    }
 
    int a[50];
    for (int i = 0; i < n; i++) {
        printf("a[%d] = ", i);
        scanf("%d", &a[i]);
    }
 
    int buscado;
    printf("Valor a buscar: ");
    scanf("%d", &buscado);
 
    // Busqueda lineal: recorrer desde el principio y parar en la primera coincidencia
    int pos = -1;   // -1 significa "no encontrado" (ninguna posicion valida es -1)
    for (int i = 0; i < n; i++) {
        if (a[i] == buscado) {
            pos = i;
            break;  // encontramos la primera ocurrencia; salimos
        }
    }
 
    if (pos == -1) {
        printf("El valor %d NO esta en el array.\n", buscado);
    } else {
        printf("Encontrado en posicion %d\n", pos);
    }
 
    return 0;
}

Ejecútalo en el navegador

▶ Abrir y ejecutar en Compiler Explorer

Se abre con la solución ya cargada; pulsa el botón de ejecutar (Run) para ver la salida. No hay que instalar nada.

Cómo usarlo

Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.

Conexiones