> ## Documentation Index
> Fetch the complete documentation index at: https://apuntes.simulab.es/llms.txt
> Use this file to discover all available pages before exploring further.

# Programación en C: temas, ideas clave y simuladores

> Programación en C: punteros y memoria, recursión, divide y vencerás, backtracking y análisis del mejor y peor caso, línea a línea.

C obliga a entender qué pasa en la memoria: dónde vive cada variable, qué es una dirección y cómo crece la **pila** con cada llamada. Por eso es el lenguaje ideal para aprender los esquemas de diseño de algoritmos (**recursión**, **divide y vencerás**, **backtracking**) y para analizar su coste de forma rigurosa.

## Las ideas clave del bloque

### Memoria y punteros

Un puntero guarda una dirección. `&x` da la dirección de `x` y `*p`, la variable a la que apunta `p`. La **pila** guarda las variables locales; el **montón**, lo que se pide con `malloc` hasta que se libera con `free`.

### Recursión

Caso base, caso general que reduce el problema y combinación. Cada llamada ocupa un marco en la pila.

### Esquemas de diseño

* **Divide y vencerás**: partir, resolver cada parte y combinar. Su coste se calcula con ecuaciones de recurrencia.
* **Backtracking**: explorar decisiones una a una y retroceder en cuanto una rama no puede llevar a una solución (poda).

### Análisis

El coste de un algoritmo puede depender de los datos: **mejor caso**, **peor caso** y **caso medio**. Se estudia contando la operación crítica para distintas tallas.

## Orden recomendado

<Steps>
  <Step title="Memoria y punteros en C">
    Programas en C línea a línea con la pila, el montón y a dónde apunta cada puntero.
  </Step>

  <Step title="Recursión en C">
    Potencia, factorial, MCD, Fibonacci y suma de un vector: pila y árbol de llamadas, y su versión iterativa.
  </Step>

  <Step title="Divide y vencerás">
    Máximo, suma, vector creciente y búsqueda binaria en C, con el trozo de cada llamada y su coste.
  </Step>

  <Step title="Backtracking">
    Mochila 0/1 y descomposición en sumandos en C: árbol de búsqueda con podas, todas las soluciones, una o la óptima.
  </Step>

  <Step title="Mejor y peor caso">
    Cuenta operaciones en el mejor, el peor y el caso medio para cada talla, con gráfica y tabla.
  </Step>
</Steps>

## Temas de este bloque

<CardGroup cols={2}>
  <Card title="Memoria y punteros en C" href="/programacion/c/punteros">
    Punteros en C explicados línea a línea: direcciones, operadores & y \*, paso por valor y por referencia, aritmética de punteros, la pila y el montón, malloc y free, y errores típicos.
  </Card>

  <Card title="Recursión en C" href="/programacion/c/recursion">
    La recursión explicada paso a paso en C: caso base y caso general, descenso y ascenso, pila y árbol de llamadas, recursión lineal, final y múltiple (Fibonacci) y cómo pasar a iterativa.
  </Card>

  <Card title="Divide y vencerás" href="/programacion/c/divide-y-venceras">
    El esquema divide y vencerás explicado con vectores en C: caso trivial, dividir, resolver y combinar, árbol de subproblemas, búsqueda binaria y cálculo del coste con ecuaciones de recurrencia.
  </Card>

  <Card title="Backtracking" href="/programacion/c/backtracking">
    El esquema de backtracking explicado en C: árbol de búsqueda, decisiones, podas, y las variantes para obtener todas las soluciones, una solución o la óptima, con la mochila 0/1 y la descomposición en sumandos.
  </Card>

  <Card title="Mejor y peor caso" href="/programacion/c/mejor-peor-caso">
    Cómo analizar el coste de un algoritmo: talla de la entrada, operación crítica, mejor caso, peor caso y caso medio, notación O y análisis experimental con gráficas y tablas, con ejemplos en C.
  </Card>
</CardGroup>

## Simuladores de programación en C en Simulab

<CardGroup cols={2}>
  <Card title="Memoria y punteros en C" icon="flask" href="https://simulab.es/programacion/punteros">
    Programas en C línea a línea con la pila, el montón y a dónde apunta cada puntero.
  </Card>

  <Card title="Recursión en C" icon="flask" href="https://simulab.es/programacion/recursion">
    Potencia, factorial, MCD, Fibonacci y suma de un vector: pila y árbol de llamadas, y su versión iterativa.
  </Card>

  <Card title="Divide y vencerás" icon="flask" href="https://simulab.es/programacion/divide-y-venceras">
    Máximo, suma, vector creciente y búsqueda binaria en C, con el trozo de cada llamada y su coste.
  </Card>

  <Card title="Backtracking" icon="flask" href="https://simulab.es/programacion/backtracking">
    Mochila 0/1 y descomposición en sumandos en C: árbol de búsqueda con podas, todas las soluciones, una o la óptima.
  </Card>

  <Card title="Mejor y peor caso" icon="flask" href="https://simulab.es/programacion/mejor-peor-caso">
    Cuenta operaciones en el mejor, el peor y el caso medio para cada talla, con gráfica y tabla.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.