Estructura de Datos
Estructura de Datos
Estructura de Datos
Repaso 1:
La resolución de un problema exige al menos los siguientes pasos:
Algoritmo:
Conjunto de instrucciones que especifican la secuencia de operaciones a realizar, en
orden, para resolver un problema. Se puede llegar a realizar un buen programa con el diseño
de un algoritmo y una correcta estructura de datos.
Lenguaje máquina
Lenguaje de bajo nivel (ensamblador)
Lenguajes de alto nivel
Traductores de lenguaje:
Los traductores de lenguaje son programas que traducen a su vez los programas
fuente escritos en lenguajes de lato nivel a código máquina.
Compiladores
Intérpretes
Interpretes
Un intérprete es un traductor que toma un programa fuente, lo traduce y a continuación
lo ejecuta, ejemplo BASIC, QBASIC, QuickBasic.
Programa fuente
Intérprete
Traducción y
ejecución línea a
línea
Estructura de Datos y Taller
Compiladores
Un compilador es un programa que traduce los programas fuente escritos en lenguajes
de alto nivel a lenguaje máquina. Los programas escritos en lenguajes de alto nivel se llaman
programas fuente y el programa traducido programa objeto. El compilador traduce (sentencia a
sentencia) el programa fuente, Los lenguajes compiladores típicos son: C, C++; Pascal,
FORTRAN, COBOL.
Programa fuente
Compilador
si Existen
errores en
la
compilación
no
Programa objeto
Montador
Ejecución
TIPOS DE DATOS
Instrucciones
Una instrucción hace que la computadora efectúe alguna acción. Hay tres tipos
diferentes de instrucciones en C; instrucciones de expresión, instrucciones compuestas e
instrucciones de control.
a = 3;
c=a+b;
++i;
printf(“Area = %f”, area);
;
Las dos primeras instrucciones de expresión son instrucciones de tipo asignación. Cada
una hace que el valor de la expresión a la derecha del signo igual le sea asignado la variable
de la izquierda. La tercera instrucción de expresión es una instrucción de tipo incremento, que
hace que el valor de i sea incrementado en 1.
La cuarta cuarta instrucción de expresión hace que la función printf sea evaluada. Esta es
una función de biblioteca de C estándar que visualiza resultados en la computadora. En este
caso se visualizara el mensaje Area =, seguido del valor actual de la variable area. Así si area
tiene el valor de 100., la instrucción generará el mensaje Area = 100.
Una instrucción compuesta esta formada por varias instrucciones individuales encerradas
con un par de llaves { }. Las instrucciones pueden ser a su vez instrucciones de expresión,
instrucciones compuestas o instrucciones de control. A diferencia de una instrucción de
expresión, una instrucción compuesta no acaba con un punto y coma; ejemplo:
{
pi=3.1416;
circunferencia = 2 * pi * radio;
area = pi * radio * radio;
}
Las instrucciones de control se utilizan para conseguir ciertas acciones especiales en los
programas, tales como las comprobaciones lógicas, bucles y bifurcaciones. Muchas
instrucciones de contro requieren que otras instrucciones se encuentren incluidas en ellas;
ejemplo:
Secuencias de escape:
retroceso \b 008
tabulador horizontal \t 009
tabulador vertical \v 011
nueva línea (avance de línea) \n 010
avance de página \f 012
retorno de carro \r 013
comillas (“) \” 034
comilla simple (‘) \’ 039
signo de interrogación(?) \? 063
barra inclinada hacia atrás (\) \\ 092
nulo \0 000
OPERADORES
Operadores Aritméticos
Operador Propósito
+ Suma
- Resta
* Multiplicación
/ División
% Resto de división entera
Operadores Monarios
Es probable que el operador monario de uso más frecuente sea el menos monario, que
consiste en un signo menos delante de una constante numérica, una variable o una expresión.
En C todas las constantes numéricas son positivas.
Otros dos operadores monarios de uso frecuente son el operador de incremento, ++, y
el operador decremento, --. El operador incremento hace que su operando se incremente en
uno, mientras que el operador decremento hace que su operando decremente en uno.
Supongamos que i es una variable entera que tiene asignado el valor 5. La
expresión i++, que es equivalente a escribir i = i + 1, hace que el valor de i sea 6.
Análogamente la expresión –i, que es equivalente a i = i -1, hace que el valor de i pase
a ser 4.
Operadores Relacionales
Operador Significado
< menor que
<= menor o igual que
> mayor que
>= mayor o igual que
Ejemplo: Supongamos que i es una variable entera cuyo valor es 7, f es una variable flotante
cuyo valor es de 5.5 y c es una variable de carácter que representa el carácter ‘w’.
Operadores Lógicos
Operador Significado
&& y
|| o
! no
Ejemplos:
Operadores de Asignación
i += 5
f /= 3
i = 3.3
i = -3.3
Operador Condicional
Ejemplo:
( i < 0) ? 0 : 100
REGLAS DE PRIORIDAD
Ejercicios:
2
b b 4ac M M
N
P
2a N P Q
n
m
mn p
pq r
q
5
3. Supongamos que x, y y z son variables flotantes que tienen asignados los valores x =
88, y = 3.5 y z = -5.2. Determinar el valor de cada una de las siguientes expresiones
aritméticas.
a) 2 * y + z
b) x / y
c) x % y
d) 2 * x / (3 * y)
4. Supongamos c1, c2 y c3 variables de tipo carácter que tienen asignados los caracteres
E, 5 y ?, respectivamente. Determinar el valor numérico de las siguientes expresiones,
basándose en el conjunto de caracteres ASCII.
a) c1
b) c1 – c2 + c3
c) c2 – 2
d) c2 – ‘2’
e) c3 + ‘#’
f) c1 % c3
g) ‘2’ + ‘2’
h) ( c1 / c2 ) * c3
i) 3 * c2
j) ‘3’ * c2
f) i++
g) - -j
h) ++x
i) y- -
j) i <= j
k) c>d
l) x >= 0
m) x<y
n) j != 6
o) c == 99
p) 5 * ( i + j ) > ’c’
q) ( 2 * x + y ) == 0
r) 2 * x + ( y == 0 )
s) 2 * x + y == 0
t) ! ( i <= j )
u) ! ( c == 99 )
v) !(x>0)
w) ( i > 0 ) && ( j < 5 )
x) (i>0)||(j<5)
y) ( x > y ) && ( i > 0 ) | | ( j < 5 )
Apéndice 1:
Repaso 2:
Entrada de un Carácter – La Función getchar
Ejemplo:
char c;
. . . . . . .
c = getchar();
En la primera instrucción se declara la variable c de tipo carácter. La segunda instrucción hace
que se lea el dispositivo de entrada estándar un carácter y entonces se le asigne a c.
putchar(variable de carácter)
donde variable de carácter hace referencia a una variable de tipo carácter previamente
declarada.
Ejemplo:
char c;
. . . . . . .
putchar(c);
En la primera instrucción se declara la variable c de tipo carácter. La segunda instrucción hace
que se transmita el valor actual de c al dispositivo de salida estándar en donde se visualizará.
Ejemplo:
Conversión de un texto de minúsculas a mayúsculas. Leer una línea de texto minúsculas,
almacenarse en una formación de tipo carácter unidimensional y después escribir en
mayúsculas.
#include"stdio.h"
#include"ctype.h"
#include"conio.h"
char letras[80];
int cont, auxiliar;
main()
{
clrscr();
for(cont=0;(letras[cont]=getchar())!='\n';++cont)
auxiliar=cont;
for(cont=0;cont<auxiliar;++cont)
putchar(toupper(letras[cont]));
getch();
}
Estructura de Datos y Taller
donde cadena de control hace referencia a una cadena de caracteres que contiene cierta
información sobre el formato de los datos. (En realidad, los argumentos representan punteros
que indican las direcciones de memoria en donde se encuentran los datos.)
Ejemplo:
#inlcude<stdio.h>
char concepto[20];
int no_partida;
flota coste;
main()
{
. . . . . . .
scanf(“ %s %d %f”, &concepto, &no_partida, &coste);
. . . . . . .
}
Los datos se introducen en una línea, separados por espacios en blanco. También se
pueden introducir los datos en líneas separadas, ya que los caracteres de nueva línea se
considerarían también como caracteres de espaciado. Por tanto los datos de entrada se
podrían haber escrito así:
cremallera
12345
0.05
cremallera
12345 0.05
cremallera 12345
0.05
Estructura de Datos y Taller
Ejemplo:
#inlcude<stdio.h>
char linea[80];
{
. . . . . . .
scanf(“ %[ ABCDEFGHIJKLMNOPQRSTUVWXYZ]”, linea);
. . . . . . .
}
Si se introduce la cadena
CIUDAD DE ALMERIA
por el dispositivo de entrada estándar cuando se ejecuta el programa, se le asignará a la
formación linea toda la cadena de caracteres, ya que está compuesta sólo por letras
mayúsculas y espacios en blanco. Sin embargo, si se hubiese escrito la cadena
Ciudad de Almería
sólo se habría asignado a linea la letra C, ya que la primera letra minúscula (en este caso la i)
se interpretaría como el primer carácter a continuación de la cadena. Se podría, por supuesto ,
haber incluido mayúsculas y minúsculas dentro de los corchetes, pero esto ya resulta
incomodo.
Otra forma de hacer esto, es preceder los caracteres dentro de los corchetes por un
acento circunflejo (^). La cadena de caracteres introducida por el dispositivo de entrada
estándar puede tener cualquier carácter ASCII, excepto el carácter de nueva liena.
Ejemplo:
#include<stdio.h>
char liena[80];
main()
{
. . . . . . .
scanf(“%[^\n], linea);
. . . . . . .
}
Ejemplo:
#include<stdio.h>
int a,b,c;
main()
{
. . . . . .
scanf(“%3d %3d %3d”, &a, &b, &c);
. . . . . .
}
como antes, ya que se le asignaría a a los tres primeros dígitos, los tres siguientes a b y los
últimos tres dígitos a c.
Ejemplo:
#include<stdio.h>
int i;
float x;
char c;
main()
{
. . . . . .
scanf(“%3d %5f %c”, &i, &x, &c);
. . . . . .
}
Ejemplo:
#include<stdio.h>
char concepto[20];
int no_partida;
float coste;
main()
{
. . . . . .
scanf(“%s %*d %f”, &concepto, &no_partida, &coste);
. . . . . .
}
Ejemplo:
#include<stdio.h>
char c1,c2,c3;
main()
{
. . . . . .
scanf(“%c%c%c”, &c1, &c2, &c3);
. . . . . .
}
entonces los mismos datos de entrada harían que se realizasen las siguientes asignaciones
c1=a, c2=b, c3=c
donde cadena de control hace referencia a una cadena de caracteres que contiene información
sobre el formato de la salida y arg1, arg2, . . . . ., argn son argumentos que representan los
datos de salida. En contraste con la función scnaf, los argumentos de la función printf no
representan direcciones de memoria y por lo tanto no son precedidos de ampersands.
Ejemplo:
#include<stdio.h>
#include<math.h>
float i=2.0, j=3.0;
{
printf(“%f %f %f %f”, I, j, i+j, sqrt(i+j));
}
Ejemplo:
#include<stdio.h>
char concepto[20]=cremallera;
int no_partida=12345;
float coste=0.05;
main()
{
. . . . . .
printf(“%s %d %f”, concepto, no_partida, coste);
. . . . . .
}
Los espacios en blanco entre los datos son generados por los espacios en blanco que
aparecen en la cadena de control de la instrucción printf.
Supongamos que la instrucción printf se ha escrito así:
printf(“%s%d%f”, concepto, no_partida, coste);
Estructura de Datos y Taller
La instrucción printf es válida sintácticamente, aunque hace que los datos de salida se
presenten sin separación, esto es:
cremallera123450.05
Ejemplo:
#include<stdio.h>
float x=123.456;
main()
{
printf(“%f %.3f %.1f\n\n”, x,x,x);
}
Las funciones gets y puts ofrecen alternativas sencillas al uso de scanf y printf para la
lectura y escritura de cadenas de caracteres.
Ejemplo:
#include<stdio.h>
char linea[80];
{
gets(linea);
puts(linea();
}
Ejercicios:
1. Realice un programa que calcule el área de un cuadrado.
2. Realice un programa que lea el nombre de una persona, tres
calificaciones y calcule su promedio, el resultado se imprime en pantalla.
Estructura de Datos y Taller
INSTRUCCIONES DE CONTROL
Se utilizarán los cuatro operadores relacionales, <, <=, >, >=, los dos operadores de igualdad,
== y ¡=, operadores lógicos, && y | | y el operador monario de negación, !.
La instrucción if-else se utiliza para realizar un test lógico y a continuación llevar a cabo
una de dos posibles acciones, dependiendo del resultado del test (de que es cierto o falso).
La parte else de la instrucción if-else es opcional. Por tanto, las instrucciones se
pueden escribir, en su forma general más simple,
If (expresión)
Instrucción
La expresión se debe encontrar entre paréntesis. De esta forma la instrucción se
ejecutará sólo si la expresión tiene un valor no nulo (si expresión es cierta). Si la expresión
tiene el valor cero (si expresión es falsa), entonces se ignorará la instrucción.
La instrucción puede ser simple o compuesta.
Ejercicios:
17. Hacer un algoritmo para que obtenga el descuento del boleto de viaje por autobús
que se le aplicará al cliente de acuerdo a su edad: de 0 a 14 año tiene un
descuento del 50%, las personas mayores de 55 años tienen un descuento del
30%. Cualquier otra edad no aplica descuento. Leer la edad del pasajero y el
precio baso del boleto, al final mostrar el precio y su descuento respectivo.
18. Realice un programa que escriba los nombres de los días de la semana en función
del valor de una variable entera introducida por el teclado, que represente su
posición dentro de la semana. Los días de la semana son 7; por consiguiente, el
rango de la variable será de 1 a 7, y en caso de que la variable estuviese fuera de
este rango se deberá producir un mensaje de error advirtiendo la situación
anómala.
La Instrucción switch
switch (expresión)
{
case1 expresión:
instrucción 1;
instrucción 2;
. . . . . . .
Instrucción n;
break;
case2 expresión:
instrucción 1;
instrucción 2;
. . . . . . .
Instrucción n;
break;
casen expresión:
instrucción 1;
instrucción 2;
. . . . . . .
Instrucción n;
break;
default::
instrucción 1;
instrucción 2;
. . . . . . .
Instrucción n;
break;
Ejercicios:
1. Realice un programa que escriba los nombres de los días de la semana en función del
valor de una variable entera introducida por el teclado, que represente su posición
dentro de la semana. Los días de la semana son 7; por consiguiente, el rango de la
variable será de 1 a 7, y en caso de que la variable estuviese fuera de este rango se
deberá producir un mensaje de error advirtiendo la situación anómala.
2. Leer un número arábigo entre el 1 y 7, desplegar su correspondiente en romana, si el
número esta fuera de rango se imprimirá error.
3. Convertir las calificaciones alfabéticas A, B, C, D y E a calificaciones numéricas
decimales 10, 9, 8, 7 y 6 respectivamente.
4. Realice un programa que examine el valor de una variable entera llamada indicador y
escriba uno de los siguientes mensajes dependiendo de su valor:
CALOR, si indicador tiene el valor de 1
TEMPLADO, si indicador tiene el valor de 2
Estructura de Datos y Taller
La Instrucción while
La instrucción while se utiliza para generar bucles, en los cuales un grupo de
instrucciones se ejecutan de forma repetida, hasta que se satisface alguna condición.
Sintaxis:
While (expresión o condición)
{
acción 1;
acción 2;
………..
acción n;
}
Ejercicios:
1. Preguntar un nombre y repetirse en pantalla como se desee (preguntar cantidad de
repeticiones), indicando el número de repetición.
2. Escribe un algoritmo que calcule la media de una serie de N números.
3. Escribe un algoritmo que muestre en pantalla la suma de los cuadrados de los N
números.
4. Calcular la media aritmética de una serie de números positivos, termina con un número
negativo.
5. Obtener la tabla de multiplicar de un número leído.
6. Programa que despliegue del 1 al 500 en pantalla.
7. Programa que despliegue las primeras 10 tablas de multiplicar.
8. Programa que despliegue del 327 al 1 en pantalla.
9. Programa que lea una serie de números y se detenga cuando lea un 0.
10. Programa que lea una serie de números, obtenga el cuadrado de cada número
desplegando el resultado en pantalla y se detenga cuando el número leído sea un 0.
11. Programa que obtenga el factorial de un número leído.
12. Programa que determine la suma de las ventas de 5 empleados.