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