viernes, 6 de septiembre de 2019


UNIVERSIDAD DE GUADALAJARA
Lic. En Tecnologías e información



Materia:
Programación Estructurada
Unidad 2
Bases de la programación: Estructuras de control
Actividad preliminar:
Un lenguaje de programación para implementar el diseño
Alumno:
NemesiStealth

Asesor:
S U L P

Variables
Derivada del término en latín variabilis, variable es una palabra que representa a aquello que varía o que está sujeto a algún tipo de cambio.
Una variable como su definición lo explica es un símbolo que permite identificar un elemento no especificado. Existen muchas aplicaciones para una variable, estas son llamadas variable universales, se pueden usar para diversos campos de estudio, pero específicamente en el lógico – matemático.
Para usarlas en una estructura es tan simple como el ejemplo anterior, un número telefónico, que no es otra cosa que una combinación única de 10 dígitos, la variable entera se le puede asignar múltiples combinaciones y guardarlas, volviendo a este dato inconstante, lo mismo sucede con el nombre, la dirección se le puede dar un valor deseado siempre y cuando estos cumplan con el formato predeterminado de la variable, en este caso caracteres.
<tipo> <identificador> <;>
int main()
{
char caracter;
short valor;
int numero;
long numeroMasLargo;
float numeroRealFloat;
double numeroRealDoble;
// fin
return 0;
}
Tipos de Datos
Enteros (int, long,byte, short)
Este tipo dato corresponde a aquellas variables que exclusivamente pueden recibir valores sin decimales. Generalmente se utilizan en las variables que contienen cantidades de elementos que no pueden fraccionarse, como el número de personas, etcétera.
Sintaxis
 int [Nombre de variable]; /* Se refiere una variable n con valor de un número entero con un rango de - 32768 a 32767
Reales (float, double)
Este tipo de dato, en cambio corresponde a aquellas variables cuyos valores pueden contener decimales, aunque al mismo tiempo puede contener valores enteros.
Sintaxis
 float [Nombre de variable]; /* Se refiere una variable n con valor de un número con decimal simple con un rango de - 3,4·1038 a 3,4·1038
double [Nombre de variable]; /* Se refiere una variable n con valor hasta 14 decimales. También admite enteros con un rango de - 1,79·10308 a 1,79·10308
Caracteres (char)
En este tipo de dato se encuentran todos los caracteres conocidos, una letra, un número, un símbolo especial. Por lo tanto, está conformado por los dígitos básicos del 0 al 9; letras de la a, a la z; de igual manera las mayúsculas: 'A', 'B', 'C', ..., 'Z'; y caracteres especiales tales como '%', '*', '?', ..., '/'. Es importante mencionar que, en algunos lenguajes de programación como Java y C#, podría cambiar la manera de identificar un carácter, dependiendo del lenguaje de programación utilizado.
Sintaxis
char [variable alfanumérica]; /* Se refiere una variable n con valor de Carácter, independiente o parte de una cadena, con un rango de 0 a 255
Cadenas (strings)
Constituyen conjuntos de caracteres, es decir la unión de varios caracteres, que pueden ser palabras o frases. El valor de este tipo de datos se encierra generalmente entre comillas (" ") y como en el anterior son capaces de utilizar mayúsculas, minúsculas, dígitos y caracteres especiales.
Sintaxis
Las cadenas se definen como una matriz de caracteres. La diferencia entre una matriz de caracteres y una cadena es que la cadena termina con un carácter especial "\ 0".

char cadena_nombre [tamaño];
Lógicos (booleans)
Los booleanos o tipos de datos lógicos, exclusivamente reciben dos valores: true ó false. Se utilizan generalmente como banderas, las banderas regularmente uno de sus usos es el de marcar o designar estructuras de datos para un posterior tratamiento, para identificar si se realizó o no un proceso. Estos únicamente pueden tomar dos valores: verdadero (true) o falso (false), es decir, solamente son binarios.
Sintaxis
bool <identificador>;
ejemplo
bool val = false;// declara val variable Booleana y la inicia
val = true; // ahora cambia su valor (nueva asignación)
true = 0; // Error!!
Identificadores
Cada variable, constante e incluso algún proceso requieren un nombre que le identifica, y de ahí proviene la palabra "identificadores", por lo que puede decirse que un identificador es el nombre de cualquier variable, constante, procedimiento o programa. Un identificador es un conjunto de caracteres alfanuméricos de cualquier longitud que sirve para identificar las entidades del programa (clases, funciones, variables, tipos compuestos) Los identificadores pueden ser combinaciones de letras y números. La escritura de un identificador tiene reglas, las cuales deben aplicarse siempre en el momento de crear alguno de los elementos descritos. Por ejemplo, PrecioProducto, en donde se evita el uso del espacio, se puede usar (_) lo ideal es que sea claro el dato que va a contener.
Sintaxis
Las reglas para los identificadores son:
Los identificadores char, int, float, double y void están predefinidos, forman parte del lenguaje C. No obstante, en el código de un programa también pueden existir identificadores definidos por el programador. Por ejemplo, un programa puede utilizar variables y constantes definidas por el programador.
Reglas:
·         Consta de uno o más caracteres.
·         El primer carácter debe ser una letra o el carácter subrayado (_), mientras que, todos los demás pueden ser letras, dígitos o el carácter subrayado (_). Las letras pueden ser minúsculas o mayúsculas del alfabeto inglés. Así pues, no está permitido el uso de las letras 'ñ' y 'Ñ'.
·         No pueden exitir dos identificadores iguales, es decir, dos elementos de un programa no pueden nombrarse de la misma forma. Lo cual no quiere decir que un identificador no pueda aparecer más de una vez en un programa.
·         De la segunda regla se deduce que un identificador no puede contener caracteres especiales, salvo el carácter subrayado (_). Es importante resaltar que las vocales no pueden llevar tilde ni diéresis.
Ejemplos validos de identificadores definidos por el usuario
numero
dia_de_semana
PINGUINO1
_ciudad
z
Operadores aritméticos
Los operadores aritméticos son aquellos que "manipulan" datos numéricos, tanto enteros como reales. Hay 2 tipos de operadores aritméticos: unarios y binarios. Los operadores unarios se anteponen a la expresión aritmética, y son los operadores de signo. Los operadores binarios se sitúan entre 2 expresiones aritméticas.
Estos son, suma (+), resta (-), división (/), multiplicación (*), división entera (div), modulo (mod) se refiere a lo que resta, el resto, residuo.
En un programa, el tipo de un dato determina las operaciones que se pueden realizar con él. Por ejemplo, con los datos de tipo entero se pueden realizar operaciones aritméticas, tales como la suma, la resta o la multiplicación.
Ejemplo 1: Algunos ejemplos son:
111 + 6 (operación suma)
19 - 72 (operación resta)
24 * 3 (operación multiplicación)
Todas las operaciones del ejemplo constan de dos operandos (constantes enteras) y un operador. La mayoría de las veces es así, pero, también es posible realizar operaciones con distinto número de operadores y/u operandos.
Ejemplo 2: Por ejemplo:
115 + 9 - 7 (tres operandos y dos operadores)
-( ( +20 ) + 64 ) (dos operandos y tres operadores)
-( -64 ) (un operando y dos operadores)
En las operaciones del ejemplo se puede observar que los caracteres más (+) y menos (-) tienen dos usos:

1. Operadores suma y resta.
2. Signos de un número (también son operadores).
Los operadores de signo más (+) y menos (-) son operadores monarios, también llamados unarios, ya que, actúan, solamente, sobre un operando.
Los caracteres abrir paréntesis "(" y cerrar paréntesis ")" se utilizan para establecer la prioridad de los operadores, es decir, para establecer el orden en el que los operadores actúan sobre los operandos.
Un operador indica el tipo de operación a realizar sobre los operandos (datos) que actúa. Los operandos pueden ser:
·         Constantes (expresadas por su valor o con un nombre (identificador)).
·         Variables.
·         Llamadas a funciones.
·         Elementos de formaciones (arrays).
En este apartado se van a tratar operaciones en donde sólo aparecen constantes y variables. Cuando se combinan uno o más operadores con uno o más operandos se obtiene una expresión. De modo que, una expresión es una secuencia de operandos y operadores escrita bajo unas reglas de sintaxis.
Operadores relacionales
Los operadores relacionales son símbolos que se usan para comparar dos valores. Si el resultado de la comparación es correcto la expresión considerada es verdadera, en caso contrario es falsa.  Mayor que > , Menor que <, Mayor o igual >=, Menor o igual <=, Igual a ==, ≈= no es igual.
Expresión
Resultado
Ejemplo código
A == B
0 (falso)
printf ("A == B vale %d\n", (A == B) );
A != B
1 (verdadero)
printf ("A != B vale %d\n", (A != B) );
A > B
0 (falso)
printf ("A > B vale %d\n", (A > B) );
A >= B
0 (falso)
printf ("A >= B vale %d\n", (A >= B) );
A < B
1 (verdadero)
printf ("A < B vale %d\n", (A < B) );
A <= B
1 (verdadero)
printf ("A <= B vale %d\n", (A <= B) );
Operadores Lógicos
Este tipo de operadores permite obtener solo dos resultados, por lo que se conocen también como booleanos, porque hacen uso de los principios del álgebra de Boole. los resultados siempre serán son verdadero o falso.
Algunos conectivos lógicos tienen propiedades que se pueden expresar en teoremas que contienen el conectivo. Algunas de estas propiedades que una conectiva lógica puede tener son:
Asociatividad: En una expresión que contiene dos o más del mismo conectivo asociativo en una línea, el orden de las operaciones, no importa, siempre y cuando la secuencia de los operandos no cambia.
Conmutatividad: Los operandos del conectivo pueden ser intercambiados (uno por el otro), mientras que la preservación de equivalencia lógica de la expresión original.
Distributivita: Un conectivo denotado por · distribuye sobre otra que conecta denotado por el signo +, · si a · (b + c) = (a · b) + (a · c) para todos los operandos a, b, c.
Idempotencia: Cuando los operandos de una operación son iguales, el compuesto es lógicamente equivalente al operando.
Absorción: Un par de conectivos and, or satisface la ley de absorción si a and (a or b) = a para todos los operandos a, b.
Afinidad: Cada variable siempre hace una diferencia en el valor de verdad de la operación o nunca hace una diferencia.
Dualidad: Para leer las asignaciones de valores de verdad para la operación desde arriba hacia abajo en su tabla de verdad es lo mismo que tomar el complemento de lectura de la tabla de la misma u otra conectiva desde abajo hacia arriba.
Preservación de la verdad: El compuesto todos los argumentos son tautologías es una tautología en sí.
Falsedad de preservación: El compuesto de todos los argumentos son contradicciones es una contradicción en sí.
Involutividad (para conectivos unarios): f(f(a)) = a. Por ejemplo, negación en la lógica clásica.
Sintaxis
expr-AND-logica && expresion-OR-inclusive
expr-OR-logica || expresion-AND-logica
! expresion-cast
Palabra clave
Símbolo
Descripción
and
&&
Operador Y lógico
or
/
Operador O lógico
not
!
Operador negación lógica
bitand
&
Operador AND entre bits
xor
^
Operador OR exclusivo entre bits
bitor
/
Operador OR inclusivo entre bits
compl
~
Operador complemento a uno de bits
and_eq
&=
Asignación compuesta (AND entre bits)
xor_eq
^=
Asignación compuesta (XOR entre bits)
or_eq
=
Asignación compuesta (OR entre bits)
not_eq
!=
Operador relacional de desigualdad

Los operadores lógicos básicos en C son los siguientes
:
Operador
Significado
Operador &&
Operador lógico and
Operador ||
Operador lógico or
Operador !
Operador lógico not

Arreglos
Los arreglos son los equivalentes en programación de las matrices y vectores de las matemáticas.
Un arreglo puede definirse como un grupo o una colección finita, homogénea y ordenada de elementos. Los arreglos pueden ser de los siguientes tipos:
·         De una dimensión.
·         De dos dimensiones.
·         De tres o más dimensiones.
Arreglos unidimensionales
Es un tipo de datos estructurado que está formado de una colección finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. Están formados por un conjunto de elementos de un mismo tipo de datos que se almacenan bajo un mismo nombre, y se diferencian por la posición que tiene cada elemento dentro del arreglo de datos. Al declarar un arreglo, se debe inicializar sus elementos antes de utilizarlos. Para declarar un arreglo tiene que indicar su tipo, un nombre único y la cantidad de elementos que va a contener.
Arreglos multidimensionales
Es un tipo de dato estructurado, que está compuesto por dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n índices, uno para cada dimensión. El término dimensión representa el número de índices utilizados para referirse a un elemento particular en el arreglo. Los arreglos de más de una dimensión se llaman arreglos multidimensionales.
Arreglos con múltiples subíndices
Es la representación de tablas de valores, consistiendo de información arreglada en renglones y columnas. Para identificar un elemento particular de la tabla, deberemos de especificar dos subíndices; el primero identifica el renglón del elemento y el segundo identifica la columna del elemento. A los arreglos que requieren dos subíndices para identificar un elemento en particular se conocen como arreglo de doble subíndice. Note que los arreglos de múltiples subíndices pueden tener más de dos subíndices. El estándar ANSI indica que un sistema ANSI C debe soportar por lo menos 12 subíndices de arreglo.
Un arreglo se caracteriza por:

1. Almacenar los elementos del arreglo en posiciones de memoria continua. Estos elementos deben ser homogéneos al mismo tipo de dato.
2. Tener un único nombre de variable que representa a todos los elementos, y éstos a su vez se diferencian por un índice o subíndice.
3. Acceso directo o aleatorio a los elementos individuales del arreglo.
Sintaxis
tipo_de_dato nombre_del_vector[tamanio];
Ejemplo:
int vector  [10]; es la manera de interpretar un arreglo de 10 enteros. Vector [0]… vector [9].
int my_vector1[10]; arreglo de 10 enteros
float my_vector2[25]; arreglo de 25 números reales con decimal simple
string my_vector3[500]; cadena de caracteres alfanumérico
bool my_vector4[1000]; Cuando asigna la matriz bool, sus valores se rellenan con False.
char my_vector5[2]; caracteres alfanuméricos.
Funciones
Es una parte de un programa (subrutina) con un nombre, que puede ser invocada (llamada a ejecución) desde otras partes tantas veces como se desee. Un bloque de código que puede ser ejecutado como una unidad funcional.
Las funciones son un elemento muy utilizado en la programación. Empaquetan y ‘aíslan’ del resto del programa, una parte de código que realiza alguna tarea específica. Son por tanto un conjunto de instrucciones que ejecutan una tarea explícita y que hemos encapsulado en un formato estándar para que sea más sencillo de manipular y reutilizar.
Las funciones permiten crear programas o scripts mejor estructurados y más claros, evitando duplicaciones innecesarias y facilitando su mantenimiento. En el ejemplo anterior, las instrucciones para calcular el PVP se escriben solo una vez dentro de la función y no repetidas y repartidas por todo el programa. Si hay una modificación en el IVA por un cambio en la norma fiscal, solo tenemos que modificarlo en la función, y en ese momento, todos los precios se calcularan con el nuevo impuesto.

Sintaxis
Un prototipo es una declaración de una función. Consiste en una presentación de la función, exactamente con la misma estructura que la definición, pero sin cuerpo y terminada con un ";".
tipo nombreFuncion([tipo nombreArgumento,[tipo nombreArgumento]...])
{
/*
* Bloque de instrucciones
*/
return valor;
}
La sintaxis de una definición de función es:
[extern|static]<tipo_valor_retorno>[<modificadores>]<identificador>(<lista_parámetros>)
{ [<sentencias>]}
Ejemplo
int funcionEntera()//Función sin parámetros
{ int suma = 5+5;
return suma; //Acá termina la ejecución de la función
return 5+5;//Este return nunca se ejecutará
//Intenta intercambiar la línea 3 con la 5
int x = 10; //Esta línea nunca se ejecutará
}

Ejemplos en C
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
    int h=0, m=0, t=0,b=0; /*enteros
    float vel=0, kph=0, k=0, d=0;  /*números reales
    char init[5];   /* caracteres  /*uso de arreglos  
    do{    /*Identificadores
       printf("°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°\n\n"); /*identificadores
       printf("°Bienvenido Mtro. S U L P °\n\n");
       printf("°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°=°\n\n");
       printf("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n");
       printf("°                                                 °\n");
       printf("\2    Sistema de cálculo de distancias y tiempos   \2\n");
       printf("°                   Personalizada                 °\n");
       printf("°                                                 °\n");
       printf("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n\n");
       printf("Ingrese la cantidad en horas recorridas:\n\n");
       scanf("%i", &h);
       fflush(stdin);
       printf("Ingrese la cantidad en minutos recorridos:\n\n");
       scanf("%i", &m);
       fflush(stdin);
       printf("Ingrese la cantidad en Kilometros Recorridos:\n\n");
       scanf("%f", &k);
       fflush(stdin);
       printf("Ingrese sus iniciales para su registro:\n\n");
       scanf("%s", &init);
      
  t=(h*60*60)+(m*60);
       d=(k*1000);  /*operadores
       vel= (d/t);
       kph=((vel*60)*60)/1000;
       printf("° Distancia total: %.0f metros recorridos °\n\n", d);
       printf("° Tiempo en Segundos totales:  %i segundos ° \n\n", t);
       printf("° La velocidad promedio alcanzada en metros es: %.2f metros/seg^2 °\n\n", vel);
       printf("° La velocidad promedio alcanzada en Kilometros es: %.2f Km/h ° \n\n", kph);
       printf("° Las iniciales del corredor en cuestion son : %s ° \n\n", init);
     printf("\n° Desea usted hacer otro calculo? °\n\n1=SI\n\n2=Salir del programa\n");
scanf("%d", &b);
fflush(stdin);
system("cls");
}while(b==1);  /* relacionales /* lógicos
return 0;
         }

Banderas (flag)
Una bandera o “flag” hace referencia generalmente a variables de tipo de dato BOOL, o sea datos que solo pueden admitir dos tipos de estados (verdadero o falso). Simplemente se conoce como banderas a las variables cuya finalidad es para marcar que cierto hecho haya ocurrido o no.

    int miBandera = 0;
    int numero;
    while(miBandera  == 0){
    printf("Digite un numero, si el numero es mayor a 10 este programa acaba: ");
     scanf("%d", &numero);
      fflush(stdin);
      if(numero > 10)
      miBandera = 1;
               }
Esto permite “marcar” un evento encontrado con una bandera, para después solo ver el estado de dicha bandera para conocer el resultado.
if (bandera){
   /* ejecutamos esto si el valor de la bandera es verdadero */
}else {
   /* ejecutamos esto si el valor de la bandera es falso */
}
Función strlen
Esta función sirve para obtener longitud de “cuerda”. Devuelve la longitud de la cadena C str. La longitud de una cadena C está determinada por el carácter nulo de terminación: Una cadena C es tan larga como el número de caracteres entre el origen de la cadena y el carácter nulo de culminación (sin incluir el propio carácter nulo de terminación).
Esto no debe confundirse con la dimensión de la matriz que contiene la cadena. Por ejemplo:
char mystr [100] = "cadena de prueba";
Define una matriz de caracteres con un tamaño de 100 caracteres, pero la cadena C con la que se ha inicializado mystr tiene una longitud de solo 11 caracteres. Por lo tanto, mientras sizeof (mystr) se evalúa a 100, strlen (mystr) devuelve 11.
En C ++, char_traits :: length implementa el mismo comportamiento.
#include <stdio.h>
#include <string.h>
int main()
{
char s[13] = "Hola a todos";
printf( "s=%s\n", s );
printf( "strlen(s) = %d\n", strlen( s ) );
 return 0;
}


Bibliografía
Corona Nakamura, María Adriana. Ancona Valdez, Maria de los Angeles (2011). Diseño de algoritmos y su codificación en lenguaje C. Editorial McGraw-Hill/Interamericana. ISBN: 9786071505712. Capítulo 2
Luis Joyanes Aguilar 1998 Fundamentos de programación. Algoritmo y Estructura de Datos MCGRAW-HILL.
López Takeyas, Bruno. 2016 "Curso de programación orientada a objetos en C# . NET. Ejemplos con aplicaciones visuales y de consola". Editorial Alfaomega.
Ramírez, Felipe. 2007 "Aprenda practicando. Introducción a la Programación. Algoritmos y su implementación en VB.NET, C#, Java y C++". Editorial Alfaomega. México.
Bjarne Stroustrup, (29 de marzo de 1994) The Design and Evolution of C++, Addison-Wesley Pub Cp; Primera edición
Margaret A. Ellis y Bjarne Stroustrup, (1 de enero de 1990) The Annotated C++ Reference Manual, Addison-Wesley Pub Co;


No hay comentarios.:

Publicar un comentario