Programacion Unidad 3 y 4
Programacion Unidad 3 y 4
Programacion Unidad 3 y 4
BIBLIOGRAFIA:
1. Luis Joyanes Aguilar. Fundamentos de Programacin. Algoritmos, Estructura de
Datos y Objetos. McGRAW HILL. Espaa 2003.
2. Jos Vasconcelos Santilln. Introduccin a la computacin. Publicaciones Cultural.
Mxico 2000.
3. Guillermo Levine Gutierrez. Introduccin a la computacin y a la Programacin
Estructurada. McGRAW-HILL. Mxico 1984.
4. Patricia Quiroga. Arquitectura de Computadoras. Alfaomega. Buenos Aires 2010.
5. Jaime Martnez Garza, Jorge Agustin Olvera Rodrguez. Organizacin Arquitectura
de Computadoras. Prentice Hall. Mxico 2000.
6. Notas de Internet
#include <stdio.h>
Archivo de cabecera
stdio.h
int main ( )
Cabecera de funcin
Nombre de la funcin
.
}
#include
Directivas del
#define
preprocesador
declaraciones globales
Prototipos de funciones
Variables
declaraciones locales
sentencias
..
Declaraciones globales
La funcin main ( )
Funciones definidas por el usuario
Comentarios del programa (utilizados en su totalidad).
Un ejemplo de un programa sencillo en C.
/* Listado DEMO_UNO.C. Programa de saludo*/
#include <stdio.h>
/*Este programa imprime: Bienvenido a la Programacin en C*/
int main( )
{
printf(Bienvenido a la Programacin en C/n);
getch ();
return 0;
}
La directiva #include de la primera lnea es necesaria para que el programa tenga salida.
Se refiere a un archivo externo denominado stdio.h en el que se proporciona la
informacin relativa a la funcin printf( ). Los signos < y > no son parte del nombre del
archivo; se utilizan para indicar que el archivo es un archivo de biblioteca estndar C.
La segunda lnea es comentario, identificado por los caracteres /* y */. Los comentarios
se incluyen en los programas para proporcionar explicaciones a los usuarios. Este tipo de
lnea es ignorada por el compilador.
La tercera lnea contiene la cabecera de la funcin main( ), obligatoria en cada programa
de C. Indica el comienzo del programa y requieren los parntesis ( ) a continuacin de
main ( ).
La cuarta y la sptima lnea slo contiene las llaves { y } que encierran el cuerpo de la
funcin main ( ) y son necesarias en todos los programas C.
La quinta lnea contiene la sentencia printf (bienvenidos.................); que indica al
sistema que escriba el mensaje Bienvenidos a la programacin en C\n.
Printf( ) es la funcin ms utilizada para dar salida de datos por el dispositivo estndar,
la pantalla.
La salida ser:
Bienvenido a la programacin en C
La sexta lnea contiene la sentencia return 0. esta sentencia termina la ejecucin del
programa y devuelve el control al sistema operativo de la computadora. El nmero 0 se
utiliza para sealar que el programa ha terminado correctamente (con xito).
El punto y coma (;) al final de la quinta y sexta lnea significa que C requiere que cada
sentencia termine con un punto y coma. No es necesario que este al final de una lnea .
Se pueden poner varias sentencias en la misma lnea y se puede hacer que una sentencia
se extienda sobre varias lneas.
DIRECTIVAS DEL PREPROCESADOR
#include <stdio.h>
De igual modo es muy frecuente el uso de funciones de cadena, especialmente strcpy ();
por la razn de que se requiere el uso del archivo de cabecera denominado string.h. por
consiguiente, ser muy usual que deba incluir en sus programas las lneas:
#include <stdio.h>
#include <string.h>
El orden no importa con tal de que se incluyan antes de que se utilicen las funciones
correspondientes.
La directiva #include puede adoptar uno de los siguientes formatos:
#define TAM_LINEA 65
Sustituir TAM_LINEA por el valor de 65 cada vez que aparezca en el programa.
DECLARACIONES GLOBALES
Las declaraciones globales indican al compilador que las funciones por el usuario o
variables as declaradas son comunes a todas las funciones de su programa. Las
declaraciones globales se sitan antes de la funcin main(). Si se declara global una
variable Grado_Clase del tipo
int Grado_Clase;
Cualquier funcin de su programa, incluyendo main(), puede acceder a la variable
Grado_Clase.
La zona de declaraciones globales de un programa puede incluir declaraciones de variables
adems de declaraciones de funcin. Las declaraciones de funcin se denominan
prototipos
/* Programa demo.C */
#include <stdio.h>
/* Definicin de macros */
#define MICONST1 0.50
#define MINCONS2 0.75
/* Declaraciones globales */
int Calificaciones;
main()
{
.............
Funcin MAIN ()
Cada programa C tiene una funcin main() que es el punto de entrada al programa. Su
estructura es:
Main()
{
}
...........
bloque de sentencias
Las sentencias includas entre las llaves (.......) se denominan bloque. Un programa debe
tener una funcin main(). Adems de la funcin main() un programa C consta de una
coleccin de funciones.
definir su programa
definir directivas del preprocesador
definicin de declaraciones globales
crear main()
Crear el cuerpo del programa
Crear sus propias funciones definidas por el usuario
Compilar, enlazar, ejecutar y comprobar el programa
utilizar comentarios
Aunque los nombres de los identificadores pueden ser arbitrarios (dentro de las
reglas sealadas), se produce un error si se utiliza el mismo identificador dentro
del mismo mbito compartiendo el mismo espacio de nombres. Los nombres
duplicados son legales en diferentes espacios de nombres con independencia de
las reglas de mbito.
Un identificador no puede coincidir con una palabra clave o con el de ninguna
funcin de biblioteca.
Los identificadores pueden ser ms largos; de hecho en C++ pueden ser de cualquier
longitud, pero el compilador solo considera los n primeros; es decir: considera iguales
aquellos identificadores cuyos n primeros caracteres coinciden. C++Builder establece por
defecto que son significativos los primeros 250 caracteres, pero este valor puede ser
modificado utilizando la opcin -in, donde n es un nmero entre 8 y 250; adems el 0
significa el valor mximo.
forma, existen otros valores que cambiarn durante la ejecucin del programa, a
estos valores se les llama variables.
CONSTANTES
Una constante es una partida de datos (objetos) que permanecen sin cambios durante el
desarrollo del algoritmo o durante la ejecucin del programa
Constantes reales vlidas
Constantes reales no vlidas
1,752.63 (comas no permitidas)
- 0.1436
82 (normalmente contiene punto
decimal, aunque existen lenguajes
que lo admiten sin punto)
Una constante de tipo carcter o constante de caracteres consiste en un carcter vlido
encerrado dentro de apstrofos; por ejemplo:
B
Falso
VARIABLES
Una variable es un objeto o partida de datos cuyo valor puede cambiar durante el
desarrollo del algoritmo o ejecucin del programa.
Dependiendo del lenguaje, hay diferentes tipos de variables, tales como enteras, reales,
carcter, lgicas y de cadena.
Una variable que es de un cierto tipo puede tomar nicamente valores de ese tipo. Una
variable de carcter, por ejemplo, puede tomar como valor slo caracteres, mientras que
una variable entera puede tomar slo valores enteros.
Si se intenta asignar un valor de un tipo a una variable de otro tipo se producir un error
de tipo.
Una variable se identifica por los siguientes atributos:
nombre que lo asigna y
tipo que describe el uso de la variable.
Los nombres de las variables, a veces conocidos como identificadores, suelen constar de
varios caracteres alfanumricos, de los cuales el primero normalmente es letra. No se
deben utilizar aunque lo permita el lenguaje como nombres de identificadores palabras
reservadas del lenguaje de programacin.
Nombres vlidos de variables:
A510
NOMBRES
NOTAS
NOMRE_APELLIDOS (Algunos lenguajes de programacin admiten como vlido el
carcter subrayado o guin bajo en los identificadores.
Los nombres de las variables elegidas para el algoritmo o el programa deben ser
significativos y tener relacin con el objeto que representan, como pueden ser los casos
siguientes:
NOMBRE
PRECIOS
NOTAS
Dentro de las variables nos encontramos con dos tipos que son muy usados
dentro de los algoritmos:
ACUMULADORES
El acumulador es una variable, que se incrementa en una cantidad variable. Es
una estructura que permite introducir, a una variable, un nuevo valor, tomando en
consideracin el valor que ya estaba dentro de ella.
CONTADORES
EJEMPLO
char
short
int
unsigned int
Long
Float
Double
Long double
C
-15
1024
42325
262144
10.5
0.00045
Le-8
TAMAO
EN BYTES
1
2
2
2
4
4
8
8
RANGO
MNIMO..MXIMO
0..255
-128..127
-3276832767
0..65535
-2147483648..2147483637
3.4 *(10-38)..3.4 * (1038)
1.7 * (10-308)..1.7 * (10308)
Igual que double
pepe=primero;
vencedor=pepe;
lugar{primero,segundo,tercero};
//correcto
//correcto
ENTEROS (int)
Probablemente el tipo de dato ms familiar es el entero, o tipo int. Los enteros son
adecuados para aplicaciones que trabajen con datos numricos. Los tipos enteros
se almacenan internamente en 2 bytes (o 16 bits) de memoria. La Tabla siguiente
resume los tres tipos enteros bsicos, junto con el rango de valores y el tamao en
bytes usual, dependiendo de cada mquina.
TIPO C
int
RANGO DE VALORES
-32.768.. +32.767
Unsigned int
Short int
0..65.535
-128..+127
USO RECOMENDADO
Aritmtica de enteros, bucles, for,
conteo
Conteo bucles for, ndices
Aritmtica de enteros, bucles for,
conteo.
Variable= expresin
identificador vlido C declarado como variable.
una constante, otra variable a la que se ha asignado previamente un
o una frmula que se ha evaluado y cuyo tipo es el de variable.
SMBOLO
USO
DESCRIPCIN
a=b
Asigna el valor de b a a.
*=
a *= b
variable a.
/=
a/=b
%=
a %= b
+=
a += b
-=
a-=b
variable a.
variable a.
Sentencia
abreviada
m += n
m -= n
m *= n
m /= n
m %= n
Sentencia
no abreviada
m = m + n;
m = m n;
m = m * n;
m = m / n;
m = m % n;
Tipos enteros
Producto
Tipos reales
Producto
Ejemplo
x*y
Suma
Suma
x+y
Resta
Resta
b-c
b %. 5
Operacin
+25, -6.745
*, /, %
5*5 es
25/5 es
25%6 es
25
5
1
+, -
2+3
2-3
5
-1
es
es
Nivel de precedencia
1
Ejemplo
Cul es el resultado de la expresin: 7 * 10-5 % 3 * 4 + 9?
Existen tres operadores de prioridad ms alta (*, % Y *)
70 - 5 % 3 * 4 + 9
La asociatividad es de izquierda a derecha, por consiguiente se ejecuta a
continuacin %
70 - 2 * 4 + 9
y la segunda multiplicacin se realiza a continuacin, produciendo
70 - 8 + 9
Las dos operaciones restantes son de igual prioridad y como la asociatividad es a
izquierda, se realizar la resta primero y se obtiene el resultado
62 + 9
y, por ltimo, se realiza la suma y se obtiene el resultado final de
71
Los parntesis se pueden utilizar para cambiar el orden usual de evaluacin de
una expresin determinada por su prioridad y asociatividad. Las subexpresiones
entre parntesis se evalan en primer lugar segn el modo estndar y los
resultados se combinan para evaluar la expresin completa. Si los parntesis
estn anidados -es decir, un conjunto de parntesis contenido en otro- se
ejecutan en primer lugar los parntesis ms internos. Por ejemplo, considrese la
expresin
(7 * (10 - 5) % 3)* 4 + 9
La subexpresin (10 - 5) se evala primero, produciendo -~
(7 * 5 % 3) * 4 + 9
A continuacin se evala de izquierda a derecha la subexpresin (7 * 5 % 3)
(35 % 3) * 4 + 9
seguida de
2*4+9
Se realiza a continuacin la multiplicacin, obteniendo
8+9
y la suma produce el resultado final
17
Bibliotecas estndares de C
El lenguaje C es muy simple. Carece de tipos y servicios que forman parte de otros
lenguajes. No tiene tipo booleano, ni manejo de cadenas, ni manejo de memoria
dinmica.
No obstante, el estndar de C define un conjunto de bibliotecas de funciones, que
necesariamente vienen con todo entorno de compilacin de C y que satisfacen estos
servicios elementales.
Las interfaces de estos servicios vienen definidas en unos ficheros cabeceras ( header
files ). El nombre de estos ficheros suele terminar en .h
CONSTRUCCIN DE EXPRESIONES
Los datos se manipulan mediante expresiones, que sirven para calcular valores.
Una expresin combina varias operaciones y devuelve un valor.
Los operadores *, / y % tienen precedencia sobre la suma y la resta.
Se pueden utilizar parntesis para agrupar subexpresiones.
x += 10;
o 12
o 10
x = 10 + x y;
o x += 10 y
o x -= y + 10
Evaluar
las
siguientes
expresiones. Siendo:
x = 10; y = 20; z = 30;
a)
o
z = x y, t = z
y;
z =- 10, t=-30
11
b)
o
o
o
s b;
9
13
30
c)
o
o
o
x += 10 + y
b)
o
o
o
r = 100* r;
r *= 100* r
r *= 100
r += 100
c)
y
=
y/
(10+x);
y /= 10*x
y /= 10 + y/x
y/= 10+x
*=
r /= 0;
infinito
1
error
d)
o
o
o
y += x + 10;
8
12
18
e)
o
o
o
z -= a*b;
-36
-18
36
o
o
o
d)
o
o
o
o
o
t = 10
z = 30, t=-30
b)
o
o
c)
z = 3 * x + 6;
z +=6
z *=3
no
es
posible
e)
o
o
(x <= z) | | (z
<= y)
true
false
d)
o
o
(x+y < z)
true
false
true
false
error
Los siguientes identificadores estn reservados para utilizarlos como palabras reservadas,
y no se
deben emplear para otros propsitos.
asm
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
COMENTARIOS
Ya se ha expuesto antes que los comentarios en C tienen el formato:
/*. . . */
Los comentarios se encierran entre / * y * / pueden extenderse a lo largo de varias lneas.
^
\
&
;
*
'
(
:<
)
>
+
,
=
.
{ }
/
?
"
}
printf("x = %d, y1 = %d\n",x,y1)"
return 0;
}
INICIALIZACIN DE VARIABLES
/*
/*
/*
/*
Dependiendo del lugar donde se definan las variables de C, stas se pueden utilizar en la
totalidad el programa, dentro de una funcin o pueden existir slo temporalmente dentro
de un bloque de una funcin. La zona de un programa en la que una variable est activa
se denomina, normalmente, mbito o alcance <scope ).
El mbito (alcance) de una variable se extiende hasta los lmites de la definicin de su
bloque. Los tipos bsicos de variables en C son:
variables locales;
variables globales;
variables dinmicas.
VARIABLES LOCALES
Las variables locales son aqullas definidas en el interior de una funcin y son visibles slo
en esa funcin especfica. Las reglas por las que se rigen las variables locales son:
1. En el interior de una funcin, una variable local no puede ser modificada por
ninguna sentencia externa a la funcin.
2. Los nombres de las variables locales no han de ser nicos. Dos, tres o ms
funciones
pueden
definir variables de nombre Interrupto/: Cada variable es distinta y pertenece a la
funcin en que est declarada.
3. Las variables locales de las funciones no existen en memoria hasta que se ejecuta
la funcin. Esta propiedad permite ahorrar memoria, ya que permite que varias
funciones compartan la misma memoria para sus variables locales (pero no a la
vez).
Por la razn dada en el punto 3, las variables locales se llaman tambin automticas o
auto, ya que dichas variables se crean automticamente en la entrada a la funcin y se
liberan tambin automticamente cuando se termina la ejecucin de la funcin.
include <stdio.h>
int main()
{
int a, b, c, suma, numero;
printf("Cuantos nmeros a sumar:");
scanf("%d",&numero);
suma = a + b + C;
/*variables locales */
return 0;
}
VARIABLES GLOBALES
Las variables globales son variables que se declaran fuera de la funcin y por defecto
(omisin) son visibles a cualquier funcin, incluyendo main ( ) .
#include <stdio.h>
int a, b, C;
/* declaracin de variables globales */
int main()
{
int valor;
/* declaracin de variable local
*/
printf("Tres valores: );
scanf("%d %d %d",&a,&b,&c);
/*
a,b,c
variables
globales */
valor = a+b+c;
......
}
Todas las variables locales desaparecen cuando termina su bloque. Una variable globales.
Una variable global r visible desde el punto en que se define hasta el final del programa
(archivo fuente).
La memoria asignada a una variable global permanece asignada a travs de la ejecucin
del programa, tomando espacio vlido segn se utilice. Por esta razn, se debe evitar
utilizar muchas variables globales dentro de un programa. Otro problema que surge con
variables globales es que una funcin puede asignar un valor especfico a una variable
global. Posteriormente, en otra funcin, y por olvido, se pueden hacer cambios en la
misma variable. Estos cambios dificultarn la localizacin de errores.
VARIABLES DINMICAS
Las variables dinmicas tienen caractersticas que en algunos casos son similares tanto a
variables locales como a globales. Al igual que una variable local, una variable dinmica se
crea y libera durante la ejecucin del programa. La diferencia entre una variable local y
una variable dinmica es que la variable dinmica se crea tras su peticin (en vez de
automticamente, como las variables locales) es decir, a su voluntad, y se libera cuando
ya no se necesita. Al igual que una variable global, se pueden crear variables dinmicas
que son accesibles desde mltiples funciones.
En el segmento de cdigo C siguiente, Q es una variable global por estar definida fuera de
las funciones y es accesible desde todas las sentencias. Sin embargo, las definiciones
dentro de main, como A, son locales a main. Por consiguiente, slo las sentencias
interiores a main pueden utilizar A.
#include <stdio.h>
int Q;
Q;
int main()
{
int A;
A = 124;
Q = 1;
{
int B;
B = 124;
A = 457;
Q = 2;
{
int c;
C = 124;
B = 457;
A = 788;
Q = 3;
b=3
y=2
altura = 4
a = 3,b = 6,c = 4
a = 3,b = 6
A = 2 * a2 * razcuadrada(3)
V=(a3/3) * razcuadrada(2)
16. Escribir un algoritmo que calcule el rea y el volumen de un cono
A = (PI * r * l)+ (PI * r2)
V = (PI * r2 * h)/3
17. Escribir un algoritmo que calcule el volumen e un elipsoide
V = (4/3) * PI * a * b *c
18. Escribir un algoritmo que calcule una ecuacin de 2 grado
19. Escribir un algoritmo que calcule el rea y el volumen de un cilindro:
radio = 3
altura = 4
20. Escribir un algoritmo que calcule la hipotenusa de un tringulo rectngulo
cateto 1 = 5
cateto 2 = 5
21. Escribir un algoritmo que calcula el equivalente en grados Fahrenheit o Celsius de las
siguientes temperaturas.
Temperatura 1 = 32 Fahrenheit
Temperatura 2 = 10 Celsius
{Regla de 3: Celsius / 5 = (Fahrenheit 32) 9}
22. Escribir un algoritmo que calcule el nmero de horas, minutos y segundos que hay en 3700
segundos.
23. Escribir un algoritmo que calcule el capital producido por un capital de 1.000.000 de
pesetas, al cabo de un ao depositado a un inters del 2%.
24. Escribir un algoritmo que calcula la siguiente expresin trigonomtrica para un valor
angulas de 90
(sen x * cos x)/(tan x)
25. Escribir un algoritmo que calcule el equivalente en pies de una longitud de 10 metros.
1 metro ------------12 pulgadas --------
39.27 pulgadas
1 pie
26. Escribir un algoritmo que calcule el rea de un rectngulo a partir de sus coordenadas:
x1 = 10
y1 = 10
x2 = 20
y2 = 20
27. Un coche se mueve, partiendo del reposo, con una aceleracin constante de 8 m/s 2.
Escribir un algoritmo que calcule:
a) La velocidad instantnea al cabo de5 segundos.
b) La velocidad media durante los primeros 5 segundos del recorrido.
velocidad instantnea = velocidad inicial + aceleracin * tiempo
velocidad media = (velocidad inicial + velocidad final)/2
28. Un cohete se lanza verticalmente con una velocidad de 500 m7s calcular la velocidad al
cabo de 40 segundos mediante un algoritmo
velocidad instantnea = (velocidad inicial) (aceleracin de la gravedad * tiempo)
Realizar los siguientes ejercicios conforme a lo que se te solicita
Entrada y salida
Los programas interactan con el exterior, a travs de datos de entrada o datos de salida.
La biblioteca C proporciona facilidades para entrada y salida, para lo que todo programa
deber tener el archivo de cabecera stdio.h. En C la entrada y salida se lee y escribe de
los dispositivos estndar de entrada y salida, se denominan stdin y stdout
respectivamente. La salida, normalmente, es a pantalla de la computadora, la entrada se
capta del teclado.
En el archivo stdio. h estn definidas macros, constantes, variables y funciones que
permiten intercambiar datos con el exterior. A continuacin se muestran las ms
habituales y fciles de utilizar.
SALIDA
La salida de datos de un programa se puede dirigir a diversos dispositivos, pantalla,
impresora, archivos.
La salida que se trata a continuacin va a ser a pantalla, adems ser formateada. La
funcin printf( ) visualiza en la pantalla datos del programa, transforma los datos, que
estn en representacin binaria, a ASCII segn los cdigos transmitidos. As, por ejemplo,
suma = o;
suma = suma+10;
printf("%s %d","Suma = ",suma);
visualiza
Suma = 10
El nmero de argumentos de printf() es indefinido, por lo que se pueden trasmitir cuantos
datos se desee. As, suponiendo que:
la sentencia
i=5
visualizar en pantalla
j = 12
c = 'A'
n = 40.791512
printf("%d %d %c %f",i,j,c,n);
5 12
40.791512
printf() convierte, da forma de salida a los datos y los escribe en pantalla. La cadena de
control contiene cdigos de formato que se asocian uno a uno con los datos. Cada cdigo
comienza con el carcter %, a continuacin puede especificarse el ancho mnimo del dato
y termina con el carcter de conversin. As, suponiendo que
i = 11
j = 12
c = 'A'
n = 40.791512
%0
%x
%u
%c
%e
El dato se considera de tipo float. Se convierte a notacin cientfica, de la
forma
{-} n.mmmmmmE{ +|-}dd.
%f
%g
%s
%1f
C utiliza secuencias de escape para visualizar caracteres que no estn representados por
smbolos tradicionales, tales como \ a, \b, etc. Las secuencias de escape clsicas se
muestran en la Tabla siguiente.
Las secuencias de escape proporcionan flexibilidad en las aplicaciones mediante efectos
especiales.
printf("\n Error - Pulsar una tecla para continuar \n");
printf("\n");
/* salta a una nueva lnea */
printf("Yo estoy preocupado\n no por el \n sino por ti.\n") ;
la ltima sentencia visualiza
Yo estoy preocupado
no por el
sino por ti.
debido a que la secuencia de escape' \n' significa nueva lnea o salto de lnea. Otros
ejemplos:
*/
*/
printf("%c", '\a');
sonora */
en los que se utilizan los caracteres de secuencias de escape de nueva lnea (\n) ,
tabulacin (\ t)
alarma (\a).
TABLA CARACTERES SECUENCIAS DE ESCAPE.
SENTENCIAS DE ESCAPE
\A
\B
\F
\N
\R
\T
\V
\\
\?
\
\000
\XHH
\0
SIGNIFICADO
ALARMA
RETROCESO DE ESPACIO
AVANCE DE PGINA
RETORNO DE CARRO Y AVANCE DE LNEA
RETORNO DE CARRO
TABULACIN
TABULACION VERTICAL
BARRA INCLINADA
SIGNO DE INTERROGACIN
DOBLES COMILLAS
NUMERO OCTAL
NUMERO HEXADECIMAL
CERO, NULO (ASCII 0)
Ejemplo
El listado SECESC. C utiliza secuencias de escape, tales como emitir sonidos (pitidos) en el
terminal dos veces y a continuacin presentar dos retrocesos de espacios en blanco.
/* Programa:SECESC.C
Propsito: Mostrar funcionamiento de secuencias de escape
*/
#include <stdio.h >
int main ( )
{
char sonidos='\a';
/* secuencia de escape alarma en
sonidos */
char bs='\b';
/*
almacena
secuencia
escape
retroceso en bs
printf("%c%c",sonidos,sonidos);
/* emite el sonido dos veces */
printf("ZZ");
/* imprime dos caractres */
printf("%c%c",bs,bs);
/* mueve el cursar al primer carcter
'Z' */
return 0;
}
ENTRADA
La entrada de datos a un programa puede tener diversas fuentes, teclado, archivos en
disco. La entrada que consideramos ahora es a travs del teclado, asociado al archivo
estndar de entrada stdin. La funcin mas utilizada, por su versatilidad, para entrada
formateada es scanf() .
El archivo de cabecera s t di o . h de la biblioteca C proporciona la definicin (el prototipo)
de scanf (), as como de otras funciones de entrada o de salida. La forma general que
tiene la funcin scanf().
scanf(cadena_de_control, var1, var2, var3,...)
cadena_de_control
anchura.
Var1, var2 ...
Los cdigos de formato ms comunes son los ya indicados en la salida. Se pueden aadir,
como sufijo del cdigo, ciertos modificadores como 1 o L. El significado es largo,
aplicado a flota (%1f) indica tipo double, aplicado a int (%1d) indica entero largo.
int n ; double x ;
scanf("%d %1f",&n,&x) ;
La entrada tiene que ser de la forma
134
-1.4E-4
En este caso la funcin scanf () devuelve n=134 x=-1.4E-4 (en doble precisin). Los
argumentos varl, var2 ... de la funcin scanf () se pasan por direccin o referencia a ser
modificados por la funcin para devolver los datos. Por ello necesitan el operador de
direccin, el prefijo &. Un error frecuente se produce al escribir, por ejemplo,
double x ;
scanf("%1f",x) ;
en vez de
scanf("%1f",&x);
Las variables que se pasan a scanf () se transmiten por referencia para poder ser
modficadas y transmtr los datos de entrada, para ello se hacen preceder de &.
Un ejemplo tpico es el siguiente:
*/
printf("Introduzca v1 y v2:");
scanf("%d %f",&vl,&v2);
/*lectura valores v1 y v2
Ejemplo
Cul es la salida del siguiente programa?
#include <stdio.h>
#define T "Tambor de hojalata."
int main()
{
char st[21]="Todo puede hacerse."
puts (T);
puts("Permiso para salir en la foto.");
puts(st);
puts (&st [8] );
return 0;
}
ENTRADA DE CADENAS DE CARACTERES
La entrada de una cadena de caracteres se hace con la funcin ms general scanf () y el
cdigo %s. As, por ejemplo,
char nombre[51]
printf("Nombre del atleta: ");
scanf("%s",nombre);
printf("Nombre introducido: %s",nombre);
La entrada del nombre podra ser
Junipero Serra
La salida
Nombre introducido: Junipero
scanf () con el cdigo %s capta palabras, el criterio de terminacin es el encontrarse un
blanco, o bien fin de lnea.
Tambin comentar que nombre no tiene que ir precedido del operador de direccin &. En
C el identificador de un array, nombre lo es, tiene la direccin del array, por lo que en
scanf () se transmite la direccin del array nombre.
La biblioteca de C tiene una funcin especfica para captar una cadena de caracteres, la
funcin gets ( ) . Capta del dispositivo estndar de entrada una cadena de caracteres,
termina la captacin con un retorno de carro. El siguiente ejemplo muestra cmo captar
una lnea de como mximo 80 caracteres.
char linea[81],
puts("Nombre y direccin");
gets(linea);
La funcin gets () tiene un solo argumento, una variable tipo cadena. Capta la cadena de
entrada
y la devuelve en la variable pasada como argumento.
gets(variable_cadena);
Tanto con scanf () como con gets ( ), el programa inserta al final de la cadena el carcter
que indica fin de cadena, el carcter nulo, \0. Siempre hay que definir las cadenas con un
espacio ms del previsto como mxima longitud para el carcter fin de cadena.
600
700
Las sentencias de escape que se utilizan en esta dormto de salida son los mismos vistos
en el cuadro anterior.
ENTRADAS (cin)
El archivo de cabecera iostream.h de la biblioteca C++ proporciona un flujo de entrada
estndar cin y un operador de extraccin, >>, para extraer valores del flujo y almacenarlos
en variables. Si no se redirige explcitamente cin, la entrada procede del teclado.
Int n;
double x;
cin >> n;
cin >> x;
Los operadores de extraccin e insercin, << y >>, apuntan en la direccin del flujo de
datos,
cout << introduzca v1 y v2:;
cin >> v1>>v2;
cout <<Precio de venta al pblico;
cin >> Precio_venta;
sin descuento
15% de descuento
UNIDAD IV
3. Estructuras de Decisin y Control
Competencia especfica a desarrollar:
Actividades de aprendizaje:
BIBLIOGRAFIA:
7. Luis Joyanes Aguilar. Fundamentos de Programacin. Algoritmos, Estructura de
Datos y Objetos. McGRAW HILL. Espaa 2003.
8. Jos Vasconcelos Santilln. Introduccin a la computacin. Publicaciones Cultural.
Mxico 2000.
9. Guillermo Levine Gutierrez. Introduccin a la computacin y a la Programacin
Estructurada. McGRAW-HILL. Mxico 1984.
10. Patricia Quiroga. Arquitectura de Computadoras. Alfaomega. Buenos Aires 2010.
11. Jaime Martnez Garza, Jorge Agustin Olvera Rodrguez. Organizacin Arquitectura
de Computadoras. Prentice Hall. Mxico 2000.
12. Notas de Internet
CONTROL SECUENCIAL
Las estructuras de control secuencial son las que se dan las instrucciones seguidas una a
una sin tener un birfucacin ni una toma de decisin. (Este tema se vi en la unidad
anterior).
ESTRUCTURAS SELECTIVAS.
PROPOSICION IF - ELSE
Esta proposicin sirve para ejecutar ciertas sentencias de programa , si una expresin
resulta CIERTA otro grupo de sentencias, si aquella resulta FALSA. Su interpretacin
literal sera : SI es CIERTA tal cosa , haga tal otra , si no lo es saltela
El caso ms sencillo sera :
if(expresin)
sentencia ;
if(expresin) sentencia ;
Cuando la sentencia que sigue al IF es nica, las dos formas de escritura expresadas
arriba son equivalentes . La sentencia slo se ejecutar si el resultado de "expresin" es
distinto de cero (CIERTO) , en caso contrario el programa saltear dicha sentencia ,
realizando la siguiente en su flujo.
Veamos unos ejemplos de las distintas formas que puede adoptar la "expresin" dentro
de un IF :
if( a > b )
if( (a > b) != 0 )
if(a)
if(!a)
if(a != 0)
if(a == 0 )
if( a == b )
if( a = b )
/* Error */
if(a)
....................
En casos ms complejos que los anteriores , la proposicin IF puede estar seguida por un
bloque de sentencias :
if(expresin)
{
sentencia 1 ;
sentencia 2 ;
.............
}
if(expresin) {
sentencia 1 ;
sentencia 2 ;
...............
}
Las dos maneras son equivalentes , por lo que la posicin de la llave de apertura del
bloque queda librada al gusto del programador . El indentado de las sentencias (sangra)
es tambin optativo , pero sumamente recomendable ,sobre todo para permitir la lectura
de proposiciones muy complejas anidadas , como se ver luego. El bloque se ejecutar
en su conjunto si la expresin resulta CIERTA. El uso del ELSE es optativo , y su
aplicacin resulta en la ejecucin de una , una serie de sentencias en el caso de que la
expresin del IF resulta FALSA.
Su aplicacin puede verse en el ejemplo siguiente :
if(expresin)
{
sentencia 1 ;
sentencia 2 ;
}
sentencia 3 ;
sentencia 4 ;
sentencia 5 ;
if(expresin)
{
sentencia 1 ;
sentencia 2 ;
}
else
{
sentencia 3 ;
sentencia 4 ;
}
sentencia 5 ;
if(exp.1)
sentencia1 ;
else if(exp.2)
sentencia2 ;
else if(exp.3)
sentencia3 ;
else
sentencia5 ;
if(exp.1)
sentencia1 ;
else if(exp.2)
sentencia2 ;
else if(exp.3)
sentencia3 ;
else
sentencia5 ;
#include <<stdio.h>>
main()
{
int c ;
printf("\nMENU :") ;
printf("\n
A = ADICIONAR A LA LISTA ") ;
printf("\n
B = BORRAR DE LA LISTA ") ;
printf("\n
O = ORDENAR LA LISTA ") ;
printf("\n
I = IMPRIMIR LA LISTA ") ;
printf("\n\nESCRIBA SU SELECCION , Y LUEGO <<ENTER>> : ") ;
if( (c = getchar()) != '\n' )
{
if( c == 'A')
printf("\nUD. SELECCIONO AGREGAR") ;
else
if( c == 'B')
printf("\nUD. SELECCIONO BORRAR") ;
else
if( c == 'O' )
printf("\nUD. SELECCIONO ORDENAR") ;
else
if( c == 'I' )
printf("\nUD. SELECCIONO IMPRIMIR") ;
else
printf("\n\a\aUD. APRETO UN CARACTER ILEGAL" ) ;
}
else
palabra clave "case" seguida por el valor de comparacin y terminada por dos puntos .
Seguidamente se ubican las sentencias que se quieren ejecutar , en el caso que la
comparacin resulte CIERTA . En el caso de resultar FALSA , se realizar la siguiente
comparacin , y as sucesivamente
Prestemos atencin tambin a la sentencia BREAK con la que se termina cada CASE.
Una caracterstica poco obvia del SWITCH , es que si se eliminan los BREAK del
programa anterior , al resultar CIERTA una sentencia de comparacin, se ejecutarn las
sentencias de ese CASE particular pero TAMBIEN la de todos los CASE por debajo del
que ha resultado verdadero. Quizs se aclare esto diciendo que , las sentencias propias
de un CASE se ejecutarn si su comparacin otra comparacin ANTERIOR resulta
CIERTA . La razn para este poco "juicioso" comportamiento del SWITCH es que as se
permite que varias comparaciones compartan las mismas sentencias de programa , por
ejemplo :
.................
case 'X' :
case 'Y' :
case 'Z' :
printf(" UD. ESCRIBIO X , Y , Z ") ;
break ;
..................
La forma de interrumpir la ejecucin luego de haber encontrado un CASE cierto es por
medio del BREAK , el que da por terminado el SWITCH
Al final del bloque de sentencias del SWITCH , aparece una optativa llamada DEFAULT ,
que implica : si no se ha cumplido ningn CASE , ejecute lo que sigue. Es algo superfluo
poner el BREAK en este caso , ya que no hay ms sentencias despus del DEFAULT ,
sin embargo , como el orden en que aparecen las comparaciones no tiene importancia
para la ejecucin de la instruccin, puede suceder que en futuras correcciones del
programa se agregue algn nuevo CASE luego del DEFAULT , por lo que es conveniente
preverlo , agregando el BREAK , para evitar errores de laboriosa ubicacin.
I.
3.
4.
5.
6.
7.
8.
9.
LOS
SIGUIENTE
ENUNCIADOS
EN
Escribir un programa que introduzca el nmero de un mes (1 a 12) y el ao y visualice el nmero de das del
mes.
Cuatro enteros entre 0 y 100 presentan las puntuaciones de un estudiante de un curso de
informtica. Escribir un programa para encontrar la media de estas puntuaciones y visualizar una tabla de
notas de acuerdo al siguiente cuadro:
Media
90-100
Puntuacin
A
80-90
70-80
60-70
0-60
Escribir un programa que lea dos nmeros enteros y visualice el menor de los dos.
2
Escribir un programa que resuelva la ecuacin cuadrtica (ax + bx + c = 0).
Escribir un programa que lea tres enteros y emita un mensaje que indique si estn o no en orden numrico.
Escribir y ejecutar un programa que simule un calculador simple. Lee dos enteros y un carcter. Si el
carcter es un +, se visualiza la suma; si es un -, se visualiza la diferencia; si es un * se visualiza el producto;
si es un /, se visualiza el cociente; si es un % se imprime el resto.
Construir un programa que indique si el nmero introducido por teclado es positivo, igual a cero o negativo.
Se desea leer las edades de 3 hijos de un matrimonio y escribir la edad mayor, la menor y la media de las 3
edades.
Escribir un programa que acepte fechas escritas de modo usual y las visualice como 3 nmeros. Por ejemplo,
la entrada 15, de febrero 1989 producir la salida 15 02 1989.
10. Escribir un programa que visualice un men con las siguientes opciones :
1. Crculo (radio)
2. Cuadrado (lado)
3. Rectngulo (base y altura)
4. Tringulo equiltero (lado)
5. Salir
Leer nicamente los datos que se te indican en cada opcin y para todos calcular el permetro y rea. El
men no debe aceptar otras opciones que no sean del 1 al 5 y debe regresar al mismo men despus de
ejecutar cada opcin exceptuando la de salir.
11. Escribir un programa que visualice un men con las siguientes opciones :
1. Leer 2 nmeros
2. Sumarlos
3. Restarlos
4. Multiplicarlos
5. Dividirlos
6. Intercambiarlos
7. Salir
Si no se elige la opcin 1 primero que las dems, al ejecutarse las otras se desplegaran resultados
ESTRUCTURAS DE REPETICIN.
Repetir mientras Selectiva simple (si).
LA ITERACION WHILE (MIENTRAS)
El WHILE es una de las tres iteraciones posibles en C . Su sintaxis podra expresarse de
la siguiente forma :
while(expresion)
proposicin 1 ;
while(expresin) {
proposicin 1 ;
proposicin 2 ;
...............
proposicin n ;
}
Repetir hasta.
LA ITERACION DO WHILE (REPETIR HASTA)
Su sintaxis ser :
do {
proposicin 1 ;
proposicin 2 ;
...............
} while (expresin) ;
Repetir desde.
ITERACION FOR (REPETIR DESDE)
El FOR es simplemente una manera abreviada de expresar un WHILE , veamos su
sintaxis :
for ( expresin1 ; expresin2 ; expresion3 ) {
proposicin1 ;
proposicin2 ;
..............
}
Esto es equivalente a :
expresin1 ;
while ( expresin2 ) {
proposicin1 ;
proposicin2 ;
..............
expresion3 ;
}
Estas dos ltimas expresiones son interesantes desde el punto de vista de su falta de
trmino relacional , lo que implica que el programador deber haber previsto alguna
manera alternativa de salir del lazo ( probablemente mediante BREAK RETURN como
veremos ms adelante ) ya que sino , la ejecucin del mismo es infinita ( tan larga como
se mantenga encendida la computadora ) .
LA SENTENCIA BREAK
El BREAK , ya brevemente descrito con el SWITCH , sirve tambin para terminar loops
producidos por WHILE , DO-WHILE y FOR antes que se cumpla la condicin normal de
terminacin . En el EJEMPLO siguiente vemos su uso para terminar un WHILE
indeterminado.
#include <stdio.h>
#include <conio.h>
main()
{
char c ;
printf("ESTE ES UN LOOP INDEFINIDO ") ;
while(1) {
printf( "DENTRO DEL LOOP INDEFINIDO (apriete una tecla):" ) ;
if( (c = getch()) == 'Q' )
break ;
Obsrvese que la expresin while(1) SIEMPRE es cierta , por lo que el programa correr
imparable hasta que el operador oprima la tecla "secreta" Q . Esto se consigue en el IF ,
ya que cuando c es igual al ASCII Q se ejecuta la instruccin BREAK ,dando por
finalizado el WHILE
El mismo criterio podra aplicarse con el DO-WHILE con FOR , por ejemplo haciendo
for (;;) { /* loop indefinido */
............
if( expresin )
break ;
/* ruptura del loop cuando expresin sea verdadera */
}
LA SENTENCIA CONTINUE
La sentencia CONTINUE es similar al BREAK con la diferencia que en vez de terminar
violentamente un loop , termina con la realizacin de una iteracin particular y permitiendo
al programa continuar con la siguiente.
1.
2.
2
2
2
3
3
3
2
1
3.
Disear e implementar u n programa que lea un total de 10 nmeros y cuente el nmero de sus entradas
que son positivos.
4.
Disear e implementar un programa que solicite al usuario un valor no negativo n y visualice la siguiente
salida (ejemplo n=6):
23456
12345
234
123
2
1
5.
6.
Escribir un programa que lea un lmite mximo entero positivo y visualice todas las potencias de la base,
menores que el valor especificado lmite mximo.
Disear un programa que sume los m=30 primero nmeros pares.