Objetivo: Implementar los tipos de datos básicos y las estructuras de control a través de un lenguaje de programación estructurado para el diseño eficaz de los programas en la resolución de diversos problemas.
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
ALP Unidad 2: Representación de la información en datos simples y estructuras de control
1. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 1
09/03/2022
Representación de la
información en datos simples
y estructuras de control
Unidad 2
Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo
para uso de los cursos de Algoritmos y Lógica de Programación
2. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 2
09/03/2022
Objetivo general de la Unidad 2
Implementar los tipos de datos básicos y las estructuras de
control a través de un lenguaje de programación
estructurado para el diseño eficaz de los programas en la
resolución de diversos problemas.
3. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 3
09/03/2022
Contenido
• Tipos de datos (entero, real, carácter, etc.)
• Definición y ámbito de variables. Constantes
• Operadores: relacionales, aritméticos y lógicos
• Expresiones y operaciones sobre tipos de datos
• Conversiones de tipo de dato
• Estructuras de control: secuencias, decisiones y
ciclos
4. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 4
09/03/2022
Tipos de Datos Básicos
• Si nos detenemos a analizar los datos de entrada y de salida
podremos observar que se requieren números (base, altura,
área) y letras (mensajes).
• El computador puede manejar datos de diferente tipo, teniendo
cada uno, una representación interna basada en la cantidad de
bytes (8 bits) que ellos ocupan en memoria (RAM) y el orden
en el cual se colocan los bits.
• Usualmente la cantidad de bytes de un tipo de dato depende
del hardware del computador.
• Los tipos de datos básicos son:
– Numéricos
– Caracteres
– Lógicos
• Cada tipo de dato tiene dos características que lo definen:
– Dominio, corresponde al rango de valores que el tipo de dato puede
tomar.
– Conjunto de operaciones que se pueden realizar sobre el tipo de
dato
5. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 5
09/03/2022
Datos Numéricos
• La base y la altura corresponden a datos numéricos.
• La computadora no tiene espacio para representar todos
los números existentes, pues son infinitos. Dependiendo
del hardware, podrán representar solo un subconjunto
de estos números (Dominio).
• Los datos numéricos pueden ser de dos tipos:
– Enteros → integer, int
• Números completos, que no tienen componentes fraccionarios
• Pueden ser con o sin signo
• Algunas computadoras pueden representar cantidades enteras
desde –32768 a +32767
– Reales → real, float, double
• Siempre tienen un punto decimal
• Pueden ser positivos o negativos
6. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 6
09/03/2022
Cadenas y Caracteres
• Los caracteres, representan las teclas del teclado, y
forman un conjunto finito.
• Cada tecla en el teclado, tiene una representación
numérica, de esta forma la computadora entiende lo
que tecleamos. Ella recibe el “número” y lo traduce
luego a la representación correspondiente.
• Las correspondencias código numérico – carácter, se
conocen como estándares, existen varios, el mas
usado es el ASCII
• El ASCII define 127 caracteres, con sus
correspondientes códigos, la letra A, por ejemplo,
tiene el código 65 (un entero), y así.
7. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 7
09/03/2022
Cadenas y Caracteres
• Para poder distinguir los datos de tipo caracter (char),
estos se encierran en comillas simples.
• Los datos de tipo carácter se pueden clasificar en:
– Alfabéticos (‘a’, ’b’, ’c’, ’z’, ... , ’A’, ’B’, ’C’, ...., ’Z’)
– Numéricos (‘0’, ’1’, ’2’, ’3’,...,’9’)
– Especiales (‘+’, ’-’, ’;’, ’-’, ’:’, ’&’, ’$’...)
• Las cadenas (string), entonces, son un conjunto de
caracteres. Para poderlas distinguir, usualmente se las
encierra en comillas dobles.
– Ejemplo: “Es un rectángulo”, “Es un cuadrado”
8. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 8
09/03/2022
Datos Lógicos
• En el procesamiento, para conocer si el polígono es un
cuadrado o un rectángulo, se deberá verificar si la base
es igual en magnitud a la altura.
• Existen datos que solo pueden ser Falsos o Verdaderos.
Por Ejemplo:
– ¿La base y la altura son iguales?
– ¿Es rectángulo?
– ¿Es cuadrado?
• A este tipo de datos, se los conoce como datos
booleanos o lógicos → Boolean
• Usualmente se utilizan para representar las alternativas
(verdadero/falso) a ciertas condiciones.
9. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 9
09/03/2022
Contenido
• Tipos de datos (entero, real, carácter, etc.)
• Definición y ámbito de variables. Constantes
• Operadores: relacionales, aritméticos y lógicos
• Expresiones y operaciones sobre tipos de datos
• Conversiones de tipo de dato
• Estructuras de control: secuencias, decisiones y
ciclos
10. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 10
09/03/2022
Constantes y Variables
Calcular el área de un círculo cuyo radio es r
• La fórmula del área es A = * r2
– ¿Cuánto vale A, si r es 9?
– ¿Cuánto vale A, si el valor de r varia a 2?
• ¿Que valor de esta fórmula tan sencilla nunca
va a cambiar?
• ¿Que valores dentro de la fórmula, siempre
estarán sujetos a cambios?
11. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 11
09/03/2022
Constantes
• Dentro de un cálculo o en los pasos para
solucionar un problema, existirán valores que
nunca van a cambiar y se los conoce como
constantes.
– Por ejemplo: Pi es una constante.
• Las constantes pueden ser datos de todo tipo.
12. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 12
09/03/2022
Variables
• El valor del radio, y el valor del Área, siempre podrán
cambiar, son variables.
• Una variable es un dato cuyo valor puede cambiar
durante un cálculo, o en la resolución de un problema.
Por Ejemplo:
– El lado para calcular el perímetro del cuadrado
– Para registrarse, un alumno debe dar su número de
matrícula, el código de la materia, y el paralelo.
• Pueden existir variables de cualquiera de los tipos
mencionados.
• En computación, una variable es un espacio en memoria,
donde se almacena un dato, y este puede variar durante
un proceso dado.
13. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 13
09/03/2022
Variables
• Para poder trabajar con variables hay que seguir ciertas
reglas:
– A una variable se le debe dar un nombre, o
identificador.
– El nombre de una variable:
• Sólo puede comenzar con letras o con el carácter _
• Puede contener letras, números y el carácter _ , y
no caracteres especiales (‘&’, ‘%’, ‘?’, etc)
• En ciertos lenguajes de programación, se hace
distinción entre mayúsculas y minúsculas.
– Por ejemplo: en lenguaje C la variable Lado no
es la misma que lado.
14. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 14
09/03/2022
Ejemplos de Nombres de Variables
• Incorrecto:
– 1_lado: Una variable no puede empezar con un
número.
– total$: Una variable no puede incluir caracteres
especiales
– Código de materia: una variable no puede incluir
espacios en blanco ni tildes.
• Correcto: lado, codigo_materia, nota1
• Los nombres de variables deben ser
significativos y tener relación con el proceso en
el que están participando.
15. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 15
09/03/2022
Ámbito de variables
Ambito: Área del programa
en la cual la variable es
valida (existe).
Caja
negra
Global: Valida en todo el programa.
Local: Su ámbito es limitado al bloque en
el cual se declaro y no puede ser accedida
fuera de dicho bloque.
Sección de
código
encerrada entre
llaves ({})
#include <stdio.h>
#include <stdlib.h>
int a, b = 1, c = 2;
int main() {
int d = 3, e = 3;
{
int f = 8;
int g = 9;
}
return 0;
}
Variables globales: a,
b, c
Variables locales: d, e,
f, g
f , g,
d, e,
a, b,
c
d, e,
a, b,
c
a, b,
c
Bloque
1
Bloque
2
16. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 16
09/03/2022
Ámbito de variables
• Los parámetros y variables, dentro de una función,
– Son variables con ámbito local
– Solo son validas en ese ambiente,
• Las variables también pueden tener un ámbito “global”
– Empiezan a existir desde su declaración, y
– Son liberadas con el alcance de un archivo: variables
externas
• Para darle privacidad a una variable
– Para que no pueda ser vista por otros archivos,
– Se la declara static, con ámbito global para archivo
únicamente
17. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 17
09/03/2022
Ocultamiento de variables
Ocultamiento de variables: Se da cuando se declara una variable con el mismo
nombre de una variable global (o de otra local con un ámbito mayor). Básicamente lo
que sucede es que el valor del ámbito mas interno prima sobre el valor del ámbito mas
externo.
#include <stdio.h>
#include <stdlib.h>
int a, b = 1;
int main() {
int a = 3;
printf("a: %dn",a);
printf("b: %dn",b);
b++;
{
int a = 10,b = -8, c = 2;
b++;
printf("a: %dn",a);
printf("b: %dn",b);
printf("c: %dn",c);
a+=8;
}
printf("a: %dn",a);
printf("b: %dn",b);
return 0;
}
Ocultamiento de la
variable global a.
Ocultamiento de
las variables
locales a y b.
18. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 18
09/03/2022
Contenido
• Tipos de datos (entero, real, carácter, etc.)
• Definición y ámbito de variables. Constantes
• Operadores: relacionales, aritméticos y lógicos
• Expresiones y operaciones sobre tipos de datos
• Conversiones de tipo de dato
• Estructuras de control: secuencias, decisiones y
ciclos
19. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 19
09/03/2022
Operador de Asignación
• Para que una variable pueda cambiar de valor,
debemos asignarle dicho valor.
• Para realizar esto, utilizamos el operador de
asignación(=)
• El formato general para cambiar el valor de una
variable es:
– Nombre de la variable = expresión
– A = 4
20. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 20
09/03/2022
• La asignación se efectúa de derecha a izquierda.
• Cualquier valor que haya tenido la variable antes de la
asignación, se pierde, es sobrescrito con el nuevo valor.
– A = 5
– A = A*5
• La computadora ejecuta la asignación de dos formas:
– Si hay operaciones del lado derecho, las efectúa, y calcula el
resultado, luego
– Asigna el resultado a la variable
En lenguaje C, el operador de asignación se puede usar para
cambiar el valor de variables de cualquier tipo, menos cadenas de
caracteres.
Operador de Asignación
21. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 21
09/03/2022
Operadores aritméticos
• Con los datos numéricos se pueden efectuar operaciones
matemáticas, a través de los operadores aritméticos:
Operador Significado Tipos de
operandos
Ejemplo Tipo de resultado Ejemplo
+ Suma Entero o real 4+2
4.35+ 2
4.35 + 2.5
Entero o real 6
6.35
6.85
- Resta Entero o real 4-2
4.35- 2
4.35 - 2.5
Entero o real 2
2.35
1.85
Div División entera Entero 10 div 6 Entero 1
Mod (%) Modulo Entero 10 mod 6 Entero 4
* Multiplicación Entero o real 4*2
4.35* 2
4.35 * 2.5
Entero o real 8
8.7
10.875
/ División Real 4.00/2.00
4.35/ 2.5
Real 2.00
1.74
^ Potenciación Entero o real 4^2
4.5 ^ 2
4.5 ^ 0.5
Entero o real 16
20.25
2.121
Precedencia
22. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 22
09/03/2022
Operadores Lógicos
• Con los datos lógicos se pueden efectuar
operaciones lógicas.
Operador Significado Ejemplo Tipo de
resultado
Resultado
No(not) Negación de un valor No(6>10) Entero o real Verdadero
Y(and) Conjunción (1<5) y
(5>10)
Ecuador
clasificó y
Colombia no
clasificó
Entero o real Falso
Verdadero
O (or) Disyunción (5>10) o
(10<9)
Entero o real Falso
23. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 23
09/03/2022
Operadores Relacionales
◼ Las operaciones relacionales, se pueden aplicar sobre cualquier dato, pero
siempre dan como resultado datos lógicos
Operador Significado Ejemplo Resultado
< Menor que El número de paralelos de Fundamentos es
menor que el número de paralelos de Cálculo I
Verdadero
> Mayor que 8>10 Falso
== Igual que 9 == 15 Falso
>= Mayor o
igual que
10 >= 10 Verdadero
<= Menor o
igual que
8 <= 10 Falso
!= Diferente de 5 <> 5
El precio de una entrada en el Supercine es
diferente de el de las entradas en el Cinemark
Falso
Verdadero
24. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 24
09/03/2022
Las Enumeraciones en las
Computadoras
• Para los computadores diferentes tipos de
datos se representan de diferentes formas
• Entonces diferentes datos pueden ser
representados de diferentes forma
• El proceso de listar todos los elementos en el
dominio de un tipo se denomina enumeración
• Para comprender mejor el concepto
trataremos de la representación de la
enumeración por la máquina
25. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 25
09/03/2022
Representación Interna de las
Enumeraciones
• En un computador los datos son
representados en forma numérica, puesto
que todas las operaciones son hechas con
números.
• Así un entero para cada elemento de la
lista de datos es asignado.
• A este proceso se le llama Codificación en
entero
26. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 26
09/03/2022
• En C la enumeración se la puede proveer fácilmente
mediante la sentencia #define la cual definía una
constante. Ej:
#define Domingo 0
#define Lunes 1
#define Martes 2
#define Miércoles 3
#define Jueves 4
#define Viernes 5
#define Sábado 6
Aquí se asigna un entero por cada día de la semana
Tipos de Datos Enumerados
27. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 27
09/03/2022
Tipos de Datos Enumerados:
Declaración
• En C se provee una sintaxis para declarar
un tipo de datos enumerados, de tal forma
que no es necesario colocar el valor
entero para cada elemento
• La sintaxis del tipo de dato enumerado es
la siguiente
28. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 28
09/03/2022
Tipos de Datos Enumerados: Sintaxis
Typedef enum {
lista de elementos
} nombre_del_tipo;
• Donde:
– La Lista de elementos es el conjunto de nombres a ser
representados, separados por comas
– El nombre del tipo identifica al nuevo tipo enumerado
29. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 29
09/03/2022
Ejemplo
Typedef enum{
Domingo, Lunes, Martes, Miércoles, Jueves, Viernes, Sábado
} diaSemanaT;
• Aquí se define un nuevo tipo llamado diaSemanaT
• Este tipo de dato contiene los 7 valores definidos con
#define
30. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 30
09/03/2022
Tipos de Datos Enumerados
• Al definir un tipo enumerado, el compilador asigna
automáticamente los valores comenzando desde el 0 en
adelante
• Si se desea definir el inicio de la enumeración, se lo
debe hacer explícitamente en el inicio de la lista de
valores. Ejemplo:
Typedef enum {
Soltero =1,
Casado =2,
Separado= 3,
}estadoCivilT;
Typedef enum {
Soltero =1,
Casado ,
Separado,
}estadoCivilT;
Las dos formas de definición representan lo mismo.
31. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 31
09/03/2022
Tipos de Datos Enumerados:
Operaciones
• El compilador de C convierte de manera
automática los valores del tipo enumerado en
valores enteros, por lo cual se pueden
realizar las mismas operaciones que se
realizan con los enteros
• Pero se debe tener cuidado con las
operaciones de asignación o de cambio de
valor, puesto que puede caer en un valor no
válido para el tipo de dato enumerado
32. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 32
09/03/2022
Tipos Escalares de Datos
• Tipos de datos tales como los
enumerados, que se comportan como
enteros son denominados como
escalares.
• Estos tipos de datos son automáticamente
convertidos a enteros siempre que lo use
en una expresión
• Ejemplo: Una variable de tipo enumerado
que puede ser usado en un bloque switch
33. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 33
09/03/2022
Ejemplo
Typedef enum {Norte, Este, Sur, Oeste} direccionT;
direccionT DireccionOpuesta (direccionT dir)
{
switch (dir){
case Norte : return (Sur);
case Este : return (Oeste);
case Sur : return (Norte);
case Oeste : return (Este);
}
}
Así si llamamos a la función con: DirecciónOpuesta(Norte),
retornará el valor de Sur
34. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 34
09/03/2022
Caracteres
• Son la parte básica para todo proceso de
datos
• Es la parte atómica de otros tipos de datos
como los Strings
• Son un tipo de dato escalar y por eso son
parte también del tipo enumerado
35. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 35
09/03/2022
Caracteres: Tipo de Dato char
• Representa un simple carácter.
• El dominio del tipo de datos char es el
conjunto de símbolos que pueden ser
presentados en pantalla o tipeados por
teclado.
• Internamente de la máquina cada carácter se
representa como un tipo enumerado usando
el código ASCII (código estándar americano
para el intercambio de información).
36. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 36
09/03/2022
El código ASCII
• Todo carácter está representado
internamente por la máquina como
cualquier tipo escalar
• El código usado es el código de
caracteres
• Este código podría ser asignado de forma
independiente, pero debido a la
interactividad con otras máquinas se usa
un estándar, el código ASCII
37. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 37
09/03/2022
Propiedades importantes del código
ASCII
• Los códigos para los caracteres que
representan dígitos del 0 al 9 son
consecutivos
• Las letras en el alfabeto están divididos en
dos rangos: uno para las mayúsculas (A-
Z) y otro para las minúsculas (a-z). Sin
embargo dentro de cada rango los valores
ASCII son consecutivos.
38. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 38
09/03/2022
Constantes de Tipo Caracter
• Es un estándar para referirse a un carácter
específico en C
• Así para referirse a el código ASCII de la letra A,
se especifica mediante ‘A’, el cual es el 65
• Para referirse al código del carácter 9, de forma
similar, ‘9’
• Se debe tener cuidado que al referirse al carácter,
no es lo mismo que referirse al valor entero
• De tal forma que se puede trabajar tanto con los
caracteres como su código ASCII
39. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 39
09/03/2022
Caracteres Especiales
• Son aquellos caracteres representados
por el código ASCII que no se pueden
imprimir.
• Estos tipos de caracteres usan la
combinación de más un carácter
• Se denominan Secuencias de Escape
• A continuación se detalla la tabla de estos
caracteres.
40. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 40
09/03/2022
Secuencias de Escape
a Alerta de Sonido
b BackSpace
f Nueva página
n Nueva línea
r Retorno de linea
t Tabulación horizontal
v Tabulación vertical
0 Carácter nulo
El carácter
’ El caracter ‘
” El carácter “
ddd
El carácter que representa el código ASCII para el número
octal ddd
41. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 41
09/03/2022
Aritmética de Caracteres
• En C los caracteres pueden ser
manipulados como si fueran enteros, sin
requerir conversiones especiales
• Esto se da debido a que son
representados en un valor ASCII
manejado como entero
• Se debe tener cuidado al querer asignar
un valor entero a un carácter, pues puede
no corresponder al rango del código ASCII
42. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 42
09/03/2022
Caracteres: Operaciones
• Sumar un entero a un carácter
• Restando un entero de un caracter
• Restando un caracter de otro
• Comparando dos caracteres entre sí
• Se debe tomar en cuenta que al sumar o
restar no se salga del rango de
representación ASCII
43. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 43
09/03/2022
Ejemplos
• char RandomLetra(void)
{
return (RandomInteger(‘A’, ‘Z’));
}
• if (ch >= ‘0’ && ch <=‘9’)
• if (ch >= ‘A’ && ch <=‘Z’)
• if (ch >= ‘a’ && ch <=‘z’)
44. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 44
09/03/2022
La interfaz ctype.h
• Contiene un gran número de funciones para
determinar el tipo de carácter, entre las
principales tenemos:
• islower(ch) retorna TRUE si el carácter ch es minúscula
• isupper(ch) retorna TRUE si el carácter ch es mayúscula
• isalpha(ch) retorna TRUE si ch es un valor alfabético
• isdigit(ch) retorna TRUE si ch es un dígito
• isalnum(ch) retorna TRUE si ch es un valor alfanumérico
• ispunct(ch) retorna TRUE si ch es un símbolo de puntuación
• isspace(ch) retorna TRUE si ch es un carácter en blanco
45. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 45
09/03/2022
La interface ctype.h
• Funciones de conversión de caracteres
– tolower(ch) Si ch es una letra mayúscula, retorna su equivalente
en minúscula
– toupper(ch) Si ch es una letra minúscula, retorna su equivalente
en mayúscula
• La implementación de la función tolower es:
char tolower(char ch)
{
if (ch>=‘A’ && ch<=‘Z’){
return (ch + (‘a’ – ‘A’));
} else {
return (ch);
}
}
46. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 46
09/03/2022
Sentencias de Control que Involucran
Caracteres
• Se puede implementar este tipo de
sentencias debido a que todo caracter es
de tipo escalar
• Se pueden incluir en Sentencias For y
Switch.
• Ej. :
for (ch = ‘A’; ch<=‘Z’; ch++)
47. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 47
09/03/2022
Ejemplo
Bool EsVocal(char ch)
{
switch(tolower(ch)){
case ‘a’: case ‘e’ : case ‘i’ : case ‘o’ : case ‘u’ : return
(TRUE);
default : return (FALSE);
}
}
• Este ejemplo identifica si ch es una vocal
48. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 48
09/03/2022
Entrada y salida de Caracteres
• Existen funciones para la entrada y salida
de caracteres
• Para ingresar caracteres existen las
funciones getchar y putchar de la librería
estandard de I/O, las que se tratarán más
adelante
• Para mostrar caracteres se usa la función
printf con el formato %c
49. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 49
09/03/2022
Ejemplo Entrada/Salida caracter
main()
{
char ch;
printf (“Las vocales son:”);
for (ch= ‘A’; ch<= ‘Z’; ch++){
if (EsVocal(ch)) printf (“%c”, ch);
}
printf(“n”);
}
50. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 50
09/03/2022
Contenido
• Tipos de datos (entero, real, carácter, etc.)
• Definición y ámbito de variables. Constantes
• Operadores: relacionales, aritméticos y lógicos
• Expresiones y operaciones sobre tipos de datos
• Conversiones de tipo de dato
• Estructuras de control: secuencias, decisiones y
ciclos
51. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 51
09/03/2022
Operaciones con Cadenas y
Caracteres
• Con los caracteres se pueden aplicar las mismas
funciones que sobre los números enteros, debido
a que en la computadora cada carácter tiene su
código numérico correspondiente.
• Ejemplo:
– ‘A’ + 2 = ‘C’
– ‘E’ – 1 = ‘D’
• En lenguaje C, sobre las cadenas, se pueden
efectuar operaciones, a través de “funciones”,
más no de operadores. Veremos mas adelante
dicha sintaxis.
52. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 52
09/03/2022
Operaciones Relacionales
• En la computadora se debe tener mucho cuidado con el uso
de operadores relacionales y datos reales, pues los datos
reales no se pueden almacenar con toda la precisión que
quisiéramos y las comparaciones dan resultados
inesperados).
En el lenguaje de programación que veremos más
adelante, los operadores relacionales no se podrán
aplicar sobre las cadenas de caracteres.
53. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 53
09/03/2022
Expresiones
• Una vez que conocemos todos los operadores,
variables, tipos de datos, podemos construir
expresiones.
• Son combinaciones de constantes, variables,
operadores, paréntesis y quizás nombres de funciones
especiales, por ejemplo:
)
/
/(
)
( a
w
u
y
x +
+
2
)^
1
2
(
2
)^
1
2
( y
y
x
x −
+
−
◼ El evaluar la expresión consiste en: Reemplazar las
variables por valores y luego obtener su resultado.
54. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 54
09/03/2022
Expresiones Predefinidas y
Paradigmas de Programación
• En la programación existen ciertas tareas comúnmente
repetidas. Por ejemplo: solicitar el ingreso de datos,
mostrar mensajes, mostrar resultados.
• A estos patrones se los conoce como expresiones
predefinidas.
• En el programa que suma dos números, como parte de
la fase de entrada se solicitaba al usuario ingresar los
números.
• En cada ocasión el programa solicitaba la entrada
realizando las siguientes tareas:
– Mostrar en pantalla un mensaje solicitando el número.
– Leer el número desde el teclado.
• Estas tareas representan una expresión predefinida.
55. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 55
09/03/2022
• La expresión predefinida – lectura de un entero –
tiene la forma:
Write (“cadena”);
Read (variable);
En Pseudocódigo:
printf (“cadena”);
scanf(“%d”,&variable);
En C:
Expresiones Predefinidas y
Paradigmas de Programación
56. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 56
09/03/2022
• Las dos líneas anteriores (pseudocódigo y/o en C)
representan un ejemplo de un paradigma de
programación.
• El paradigma indica la estructura sintáctica de una
expresión predefinida.
• En el paradigma, las letras en rojo muestran las partes
que necesitan reemplazarse con algo de la categoría
indicada. Como ejemplo, considere el siguiente
reemplazo:
printf (“1er numero”);
scanf(“%d”,&a);
Write (“1er número”);
Read (a);
Expresiones Predefinidas y
Paradigmas de Programación
57. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 57
09/03/2022
Formas Comprimidas
• Algunos lenguajes, entre ellos C, proveen estructuras que permiten
que el programador escriba menos código.
• Estas características se emplea en las operaciones más comunes.
– Operaciones de asignación
– Operaciones de incremento/decremento
• Suponga que una variable balance contiene el balance bancario y
que Ud. desea realizar un depósito cuyo valor se encuentra en la
variable deposito.
• El nuevo balance estaría dado por la expresión
balance + deposito.
• Posiblemente Ud. escribiría una asignación como:
nuevo_balance = balance + deposito;
58. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 58
09/03/2022
Formas Comprimidas
• En la mayoría de los casos, Ud. no querrá utilizar una nueva
variable para almacenar el nuevo balance.
• Al realizar un depósito, cambia el balance bancario y por ello sería
más natural cambiar el valor almacenado en la variable balance.
• En lugar de almacenar el resultado en una nueva variable
nuevo_balance, sería más útil sumar el balance con el depósito y
luego almacenar este resultado en la variable balance, utilizando la
siguiente asignación:
balance = balance + deposito;
59. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 59
09/03/2022
Formas comprimidas en operaciones de
asignación
• Operaciones de asignación
– balance = balance + deposito;
– balance += deposito;
– salario = salario * 2;
– salario *= 2
• En general
– variable = variable op expresión
variable op = expresión
60. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 60
09/03/2022
Formas Comprimidas
• Operador Incremental ( ++ )
– Se emplea para aumentar en uno el valor de una
variable
• x = x+1
• x += 1
• x++
• Operador decremental ( -- )
– Se emplea para disminuir en uno el valor de una
variable
• x = x-1
• x -= 1
• x--
61. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 61
09/03/2022
Contenido
• Tipos de datos (entero, real, carácter, etc.)
• Definición y ámbito de variables. Constantes
• Operadores: relacionales, aritméticos y lógicos
• Expresiones y operaciones sobre tipos de datos
• Conversiones de tipo de dato
• Estructuras de control: secuencias, decisiones y
ciclos
62. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 62
09/03/2022
Conversión de Datos
• La conversión de datos se da cuando se asigna
a una variable un valor de un tipo diferente
• Hay dos formas de convertir datos:
– Automática(implícita)
• Se efectúa con la simple asignación.
• Por ejemplo:
Si n1 es una variable entera. Al realizar la
siguiente asignación:
n1 = 4.55
n1 se trunca, solo se le asigna 4.
63. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 63
09/03/2022
Conversión de Datos
– Explícita (cast)
• En C se efectúa a través del operador cast.
• Este operador se lo utiliza, anteponiendo al valor,
el tipo de dato entre paréntesis.
• Por ejemplo:
Si n1 es una variable entera. Al realizar la
siguiente asignación:
n1 = (int) 4.55;
n1 se trunca, solo se le asigna 4.
• De forma general:
variable = (tipo de dato) valor;
64. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 64
09/03/2022
Contenido
• Tipos de datos (entero, real, carácter, etc.)
• Definición y ámbito de variables. Constantes
• Operadores: relacionales, aritméticos y lógicos
• Expresiones y operaciones sobre tipos de datos
• Conversiones de tipo de dato
• Estructuras de control: secuencias, decisiones y
ciclos
65. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 65
09/03/2022
Sentencias
• Las instrucciones u órdenes que le damos al
computador también se conocen como sentencias.
• Algunas bien simples ya las hemos utilizado: asignar
expresiones, imprimir en pantalla, leer datos
ingresados por teclado.
• Existen otras sentencias más complejas, para ordenar
la repetición de otras o que ayudan a elegir que
sentencias ejecutar.
• Podemos concluir que las sentencias pueden
clasificarse en dos grandes grupos:
– Sentencias simples
– Sentencias de control
66. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 66
09/03/2022
Sentencias Simples
• Se utilizan para dar órdenes sencillas al computador:
– Leer un entero
Read(n1); scanf(“%d”,&n1);
– Asignar resultado de expresiones
total = n1 + n2; total = n1 + n2;
– Mostrar por pantalla
Write (“El total es “, total); printf (“El total es %d”, total);
• En C las sentencias son expresiones que terminan con un ;
• Hay sentencias que se pueden escribir, pero que no son muy útiles:
n1 + n2;
• Al ejecutarse la sentencia, el resultado de la expresión se pierde, no
es asignado.
67. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 67
09/03/2022
Asignaciones
• Las asignaciones, también expresiones, en las cuales interviene un
operador (=) y dos operandos.
• El operador = es, así como el +, -, etc, un operador binario.
• El resultado de la operación de asignación es el mismo valor que
se asigna al operando de la izquierda.
• Esta operación puede participar en una expresion, y ser evaluada:
El resultado de
esta expresión es
13
(x = 6) + (y = 7)
Las asignaciones escritas como parte de una expresión más larga se
conocen como asignaciones incrustadas.
Se trata de no utilizar esta forma de trabajar, pues hace los
programas difíciles de leer.
68. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 68
09/03/2022
Asignaciones
• El uso más popular y conveniente de las asignaciones
incrustadas es al efectuar una asignación múltiple.
En este tipo de asignaciones se debe tener mucho
cuidado con que las variables que intervienen sean del
mismo tipo, para evitar conversiones de entre tipos
int i;
double d;
d = i = 1.5 i = 1
d = 1.0
n1 = n2 = n3 = 0;
n1 = (n2 = (n3 = 0));
69. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 69
09/03/2022
Bloques
• Una secuencia de pasos que se siguen para resolver un problema,
forman una “unidad coherente”, o bloque de sentencias
• Un bloque de sentencias se encierra entre llaves
{
sentencia1;
sentencia2;
sentencia3;
}
Así, podemos ahora concluir que el grupo de sentencias del programa
principal, es un bloque.
Las sentencias dentro de una sentencia de control, se consideran también un
bloque.
C trata los bloques como una sola sentencia, por lo cual los bloques también
se conocen como sentencias compuestas.
Las sentencias dentro de
un bloque conservan un
margen con respecto a
las llaves que las limitan
70. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 70
09/03/2022
Sentencias de Control
• Las sentencias que afectan la forma como se ejecutan
otras sentencias, se conocen como sentencias de
control.
• Son de dos tipos:
– Condicionales
• Nos permiten decidir que camino seguir, en base
al resultado de una condición: if, select (if, switch)
– Repetitivas
• Nos permiten repetir un grupo de sentencias un
número específico de veces, o hasta que cierto
evento se de: for, while, repeat, do… while().
71. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 71
09/03/2022
• Una sentencia de control, consiste de dos partes:
– Línea de control
• Especifica la naturaleza de la repetición, o de la condición.
– Cuerpo
• Formado por las sentencias que serán afectadas por la línea
de control, conforman un bloque.
• En el caso de las sentencias condicionales, el cuerpo puede
estar dividido en dos partes.
• Las sentencias que forman parte del cuerpo pueden ser
simples, o de control, en cuyo caso se habla de sentencias
anidadas.
Sentencias de Control
72. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 72
09/03/2022
Sentencias Condicionales: IF
• El resultado de una expresión que establece una condición es
TRUE o FALSE.
• Para construir expresiones condicionales, se utilizan los
operadores lógicos y los relacionales.
• Siempre es conveniente tener en cuenta lo siguiente:
– No confundir el operador de asignación = , con el operador de
equivalencia ==.
If(x = 0) …
If(x == 0) …
Los operadores relacionales sólo pueden ser usados para comparar tipos de
datos atómicos (que no están compuestos de otros tipos de datos). No pueden
ser utilizados para comparar cadenas.
Esta es la operación de
asignación, asigna 0 a x,
no compara.
Esta es la operación
relacional, pregunta
si x es igual a 0.
73. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 73
09/03/2022
– Debemos tener mucho cuidado al interpretar las
condiciones, recordando siempre las Leyes de Morgan:
• Si x no es igual a 2 ni a 3
if (x!=2 && x!=3) ...
Otro error común se da al trasladar expresiones
relacionales matemáticas:
0 < x < 10 if ( 0 < x && x < 10) ...
Sentencias Condicionales: IF
74. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 74
09/03/2022
Evaluando Condiciones
• En lenguaje C, las expresiones que usan && y || se
evalúan de la siguiente forma:
Las subexpresiones son evaluadas de izquierda a derecha
La evaluación termina una vez que el resultado pueda ser
determinado
Si exp1 es falso en el caso a), entonces toda la expresión es falsa, y
allí termina la evaluación.
Si exp1 es verdadera en el caso b), entonces toda la expresión es
verdadera.
Se desea crear una condición para saber si y es divisible para x,
pero revisando que x no sea cero.
a) exp1 && exp2 b) exp1 || exp2
if ((x!=0) && (y%x == 0))
75. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 75
09/03/2022
Banderas
• Las variables de tipo Bool, se denominan también banderas.
La variable bool done:
Puede ser “activar” o “desactivar” para indicar terminos o
inicios de fases en un programa
bool done;
done = TRUE;
A una variable tipo bool también se le puede asignar el
resultado de cualquier expresión relacional y/o lógica
done = ( x == 0);
done = ( x !=0 && y%x == 0);
76. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 76
09/03/2022
Redundancias
• Al utilizar condiciones, un programador novato puede
cometer algunas “redundancias”, que debe evitar, para
mejorar la legibilidad, y la repetición innecesaria de
sentencias
if (x == 0)
{
done = TRUE;
}
else
{
done = FALSE;
}
end if
si (done == TRUE)…. Sin redundar if (done) ...
done = (x == 0);
Sin redundar
77. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 77
09/03/2022
Ejercicio en Clase
• Se desea que la computadora nos ayude a
determinar si un año dado es o no bisiesto.
– Los años bisiestos se dan cada 4 años, con la
excepción de los años que terminan en 00, que solo
son bisiestos si son divisibles para 400.
– El 1900 no era un año bisiesto, a pesar de que 1900
era divisible para 4.
– El año 2000 fue bisiesto, porque es divisible para 400
78. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 78
09/03/2022
inicio
Lee(año
)
((año%4 == 0)
&&(año%100!=
0)) ||
(y%400== 0)
Escribe(“Es
bisiesto”)
Escribe(“No
es bisiesto”)
fin
Begin ()
{
int anio;
bool EsBisiesto;
Write(“Programa para determinar año bisiesto”);
Write(“Ingrese año:”);
Read(anio);
EsBisiesto = ((anio%4 == 0) && (anio%100!=0)) || (anio%400 == 0)
if (EsBisiesto)
Write(anio,”es bisiesto”);
else
Write(anio,”no es bisiesto”);
}
End
void main()
{
int anio;
bool EsBisiesto;
printf(“Programa para determinar año bisieston”);
printf(“Ingrese anio:”);
scanf(“%d”,&anio);
EsBisiesto = ((anio%4 == 0) && (anio%100!=0)) || (anio%400 == 0)
if(EsBisiesto)
printf(” %d es bisieston”, anio);
else
printf(” %d no es bisieston”, anio);
}
• Las condiciones para que un año sea bisiesto son:
– Un año que no es divisible para 100, será bisiesto si es divisible para 4
– Será bisiesto si es divisible para 400
((anio%4 == 0) && (anio%100!=0)) || (anio%400 == 0)
Solución
79. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 79
09/03/2022
Sentencias Condicionales: IF
• En su forma mas simple, la sintaxis de la sentencia if:
if (condicion)
sentencia;
Sin embargo, si cuando la condición se cumple, se desea ejecutar un grupo
de sentencias, la forma sería:
if(condicion)
{
sentencia1;
sentencia2;
}
if(condicion)
{
sentencia1;
sentencia2;
}
else
{
sentencia1;
sentencia2;
}
La clausula
“entonces” .
Las sentencias se
ejecutan si se
cumple la
condicion
La clausula “else”. Las
sentencias dentro, se
ejecutan cuando no se
cumple la condicion
80. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 80
09/03/2022
Formas de la Sentencia IF
Varias sentencias, encerradas en un bloque.
Cuando el cuerpo consista de mas de una
sentencia.
Una sentencia si-sino(if-else), siempre usara
bloques para encerrar sus sentencias
if(condicion) sentencia;
if(condicion){
sentencias;
}
if(condicion){
sentenciasT;
} else {
sentenciasF;
}
Una sola sentencia, se usa solo cuando no
existe cláusula else, y el cuerpo de la
sentencia esta compuesto por una sola línea
En cascada. La cláusula else consiste de
sentencia if. Se utiliza cuando hay que elegir
entre mas de dos opciones. Si el programa
entra al ultimo else, es porque las otras
posibilidades fueron todas falsas
if(condicion1){
sentencias1;
} else if(condicion2){
sentencias2;
} else if(condicion3){
sentencias3;
} else {
sentencias;
}
No
hay
límite
81. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 81
09/03/2022
Ejercicio en Clase
• Se desea determinar si un número entero,
ingresado por teclado es par.
• Se desea determinar si un número, ingresado
por teclado es positivo, negativo, o cero.
82. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 82
09/03/2022
Inicio
n< 0
Leer(n)
Escribir
(“Nega
tivo”)
Escribi
r(“Posi
tivor”)
Fin
Escribir(“?”)
Escribi
r(“Cer
o”)
n> 0
n== 0
Inicio
n mod 2 == 0
Leer(n)
Escribir
(“Impa
r”)
Escribi
r(“Par”
)
Fin
Escribir(“?”)
Begin()
{
int n;
Write(“Ingrese numero:”);
Read(n);
If (n>0){
Write(“Es positivo”);
} else if (n<0){
Write(“Es negativo”);
} else {
Write(“Es nulo”);
}
}End
void main()
{
int n;
printf(“Ingrese numero:”);
scanf(“%d”,&n);
if(n< 0){
printf(“%d es negativo”,n);
}else if(n >0){
printf(“%d es positivo”,n);
}else{
printf(“%d es nulo”,n);
}
}
Solución
Begin()
{
int n;
Write(“Ingrese numero:”);
Read(n);
If(n mod 2 == 0){
Write(“El numero es par”);
}else{
Write(“El numero es impar”);
}
}End
main()
{
int n;
printf(“Ingrese un numero:”);
scanf(“%d”,&n);
if(n%2 == 0){
printf(“%d es par”,n);
}else{
printf(“%d es impar”,n);
}
}
83. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 83
09/03/2022
Sentencias Condicionales: Select (SWITCH)
• La sentencia if es ideal para poder elegir entre dos opciones, sin
embargo, frente a mas opciones, se vuelve un poco tediosa y
confusa
• La sentencia select(switch en C) es mucho mas práctica en estos
casos
• La línea de control indica de quien va a depender la decisión, y el
cuerpo, indica las opciones disponibles
switch(e){
case c1:
sentencias1;
break;
case c2:
sentencias2;
break;
…
default:
sentenciasdef;
break;
}
Select(e){
case c1:
sentencias1;
break;
case c2:
sentencias2;
break;
…
default:
sentenciasdef;
break;
}
e es una expresión, puede
ser una sola variable o una
llamada a una función, o
una expresión completa Cada ci se refiere a un
valor constante entero,
no puede ser expresión
Select(e), significa
que las decisiones se
tomaran
dependiendo del
valor de e
Este grupo de
sentencias se
ejecutaran solo si e
coincide con c1
El caso debe
terminar, para
salir de la
sentencia. Si no
se termina, el
programa pasara
al siguiente caso
Este caso es
opcional. Las
sentencias de este
caso se ejecutaran
solo si e no
coincide con
ninguna otra opción
84. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 84
09/03/2022
Ejercicio en Clase
• Dados tres números enteros denominados
OP, A y B, se pide en función del valor de OP
calcular la operación entre A y B según se
indica a continuación:
– Para OP= 0 → A+B
– Para OP= 1 → A-B
– Para OP= 2 → A*B
– Para OP= 3 → A/B
– Para OP distinto de estos valores se devolverá el
número 0
85. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 85
09/03/2022
Begin()
{
int a, b, op;
Write(“Ingrese la operacion:”);
Read(op);
Write(“Ingrese A:”);
Read(a);
Write(“Ingrese B:”);
Read(b);
select(op){
case 0:
Write(a+b);
break;
case 1:
Write(a-b);
break;
case 2:
Write(a*b);
break;
case 3:
Write(a/b);
break;
default:
Write(“0”);
}
}End
void main()
{
int a, b, op;
printf(“Ingrese la operacion:”);
scanf(“%d”,&op);
printf(“Ingrese A:”);
scanf(“%d”,&a);
printf(“Ingrese B:”);
scanf(“%d”,&b);
switch(op){
case 0:
printf(“La suma es: %d”, a+b);
break;
case 1:
printf(“La resta es: %d”, a-b);
break;
case 2:
printf(“La multiplicacion es: %d”,
a*b);
break;
case 3:
printf(“La division es: %.2f”, a/b);
break;
default:
printf(“0”);
}
}
Escribir(“0”)
Inicio
Fin
Leer(a);
Leer(b);
Leer(op);
Escribir(a+b
)
op == 0
op == 1
op == 2
op == 3
Escribir(a-
b)
Escribir(a*b
)
Escribir(a/b
)
SOLUCION
86. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 86
09/03/2022
Sentencias Repetitivas: WHILE
• Es la sentencia repetitiva mas simple.
• El grupo de sentencias dentro de esta sentencia de control, se ejecuta
repetidamente MIENTRAS la condición especificada sea
VERDADERA
• Cuando la condición cambia a FALSO, la repetición termina, y el
programa sigue su curso normal, a la siguiente sentencia
• La condición se evalúa antes de comenzar cada ciclo del lazo
• Si durante un ciclo, la condición cambia a FALSO, el programa no se
entera hasta que se termine el ciclo, y comience el siguiente
while (condicion)
{
sentencias
}
while (condicion)
{
sentencias;
};
87. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 87
09/03/2022
Ejercicio en Clase
• Escribir un programa que sume los dígitos en un
entero positivo, ingresado por teclado.
88. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 88
09/03/2022
Begin()
{
int n, sumdig;
Write(“Ingrese el numero:”);
Read(n);
sumdig = 0;
/*Aquí debe efectuarse la suma de los digitos*/
Write(“La suma de los digitos es ”,sumdig);
}
Solución
• Debemos llevar un acumulado de la suma de los dígitos,
tal como en los otros ejemplos
Inicio
Escribir(“?”)
Leer(n)
sumdig = 0
Escribir(
sumdig)
Fin
Aquí va el
proceso de
desglosar
y
acumular
89. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 89
09/03/2022
Solución
• Si pudiésemos saber fácilmente saber cuantos dígitos contiene un entero,
podríamos usar la sentencia for.
• La forma mas fácil en este caso, es sumar dígito tras digito HASTA que
descubramos que hemos llegado hasta el último.
• ¿Como “desglosamos” una cantidad, en sus digitos?
• Con el uso de los operadores para división entera y residuo, este problema es
sencillo de resolver:
– El ultimo digito de una cifra, se puede obtener dividiendo la cifra para 10, el
residuo. Ejemplo:
1729 div 10 = 172 1729 mod 10 = 9
1729 div 10 = 172 1729 mod 10 = 9
172 div 10 = 17 172 mod 10 = 2
Si repetimos este proceso, sucesivamente sobre el resultado de la división,
habremos logrado “desglosar”
17 div 10 = 1 17 mod 10 = 7
1 div 10 = 0 1 mod 10 = 1
Hasta aquí debería llegar
Hasta que la division
de cómo resultado 0.
Debe dividirse
sucesivamente
MIENTRAS la
division no de 0
90. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 90
09/03/2022
Begin()
{
int n, sumdig;
Wtite(“Ingrese el numero:”);
Read(n);
sumdig = 0;
/*Aquí debe efectuarse la suma de los digitos*/
While(n>0){
sumdig = sumdig + (n mod 10);
n = n div 10;
}
Write(“La suma de los digitos es”,sumdig);
}
End
void main()
{
int n, sumdig;
printf(“Ingrese el numero:”);
scanf(“%d”,&n);
sumdig = 0;
/*Aquí debe efectuarse la suma de los digitos*/
while(n>0){
sumdig = sumdig + n%10;
n = n / 10;
}
printf(“La suma de los digitos es %dn”,sumdig);
}
Solución
Inicio
Escribir(“?”)
Leer(n)
sumdig = 0
n > 0
sumdig =
sumdig + (n
mod 10)
n = n / 10
Escribir(
sumdig)
Fin
91. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 91
09/03/2022
Lazos infinitos
• Debemos tener mucho cuidado con la condición de un lazo
mientras
• El valor de esta debe de cambiar en alguno de los ciclos de lazo,
para que este pueda terminar
• De lo contrario estaríamos hablando de un lazo infinito
• Si en el ejercicio anterior hubiésemos usado la siguiente condición:
while(n >= 0)
{
sumdig = sumdig + n%10;
n = n / 10;
}
• En este caso, cuando n llega a 0, la condición aun sería TRUE, y el
lazo continuaría infinitamente.
92. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 92
09/03/2022
El caso de la Centinela
• Recordemos que ya usamos un lazo while para darle al usuario la oportunidad
de decidir hasta cuando quería ingresar datos
• En este caso, usamos un lazo MIENTRAS cuya condición jamás cambiaria a
FALSO
• De lejos, podría parecer un lazo infinito, pero dentro de las sentencias, se
controlaba el fin del lazo con el uso de un valor centinela
• Se podría decir que los ciclos debían continuar mientras no se ingrese el valor
de la centinela
mientras(TRUE){
/*Ingreso del valor*/
si(valor == centinela) Terminar;
/*Procesar Valor*/
}
mientras(valor != centinela){
/*Ingreso del valor*/
/*Procesar Valor*/
}
Para la primera vez, no
existe valor ingresado!!!
/*Ingreso del valor*/
mientras(valor != centinela){
/*Procesar Valor*/
/*Ingreso del valor*/
}
Write(“?”);
Read(valor)
While(valor != centinela){
balance = balance + valor;
Write(“?”);
Read(valor);
}
Al hacer esto, existen algunos inconvenientes:
El orden de las operaciones en el lazo, no es
“natural”, no se lee primero y se calcula
despues, lo que hace al prorama mas dificil de
seguir
Se escribe dos veces las mismas sentencias
93. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 93
09/03/2022
Sentencias Repetitivas: FOR
• Es muy popular cuando se desea repetir un grupo de acciones un número de
veces determinado.
• A su vez, la línea de control esta compuesta por 3 sentencias:
• Inicio indica como debe ser inicializado el lazo for, usualmente aquí se le da
un valor inicial a la variable índice
• Condición sería escrita tal y como en un lazo mientras. Indica que las
sentencias dentro se repetirán mientras la condicion sea evaluada
VERDADERA, cuando cambie a FALSO, terminará y se continuará en el flujo
normal del programa, a la siguiente sentencia
• Avance indica como va a cambiar el valor de la variable índice, de ciclo en
ciclo. Usualmente cambia de uno en uno, pero podría retroceder, avanzar de
dos en dos, etc.
• En C las sentencias de inicio, condición y avance son opcionales, pero los ;
deben ir
for (inicio; condicion; avance)
{
sentencias;
}
94. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 94
09/03/2022
Ejercicio en clase
• Escribir un programa que simule el conteo de despegue
de un cohete espacial. El conteo debe comenzar en 10,
terminar en 0 y dar la orden de Despegue!!
95. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 95
09/03/2022
Begin()
{
int i;
For (i = 10 to 0; dec 1){
Write(i);
}
Write(“DESPEGUE!!”);
}End
#define CONT_INICIO 10
main()
{
int i;
for(i = CONT_INICIO; i >=0; i --)
{
printf(“%dn”,i);
}
printf(“DESPEGUE!!n”);
}
Solución
Inicio
i = 10
i >=0
i = i +1
Fin
Escribir(“
Despegu
e”)
Escribir(i)
96. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 96
09/03/2022
Lazos FOR anidados
• Esto se refiere a incluir en el cuerpo de
una sentencia for, otra sentencia del
mismo tipo
• En estos casos, los ciclos de lazo for más
interno son ejecutados, por cada
repetición del lazo for más externo.
• Cada lazo for debe tener su propia
variable índice.
97. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 97
09/03/2022
Ejercicio en Clase
• Escribir un programa que muestre una tabla de
multiplicar del 1 al 10, con el siguiente formato
1*1
1*2
1*3
1*4
..
1*10
5*1
5*2
5*3
5*4
..
5*10
1
2
3
4
5
6
7
8
9
10
1 2 3 4 5 6 7 8 9 10
98. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 98
09/03/2022
Solución
• En este caso hay repetición del 1 al 10,
para saber por quién
multiplicar(columnas), y hay una repetición
del 1 al 10, para generar las tablas(filas).
• Los números de las columnas cambian
mas rápido(lazo más interno).
• Los números de las filas, permanencen
más tiempo presentes(lazo más externo).
• Cuando termina cada fila, se da un enter.
99. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 99
09/03/2022
inicio
i = 1
i <=10 j = 1
j <= 10 mult = i * j
fin
Escribir(mult)
Escribir(“n”)
Begin()
{
int i,j;
For(i=0 to 10; inc 1){
For(j=1 to 10; inc 1){
Write(i*j);
}
Write(“n”);
}
}
End
#define LIMITE_INF 1
#define LIMITE_SUP 10
void main()
{
int i,j;
for(i = LIMITE_INF; i <= LIMITE_SUP; i=i+1){
for(j = LIMITE_INF; j <= LIMITE_SUP; j = j +1)
{
printf(“%4d”, i*j);
}
printf(“n”);
}
}
Solución
100. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 100
09/03/2022
• La sentencia FOR
• Es idéntica a:
for(i=0; i <10; i = i +1)
{
/*cuerpo*/
}
i = 0;
while(i < 10)
{
/*cuerpo*/
i = i +1;
}
Aquí debe realizarse el
incremento de i.
Aquí debe inicializarse la
variable i.
Relación entre el FOR y el WHILE
while(condicion)
{
sentencias;
avance;
} end while
for (inicio; condicion; avance)
{
sentencias;
}
101. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 101
09/03/2022
• La variable índice de un lazo for puede ser un entero, o un real, no hay
ninguna regla sobre eso.
for(x = 1.0; x <= 2.0; x = x + 0.1)
printf(“%dn”; x);
• Sin embargo, debemos tomar en cuenta que los reales en la
computadora no son datos precisos. El valor 0.1 es muy parecido a
1/10, pero no exactamente.
• Al acumular estos valores en x, la imprecisión, también se acumulará, y
puede darse el caso de que 2.0, sea realmente en el computador
2.000000001
• Esto ocasionaría que la condición jamás se cumpla(lazo infinito), por lo
cual es mejor trabajar con enteros:
for(i = 10; i <= 20; i = i + 1)
{
x = i / 10.0;
printf(“%dn”,x);
}
Sentencia FOR con Números Reales
102. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 102
09/03/2022
Formato de Salida
• En el lenguaje C, el procedimiento printf permite
mostrar información de una forma conveniente.
• Hemos utilizado printf para mostrar números enteros,
reales, caracteres y cadenas de caracteres; Sin
embargo, sólo hemos utilizado parte de sus
capacidades.
• Para escribir programas que con un formato de salida
más complejo, necesitamos conocer el procedimiento
printf en mayor detalle.
103. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 103
09/03/2022
Formato de Salida
• Una llamada al procedimiento printf tiene el
siguiente paradigma:
printf(“cadena de control”,exp1, exp2,…);
• El número de expresiones pasadas como
argumentos dependen del número de datos
(valores) que necesiten mostrarse. Incluso, pueden
no existir estos valores, en cuyo caso la llamada
sería:
printf(“cadena de control”);
104. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 104
09/03/2022
Formato de Salida
• La sentencia:
printf(“Hola mundo.n”);
• Imprime la H, la o, la l y así sucesivamente hasta
imprimir el punto y el caracter de fin de línea.
• Si printf encuentra el signo de porcentaje (%) entre los
caracteres de la línea de control, responde de una
manera especial.
• printf trata al signo de % y la letra que lo sigue (letra
clave), como un repositorio en el cual colocará el valor
que corresponda a dicha posición. Ese valor es
reemplazado por la primera expresión no utilizada luego
de la cadena de control, el segundo % por la segunda
expresión y así sucesivamente hasta terminar con todos
los argumentos y signos de %.
105. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 105
09/03/2022
Formato de Salida
• Por ejemplo:
printf(“%d + %d = %dn”, n1, n2, total);
• Si lo valores de n1, n2 y total son 2, 3 y 5. La llamada
anterior, imprimirá por pantalla:
• Es muy importante asegurarse que el número de
sustituciones de signos de porcentajes coincida
exactamente con el número de expresiones que son
pasadas como argumentos de printf.
2 + 3 = 5
106. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 106
09/03/2022
Códigos de Formato para printf
• El poder real de printf radica en que puede mostrar valores en una
variedad de formatos.
• Para determinar como el valor debe ser mostrado, el % en la
cadena de control es seguido de una letra que especifica el formato
de salida. Esta letra es llamada código de formato.
• Los códigos de formato más comúnmente utilizados son:
%d Enteros decimales
%f Flotantes
%e Exponenciales
%c Caracteres
%s Cadenas (strings)
%% Signo de porcentaje
107. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 107
09/03/2022
Controlando espacios, alineamiento y precisión
• Suponga que Ud. debe mostrar una tabla con parte de
la información ambiental. La tabla mostrará información
como: estado, área total, áreas verdes y porcentaje de
reforestación.
• De manera ideal, las primeras líneas deberían
mostrarse en una tabla similar a la siguiente:
Estado
Alabama
Alaska
Arizona
Arkansas
California
Area Total
50750
591000
114000
53187
158706
Areas Verdes
33945
201632
30287
26542
61532
Porcentaje
66.9%
34.1%
26.6%
49.9%
38.8%
108. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 108
09/03/2022
Controlando espacios, alineamiento y
precisión
• Si printf sólo contará con códigos de formato, lo mejor que se
podría hacer sería:
printf(“%s %d %d %f%%n”,estado,aTotal,aVerdes,porc);
• Desafortunadamente, esta llamada sólo colocaría la información
una a continuación de otra y la salida sería algo como:
Estado Area Areas Verdes Porcentaje
Alabama 50750 33945 66.8867%
Alaska 591000 201632 34.1171%
Arizona 114000 30287 26.5675%
Arkansas 53187 26542 49.9032%
California 158706 64532 38.7711%
109. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 109
09/03/2022
Controlando espacios, alineamiento y
precisión
• Para generar la tabla de la forma requerida
debemos considerar las siguientes propiedades:
– El número de caracteres que se colocarán en cada
una de las columnas, conocido como ancho del
campo (field width).
– El alineamiento de la información. Para el ejemplo
mostrado los números son alineados a la derecha.
– Finalmente, la precisión de los datos numéricos a
mostrarse.
110. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 110
09/03/2022
Controlando espacios, alineamiento y precisión
• printf permite controlar: ancho, alineamiento y precisión
de los datos de salida incluyendo información como parte
del código de formato.
• La información adicional, es escrita entre el signo de % y
la letra clave.
Estado
Alabama
Alaska
Arizona
Arkansas
California
Area Total
50750
591000
114000
53187
158706
Areas Verdes
33945
201632
30287
26542
61532
Porcentaje
66.9%
34.1%
26.6%
49.9%
38.8%
111. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 111
09/03/2022
Controlando espacios, alineamiento y
precisión
%[flags][width][.prec] type
• Los flags pueden ser los caracteres:
+ siempre se imprime el signo, tanto + como –
- justifica a la izquierda el resultado, añadiendo espacios al final
blank si es positivo, imprime un espacio en lugar de un signo +
• En el campo width se especifica la anchura mínima de
la forma:
n se imprimen al menos n caracteres.
0n se imprimen al menos n caracteres y si la salida es menor, se
anteponen ceros
112. Algoritmos y Lógica de Programación Carrera de Software
Ph.D. Franklin Parrales 112
09/03/2022
Representación de la
información en datos simples
y estructuras de control
Unidad 2
Final de la unidad