Ejercicio 05 — Busqueda lineal — leer un array y un valor

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

Enunciado

Busqueda lineal — leer un array y un valor; indicar si existe y en que posicion (primera ocurrencia).

Diagrama de flujo

Diagrama de flujo 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 en Dev-C++

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: Busqueda lineal — leer un array y un valor; indicar si existe
 *            y en que posicion (primera ocurrencia).
 * Dificultad: amarillo
 * 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: Busqueda lineal — leer un array y un valor; indicar si existe
 *            y en que posicion (primera ocurrencia).
 * Dificultad: amarillo
 * 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;
}

Cómo usarlo

Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.

Conexiones