Programación estructurada

Principios de la programación estructurada

Teorema del programa estructurado

El teorema del programa estructurado establece que toda función computable puede ser implementada por cualquier lenguaje de programación que haga uso de tres estructuras lógicas:

  1. Secuencia: la ejecución de una instrucción tras otra
  2. Selección: la ejecución de una instrucción, o conjunto de instrucciones, dependiendo de un valor booleano
  3. Iteración: la repetición de la ejecución de una instrucción, o conjunto de instrucciones, mientras que valor booleano sea evaluado como verdadero

Programación estructurada

La programación estructurada es un paradigma de programación en el que sólo se recurre a subrutinas, secuencias, y operaciones de selección e iteración para desarrollar un programa de computadora


Surge como respuesta a los errores introducidos en el código por el uso de transferencias incondicionales en algunos lenguajes de programación


Bajo este paradigma, el código se organiza en bloques, que permiten que conjuntos de declaraciones sean tratadas como una sola

C

C es un lenguaje de programación de propósito general creado por Dennis Ritchie en los laboratorios Bell en 1972

 

Es un lenguaje fundamental en el campo de las ciencias de la computación a pesar de ser un lenguaje viejo

Anatomía de un programa

  • El código que aparece a la izquierda corresponde a un programa muy, muy, muy simple escrito en C
     
  • Lo único que hace es imprimir "¡Hola, Mundo!" a la pantalla
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • Esta línea le solicita al compilador que agregue el contenido del archivo especificado entre <> para que las funciones descritas en él estén disponibles para el archivo desde el cuál se llaman
     
  • Se pueden incluír varios archivos de esta manera
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • Esta línea es la declaración de una función
     
  • Una función es una secuencia de instrucciones independientes y reusables
     
  • Se recomienda que cada función realice una sola cosa específica y nada más
     
  • Cada declaración necesita de tres cosas:
    1. El tipo del valor que regresa
    2. El nombre de la función
    3. Los parámetros que acepta
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • La función main se ejecuta cuando se llama al ejecutable compilado del programa
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • Cada par de llaves (una abierta y una cerrada) delimitan un bloque de código
     
  • La cantidad de llaves abiertas debe corresponder a la cantidad de llaves cerradas en el programa
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • En este caso, el programa consiste solamente en una instrucción
     
  • La instrucción printf manda una cadena a la salida estándar del programa
    • En realidad es un poquito más complicado que eso, pero lo vamos a revisar después
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • La instrucción return simplemente hace que la función termine su ejecución y regrese el valor que le precede
     
  • En el caso particular de la función main, este valor se usa para especificar si la función se ejecutó correctamente o un código de error en caso contrario
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • El tipo del valor que se regresa por la instrucción return debe corresponder al tipo establecido en la definición de la función
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • El resto de las líneas son comentarios; líneas que el programa ignora a la hora de compilar y ejecutarse
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • El resto de las líneas son comentarios; líneas que el programa ignora a la hora de compilar y ejecutarse
     
  • Pueden ser de una sola línea...
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • El resto de las líneas son comentarios; líneas que el programa ignora a la hora de compilar y ejecutarse
     
  • Pueden ser de una sola línea...
     
  • ... o pueden ser de varias líneas
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Anatomía de un programa

  • Y listo, un programa muy simple
#include <stdio.h>

int main()
{
    //Este es un comentario de una sola línea
    
    /*
    Este es un comentario
    de más de una línea
    */
    printf("¡Hola, Mundo!");
    
    return 0;
}

Variables numéricas

  • Hay distintos tipos, y tamaños, de variables numéricas
     
  • Todas las variables numéricas pueden ejecutar operaciones matemáticas fundamentales (suma, resta, multiplicación y división)
     
  • En este ejemplo, se usan tres variables de tipo entero
#include <stdio.h>

int main()
{
    int a = 10;
    int b = 2;
    int c = 3;
    
    c = a * b;
    
    printf("%d multiplicado por %d es igual a %d", a, b, c);
    
}

Variables numéricas

  • Si queremos mandar una cadena que contenga un número entero a la consola, se hace con un comodín en la cadena (%d) que, a su vez, hace referencia a una variable
     
  • Si queremos mandar varios números enteros, se hace mediante varios comodines en el orden en el que aparecen las variables referenciadas
#include <stdio.h>

int main()
{
    int a = 10;
    int b = 2;
    int c = 3;
    
    c = a * b;
    
    printf("%d multiplicado por %d es igual a %d", a, b, c);
    
}

Variables numéricas

  • En este caso las variables son números de punto flotante (números reales de precisión fija)
#include <stdio.h>

int main()
{
    float a = 10.5;
    float b = 2.33;
    float c = 3.75;
    
    c = a * b;
    
    printf("%f multiplicado por %f es igual a %f", a, b, c);
    
}

Variables numéricas

  • Si queremos mandar una cadena que contenga un número de punto flotante a la consola, se hace con un comodín en la cadena (%f) que, a su vez, hace referencia a una variable
     
  • Si queremos mandar varios números de punto flotante, se hace mediante varios comodines en el orden en el que aparecen las variables referenciadas
#include <stdio.h>

int main()
{
    float a = 10.5;
    float b = 2.33;
    float c = 3.75;
    
    c = a * b;
    
    printf("%f multiplicado por %f es igual a %f", a, b, c);
    
}

Variables numéricas

  • ¿Qué pasa en este caso?
#include <stdio.h>

int main()
{
    float a = 10.5;
    float b = 2.33;
    float c = 3.75;
    
    c = a * b;
    
    printf("%.2f multiplicado por %.3f es igual a %.4f", a, b, c);
    
}

Variables numéricas

  • ¿Qué pasa en este caso?
     
  • Podemos modificar el comodín para especificar la cantidad de números decimales que queremos mostrar
#include <stdio.h>

int main()
{
    float a = 10.5;
    float b = 2.33;
    float c = 3.75;
    
    c = a * b;
    
    printf("%.2f multiplicado por %.3f es igual a %.4f", a, b, c);
    
}

Tipos de datos enteros

Tipo Tamaño Rango de valores
char 1 byte -128 a 127 o 0 a 255
unsigned char 1 byte 0 a 255
signed char 1 byte -128 a 127
int 2 o 4 bytes -32,768 a 32,767 o -2,147,483,648 a 2,147,483,647
unsigned int 2 o 4 bytes 0 a 65,535 o 0 a 4,294,967,295
short 2 bytes -32,768 a 32,767
unsigned short 2 bytes 0 a 65,535
long 8 bytes -9223372036854775808 a 9223372036854775807
unsigned long 8 bytes 0 a 18446744073709551615

Tipos de datos de punto flotante

Tipo Tamaño Rango de valores Precisión
float 4 bytes 1.2E-38 to 3.4E+38 6 decimales
double 8 bytes 2.3E-308 to 1.7E+308 15 decimales
long double 10 bytes 3.4E-4932 to 1.1E+4932 19 decimales

Alcance de las variables

  • Dependiendo de cuales funciones pueden tener acceso a una variable (su alcance) se dice que tenemos variables locales, globales y estáticas
     
  • Las variables estáticas están fuera del alcance de este tema
    • ... pero no del curso
#include <stdio.h>

char a = 2;

int main()
{

    char b = -2;
    char c = 5;
    
    c = a * b;
    
    printf("%d multiplicado por %d es igual a %d", a, b, c);
    
}

Alcance de las variables

  • Una variable declarada dentro de un bloque de código o una función sólo puede ser accedida desde dentro de ese mismo bloque de código o función
     
  • Es una variable de alcance local
     
  • Una variable local no existe, en un nivel lógico, fuera del bloque o función en la que se declara
#include <stdio.h>

char a = 2;

int main()
{

    char b = -2;
    char c = 5;
    
    c = a * b;
    
    printf("%d multiplicado por %d es igual a %d", a, b, c);
    
}

Alcance de las variables

  • Una variable declarada fuera de los bloques o funciones de un programa puede ser accedida desde cualquier bloque de código o función contenido en el programa
     
  • Es una variable de alcance global
     
  • Una variable global existe, en un nivel lógico, para cualquier bloque o función de un programa
#include <stdio.h>

char a = 2;

int main()
{

    char b = -2;
    char c = 5;
    
    c = a * b;
    
    printf("%d multiplicado por %d es igual a %d", a, b, c);
    
}

Reglas para nombrar variables

  1. El nombre de una variable puede estar formado únicamente por caracteres alfabéticos, numéricos y guiones bajos
  2. El nombre de una variable no puede comenzar con un caracter numérico
  3. El nombre de una variable no puede ser una palabra reservada del lenguaje de programación en que se escribe el programa

Recomendaciones para nombrar variables

  1. Elijan siempre nombres de variables descriptivos al uso que se le va a dar
  2. Mantengan consistencia en los nombres de variables que elijan
  3. Mantengan consitencia también en el uso de mayúsculas y minúsculas (capitalization) al nombrar variables
    • matriculaDeEstudiante (camelCase)
    • MatriculaDeEstudiante (PascalCase)
    • matricula_de_estudiante (snake_case)

Programación estructurada: Principios de la programación estructurada

By Gilberto 🦁

Programación estructurada: Principios de la programación estructurada

Principios de la programación estructurada

  • 245