Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
APUNTES DE PROGRAMACION EN C
Septiembre 2012
A :
Rosy, mi compaera.
Tania, Vanesa y Gabriela preciosos frutos del amor.
Felipe, mi pana del alma
Todos ellos razn de mi vida.
CONTENIDO
1.
Apuntes de Programacin
5.
............................................................................................................................122
5.1.
INTRODUCCIN..................................................................................................................122
5.2.
TIPOS DE DATOS EN LENGUAJE C.................................................................................123
5.3.
Identificadores........................................................................................................................124
5.4.
Constantes en C......................................................................................................................124
5.5.
Declaracin de Variables........................................................................................................125
5.6.
Operadores En C.....................................................................................................................127
5.6.1.
Precedencia y Asociatividad de los operadores.................................................................134
5.7.
Entradas y salidas...................................................................................................................135
5.7.1.
scanf():...............................................................................................................................135
5.7.2.
printf()................................................................................................................................138
5.7.3.
Getchar y putchar..............................................................................................................142
5.7.4.
cin y cout...........................................................................................................................143
5.8.
Constantes Simblicas............................................................................................................147
5.9.
Sentencias de control..............................................................................................................149
En el Captulo 2 se revisaron las estructuras de control desde el punto de vista de los algoritmos. En
esta parte se las revisar desde el punto de vista del lenguaje C, por tanto se pone nfasis en la
sintaxis y su comportamiento ...........................................................................................................149
5.9.1.
Bucles (Estructuras de repeticin).....................................................................................149
5.9.1.1.
while..............................................................................................................................149
5.9.1.2.
do while.........................................................................................................................154
5.9.1.3 for...........................................................................................................................................157
5.9.2.
Estructuras de decisin......................................................................................................161
5.9.2.1.
Estructura de decisin binaria : Si entonces caso contrario..........................................161
5.9.2.2 Estructura Switch...................................................................................................................164
5.10.
Salidas forzosas de las estructuras.........................................................................................168
Uso de break..........................................................................................................................................168
Como se revis, break forza la salida de la estructura switch. Sin embargo, break no es patrimonio
exclusivo de switch, sino que trabajo de la misma forma con cualquier otra estructura; es decir, rompe
la ejecucin del bucle y la ejecucin se reanuda despus de la estructura en la que est ubicada........168
EJERCICIOS MISCELANEOS................................................................................................................170
BIBLIOGRAFA.......................................................................................................................................178
Apuntes de Programacin
Introduccin.
Acercaos al borde, les dijo.
Tenemos miedo, respondieron.
Acercaos al borde, les dijo.
Se acercaron.
El les empuj.... y salieron volando.
INTRODUCCION
Apuntes de Programacin
Apuntes de Programacin
Apuntes de Programacin
Captulo
1
La principal meta de la educacin es crear hombres y mujeres capaces
de hacer cosas nuevas y no simplemente repetir lo que han hecho otras
generaciones. La segunda meta de la educacin es formar mentes que
puedan ser crticas, que puedan verificar y no aceptar todo lo que se les
ofrece
Jean Piaget
PROCESO DE CONSTRUCCIN
DE PROGRAMAS
BIBLIOGRAFIA
DEFINICION
DOCUMENT ACION
ANALISIS
CONT ROL DE CALIDAD(1)
CONCLUSIONES
SELECCIN DE LA
SOLUCION OPT IMA
CALCULO DEL
ERROR
CONT ROL DE
CALIDAD(4)
TABLA D E DAT OS
CORRIDA DEL
PROGRAMA
CONT ROL DE CALIDAD(3)
ALGORIT MO
CODIFICACION E N C
Apuntes de Programacin
10
Apuntes de Programacin
11
b b 2 4ac
, no es parte de la situacin inicial. Es un conocimiento previo que
2a
Apuntes de Programacin
12
y 12i log(2i 1)
i 1
Apuntes de Programacin
13
Cmo es el comportamiento de la
fuerza a travs del tiempo en el
Apuntes de Programacin
14
Villarroel Hidrobo, Jorge. Evaluacin educativa. Diplomado en gestin del aprendizaje universitario.
ESPE. 2001
4
Correa Uribe Guillermo. Desarrollo de Algoritmos y sus aplicaciones en Basic, Pascal y C. McGraw
Hill. 1996.
Apuntes de Programacin
15
Byron Gottfried (Programacin en C) propone algunas de estas caractersticas para los programas. Sin
embargo, por orientarse al anlisis a la programacin, se propone cuidar de ellas desde este paso. La idea
general del tema, ha sido precisamente tomada de dicho autor)
Apuntes de Programacin
16
Apuntes de Programacin
17
punto-, puede representar a varios nmeros. (el siguiente prrafo contiene la explicacin
del por qu tal afirmacin).
TIPO
SUBTIPO
Entero
Numrico
Decimal
(Punto
Flotante)
CARACTERISTICAS
Exacto
Precisin
Simple
Doble
Precisin
Caracter
Alfanumrico
Cadena De Caracter
EJEMPLOS
10 18969 0
-256
Aproximados.
1.0002 2E-5 5. .0008
Tienen Punto Decimal Y/O -122e309
Exponente
Admiten Un Slo Caracter
Los escribiremos entre
comillas simples
Conjunto De Caracteres
Los escribiremos entre
comillas dobles
S s
1
N n 0
Espe NOMBRE
JUAN MONTALVO
Apuntes de Programacin
18
En la tabla de datos se especificar el tipo al que corresponde cada una de las variables.
Para el efecto se tomar en cuenta el uso que se le dar, su rango, etc.
Tipo de dato (con relacin a la definicin del problema). En esta columna se har
constar si el valor de la variable ser parte de la situacin inicial (Dato), en cuyo caso se
pondr una letra E (de entrada), de la Final (Informacin), se pondr la letra S (de
salida), de ambas E/S, o si ser generado G. Este ltimo considerado como aquel que no
es parte de los datos que se ingresan mediante dispositivos de entrada sino que se
producen en los procesos como resultado de aplicacin de una frmula, clculo o
asignacin. Cuando se trate de constantes que han sido reemplazadas con un nombre
(Como en el ejemplo del valor de PI), se dice que el dato es definido, en cuyo caso se
pondr una letra D.
Observaciones.
En donde se consignar cualquier informacin adicional que se
considere de utilidad; por ejemplo: modo de ingreso, frmula con la que es calculado,
rango de valores en el que debe hallarse, etc.
La tabla de datos es un paso de mucha utilidad como parte de la documentacin del
programa (ver seccin 1.12)
Ejercicio: Construir un mapa conceptual acerca de los tipos de adtos, en la que para
cada tipo se establezcan:
Tipo
Caractersticas:
o Requerimiento de memoria,
o Rango
o Sintaxis
o Operaciones
o mbito de aplicacin.
Apuntes de Programacin
19
Los algoritmos pueden ser escritos de variadas formas: en lenguaje corriente, mediante
grficos (diagramacin), o en forma simblica para aplicarlos en los programas
computacionales.
Dado que el objetivo de estos apuntes es prepararnos para la realizacin de programas a
ser ejecutados en el computador, el lenguaje que se utilice para escribir los algoritmos
ha de ser de preferencia el simblico, es decir, un lenguaje "cablegrfico", concreto, que
elimine todo aquello que sea accesorio, (siempre y cuando no se sacrifique la claridad y
precisin), y que sea lo mas parecido a los lenguajes de programacin, pero sin usar las
palabras claves de stos. Si la escritura del algoritmo cumple con esas caractersticas, se
estar en el caso de los denominados "pseudocdigos".
No existe una sintaxis especifica para ellos. Los elementos aqu usados son nicamente
una convencin que bien puede ser modificada. Lo que ms debe preocuparnos es la
lgica subyacente.
Todo proceso informtico procedimental (orientado a procedimientos) puede
esquematizarse como en la Figura 2. Representacin de un proceso informtico
procedimental
Entrada de
Datos 7
procesos
salida de informacin
Los algoritmos responden tambin a este esquema y deben contener una serie de
elementos que permitan su ulterior traspaso a los lenguajes de programacin.
Es mejor que empiecen con la identificacin del algoritmo, la misma que contendr un
nombre, el mismo que estar formado cumpliendo las normas que siguen los nombres
de los archivos en el Sistema Operativo de la mquina. Estar seguido por una muy
breve descripcin del propsito del algoritmo.
En otra lnea se har constar el nombre del autor o autores; en la siguiente lnea se
escribir la fecha de creacin o actualizacin del mismo.
Continuar con una clara descripcin de los elementos de entrada con sus
caractersticas, debe detallar los procesos que forman parte de la solucin, y han de
especificar los elementos de salida (informacin) y su forma, que ha de entregar como
resultado el algoritmo. Adicionalmente el algoritmo contendr otra informacin
adicional que sirve para su identificacin. La Figura 3 Esquema de un algoritmo
muestra la estructura de un algoritmo, relacionndolo con los procesos informticos
procedimentales.
Si bien inicialmente deben detallarse las variables (elementos) a ser utilizadas,
indicando su tipo y nombre, el ingreso de sus valores no necesariamente se lo ha de
7
Un dato es el valor o significado de una constante, de una variable, o de una expresin en general.
Apuntes de Programacin
20
hacer al inicio del algoritmo, sino que puede hacrselo como parte de los procesos,
intercalndolos entre ellos.
En lo que tiene que ver con los elementos de salida, el mismo algoritmo, en alguna parte
de l, indicar el momento y la manera de presentarlos.
La lista de elementos de entrada o de variables consta en la tabla de datos, de la cual
nicamente se requiere el tipo y nombre de cada una de las variables que intervienen en
el algoritmo.
Identificacin
Del algoritmo
Instrucciones de los
Procesos
(Ingreso de datos y otras operaciones
Las instrucciones se las obtiene del anlisis, con la diferencia que, como se anot, el
lenguaje usado es lo ms simblico posible. Para formar estas instrucciones se utilizan
algunos diferentes tipos de enunciados:
Enunciado de inicio y finalizacin.
Se dijo ya que todo algoritmo debe ser finito; es decir, debe tener un inicio y un fin.
Para especificar aquello se usarn los enunciados inicio y fin. No son elementos
Apuntes de Programacin
21
formales del algoritmo. Por el contrario, son elementos lgicos. Ser la lgica del
algoritmo la que lleve a la finalizacin del mismo. Tal cosa no siempre es conseguida,
especialmente por los programadores noveles. Con prctica en el manejo de los
diferentes tipos de enunciados se logra que siempre existe un fin lgico del algoritmo.
Enunciado de asignacin.
Es la instruccin por medio de la cual se logra que una variable tome un valor 8 , a lo que
se le conoce como definir la variable.
Es posible hacerlo mediante dos formas:
a) Leyendo el valor, para lo cual, en trminos algortmicos se usan los verbos leer o
ingresar; a esta forma de enunciado se denomina de entrada de datos; y,
b) Usando el enunciado de asignacin propiamente dicho, para lo cual se usa una
flecha de izquierda a derecha (). A la derecha de la flecha constar el valor que es
asignado, expresado como constante, como variable que debe estar previamente
definida, o expresin de cualquier tipo que devuelva9 un dato del tipo de la
variable a la que se le asigna.
Ejemplo: Si x e y son variables enteras, c una de caracter, f una decimal y l una de
cadena de caracter, las siguientes son expresiones de asignacin vlidas:
Tal valor depender del tipo de dato de la variable a la que se le asigna. As, si es entera, el valor lo
ser tambin. Si decimal, el valor tendr esa caracterstica. Si es alfanumrica de tipo caracter, el valor
ser un caracter cualesquiera (Uno de los ASCCI); y si por ltimo es tipo cadena de caracter, el valor
ser una palabra.
9
Devolver es un verbo que en programacin es equivalente a resultado de, que puede ser un valor,
un caracter, un conjunto de ellos, o en ocasiones una accin (Como imprimir,etc.).
Apuntes de Programacin
22
A medida que el programador vaya adquiriendo experiencia podr omitir alguno(s) control(es) de
calidad. Y es que se procura que los procesos de elaboracin de programas sean realizados en trminos de
Calidad Total, de tal manera que cada paso sea realizado con tal nivel de calidad intrnseca, que sea
posible eliminar los puntos de control y mantener solamente los puntos de verificacin. Del mismo modo,
se procurar, como consecuencia, evitar todos los pasos que no den valor agregado al producto final,
cual es el programa de computacin. Por tanto, se trata de realizar procesos con eficacia, eficiencia y por
tanto bajo parmetros de productividad.
Apuntes de Programacin
23
radio
rea
Pantalla
Observaciones
INICIAR
X
12.56
4
5
2, 12.5664
FIN
1,2,3,4,5
-2
12.56
-2, 12.5664
0, 0
(*) Bien podra escribirse en cada fila un paso del anlisis, o, como en la segunda
prueba de escritorio, en la misma fila todos los pasos, detallando a la izquierda los
nmeros correspondientes de los pasos, o, como en al tercera, eliminar los nmeros de
pasos. (Regresar)
Paso 4. Tabla de datos.
Dato
radio
rea
Descripcin
Tipo
Radio del
Decimal
circulo
Area del circulo Decimal
E/S/G
E/S
Observaciones
RadioO
G/S
Identificacin
USAR:
Decimal radio;
11
Declaracin de variables
Apuntes de Programacin
24
Decimal rea;
INICIAR
Imprimir "CALCULO DEL AREA DE UN CIRCULO.
Saltar e Imprimir "INGRESE EL RADIO :";
Ingresar radio;
area 3. 1416*radio*radio;
Saltar e imprimir "Radio = # Area = #19, radio, rea;
FINALIZAR
Paso 6. Control de Calidad 2.
pseudocdigo).
Procesos
radio
2
rea
Pantalla
12.5664 CALCULO DEL AREA DE UN
CIRCULO
INGRESE EL RADIO : 2
Radio = 2 Area= 12.5664
Observaciones
FIN
-2
Debe validarse
de tal manera
que se acepten
radio>0.FIN
FIN
main()
{
13
En esta fase concntrese la atencin en la lgica del programa antes que en la parte sintctica y
semntica. Estos ltimos sern analizados a lo largo del documento.
Apuntes de Programacin
25
float radio;
float area;
Declaracin de variables
/* INICIO DE CALCULO*/
printf ("CALCULO DEL AREA DE UN CIRCULO");
printf ("\nINGRESE EL RADIO: );
Procesos
scanf(%f, &radio);
area=3.1416 *radio*radio;
printf ("\nRADIO = %f AREA = %f ",radio, area);
}
rea
Pantalla
12.5664 CALCULO DEL AREA DE UN
CIRCULO
INGRESE EL RADIO : 2
Radio = 2 Area= 12.5664
Observaciones
FIN
-2
Debe validarse
de tal manera
que se acepten
radio>0.FIN
FIN
Apuntes de Programacin
26
1.10.
14
Ejecutar un programa es hacer que se efecten las instrucciones que forman parte de l. Dado que el
comando que permite ejecutar un programa es Run que al espaol se traduce como correr, se ha
generalizado ste ltimo trmino como un sinnimo de ejecutar.
15
W. Allen Smith, e n Anlisis Numrico trata el tema de manera extensa y con un enfoque orientado
hacia los mtodos numricos, que son los usados en procesos computacionales. La idea general para este
tema se basa en lo manifestado por Este Autor. (W. Allen Smith, Anlisis Numrico, Prentice-Hll, pg.
22-32).
Apuntes de Programacin
27
Error relativo
Es el cociente entre el error absoluto y un nmero convenientemente seleccionado, que
puede ser el valor exacto, el calculado o el promedio de los dos.
Errorrelativo
valorexacto valorcalculado
valorexacto
Ecuacin 2 Valor Relativo respecto del valor exacto ( Es de uso ms frecuente, siempre y cuando el
valor exacto sea diferente de cero)
Errorrelativo
valorexacto valorcalculado
valorcalculado
Ecuacin 3Valor Relativo respecto del valor calculado (Se utiliza ciando el valor exacto es igual a cero
y el calculado distinto de cero)
Errorrelativo
valorexacto valorcalculado
valorexacto valorcalculado
2
Ecuacin 4Valor Relativo respecto del promedio de los valores exacto y calculado (Se recomienda
utilizarlo cuando los valores exacto y calculado son, en realidad, calculados no exactos-)
Si a cada una de las ecuaciones se las multiplica por 100, entonces se tiene el error
relativo porcentual
En general puede afirmarse que el error relativo es una mejor medida del error que el
absoluto.
Considerar los dos siguientes casos:
El valor exacto en un problema es 1.23456789 y el calculado 1.234567 , por tanto,
Error absoluto = 1.23456789-1.234567= 0.00000089
Error relativo = (1.23456789-1.234567)/1.23456789 =0.0000007209
Si el valor exacto es 1.23456789 x 1010 y el calculado 1.234567 x1010, por tanto,
Error absoluto = 1.23456789 x 1010 -1.234567 x 1010 = 0.00000089 x 1010 =8900
Error relativo = (1.23456789 x 1010 -1.234567 x 1010)/1.23456789 x 1010
=0.0000007209, que es igual al del ejemplo anterior.
Desde otro punto de vista el error puede ser por redondeo, significativo, de
truncamiento, y propagado. A saber:
Apuntes de Programacin
28
Error de redondeo
Se origina en el hecho de que el conjunto de nmeros flotantes de la mquina, no
goza de la propiedad de densidad. Equivale a decir que no siempre entre dos nmeros
reales existe otro real. Ello ocasiona que muchos nmeros reales pueden representarse
por uno slo (El ms cercano). 16
Error debido a las cifras significativas
Si se consideran como cifras significativas a aquellas que siendo vlidas tienen
sentido, este tipo de error se presenta cuando el nmero de aquellas cifras es menor que
lo esperado. Se presenta cuando se realiza una resta entre cantidades (flotantes) muy
parecidas , o cuando se suman varias cantidades de magnitudes y signos diferentes o
tambin cuando en las operaciones de divisin el divisor es muy pequeo.
Ej. Restar:
3.432728 Menos
2.432564 Se obtiene
1.000164
Ej. Restar:
1.5689788693 Menos
0.5688143796 Se obtiene
1.0001644897
Sin embargo, cuando se trabaja
con 6
cifras decimales se obtiene:
1.000164
Error de truncamiento:
Se presenta cuando para obtener un valor es necesario realizar un nmero de pasos muy
grande e incluso infinito y se restringe a un nmero inferior o finito de ellos. En este
caso, el error no depende del sistema numrico, sino del comportamiento del algoritmo.
Ej. Si se construye un programa para resolver el valor de la serie:
y
n,
n 1
la serie. Por tanto el error es relativo a dicho nmero. Para solucionar aquello conviene
adoptar artificios matemticos como el de establecer un error mximo admisible, que
ser comparado con el obtenido de la resta entre el valor obtenido en un trmino y el
obtenido en el trmino inmediato anterior. Si tal resultado es menor o igual al error
mximo obtenido, se lo considera aceptable.
No debe confundirse este error con el truncamiento que puede producirse como efecto
de dividir dos enteros, en cuyo caso se obtiene, segn se recordar, un entero trunco
(Sin la parte decimal), o cuando, como se ver ms adelante, se asigna a una variable
entera un valor decimal (Tambin se trunca, eliminando la parte decimal).
16
Allen Smith en su Anlisis numrico (Prentice Hall, 1996), Pg. 24, aclara anotando que esto se debe a
la naturaleza discreta del sistema numrico de mquina de punto flotante, el cual a su vez se debe a su
longitud de palabra finita. Tal afirmacin es sinnima de lo expuesto en este documento. Ms adelante,
al analizar con ms detalle los nmeros en la mquina, se hace una explicacin a mayor detalle.
Apuntes de Programacin
29
Error propagado.
Se refiere al error de salida producto de un error de entrada. En ste caso, el error
depender del tipo de clculos que se deban realizar en los procesos. El error, entonces,
ser dependiente del tipo de funcin que contengan los procesos. Si adicionalmente se
presentan errores de los tipos antes mencionados, el error final ser la acumulacin de
los distintos tipos de errores
Ej. Si se sabe que
y 4 t 2 2 t 5, y t = 2.01 pero se ha redondeado a 2, entonces:
Error de entrada:
absoluto
|2.01-2|=0.01
Relativo
2.01 2
0.00498
2.01
Error de salida
y para x=2.01 es 15.1804
y para x=2 es 15
|15.1804-15|=.1804
Mientras que si y=4t,
t =2.01 y se ha redondeado
a2
Error de entrada
Absoluto
|3.01-3|=.01
Absoluto
|8.04-8|=0.04
Error de salida
Para x=2.01 , y=8.04
Para x=2 , y=8
151804
.
15
0.019
151804
.
Relativo
0.00498
Relativo
8.04 8
0.0498,
8.04
que
1.11.
Conclusiones.
Documentacin.
Todos los pasos sern debidamente respaldados en un documento que ms tarde ser de
gran utilidad, tanto para el mantenimiento del programa, su eventual comercializacin,
etc. Ello se complementar con un documento elaborado para el usuario y que se lo
conoce precisamente con el nombre de Manual del usuario, el mismo que contendr
la descripcin del programa, su mbito de aplicacin, el modo de instalarlo, modo de
Apuntes de Programacin
30
Ejercicio 1.2
1. Representar
mediante
un
ALGORITMO las actividades
del
procedimiento
computacional para resolver
problemas.
2) A partir de la siguiente definicin,
realice al anlisis y obtenga la
respuesta. (Sin usar ecuaciones)
Un comerciante vende huevos en el
mercado. El primer cliente compra
la mitad de todos los huevos ms
medio huevo. El segundo la mitad
de los huevos que le quedaban ms
medio huevo. El tercero solo
compra un huevo. El comerciante
queda sin mercanca. Cuntos
huevos trajo al mercado?
3) Un programa calcula la longitud de
la circunferencia, el rea de un
crculo y el volumen de una esfera a
partir del radio. Realizar un anlisis
del error propagado para cada una
de las incgnitas y de sensibilidad
110 Kg
112 Kg.
113 Kg.
114 Kg.
116 Kg.
117 Kg.
118 Kg.
120 Kg.
Cunto pesa cada saco por separado? (No usar ecuaciones)
115 Kg.
121 Kg.
Apuntes de Programacin
31
Solucin 1.
Inicio
Doblar el cuadriltero por
una diagonal.
Si sus bordes coinciden, se
trata de un cuadrado
Fin.
Solucin 2.
Inicio
Doblar el cuadriltero por
una diagonal. Luego
desdoblar la figura. Doblar
por la otra diagonal.
Si los bordes coinciden en
ambos casos, se trata de un
cuadrado.
Fin
Hallar la solucin ptima. Argumentar la seleccin
7) Un conocido juego popular para
adivinar el da y mes de nacimiento
de una persona, se basa en el
siguiente algoritmo:
La persona que adivina, pide a la otra
que realice los siguiente:
Escribir el nmero de da de
nacimiento.
Duplicar el nmero
Multiplicar por 10 lo obtenido.
Sumar 73 al producto
Multiplicar por 5 la suma
Aadir a lo obtenido el nmero de mes
del nacimiento.
Hacer conocer el valor obtenido.
Con esto, el adivino le dice la fecha en
la que naci. Cmo lo hace?. Definir el
problema. Realizar la tabla de datos y
la prueba de escritorio.
8) Realizar un mapa conceptual
referente a los tipos de datos en el
computador
9) En los siguientes ejercicios escribir
el algoritmo en seudo cdigo y
realizar la prueba de escritorio:
a) INICIO
Ingresar un nmero entero
Ingresar un 2do nmero entero
Sumar
los
dos
nmeros
ingresados
Restar el 1ro. Del segundo
Multiplicar
los
nmeros
ingresados
Apuntes de Programacin
Solucin 3.
Inicio
Doblar por la una diagonal.
Doblar por la otra diagonal.
Si los bordes coinciden, se
trata de un cuadrado.
Fin
Dividir
el segundo para el
primero
Obtener el resto entre el 1ro. Y
el 2do.
FIN
b) INICIO
Ingresar dos nmeros
reales
Hacer que el 1er. nmero
sea igual
al valor
absoluto de su valor
Hacer que el 2do.
Nmero sea el mismo
cambiado de signo
Sumar los dos nmeros
Imprimir los valores
actuales de los dos
nmeros y la suma
FIN
c) INICIO
Ingresar un
nmero
entero
Ingresar un 2do. Nmero
entero
En una variable auxiliar
poner el valor del 1er.
Nmero
En la variable que
contiene al 1er. Nmero
poner el valor del 2do.
En la variable que
contiene al 2do. Poner el
valor de la variable
auxiliar
FIN
32
d) INICIO
ingresar un nmero entero
si el nmero ingresado es
mayor que cero imprimir
Nmero positivo
caso contrario imprimir
Nmero no positivo
FIN
e) INICIO
Ingresar un nmero
flotante
En una variable entera
poner
el
nmero
ingresado
En una variable flotante
poner la resta de los dos
anteriores
Imprimir el nmero
ingresado y las dos
variables adicionales
FIN
Qu se obtuvo?
10) Para resolver una ecuacin de 2do.
grado mediante un algoritmo, se
utilizan dos alternativas. La primera
usando el criterio de la factorizacin
y la segunda mediante la frmula
general. Determine cul es la
solucin ptima. Argumente.
11) Construir
el
algoritmo
en
pseudocdigo y el programa en
lenguaje C, a partir del siguiente
enunciado:
Se conoce que el monto de un
porcentaje p calculado sobre una
cantidad x es m. Determinar el valor
de x.
12) Mediante una hoja de clculo para la
expresin:
cos( x ) 1 1i (
x 2i
( 2i )!)
Apuntes de Programacin
33
En el segundo poner
contenido del auxiliar
Presentar los dos nmeros
FIN
el
b)
INICIO
Ingresar un nmero entero
En la misma variable
sumarle 2
Multiplicarlo por 3
Dividirlo para 4
Restarle 10
Presentar la variable que
contuvo el nmero ingresado
FIN
Apuntes de Programacin
Captulo
2
No hay nada ms maravilloso que pensar una idea nueva.
No hay nada ms magnfico que comprobar que una idea nueva
funciona.
No hay nada ms til que una nueva idea que sirve a nuestros fines.
Edward de Bono
2.
Existen ciertos tipos de procesos de uso muy frecuente en los algoritmos. Ellos se
revisan a continuacin.
Para los temas que vienen, considrense las siguientes definiciones:
Proceso: Una o ms instrucciones. Si son ms de una, debe tratrselas como un todo
nico. No importa su naturaleza. (Puede ir numerado. Ej. Proceso 1, Proceso n..)
Sentencia: Instruccin simple. Puede estar numerada. Ej. Sentencia 1, Sentencia 2,
Sentencia n..
Tanto procesos como sentencias existen para ser ejecutadas. Es su razn de existir.
Condicin: Test lgico o pregunta que demanda como respuesta nicamente Verdadero
(V distinto de 0) o Falso (F igual a 0).
Las condiciones no se ejecutan. Se evalan. Lo que quiere decir que tienen un valor de
verdad (Verdadero o Falso)
2.1.
Ejecucin
secuencial)
De
Un
Proceso
Una
Sola
Vez
(Estructura
Ejecuta un proceso una sola ocasin, sin permitir su reejecucin. Una vez ejecutado
finaliza el algoritmo.
FORMA
INICIO Proceso FIN
Donde: INICIO es un elemento que indica el punto de partida,
Proceso, el que se ejecuta una sola vez; y,
FIN indica el punto de finalizacin.
ESQUEMA DEL COMPORTAMIENTO
INICIO
Proceso
FIN
Ntese que este algoritmo ejecuta el proceso sin ninguna restriccin y sin dar siquiera
alternativa de no ejecutarlo o repetirlo. En otras palabras, no depende de ninguna
condicin.
Prueba de escritorio:
Paso
1
Proceso
operaciones
Observaciones
Inicio
Se ejecuta el proceso
Finalizacin
El estudiante deber realizar todos los pasos previos y posteriores a la conformacin del algoritmo
INCIAR
P U
Imprimir "RESOLUCION DE TRIANGULOS RECTANGULOS";
R N
Saltar e imprimir Datos iniciales: Dos catetos";
O I
Saltar e imprimir Ingrese Cateto mayor :";
C C
Ingresar cmayor;
E
O
Saltar e imprimir" Ingrese Cateto menor:";
S
Oo
Ingresar cmenor;
2
2 1/2
hipote(cmayor +cmenor ) ;
tangencmayor/cmenor;
angulol arctg(tangen)*(180)/pi;
angulo29-angulo1;
perimecmayor+cmenor+hipote;
sperimeperime/2;
area(sperime*(sperime-cmayor)*(sperime- cmenor)*(sperime~hipote)) 1/2;
Saltar e imprimir "Cateto Mayor = # Cateto menor = # Hipotenusa ="),
cmayor,cmenor,hipote;
Saltar e imprimir "Angulo 1 = # Angulo 2 = # ",angulol,angulo2;
Saltar e imprimir "Permetro = #", perime;
Saltar e imprimir "Area = #", area;
FINALIZAR
Ejercicio 2.1
Escribir los pasos necesarios para resolver los siguientes problemas incluyendo la
codificacin en lenguaje C para lo cual consulte el Capitulo 5, seccin 5.1):
1. Ingresar
un nmero real,
presentarlo en pantalla.
2. Ingresar un caracter y presentarlo en
pantalla.
3. Ingresar una cadena de caracteres y
presentarla en pantalla.
4. Ingresar dos nmeros, uno real y
otro entero, multiplicarlos y
presentar los nmeros ingresados y
el producto.
5. Leer (ingresar por teclado) un
caracter en minscula y presentarlo
como mayscula. (Para convertir un
caracter a mayscula, en trminos
algortmicos
debe
escribirse
convertir x a mayscula si x es
la variable-. Cada lenguaje de
programacin tiene sus propias
palabras, funciones u rdenes que
realizan tal actividad. )
6. Previo un mensaje ingresar el
nombre de una persona. A
continuacin y tambin despus de
un mensaje, ingresar la edad.
Ej. Ingresar nombre: Pilar
Ingresar la edad de Pilar: 21
Una vez borrada la pantalla se
presentar:
10x
1 01
. x
c arg a
c arg a / masa
, Si la carga es
FORMA:
INICIO repetir proceso FIN
Donde INICIO es un elemento que indica el punto de partida,
FIN indica el punto de finalizacin puramente formal del algoritmo, mas no de la
repeticin del proceso; y,
Proceso, el que se ejecuta un nmero infinito de veces.
"repetir" es una accin que permite reejecutar el proceso.
La accin de repetir acta sobre el proceso. Esto es, se ejecuta ste y el control" del
algoritmo regresa a "repetir", constituyendo un circulo del que nunca sale. Por tanto
jams se llegar a FIN.
Puede representarse de dos maneras en diagramacin estructurada :
Repetir
Proceso
Proceso
Repetir
En el primer caso, el verbo Repetir anuncia que lo que se repetir es la ejecucin del
proceso, mientras que en el segundo caso, se ejecuta el proceso la primera ocasin y por
encontrarse el verbo Repetir a continuacin, se vuelve a ejecutar el procesos un
infinito nmero de veces.
Proceso
Operaciones
Operaciones
......................
Observaciones
Se ejecuta proceso
Se ejecuta proceso
........................
Mas, como queda dicho, los procesos de repeticin infinita no son prcticos. Lo prctico
y comn es la repeticin finita. Para lograr estructuras de repeticin finita, es necesario
conocer previamente los siguientes conceptos:
2.3. Contadores.
Son variables que adoptan valores que se ven incrementados en una o ms unidades
segn sea lo que se cuente. Tienen las siguientes caractersticas:
Deben ser declarados. Para ello se indicar tipo y nombre.
Deben ser inicializados . Esto quiere decir que al inicio debe
asignrseles un valor de partida, que generalmente es 0 1. Sin
embargo puede ser otro valor.
Se ven incrementados cada vez que se cuente algo.
Este incremento se lo hace con la siguiente expresin, en la que al
contador se le ha denominando "contador":
contador contador + incremento;
Que significa que el valor actual de la variable contador es el
valor anterior aumentado en el incremento.
cuando el incremento es 1 , se escribir:
contador contador + 1;
Ejemplo 3. Si se utiliza un contador denominando cont, que empieza a contar a) desde
cero y b) desde 1 y se incrementa cada vez en a) 1 unidad y b) en 2 unidades cuando se
ejecuta un proceso, deber escribirse:
Ejemplo 3. Si se utiliza un contador denominando cont, que empieza a contar desde
cero y se incrementa cada vez en 1 unidad cuando se ejecuta un proceso, deber
escribirse:
Cuando la prueba de escritorio se realice sin datos especficos sino sobre procesos, se llamar prueba de
escritorio cualitativa.
USAR
entero cont;
INICIO
cont0:
repetir
procesol;
contcont+1
FIN
cont Proceso1
0
Operaciones
1
Operaciones
2
...
Observaciones
Valor inicial de cont
Se ejecuta proceso 1
cont se incrementa en 1
Se ejecuta proceso 1
Cont se incrementa en 1
Ejemplo 3. Si se utiliza un contador denominando cont, que cuenta las veces que se
ejecuta un proceso 1 y empieza a contar desde 1 (porque el proceso 1 ya se ejecut
una ocasin) y se incrementa cada vez en 2 unidades cuando se ejecuta dos veces un
proceso, deber escribirse:
USAR
entero cont;
INICIO
proceso 1
cont1;
repetir
procesol;
proceso 1;
contcont+2;
FIN
cont Proceso1
Operaciones
1
Operaciones
Operaciones
3
...
Observaciones
Se ejecuta proceso1
Valor inicial de cont
Se ejecuta proceso1
Se ejecuta proceso1
Se incrementa cont en 2
2.4. Acumuladores.
Son variables que acumulan valores ya sea por incremento o decremento de cantidades
constantes o no. Tal incremento o decremento puede lograrse mediante sumas,
multiplicacin, potenciacin, etc. Tienen caractersticas semejantes a los contadores.
Deben ser declarados: para ello se indicar tipo y nombre
Deben ser inicializados. Esto quiere decir que al inicio debe
asignrseles un valor de partida, que generalmente es 0 1.
(depender del tipo de operacin que realice la acumulacin).
Sin embargo, puede ser otro valor.
Se incrementan (o decrementan) cada vez que se lo solicite. Este
incremento (o decremento) se lo hace con la siguiente expresin,
en la que al acumulador se le ha denominado acumula:
acumulaacumula {operador} incremento;
Que significa que el valor actual de la variable acumula es el
valor anterior operado18 en el incremento.
Son ejemplos en pseudocdigo:
acumulaacumula + 5;
acumulaacumula - 5;
acumulaacumula * 5;
acumulaacumula / 5;
Ejercicio 2.4
Mediante proceso de repeticin infinita y, cuando el problema lo amerite, usando los
conceptos de contador y acumulador, realizar el algoritmo y la correspondiente prueba
de escritorio:
3. Generar (y presentar en pantalla)
1. Presentar la palabra Ecuador un
los nmeros cardinales
nmero infinito de veces
4. Generar y presentar en pantalla)
2. Generar (y presentar en pantalla)
los nmeros pares
los nmeros naturales.
18
operado significa que ha sido sometido a una operacin aritmtica cualquiera. Podra entonces ser
sumado, restado, multiplicado por, dividido para.
5.
n N Pares { p / p 2 * n}
OPERADOR
SIGNIFICADO
<
Menor que?
>
Mayor que?
=
Igual a?
c1
c2
Conjuncin
y lgico
c1c2
V
V
F
F
V
F
V
F
V
F
F
F
Disyuncin
"0 Lgico
(*)
c1 c2
V
V
V
F
Negacin
"no" lgico
c1
F
F
V
V
OPERACION
Negacin
Conjuncin
Disyuncin
OPERADOR
19
ASOCIATIVIDAD
ID
ID
ID
Ejercicio 2.5 .
Escribir las condiciones para los siguientes casos. Realizar las correspondientes pruebas
de escritorio para los casos crticos. Transformar la condicin a su opuesta.
Ejemplo:
Aceptar un nmero positivo.
Respuesta : n>0
Prueba de escritorio:
n
0
-4
4
n>0
F
F
V
Observacin
Rechazar
Rechazar
Aceptar
n<=0 Observacin
V
Rechazar
V
Rechazar
F
Aceptar
Aceptar un nmero par
Aceptar un nmero impar
Aceptar como respuesta a la pregunta Desea Reejecutar? Una S , N
Aceptar como respuesta a la pregunta Desea Reejecutar? Una S, s, N, n
21
Son, como ya se dijo, aquellas que permiten ejecutar procesos repetitivos dependiendo
de que el resultado de evaluar una condicin (a partir de un test lgico) sea diferente de
0 (Verdadero).
2.6.2. Estructura Mientras-Repetir.
Permite que los procesos al interior del bucle se ejecuten (una o varias veces -repitan-)
mientras la condicin es verdadera. Es posible incluso que no se ejecuten ni una sola
ocasin esos procesos.
FORMA:
Sentencia 1
Mientras (condicin)
procesol
sentencia 2
repetir
proceso 2
Donde:
Sentencia 1 es una expresin en la que a la(s) variable(s) que sea(n)
sometida(s) al test lgico se le(s) asigna un valor inicial, de tal forma que
al momento de llegar al test, sea posible su evaluacin.
No necesariamente Se ubicar inmediatamente antes de mientras, pero
siempre antes.
Sentencia 2 es una expresin en la que a la(s) variable(s) que sea(n)
sometida(s) al test lgico se le(s) modifica su valor inicial, de tal forma
que al momento de regresar al test, sea posible su evaluacin y que
posibilite salir de la estructura.
COMPORTAMIENTO
Sentencia 1
Mientras
(condicin)
proceso1
sentencia2
repetir
proceso2
Comentarios:
La sentencia 1, como queda dicho, asigna a la variable que participar del test lgico
(de la condicin), a fin de que el algoritmo pueda ejecutar la primera vez el
procesol. Si como resultado de evaluar la condicin, se tiene un valor 0 (Valor de
verdad Falso), el control del algoritmo no ingresa al bucle, y directamente pasa al
proceso 2, sin ejecutar el procesol.
El proceso 1 puede ser una sentencia simple o bien un conjunto de sentencias tan
grande o pequeo, o tan simple o complejo como el problema demande. Lo
importante es que el proceso 1, una vez que el control ingres al bucle, se ejecuta
ntegramente.
La sentencia2 (que generalmente forma parte del procesol, pero que aqu se lo
escribe aparte nicamente por razones de orden didctico) en algn momento debe
modificar el valor de la variable del test, de tal forma que al retornar a la condicin,
si sta deja de cumplirse, no se ejecutar el procesol, y el control pasa al proceso 2.
Si en un algoritmo no existe esta sentencia 2, el bucle Se repetir infinitamente.
En diagramacin estructurada se representa as:
Mientras (condicin) repetir
Proceso
Ejemplo 4 Escribir un algoritmo en pseudocdigo que permita generar(*) los nmeros
dgitos (0 al 9) y presentarlos en pantalla.
Definicin: Generar e imprimir los dgitos en orden ascendente.
Anlisis:
1. inicializar la variable dgito en 0
2. Mientras dgito sea menor que 10(**) imprimir dgito, incrementar en uno a
dgito y repetir
3. Finalizar (cuando dgito sea mayor o igual a 10)
Algoritmo:
-mien- Generacin de dgitos. Uso de mientras-repetir
Marco Vergara 0.
03/10/2005
(*)
El trmino generar entindasele como calcular, producir, etc., a diferencia de ingresar, que implica el
uso de unidades de entrada.
(**)
USAR:
entero dgito;
INICIAR
Imprimir "GENERACION DE DGITOS;
dgito 0;
Mientras (dgito <10)
Saltar e Imprimir "#", dgito;
dgito dgito + 1;
Repetir
FINALIZAR
[ sentencia ]
[condicin]
[proceso1]
[sentencia2]
Diagrama estructurado:
Inicio
Imprimir Generacin de dgitos
digito 0
Mientras (digito <10) repetir
Saltar e imprimir digito
digito digito +1
Fin
Control de Calidad. Prueba de escritorio (Sobre el algoritmo).
dgito
0
1
2
.
.
9
10
Pantalla
GENERACION
DGITOS
0
1
2
.
.
9
Observaciones
DE
FIN
Ntese que fue necesario asignar un valor inicial a la variable dgito, para que sea
evaluado por La condicin. Siempre que dgito tenga un valor menor a 10 Se presentar
en pantalla y nicamente cuando el test lgico tenga un valor de verdad falso (0) no se
ejecuta el proceso de presentar en pantalla, y el control pasa al proceso 2 que en este
caso concreto es la finalizacin.
La variable dgito se comporta como un contador.
Ejercicio 2.6.1
2.
1.
4.
7.
10.
x.
x 4 x 6 x8
.... , en donde
2
3
4
k2 1
k 1 k
8.
11.
(*)
Donde:
Sentencia1 es una expresin en la que a la(s) variable(s) que sea(n) sometida(s) al
test lgico se le(s) asigna o modifica su valor, de tal forma que al momento de llegar
al test, sea posible su evaluacin y que posibilite la salida de la estructura.
COMPORTAMIENTO
Repetir
Proceso1
Sentencia1
Mientras (condicin);
V
proceso2
Proceso
Repetir Mientras (condicin)
Ejemplo 5. Escribir un algoritmo en pseudocdigo que permita escribir al menos una
vez la frase Escuela politcnica del Ejrcito. Preguntar si se desea reejecutar. Mientras
se responda afirmativamente repetir. Cuando se responda negativamente, finalizar.
Definicin:
Imprimir al menos una vez la frase Escuela Politcnica del Ejrcito.
Preguntar si se desea reejecutar. Mientras la respuesta sea S, repetir, cuando sea
diferente, finalizar.
Anlisis:
1. En vista de que el enunciado del problema indica que necesariamente se ha de
imprimir al menos una vez la frase, se usar la estructura repetir-mientras
2. Imprimir la frase Escuela Politcnica del Ejrcito
3. Preguntar si se desea repetir la impresin. Mientras se responda con una S, repetir,
de responderse con otra letra, finalizar.
Algoritmo:
-repetir- Impresin repetida. Uso de repetir - mientras
Marco Vergara O
10/10/2004
USAR:
IMCIAR
Alfanumrica opcin;
Repetir
Imprimir ESCUELA POLITECNICA DEL EJERCITO"; [ procesol]
Saltar e imprimir Desea Imprimir otra vez? ;
Ingresar opcin;
[sentencial]
Mientras (opcin= 'S)
[condicin]
FINALIZAR
[ proceso21
Diagrama estructurado:
Inicio
Imprimir ESCUELA POLITCNICA DEL EJRCITO
Saltar e imprimir Desea Imprimir otra vez ?
Ingresar opcion
Repetir Mientras (opcion =S)
Fin
Control de Calidad. Prueba de escritorio (Sobre el algoritmo).
opcin
S
S
N
Pantalla
ESCUELA POLITECNICA DEL EJERCITO
Desea Imprimir otra vez ? S
ESCUELA POLITECNICA DEL EJERCITO
Desea Imprimir otra vez ? S
ESCUELA POLITECNICA DEL EJERCITO
Desea Imprimir otra vez ? N
Observaciones
Se imprime al
menos una vez
FIN
Ntese que no fue necesario asignar un valor inicial a la variable opcin ya que la
impresin se realiza necesariamente la primera ocasin Despus de ello es necesario
posibilitar el cambio de valor de opcin. Mientras opcin contenga una 'S' , se repetir
la impresin. Cuando contenga cualquier otra letra, finaliza.
Ejercicio 2.6.2
1. Generar los nmeros pares
menores que 30
2. imprimir las letras maysculas
del alfabeto
3. Calcular el factorial de un nmero
4. Calcular el logaritmo natural y el
logaritmo decimal de un nmero
real positivo (ser ingresado por
teclado) . Usar las siguientes
frmulas:
ln( x)
log( x)
1000
k 1
1 x 1
k
x
ln( x)
2.30259
n
t 0
Ft
(1 k )t
n
t 0
Ft
(1 k )t
1 1 1
1 ........
4
3 5 7
FORMA:
Desde(*)
(expresinl;
expresin2)
procesol
repetir
proceso 2
mientras(condicin);
(*)
Bien podra escribirse la palabra desde dentro del parntesis e inmediatamente antes de la expresin1,
ya que sta permite asignar el valor inicial de la variable que posteriormente puede ser sometida a un test
lgico. Quedara as:
(Desde expresin1; mientras (condicin); expresin2). Sin embargo, por
conservar la analoga con la mayor parte de los lenguajes de programacin que usan esta estructura se la
mantiene como se indica arriba
Diagrama estructurado
Desde (expresin1; Mientras (condicin) ; con incrementos de ) repetir
Proceso
5
( F 32)
9
3. Finalizar
Algoritmo:
-desde- Uso de desde-hasta
Marco Vergara 0.
12/10/2002
USAR:
Entero fare;
Entero centi;
INICIAR
repetir
FINALIZAR
Diagrama estructurado:
Inicio
Imprimir Tabla de equivalencia F C
Saltar e imprimir F | C;
Saltar e imprimir ------------ ;
Desde(fare=100;mientras(fare<101);farefare+1) repetir
centi (5/9)*(fare-32);
Saltar e imprimir "# |#", fare, centi
Fin
Control de Calidad. Prueba de escritorio (Sobre el algoritmo).
fare
-100
-99
0
1
99
100
101
centi
-73.33
-72.77
-17.77
-17.32
37.32
37.77
Pantalla
Observaciones
Tabla de equivalencia 0F 0C
0F
| 0C
-----------------100 | -73~33
-99 | -72.77
0 | -17.77
1 | -17.32
99 | 37.32
100 | 137.77
FIN
Ntese que la variable que es incrementada, fare, al concluir la ejecucin del bucle tiene
un valor que supera al limite 100. Esto debe tenerse muy en cuenta para ciertos procesos
en los que se necesita saber el nmero de iteraciones.
Ejercicio 2.6.3
1. Imprimir los primeros 20
nmeros cardinales
2. Imprimir los 20 primeros
nmeros pares
3. Imprimir en pantalla los 20
primeros nmeros impares
4. Generar
una
tabla
de
equivalencia entre pulgada y
9. Calcular el factorial de un
nmero.
10. Describir el movimiento de un
proyectil que parte con una
velocidad inicial vo, que forma
un ngulo con la horizontal.
Usar el intervalo comprendido
entre 0 segundos y el tiempo de
vuelo, con variaciones de 0.1
segundo. (Encontrar para cada
instante x, y, velocidad x ,
velocidad y, componente de la
velocidad) Hallar tiempo de
vuelo, altura mxima, alcance
mximo, tiempo de subida y
tiempo de bajada.
INICIO BUCLE 1
INICIO BUCLE 2
INICIO BUCLE 3
INICIO BUCLE n
FIN BUCLE n
FIN BUCLE 3
FIN BUCLE 2
FIN BUCLE l
22
Son aquellas que permiten decidir o seleccionar uno o ms caminos entre dos o ms de
ellos.
2.7.1. Estructura "Si - entonces - caso contrario".
Ejecuta uno de dos procesos dependiendo de la evaluacin de un test lgico.
FORMA:
Si (condicin)[entonces] procesol [caso contrario] proceso2
proceso 3
Si (condicin)
[entonces]
Procesol
Proceso2
Proceso3
Ntese que el proceso 1 Se ejecuta nicamente cuando la evaluacin del test lgico
arroja un valor de verdad Verdadero (1). Entonces el control pasa al proceso 2 que es
ejecutado. Cuando el Valor de verdad es Falso (0), no se ejecuta el proceso 1 pero s el
proceso2. En resumen, el proceso 2 se ejecuta en cualquiera de los casos. Este es un
comportamiento que ha de tenerse en cuenta ya que en muchas ocasiones la ejecucin
del procesol es excluyente (por la lgica del problema) de la ejecucin del proceso2.
Diagrama estructurado:
Condicin
VERDADERO
Proceso 1
FALSO
Proceso 2
Proceso 3
[condicin]
[proceso1]
[proceso2]
Diagrama estructurado:
c
Imprimir "Raz cuadrada de un numero";
Saltar e imprimir Ingrese un nmero : ";
Ingresar numero;
numero < 0
VERDADERO
FALSO
numero numero*(-1);
raiz = numero
Saltar e imprimir Nmero = # Raz = # ",
numero, raiz
fin
El proceso de cambio de signo nicamente se ejecuta cuando numero<0; el clculo de
la raz, en cambio, se ejecuta en cualquiera de los casos
Control de Calidad. Prueba de escritorio (Sobre se algoritmo).
numero
raiz
Pantalla
Observaciones
+4
Nmero = 4 Raz = 2
Numero * (-1)
FIN
Si (condicin)
[entonces]
Procesol
Caso Contrario
Proceso2
Proceso3
Diagrama estructurado:
Condicin
VERDADERO
Proceso 1
FALSO
Proceso 2
Proceso 3
disb2-4ac
Si (dis > 0)
raiz l (-b+(dis)0.5)/2/a;
raiz2 (-b-(dis)0.5)/2/a;
Fin de si
Caso contrario Saltar e imprimir 'No hay solucin en los reales";
FINALIZAR
Diagrama estructurado
inicio
Imprimir Solucin de una ecuacin de 2do. Grado";
Saltar e imprimir Ingrese el coeficiente A:";
Ingresar a;
Saltar e imprimir Ingrese el coeficiente B :";
Ingresar b;
Saltar e imprimir Ingrese el coeficiente C:";
Ingresar c;
disb2-4ac
dis > 0
VERDADERO
raiz l (-b+(dis)0.5)/2/a;
raiz2 (-b-(dis)0.5)/2/a;
Saltar e imprimir A= # B=# C=#
raiz1 = # raiz2= #",a,b,c,rail,raiz2;
fin
FALSO
Saltar e imprimir 'No hay solucin
en los reales";
C dis
raiz1
1
2
-3
16
1
2
3
-8
raiz2
Pantalla
Observ
INICI
FIN
Ejercicio 2.6.2.1
1. Plantear un problema en el que se
utiliza la estructura si entonces, sin
caso contrario
2. Plantear un problema en el que se
utiliza la estructura si entonces, con
caso contrario
3. Se ingresa por teclado un nmero
flotante. Cuando el nmero sea
negativo cambiarlo de signo. En
cualquier caso presentar el nmero
positivo. (Ej. Si se ingresa el 1, se
presentar 1. Si se ingresa el 1, se
presentar 1).
4. Se ingresa por teclado un nmero
flotante. Cuando el nmero sea
negativo cambiarlo de signo y
extraer la raz cuadrada. Cuando sea
positivo, directamente extraer la raz
cuadrada. Presentar: a) El nmero
ingresado y la raz; b) el nmero
ingresado o cambiado de signo y la
Estado
Hmedo (h)
Seco(s)
Concreto (1)
0.4
0.8
Alquitrn (2)
0.5
1.0
6. Una
persona
recibe
una
bonificacin por aos de servicio, la
misma que se calcula as:
Aos de servicio
Desde Hasta
0
3
6
11
Ms de
14
2
5
10
14
% por ao de
servicio sobre el
sueldo
0
2
3
4
50% del sueldo
f(x)=
9.
2x, si x<0,
x2, si x 0 10,
En
un
cultivo
estn
desarrollndose bacterias. El tiempo
t(en horas) para que el nmero de
bacterias se duplique (nmero de
generacin), es una funcin de la
temperatura T(En oC) del cultivo. Si
sta funcin est dada por:
1
11
T
, si 30 T 36,
24
4
t=f(T)=
4
175
T
3
4
si
36 T 39,
FORMA:
Evaluar
(variable entera)
Caso constantel:
Procesol
[fin proceso1]
Caso constante2:
Proceso2
[fin proceso2]
..
..
..
Caso constanten:
Proceson
FTN
COMPORTAMIENTO
Procesol
[fin caso1]
(constante 2=? Variable entera)
Caso constante2:
V
Proceso2
[fin caso2l
(constante n =? Variable entera)
Caso constanten:
V
Proceson
[Por omisin:
Proceso(n+1)]
Proceso 2
Proceso 3
Proceso n
Proceso n+1
Proceso n+2
Ejemplo 9: El estado civil de una persona puede ser uno de los siguientes: Casado,
Unin Libre, soltero, viudo, divorciado. Elabrese un algoritmo que permita, despus de
ingresar una letra que represente su estado civil, imprimir el correspondiente
significado. Las letras a usar son:
Estado Civil
Letra(s)
Casado
Unin libre
Soltero
Viudo
Divorciado
'C' 'c'
L' '1'
'S' 's'
'V' 'v'
'D' 'd'
Definicin: Ingresar por teclado una letra (cdigo) que represente el estado civil de una
persona (Segn la tabla del enunciado) e imprimir en pantalla el estado civil no
codificado.
Anlisis : de una solucin:
1. Ingresar cdigo de estado civil (codigo)
2. En caso que codigo sea 'C 'c' escribir "Casado"
3. En caso que codigo sea 'L' '1' escribir "Unin Libre"
4. En caso que codigo sea 'S' 's' escribir "Soltero"
5. En caso que codigo sea 'V 'v ' escribir "Viudo"
6. En caso que codigo sea 'D' 'd' escribir" Divorciado"
7. Finalizar
Algoritmo: Se presentan dos: El uno con fin de caso y el otro sin este elemento
Caso 'D';
Caso 'd';
Saltar e imprimir
FINALIZAR
Caso 'L';
Caso 1';
Saltar e imprimir "Unin Libre";
Fin caso;
Caso 'S'
Caso 's';
Saltar e imprimir "Soltero";
Fin caso;
Caso 'V';
Caso 'v';
Saltar e imprimir "Viudo";
Fin caso;
Caso L;
Caso 1;
Saltar e imprimir "Unin Libre";
Caso 'S;
Caso 's;
Saltar e imprimir "Soltero";
Fin caso;
Caso 'V';
Caso 'v';
Saltar e imprimir "Viudo";
Caso 'D';
Caso 'd';
Saltar e imprimir "Divorciado";
Por omisin;
Saltar e imprimir "No digit el cdigo correcto"
Diagrama:
Inicio
Imprimir "Estado civil;
Saltar e imprimir ingrese el cdigo de estado civil" :
Ingresar codigo;
Evaluar (codigo)
Caso C
Caso c
Saltar e
imprimir
"Casado";
Caso L
Caso l
Saltar e
imprimir
"Unin
Libre";
Caso S
Caso s
Saltar e
imprimir
"Soltero";
Caso V
Caso v
Saltar e
imprimir
"Viudo";
Fin caso
Fin
Caso D
Caso d
Saltar e
imprimir
"Divorciado"
;
Por omisin
Saltar e
imprimir
"Dato mal
ingresado";
(a)
(b)
codig
o
C
Pantalla
Casado
Unin
Libre
Soltero
Observaciones
No evala caso c
Ejecuta caso Ll
Ejecuta caso S s
No se evalan las
restantes
FIN
Evala caso C
Casado
Evala caso c
Unin
Ejecuta caso Ll
Libre
Ejecuta caso S s
Soltero
No se evalan las
restantes
FIN
Evala caso C
Evala caso c
Evala caso L l
Soltero
Evala caso S s
No se evalan las
restantes
FIN
No digit Evala todos los
el cdigo casos
correcto FIN
Validacin
Area=3.1416*radio*radio;
Saltar e imprimir "Radio = # Area = #, radio, rea;
FINALIZAR
Paso 6. Control de Calidad 2. Prueba de escritorio (Sobre se algoritmo).
radio
-2
-1
2
area
Pantalla
CALCULO DEL AREA DE
CIRCULO
INGRESE EL RADIO : -2
REINGRESE EL RADIO : -1
REINGRESE EL RADIO: 2
Radio =2 Area = 12.5664
Observaciones
UN
FIN
Es deseable que todo algoritmo contemple la validacin de los datos ingresados. Esto
resulta de gran ayuda al usuario.
Ejercicio:
Escribir un algoritmo que permita validar un dato usando la estructura repetir-mientras
Escribir un algoritmo que permita validar un dato usando la estructura desde -hasta
2.9. Uso de "Banderas" -"flags"Las banderas son variables auxiliares que toman un valor u otro dependiendo de ciertas
condiciones del problema, y que a su vez, en funcin de ese valor adoptado permiten
ejecutar procesos distintos.
Siendo variables, en el algoritmo hay que mencionarlas dentro de USAR, con su tipo y
nombre (que puede ser cualquiera que cumpla con las especificaciones de los
identificadores)
Ejemplo 11 Modificar se ejemplo 8 de tal modo que siempre presente los valores de A,
B y C, aun cuando no exista solucin en los reales.
Definicin: Ingresar por teclado los coeficientes de una ecuacin de segundo grado.
Calcular sus races reales. Presentar los coeficientes y las races . De no existir
soluciones reales , presentar los coeficientes y el mensaje "No hay solucin en los
reales".
Anlisis de una solucin :
1. Iniciar flag en 0
2. Ingresar coeficientes a, b y c
2. Calcular discriminante (dis = b2-4ac)
3. Si dis>0 entonces asignar a flag el valor 1, calcular raiz 1= (-b+ b 24ac )/(2a) y raiz2= (-b - b2-4ac )/2a
4. Imprimir a, b, c
5. Si flag=1 Imprimir raiz1, raiz2
. Caso contrario Imprimir No hay solucin en los reales
7. Finalizar
Algoritmo:
sienca1 - Uso de si - entonces caso contrario
Marco Vergara 0.
10/10/2004
USAR:
Decimal a, b, c;
decimal dis;
decimal raizl,raiz2;
entero flag;
INICIAR
flag=0;
Imprimir " Solucin de una ecuacin de 2do. Grado";
Saltar e imprimir Ingrese el coeficiente A:";
Ingresar a;
Saltar e imprimir Ingrese el coeficiente B:";
Ingresar b;
Saltar e imprimir Ingrese el trmino C:";
Ingresar C;
dis b*b - 4*a*c;
Si (dis>0)
flag 1;
raiz1 (-b+(dis)(0.5))/2/a;
raiz2 (-b-(dis) (0.5))/2/a;
Fin de "si"
Saltar e imprimir "A=# B=# C=", a, b, c ;
Si (flag=1)
Imprimir" raizl= # raiz2= #",raizl,raiz2;
Caso contrario imprimir " No existe solucin en los reales";
FINALIZAR
Control de Calidad. Prueba de escritorio (Sobre el algoritmo).
flag
a
b
Pantalla Observa
dis
Raiz1 Raiz2
ciones
1
2
-3
Ingrese el coeficiente C:
16
-3
Nixmero=4Raiz=2
A=1 B=2 C=-3 raiz1 = 1 raiz2 = -3 FIN
Solucin de una Ecuacin de 2do. Grado
Ingrese el coeficiente A:
2
3
-8
Ingrese el coeficiente B
Ingrese el coeficiente C:
A=1 B=2 C=3 No existe solucin en 105
reales
FIN
2.10.
Registro centinela
23
np0
Verdadero
Falso
promse/np
imprimir No se
han ingresado datos
vlidos
imprimir prom
Fin
Solucin (b)
Inicio
np0;
se0;
Los algoritmos trabajan con las operaciones convencionales, esto es, adicin (+),
sustraccin (-), multiplicacin (*), divisin (/), exponenciacin (), etc. Sin
embargo, en la construccin de algoritmos es usual encontrar la posibilidad de
ejecucin de ciertas operaciones que el computador puede realizarlas y no son muy
utilizadas en la matemtica tradicional. Ejemplos de ellas son las operaciones
Divisin entera (DIV) y Residuo entero (M0D) 24, representadas por los smbolos /
y % 25, respectivamente. Tratadas en la seccin 1.5
Cuando dividendo y divisor son enteros, DIV entrega como resultado la parte
entera del cuociente, desechando el residuo; MOD en cambio devuelve el residuo
de la divisin entera. (Para que MOD puede ser evaluado, es condicin
sinequanom, que dividendo y divisor sean ambos enteros).
MOD y DIV se usarn exclusivamente para enteros.
Sin embargo, DIV y MOD son expresiones tomadas del lenguaje Basic. Y es que
realmente no existen smbolos que de manera general representen a tales
operaciones. Dado que ste documento est orientado al lenguaje C, se asume
24
25
INICIAR
INGRESAR numero
Calcular el residuo entre numero y 2
Si el residuo es cero imprimir Par, caso contrario, Impar.
FINALIZAR
residuo
Pantalla
Observaciones
Ejercicio 3.
1. Indicar cuntas veces se ejecuta el proceso1 en los siguientes algoritmos.
Indicar bajo qu condiciones se cumple su respuesta.
1.1
INICIO
INGRESAR n
MIENTRAS (N100)
Proceso1
REPETIR
FIN
1.2
INICIO
Proceso 1
REPETIR
FIN
1.3
INICIO
n 100
MIENTRAS (n99)
Si ( n100) Proceso1
nn-1
REPETIR
FIN
1.4
INICIO
Proceso1
FIN
1.5
INICIO
n2
SI (n=2) proceso 2
Proceso1
FIN
1.6
INICIO
n 3
evaluar (n)
CASO 1:
Proceso4
CASO 2:
Proceso5
Fin caso 2
CASO 3:
Proceso1
CASO 4:
Proceso1
CASO 5:
Proceso1
CASO 6:
Proceso 1
Fin caso 6
POR OMISIN
Proceso 1
FIN
1.7
n0
REPETIR
Proceso1
nn+2
MIENTRAS (N 0)
1.8
INICIO
n2
SI (n=2) proceso 2
Caso contrario Proceso1
FIN
1.9
INICIO
X 0
Mientras(X= 0)
X X+1
proceso 1
Repetir
si (X=1)
proceso1
caso contarario proceso2
proceso1
FIN
2. Represente mediante esquemas o algoritmos lo siguiente:
2.1.
Un proceso de conteo
2.2.
Un proceso de acumulacin
2.3.
Determinar si un nmero es primo
2.4.
Intercambiar los valores de a y b
2.5.
Ordenar ascendentemente tres nmeros
2.6.
Validar un dato
Al nmero 3.156789 truncarlo en la 4ta. Cifra decimal
Parte b)
Escribir pseudocdigos que resuelvan los siguientes problemas:
3.
Las ecuaciones apropiadas y el rango de los nmeros de Reynolds en las que se aplican
son como sigue:
Valores de NR
NR < 2
Ecuacin
v gD 2
s
18
2 NR < 1000
Valores intermedios
v
Base terica
Ley de Stoke
0.53 g
0.714
1.142
0.286
(s )
0.428
Ley de Newton
gD( s )
v 1.74
Se desea obtener una tabla que presente los momentos de inercia con respecto a un
eje de revolucin y de otro que pasa por el centro de masa, de las masas de:
Aro circular
Cilindro
Cilindro hueco
Cono
Esfera
Toro
Prisma rectangular
Para cada masa ingresar los datos que correspondan, validndolos de acuerdo al cada
caso
15.
Uso de banderas
16.
Races imaginarias
No existe Ecuacin de segundo grado
Imprimir junto a esos mensajes la Ecuacin y las races (cuando existan)
Uso artificios: ordenamiento, parte entera, resto de la divisin entera
17.
18.
19.
20.
Determinacin de errores.
21.
f ( x)
1
, en cul rango de x aparece un desborde o una divisin entre cero
1 tanh( x )
(4,3)
(4,1)
(2,1)
Uso de banderas
24.
Ingresar por teclado las coordenadas de 3 puntos. Determinar si los tres determinan
una recta, un tringulo, si dos de ellos son puntos de una circunferencia y el tercero
el centro. Si determinan una recta o una circunferencia, determinar sus ecuaciones.
Si un tringulo, resolverlo.
26
-1
-4
Tringulo de Pascal:
Un arreglo de nmeros que aparece en una variedad asombrosa es el tringulo
de Pascal:
1
11
121
1331
............
Los elementos se llaman tambin coeficientes binomiales; el rasgo de inters en
el momento, es que cada uno de ellos es la suma de dos elementos de la fila
precedente, excepto para los elementos de contorno que son todos 1.
Imprimir las 15 primeras filas del tringulo.27
33.
34.
Tomado del Libro Desarrollo de Algoritmos y sus Aplicaciones, Correa Uribe Guillermo. Bogot Colombia .
28
Ejercicio de investigacin
y= ax2+bx+c
y= cx+d
Los coeficientes y trminos independientes se ingresarn por teclado.
Presentar en modo grfico las curvas.
Presentar las ecuaciones y las coordenadas del punto de interseccin.
En caso de do existir interseccin, presentar el mensaje correspondiente.
35.
x
V
V
F
F
xy
y
V
F
V
F
xy
V
F
F
F
36.
Aplicacin Libre
Imponerse una aplicacin matemtica que contenga el uso de funciones de biblioteca,
manejo de mscaras de salida, manejo de pantalla, etc.
37.
Leer e imprimir tres pares de nmeros que representan las coordenadas de tres puntos en
el plano. Calcular las longitudes entre ellos y determinar si forman un tringulo y de qu
tipo. Imprimir las coordenadas de los puntos, las longitudes junto al mensaje
correspondiente:
no forman un tringulo
forman un tringulo equiltero
forman un tringulo issceles no rectngulo,
forman un tringulo issceles rectngulo,
Captulo
3
Mientras ms informacin poseamos, mejor ser nuestro
pensamiento creativo. Si disponemos de ms elementos para trabajar,
el resultado de nuestro trabajo ser ms valioso. Si un artista tiene ms
colores en su paleta, conseguir una pintura ms rica. De ello se
deduce que mientras ms informacin tenga la persona creadora,,
mejores sern los resultados de su creatividad. Lamentablemente, no
es
as
3. FUNCIONES
En el captulo anterior se hizo mencin a las funciones de biblioteca, esto es, pequeos
- o grandes- programas preestablecidos, que forman parte del compilador y que estn
disponibles para que el programador las utilice.
Existen otras funciones, creadas por el programador. A ellas se refiere el presente
captulo.
Una funcin puede ser definida como aquel conjunto de instrucciones que realizan una
tarea especfica y que de algn modo tiene autonoma respecto del resto del programa,
por lo que puede ser tratada por el programador de manera relativamente independiente.
En cuanto al mbito de memoria que ocupa tiene tambin independencia ya que ocupa
un espacio propio. Ms adelante se explica con ms detalle el tema.
A partir de ahora y toda vez que estos apuntes estn orientados a estudiantes con cierta
formacin matemtica el tema de las funciones, por razones estrictamente didcticas,
ser tratado en base una analoga con las funciones matemticas.
Considrense las funciones:
y=
f(x)= x2
q= g(w,z)= seno(w)+2z
n= h(i,j,m)= ij-ln(m)
v=
b()= 4
f(4)=42=16
g(0,-1)=seno(0)+2x(-1)=-2
h(2,3,4)=23-ln(4)=6.614
b()=4=b(3)=4=b(n)=4
En ellas, f,g,h, b son los nombres de las funciones, mientras de x, w,z,i,j,m son las
variables independientes. Ntese que la funcin de nombre b no requiere de
variables independientes. Sin embargo en la nomenclatura se conservan los parntesis,
en este caso vacos.
Para poder operar con las funciones, es necesario determinar para qu existen y cmo se
comportan. Es la definicin de las funciones. As, f(x) es utilizada para obtener el
cuadrado de un nmero, g(w,z) permite calcular la suma del seno de un ngulo y el
doble de un nmero. b() establece un valor constante igual a 4. Si no existe la definicin
no puede establecerse para qu existe la funcin.
Definida la funcin, puede con ella operarse. Por ejemplo, se puede hallar el valor de
f(4). En este caso x toma el valor de 4 y f(x)=f(4)=4 2=16. A la constante 4 se denomina
argumento. f(x) requiere un solo argumento, g(w,z) de dos argumentos, h(i,j,m) de tres
y b() no requiere de ningn argumento.
El nmero de argumentos siempre a ha de ser el mismo que el de variables
independientes de la funcin. Y no solamente ello, sino que el orden de los argumentos
ha de ser el mismo del de las variables independientes.
De otra parte, bien se podra operar del siguiente modo:
f(4)+g(0,-1)-h(2,3,4)+b() = 16-2-6.614+4=11.386.
Es obvio que para poder realizar tales operaciones, cada una de las funciones deben
devolver un valor (En el ejemplo: 16,-2,6.614 y 4, respectivamente). De no ser as no
podra resolverse tal operacin.
Esto ltimo posiblemente se hace ms claro si a cada funcin se la relaciona con una
variable dependiente como se ve en el ejemplo anterior. En ese caso, y toma el valor
que devuelva f(x), q el que devuelva g(w,z), n el que retorne h(i,j,m) y v el que lo
haga b(). En matemtica toda funcin devuelve un valor (a menos que la funcin no
est definida para el conjunto de argumentos especficos).
Una funcin es una regla que toma ciertos nmeros como entradas y asigna a cada uno
un nmero definitivo de salida. El conjunto de todos los nmeros de entrada recibe el
nombre de dominio de la funcin y el conjunto de nmeros resultantes de salida se
denomina imagen (intervalo) de la funcin 29
En el caso de las funciones de programacin, podra decirse que una funcin es un
conjunto de sentencias que toman ciertos datos como entradas para con ellos (y
eventualmente con otros) generar informacin de salida. Por tanto, una funcin puede
ser utilizada (llamada) cuantas veces se necesite en un programa
Los elementos de la funcin de programacin son semejantes a las de las matemticas:
Tienen un nombre, el mismo que cumple con todas las normas que rigen a los
identificadores (Ver seccin 1.5). Podra llamrsela impresin, ingreso, validar,
producto, etc., segn sea el objetivo de la funcin. Deben tambin establecerse las
variables independientes, que para la programacin se denominan parmetros, que
son las variables que recibirn los valores con los cuales trabajar la funcin. A estos
valores se denominan argumentos. La funcin de programacin debe estar definida.
En los siguientes prrafos se hace un anlisis completo de todos los elementos de las
funciones en C.
Toda funcin est formada por tres macro-elementos 30: Declaracin,
definicin.
2.12.
llamado y
Declaracin de funciones.
Hughes Hallett Deborah & Gleason Andrew. Clculo Aplicado. Cecsa. Mxico, 1999. Pg. 9
Luis Joyanes Aguilar en C++ Un enfoque orientado a objetos, en lugar de elementos se refiere a las
operaciones de declaracin, llamada o invocacin y la definicin. Pp 135.
30
Donde tipo es cualquiera de los tipos de datos con los que trabaja el lenguaje C,
incluidos los cualificadores. Representa el tipo de dato que devuelve la funcin.
Por ejemplo, si una funcin es la encargada de recibir una letra S o N y devolverla a la
funcin principal, la funcin ser de tipo char, ya que el dato devuelto por la funcin es
de este tipo.
Si se tratara de una funcin que calcula el rea de un crculo, la funcin ser de tipo
float, ya que, por lo general, el rea es de tipo flotante.
Existen, sin embargo, funciones que no retornan valores. De ser ese el caso, la funcin
ser tipo void, que significa que no devuelve ningn valor. Un ejemplo tpico es una
funcin que debe presentar en pantalla el resultado de un proceso. En ese caso, no
retorna ningn valor a la funcin principal.
El nombre de la funcin, como ya se mencion cumple con las normas de los
identificadores. Es decir, sugerir, en lo posible, el objeto de la funcin, es mejor que no
tenga ms de ocho caracteres, (aunque en las nuevas versiones, el nombre puede tener
hasta 30 caracteres), etc. Deber tenerse cuidado de no usar palabras reservadas o
nombre de funciones de biblioteca existentes.
La lista de parmetros es opcional (Por ello aparece entre corchetes) y depende de si la
funcin requiere o no de ellos. Cuando no se necesiten, se escribirn los parntesis
dejando vaco su interior.
Cuando se requiere de ellos, la lista tendr tipo de dato (incluidos cualificadores)
seguido por el nombre del parmetro (nombre de variable). Cuando sea ms de uno,
estarn separados por coma(,) y se repetir tipo nombre, tipo nombre, etc, inclusive en
el caso de que los parmetros sean del mismo tipo. La declaracin terminar siempre
con punto y coma (;).
Cada parmetro puede ser de tipo distinto a los otros. No existe ninguna relacin entre
el tipo de la funcin y el tipo de los parmetros. Ello depender del objetivo que
cumplir la funcin y cmo lo logra.
Ejemplos :
Declaracin
int ingreso ()
float validacin (int num)
char opcin(int x, float y, char z)
void imprimir (int a)
void titulo()
2.13.
Llamado a funciones.
Observaciones
Devuelve un valor entero y no requiere de
parmetros
Devuelve valor flotante y requiere de un
parmetro entero
Devuelve un caracter y requiere de un
parmetro entero, otro flotante y un tercero
tipo caracter.
No retorna valores y requiere de un
parmetro entero
No devuelve valores ni requiere de
parmetros
Una misma funcin puede ser llamada una o varias veces en un programa. La forma
cmo se la llama es la siguiente:
[variable = o expresin] nombre ([arg1, arg2,....argn]);
Cuando la funcin sea de tipo diferente a void (Por tanto retorna un valor) es
imprescindible que el llamado est asociado a:
a. A una variable (con un operador de asignacin), en cuyo caso el valor que retorna la
funcin se asignar a la variable, la misma que de manera general, ser del mismo
tipo de la funcin. Tal variable es equivalente a la variable dependiente de las
funciones matemticas. Ej . x=area(r); x tomar el valor devuelto por la funcin
area cuando trabaja con r.
b. A una expresin que ejecutar una accin determinada con el valor devuelto por la
funcin.
Ej printf(%6.2f,validacion(m)); Se imprimir en pantalla el valor que devuelva la
funcin validacin, cuando trabaja con m.
Ej. z=ln(presion(x,3)); z tomar el valor que resulte de obtener el logaritmo natural del
valor que devuelva la funcin presion cuando trabaja con x y con 3.
Para ser retornado un valor, se crea una copia del valor, la que es devuelta. No se
devuelve la variable. Esta se pierde. Ntese que en los dos casos el control del programa
inmediatamente despus del retorno de la funcin, estar en la asignacin o ejecucin de
la accin de la sentencia.
Cuando la funcin sea de tipo void, no es necesario vincularle con ninguna variable o
expresin. Ej. titulo(x); La funcin titulo trabajar con el valor de x y no devuelve
ningn valor. El control del programa despus del retorno de la funcin pasar a la
siguiente sentencia a la de llamada de la funcin.
En cuanto a los argumentos, cuando la funcin los requiera, se escribirn en el mismo
nmero y orden que los parmetros de la funcin. Es mejor que sean del mismo tipo de
los parmetros. Si no coinciden los tipos, el compilador intentar realizar la conversin.
De no ser posible emitir un mensaje de error.
Los argumentos pueden ser constantes, variables o expresiones que devuelvan valores
que en lo posible sean del mismo tipo de los parmetros. Inclusive un argumento puede
ser un llamado a una funcin.
Cuando la funcin no requiera de parmetros, en el llamado, junto al nombre de la
funcin se colocarn parntesis abiertos y cerrados vacos.
Ejemplo 3. 1:
a. sea la funcin int duplo (int numero); que calcula el doble de un nmero.
b=duplo(3) b tomar el valor que devuelva la funcin duplo cuando trabaja con 3.
b. Sea la funcin : float raiz(float a,float b, float c, int flag); que calcula el valor de las
races reales de una ecuacin de segundo grado (una raiz por cada llamada).
Definicin de la funcin.
Para Luis Joyanes Aguilar (C++ Orientado a objetos. Pg 18) la definicin es la descripcin de la
funcin.
...
int mayor (int a, int b);
void main()
{
int ma,x,y;
...
scanf(%d %d,&x,&y);
ma= mayor(x,y);
printf(\nEl nmero mayor entre %d y %d es %d ,x,y,ma);
}
int mayor(int a, int b)
{
if (a>b) return(a);
else return(b);
}
En cualquier caso la funcin mayor retorna un solo valor: a cuando a es mayor que b
b cuando a<= b.
En este caso no hace falta la palabra else debido a que si a>b entonces retorna el valor
de a saliendo de la funcin mayor, con lo que se pierde todo lo existe al interior de la
funcin mayor, por tanto no podra ejecutarse la instruccin return(b).
La siguiente tabla presenta, a manera de resumen, los diferentes casos que pueden
presentarse al manejar funciones:
CASOS DE FUNCIONES
Tipo de la
funcin
void
Tiene
parmetros
Si
declaracin
llamado
Retorno
Return(variable);
void
void
Void
No
Si
No
Tipo nombre();
Void nombre(tipo parmetro);
Void nombre();
Return(variable);
Return;
Return;
2.15.
Paso de argumentos.
Ejemplo 3. 3
Se trata de calcular el rea de una corona circular a partir de los radios de las
circunferencias mayor y menor, que sern ingresados por teclado. Se usar una funcin
que calcule el rea de un crculo.
Paso 1. Definicin:
Determinar el rea de una corona circular a partir de los valores de los radios de las
circunferencias que la determinan.
Paso 2. Anlisis:
1.
2.
3.
4.
Inicio
Declarar funcin area (decimal area(decimal radio));
Ingresar radio menor (rmenor);
Validar radio menor (0<rmenor10) ; Condicin impuesta
Inicio
Recibir radio;
Calcular area de crculo; (a=3.1416*radio*radio)
Retornar a;
Fin
Funcion area
amenor
2.0
radio
A
2.0 12.5664
4.0 50.2656
12.5664
rmayor
amayor
acorona
Pantalla
Observaci
ones
INICIAR
4.0
50.2656
37.6992
37.6992
FIN
Descripcin
Radio del
circulo menor
Area del circulo
menor
Radio del
circulo mayor
Area del circulo
mayor
Area corona
funcin
Parmetro
recibe radio de
crculo
Variable local.
Calcula rea de
crculo
Tipo
Decimal
E/S/G
E/S
Decimal
G/S
Decimal
E/S
Decimal
G/S
Decimal
Decimal
Deciaml
G/S
Decimal
Observaciones
Rmenor >O
rmewnor10
Ingresado por teclado
Rmayor >O
rmayor100
Ingresado por teclado
Amyor-amenor
Calcula rea de crculo
G
A=3.1416*radio*radio
Identificacin
USAR:
Decimal rmenor,rmayor;
Decimal amenor,amayor;
Decimal acorona;
Decimal area(decimal radio);
Declaracin de variables
Declaracin de funcin
INICIAR
Imprimir "CALCULO DEL AREA DE UNA CORONA CIRCULAR.
Saltar e Imprimir "INGRESE EL RADIO MENOR :";
Ingresar rmenor;
Mientras (rmenor<=0 o rmenor >10)
REINGRESE RADIO MENOR
Ingresar rmenor;
Repetir
amenor area(rmenor);
Saltar e Imprimir "INGRESE EL RADIO MAYOR :";
Ingresar rmayor;
Mientras a (rmayor<=0 o rmayor >10)
REIGRESE RADIO MAYOR
Ingresar rmayor;
Repetir
ameyor area(rmayor);
acoronoa amayor-amenor;
saltar e imprimir "Area corona = #, acorona;
FINALIZAR
decimal area (decimal readio);
USAR:
decimal a;
INICIO
a 3.1416 radio*radio;
retornar(a);
FINALIZAR AREA
cabecera de la funcin
variables locales
cuerpo de la funcin
Ejemplo 4. 4
Escribir un programa en C que permita ingresar un nmero entero y que en una funcin
de nombre funcion , duplique el valor del nmero y lo presente en pantalla. Despus la
funcin principal presentar el nmero ingresado.
#include <stdio.h>
#include <conio.h>
int funcion(int a);
void main()
{
int a,da;
clrscr();
printf("Ingresar un nmero ? ");
scanf("%d",&a);
printf("\n Valor de a en main antes de la funcin = %d",a);
da=funcion(a);
printf ("\n Valor de a despus del retorno de la funcin= %d", a);
getch();
}
int funcion(int a)
{
a=2*a;
printf("\n Valor de a en la funcin despus de modificado = %d",a);
return(a);
}
Al correr el programa se demuestra que una copia del contenido de la variable a es
recibido por la funcin en el parmetro a y que las dos variables tienen su propio mbito
de memoria, por lo que al modificarse el valor de a en la funcin, el de a en main no se
ve alterado.
Ejercicio 3
1) Escribir ejemplos de declaracin, llamado y definicin de funciones para los
siguientes casos:
a) Devuelve un entero y requiere un parmetro entero.
Resolucin:
y e
a.
x
1!
x2
2!
x3
3!
x4
4!
..... , x
b.
x ln a ( x ln a )2 ( x ln a )3 ( x ln a )4
y a 1
....., x
1!
2!
3!
4!
x
c.
x2 x4 x 6
y cos( x ) 1
....., x
2! 4! 6!
d.
x2 x4 x6
y cosh( x ) 1
....., x
2! 4! 6!
19) Ingresar y validar mediante una funcin ingval los trminos a, b y c de una ecuacin
de segundo grado.
Mediante la funcin realimag determinar si las races son reales o imaginarias.
Mediante la funcin resolver, hallar una raz real en cada llamada o una parte (la
real o la imaginaria) de cada raz imaginaria, en cada llamada.
Mediante una funcin imprimir, presentar las races reales o imaginarias.
20) Calcular e imprimir los valores de C (coeficiente binomial) a partir de la frmula:
C
N!
J !( N J )!
109
Captulo
Apuntes de Programacin
110
4. ARREGLOS.
Tambin conocidos como Arrays.
Suponga que requiere construir un programa que le permita ingresar las edades de 30
personas, calcular el promedio de esas edades y luego determinar las desviaciones de las
edades respecto del promedio (desviacin= edad-promedio de edades). Si nicamente se
tratara de encontrar el promedio, podra usarse un bucle y dentro de l ingresar cada
edad en una sola variable y acumular en otra (Para tener la sumatoria). Pero cuando se
tarta de encontrar la desviacin (cosa que nicamente puede realizarse despus de
calculado el promedio), es necesario mantener en memoria cada una de las edades.
Usando variables comunes, se requerir de 30 identificadores distintos, uno para cada
edad. Y si fuesen 100 edades, o 500 , etc.?. Se requerirn de 100 o 500 variables, lo
cual es un problema.
Ventajosamente existe la posibilidad de manejar el concepto de arreglos, con lo que
nicamente se puede utilizar un identificador y en l almacenar todas y cada una de las
edades. Posteriormente se puede trabajar con cada una de ellas de manera
independiente.
A continuacin se expone la manera de comportarse de tales arreglos:
Sea
En
general
int edad[5];
18
15
12
17
ndice
edad[5]
edad[0]=
edad[1]=
edad[2]=
edad[3]=
edad[4]=
2.16.
1No. elementoN
18
15
12
6
17
Declaracin de un arreglo
int edad[5]; constituye la declaracin del arreglo, la misma que de manera general se
expresa as:
Apuntes de Programacin
111
tipo es el tipo de dato del arreglo, lo que quiere decir que todos sus elementos son de
ese tipo. Puede ser cualquiera de los conocidos: int, float, char, double, con o sin
cualifidadores.
nombre es el identificador o, valga la redundancia, el nombre del arreglo, por ser tal
debe cumplir con todas los normas de los identificadores.
Los corchetes negros son parte de la sintaxis (no se pueden omitir), y en su interior,
generalmente se escribe el tamao del arreglo, que significa el nmero de elementos que
tendr el arreglo. El tamao se expresar mediante una constante entera (Ej.
5,10,3,50,etc.) o bien una constante simblica entera , la misma que deber estar
definida o una operacin que combine constantes simblicas con constantes comunes
enteras.
Ej.
a)
b).
Char letra[5];
# define N 5
void main(){
..
int edad[N];
..
}
o bien:
c)
# define N 5
void main(){
..
int edad[N-2];
..
}
#define TAM 3
// tamao fsico
void main()
{
float vector[TAM];
// Declaracin con tamao fsico
int tamlogico;
...
printf(Cuntos elementos tiene el arreglo? );
Apuntes de Programacin
112
scanf(%d,&tamlogico);
//tamao lgico
while (tamlogico <=0 || tamlogico >TAM){ //conviene validar
printf(Reingrese el nmero de elementos : );
scanf(%d,&tamlogico);
}
...
}
Eventualmente puede no escribirse en la declaracin el tamao del arreglo, en cuyo
caso, necesariamente, se asignarn los elementos del arreglo, para lo cual se usar la
sintaxis descrita en la declaracin. A estos arreglos se los denomina indeterminados.
Ejemplos de declaracin de arreglos:
Declaracin
Resultado
Observaciones
iInt a[3];
Contiene basura
char letra[3]={a,b,c};
Coincide tamao y
nmero de elementos
float x[4]={-1.2,3.5};
-1.2 3.5
*?# *?#
Los
dos
ltimos
espacios quedan con
basura
char m[]={a,b,c,d};
El tamao es el nmero
de elementos32
#define M 4
void main(){
..
int num[M];
..
}
El tamao es igual al
contenido de M (4)
Se
produce
desbordamiento (*)!!
32
Hay autores que denominan a estos arreglo como indefinidos, por no declarar con su tamao, el
mismo que queda determinado por el nmero de elementos que se asigna en la declaracin.
33
Cevallos Francisco Javier. Enciclopedia del Lenguaje C Addison-Wesley Iberoamericana. Pg. 166
Apuntes de Programacin
113
desbordados en cualquier extremo del array, pudiendo escribirse en alguna otra variable
e incluso en el cdigo del programa...34
2.17.
ndices
Como se estableci antes, el ndice es un valor numrico que junto al nombre del
arreglo permite diferenciar a cada elemento del array. Siempre el ndice empieza en cero
y llaga hasta N-1, si N es el tamao del arreglo.
El ndice puede ser una constante entera, una variable entera o una expresin que
devuelva un valor entero.
En el ejemplo, si se declaran:
Int i=2,j=2,k=1
Edad[i]=edad[j]=edad[k+1]=edad[2]=edad[edad[3]] ya que todos los ndices contienen
el valor 2 . esto quiere decir que no importa la variable, la constante o la expresin, sino
el valor que stos tengan. Si son iguales se refiere al mismo elemento del arreglo. Este
ltimo acerto es muy usado en la programacin.
Para referirse a cada elemento del arreglo, se lo har mediante el nombre y el
correspondiente ndice.
No es posible hacer un tratamiento de todo el arreglo en un solo paso. Por ejemplo si se
quisiera multiplicar por 2 a todos los elementos de un arreglo entero a de tamao 5, no
es posible la expresin 2*a. Debera usarse un bucle como el siguiente (u otro
equivalente):
for (i=0;i<5;i++){
a[i]=2*a[i];
}
A esta forma de tratarse a los arreglos le denominaremos simplemente por darle un
nombre- tratamiento masivo (A la postre es el tratamiento de cada elemento).
A propsito no se intent una definicin de los arreglos. Ahora que se conoce respecto
de ellos, conviene hacerlo:
2.18.
Definicin de arreglo:
Es un conjunto de datos, todos del mismo tipo, en el que cada dato es un elemento del
arreglo y se diferencia de los dems por el denominado ndice.
Cuando los arreglos, como los hasta aqu estudiados, tienen una sola dimensin, y por
tanto un slo ndice para cada elemento, se denominan unidimensionales y se los conoce
34
Granizo Montalvo Evelio. Lenguaje C 1ra. Edicin. Editorial ESPE. Pg. 220
Apuntes de Programacin
114
tambin como listas o vectores nombre que asumiremos a partir de ahora- Son
semejantes a los vectores de la matemtica.
Vector a(N) :
a1
a2
a3
a4
...
ai.
...
an
Apuntes de Programacin
115
Apuntes de Programacin
APORTE 1
15.42
12.61
08.39
..
16.87
APORTE 2
20.00
12.52
10.20
..
15.42
APORTE3
14.25
18.52
12.45
..
12.89
PROMEDIO
16.56
14.55
10.35
..
15.06
116
2.19.
Arreglos bidimensionales.
m1,2
a2,2
a3,2
............
aM-1,2
aM,2
a1,3
a2,3
a3,3
............
............
............
............
............
........... ............
aM-1,3
............
aM,3
............
m1,N-2
a2,N-2
a3,N-2
a1,N-1
a2,N-1
a3,N-1
........... ............
aM-1,N-2 aM-1,N-1
aM,N-2
aM,N-1
m1,N
a2,N
a3,N
a4,1
a5,1
.........
aM-1,N
aM,N
a[0],[2]
a[1],[2]
a[2][2]
a [0],[3]
a[1],[3]
a[2],[3]
............
............
............
............
a[0],[N-3]
a[1],[N-3]
a[2],[N-3]
a[0],[N-2]
a[1],[N-2]
a[2],[N-2]
............
a[M-2],[2]
a[M-1],[2]
...........
a[M-2],[3]
a[M-1],[3]
a[i][j]
............
............
...........
a[M-2],[N-3]
a[M-1],[N-3]
............
a[M-2],[N-2]
a[M-1],[N-2]
a[0],[N-1]
a[1],[N-1]
a[2],[N-1]
a[3],[N-1]
a[4],[N-1]
.........
a[M-2],[N-1]
a[M-1],[N-1]
Donde cada elemento tiene como nombre a (el de la matriz) y se diferencia de los dems
por sus ndices, uno para la fila y otro para la columna. Siempre en ese orden.
Todo lo expuesto en relacin con los ndices en los arrays unidimensionales, se cumple
para los de los arrays bidimensionales; esto es: pueden ser constantes, constantes
simblicas, variables enteras o expresiones que devuelvan valor entero. Realmente no
interesa la forma, el valor de la variable, etc. Sino, el valor que en un momento
determinado tenga tal ndice.
2.19.1. Declaracin de arreglos bidimensionales.
Apuntes de Programacin
117
Cumple con las mismas normas de los arreglos unidimensionales, con la diferencia que
se requieren de tamaos de filas y de columnas y en los casos de asignacin de datos en
la declaracin, stos estarn entre llaves y cada fila nuevamente entre llaves interiores:
Declaracin
Resultado
Observaciones
int a[2][3];
Contiene basura
char letra[3][3]={{a,b,
c},
{d,e,f },{g,h,i }};
float x[2][4]={{-1.2,3.5},
{3.6,4.8}};
char m[ ][ ] ={{a,b},
{c,d}};
int x[ ][2]={1,2,3,4,5,6};
#define M 2
#define N 3
Apuntes de Programacin
d e
Coincide tamao y
nmero
de
elementos
-1.2 3.5
*?# *?#
3.6
4.8
*?# *?#
1
2
3
5
a
c
b
d
El tamao es el
nmero
de
elementos (2x2)
El tamao es 3 x 2.
En ste caso es
necesario escribir el
nmero
de
columnas (2). Como
ha 6 elementos, son
necesarias 3 filas.
El tamao es igual
al contenido de M
(2) por N(3).2 filas,
3 columnas-
118
Void main(){
..
int num[M][N];
..
}
Ejercicio 4.3
1.
Ingresar por teclado los elementos de un arreglo de
nmeros reales y que tenga 3 filas y 4 columnas. El ingreso se lo har a) por filas; b) por
columnas. Presentar el arreglo a) por filas; b) por columnas.
2.
Ingresar por teclado los elementos de una arreglo cuyos
tamaos son definidos mediante constantes simblicas. Presentar el arreglo.
3.
Ingresar por teclado los elementos de un arreglo cuyos
nmeros de filas y columnas sern tambin ingresados por teclado. Filas y columnas no
pueden exceder a 10
4.
Ingresar por teclado los elementos de una matriz de orden
(MxN). Ingresar una constante k. Generar otro arreglo que resulte de multiplicar la
matriz por la constante k. Presentar matriz original, constante k y nueva matriz.
5.
Generar una matriz nula. El orden se ingresar por teclado
(Matriz nula es aquella cuyos elementos son cero (0)).
6.
Permitir el ingreso por teclado de los elementos distintos
de cero de una matriz diagonal. Presentar la matriz.
7.
Permitir el ingreso por teclado de los elementos distintos
de cero de una matriz triangular superior. Presentar la matriz.
8.
Permitir el ingreso por teclado de los elementos distintos
de cero de una matriz triangular inferior. Presentar la matriz.
9.
Permitir el ingreso por teclado de los elementos distintos
de cero de una matriz triangular. Se preguntar si es superior o inferior y dependiendo
de la respuesta se trabajar con inferior o superior. Presentar la matriz.
10.
Ingresar por teclado los elementos de una matriz. Generar
un vector rengln (Vector fila). El nmero de fila ser ingresado por teclado. Presentar
la matriz y el vector.
11.
Ingresar por teclado los elementos de una matriz. Generar
un vector columna. El nmero de columna ser ingresado por teclado. Presentar la
matriz y el vector.
12.
Sea a una matriz 3x4 y a(i,j)=i+j, generar la matriz.
13.
Ingresar una matriz de orden MxN. Presentar en pantalla
el elementos de la matriz que sea solicitado. Ej puede solicitarse m(1,2).
14.
Ingresar una matriz cuadrada. Presentar la matriz y los
elementos de la diagonal principal.
15.
Sumar dos matrices.
16.
Ingresar los elementos de una matriz de orden (MxN) y
los de un vector de tamao M. Formar una nueva matriz que resulte de intercambiar los
elementos del vector en la columna de la matriz que sea solicitada. (El nmero de
columna a intercambiarse se ingresar por teclado)
Apuntes de Programacin
119
17.
Ingresar por teclado los elementos de una matriz y una
constante k. Determinar cuntas veces y en qu posiciones se encuentra k en la matriz.
18.
Ingresar dos matrices. Determinar si son iguales.
Presentar el mensaje correspondiente. (Para que dos matrices sean iguales, son
condiciones necesarias y suficientes que sus rdenes (No. de filas y No. de columnas)
sean iguales y que cada uno de los correspondientes elementos tambin lo sean).
19.
Aplicando el ejercicio 18 resolver: Una matriz es
t
simtrica si A =A. Determinar si una matriz ingresada es simtrico. Presentar la matriz
20.
Verificar la propiedad general de que (A t)t=A,
t
t t
encontrando A y despus (A ) .
21.
Los profesores de varias asignaturas han registrado los
resultados obtenidos por los estudiantes en su asignatura y lo han hecho en matrices
cuyas filas representan los % de alumnos aprobados, retirados y repetidores (en ese
orden), mientras que en las columnas se presenta el %para las facultades de
Electrnica, Mecnica, Geogrfica y Biotecnologa. La matriz A se refiere al semestre
septiembre 2001 febrero 2002 (Perodo A) y la matriz B al perodo marzo 2002agosto 2002.(Perodo B)
Mediante un programa de computador contestar las siguientes cuestiones:
a) En el perodo A, qu porcentaje de alumnos reprobaron?.
b) En el perodo B, cuntos alumnos aprobaron?
c) En qu perodo se retiro el mayor % de alumnos?
d) A qu facultad(s) pertenece el porcentaje que se repite en ambos perodos y a que
condicin(es) de estudiantes corresponde?
e) En qu perodo curso el mayor nmero de estudiantes en Ing. Electrnica?
f) Cuntos alumnos cursaron en el perodo A?
El programa permitir ingresar por teclado la informacin y presentar la respuesta a
aquellas preguntas.
22.
Probar si la suma de matrices es conmutativa.
23.
Multiplicar dos matrices.
24.
Si I es una matriz identidad, O una matriz nula, A matriz
cuadrada; B la transpuesta de A. Todas del mismo orden (Orden que ser ingresado por
teclado). Hallar:
a) I-A
b) 3(A-2I)
c) AO
d) AB
25.
Ingresar Los elementos de una matriz de orden MxN y
realizar los siguientes procesos:
a) Intercambiar dos filas de la matriz
b) Multiplicar una fila por un escalar diferente de 0.
c) Sumar el mltiplo de una fila de la matriz a otra fila de la misma matriz.
Apuntes de Programacin
120
26.
Matriz reducida. Se dice que una matriz es reducida si
satisface lo siguiente:35
Si una fila no consiste solamente de ceros, entonces el primer elemento (primera
entrada) diferente de cero en la fila, llamado entrada principal, es 1, mientras que
todos los otros elementos de la columna en la que el 1 aparece son ceros.
En cada fila, la primera entrada diferente de cero est a la derecha de la primera
entrada diferente de cero de cada fila arriba de l .
Todas las filas que consistan nicamente de ceros estn en la parte inferior de la
matriz.
Mediante un programa que permita ingresar los elementos de una matriz cuadrada MxN
determinar si es o n reducida.
2.20.
/* para ndice
/* declaracin del arreglo
for (i=0;i<20;i++){
printf(Ingresar vector (%d) : ,i+1); /*ingreso de lo elementos del arreglo
scanf(%f,peso[i];}
modificar (peso);
..
for (i=0;i<20;i++){
35
/* Llamado a la funcin
Apuntes de Programacin
121
printf(%6.2f,peso[i];}
..
}
void modificar(float vector[ ]);
{
int i;
for (i=0;i<20;I++)vector[i]*=2;
return;
}
/* cabecera de la funcin
Apuntes de Programacin
122
Apuntes de Programacin
123
#include <stdio.h>
#include <conio.h>
void main()
{
float matriz[M][N];
float d;
float deter(float m[ ][N]);
int i,j;
//Ingreso del arreglo
clrscr();
for(i=0;i<M;i++){
for(j=0;j<N;j++){
printf(Matriz(%d) = ,i+1);
scanf(%f,&matriz[i][j]);
}
printf(\n);
}
d=deter(matriz);
printf(\nEl determinante es %.2f, d);
getch();
}
/*funcin deter que calcula el determinante/*
float deter(float m[ ][N])
{
float det;
det=(m[0][0]* m[1][1])-(m[0][1]* m[1][0]);
return(det);
}
Ejemplo:
Ingresar por teclado los elementos de dos matrices. (Usar una funcin ingreso ).
Mediante otra funcin suma hallar la matriz que sea la suma de las dos. Otra funcin
imprimir presentar todas las matrices . De partida no se conoce el orden (tamao) de
las matrices. Ello deber ser ingresado por teclado.
// sumamat -suma de matrices
#include<stdio.h>
#include<conio.h>
#define M 50
#define N 50
void main()
{
Apuntes de Programacin
124
int nf,nc;
char nombre;
//Nmero de filas y de columnas
float a[M][N],b[M][N],amasb[M][N]; // Matrices sumandos y suma
int numero(char fc);
void ingreso(float m[][N],int f, int c,char n);
void suma(float m1[M][N],float m2[M][N],float ms[M][N],int f,int c);
void imprimir(float m[][N],int f, int c,char n);
nf=numero('f');
nc=numero('c');
ingreso(a,nf,nc,'A');
ingreso(b,nf,nc,'B');
suma(a,b,amasb,nf,nc);
clrscr();
imprimir(a,nf,nc,'A');
imprimir(b,nf,nc,'B');
imprimir(amasb,nf,nc,'C');
getch();
}
int numero(char fc)
{ int num,n;
clrscr();
printf("Ingresar el nmero de ");
if(fc=='f'){
printf("Filas \n");
n=M;}
else{
printf("Columnas \n");
n=N;}
scanf("%d",&num);
while(num<0||num>n){
printf("Reingresar el nmero de ");
if(fc=='f'){
printf("Filas \n");
}
else{
printf("Columnas \n");
}
scanf("%d",&num);
}
return(num);
}
void ingreso(float m[][N],int f, int c,char n)
{
int i,j;
clrscr();
printf("Ingreso de la matriz %c \n",n);
Apuntes de Programacin
125
for (i=0;i<f;i++){
for (j=0;j<c;j++){
printf("%c(%d)(%d) : ",n, i+1,j+1);
scanf("%f",&m[i][j]);
}
printf("\n");
}
return;
}
void suma(float m1[M][N],float m2[M][N],float ms[M][N],int f,int c)
{
int i,j;
for (i=0;i<f;i++)for (j=0;j<c;j++) ms[i][j]=m1[i][j]+m2[i][j];
return;
}
void imprimir(float m[][N],int f, int c,char n)
{
int i,j ;
printf("\n\nMatriz ");
if(n!='C') printf("%c\n",n);
else printf("Suma de A+B \n");
for (i=0;i<f;i++){
for (j=0;j<c;j++){
printf("%+8.2f",m[i][j]);
}
printf("\n");
}
return;
}
Ejercicio:
1.
2.
3.
Apuntes de Programacin
126
4.
Cada siguiente numero se coloca en 'a casilla correspondiente a 'a fila anterior y
columna posterior.
Ingresar por teclado el orden de una matriz cuadrada. Ingresar los elementos de la
matriz.
El programa debe elevar la matriz a la potencia K, que tambin debe ser ingresada. Se
imprimirn en una funcin tanto la matriz ingresada como la matriz potencia.
Potenciar por multiplicaciones sucesivas. El producto se lo har en una funcin.
9.
Escribir un programa que permita jugar tres en raya al usuario vs. El computador.
Usar un arreglo.
10.
Ingresar en un arreglo los coeficientes de una funcin y = a1xn+a2xn-1+a3xn3+.....an, de grado n, valor que ser ingresado por teclado. Presentar el anlisis
completo de la funcin, con los siguientes elementos:
Mximos y mnimos,
Puntos de inflexin,
Apuntes de Programacin
127
11. Ingresar las matrices A y B par filas y columnas respectivamente, y probar que
(A+B)' = A' + B' . Presentar las matrices originales y los resultados. Usar una
funcin para hallar la traspuesta y otra para determinar que se cumple la
igualdad. Devolver 1 si se cumple y 0 si no se cumple.
12. Hallar la adjunta de una matriz de 3 x 3. Usar una funcin para calcular cada
elemento de la adjunta
13. Probar que si A y B son matrices, Bt = B si b= A+ At
14. Probar que si A y C son matrices, Ct = -C si C= A - At
15. Probar que si A y B son matrices, | A.B | = |A | . | B |. Una funcin calcular los
determinantes.
16. Probar que si A es matriz, |A.At | = | A | 2
Apuntes de Programacin
128
Captulo
129
3.1. INTRODUCCIN
Un lenguaje de programacin es un medio de comunicacin entre el hombre y la mquina
y est compuesto, como todo lenguaje, por un conjunto de smbolos relacionados mediante
una serie de normas sintcticas y semnticas.
Los lenguajes de computadora pueden describirse en trminos de niveles:
Los de bajo nivel o de nivel de hardware, estn estrechamente ligados al diseo de la
computadora; y como estas funcionan con circuitos abiertos y cerrados que representan 1 o
0, respectivamente, los lenguajes de bajo nivel estn escritos usando el sistema binario. Por
estar relacionados con la estructura del hardware, los lenguajes de bajo nivel sern
distintos, dependiendo del equipo.
Los lenguajes ensambladores, en cambio, ya no estn escritos en binario sino que
contienen palabras , en general en ingls. Generalmente no tienen muchas instrucciones por
lo que su uso en la programacin es tedioso.
Los lenguajes de alto nivel tienen instrucciones en idioma ingls y son comprendidos por
cualquier persona que haya estudiado algo de programacin. Es mucho ms fcil programar
en alto nivel que en bajo nivel o ensamblador.
A este grupo pertenece el lenguaje C, que es un lenguaje de propsito general (sirve igual
en aplicaciones cientficas, comerciales, etc.), que surge como una evolucin de los
lenguajes BCPL y B desarrollados por Bell Laboratories en la dcada de los 60, sin
embargo, recin en 1972 se establece la primera versin oficial del lenguaje.
Dadas sus caractersticas (una importante es que no depende del equipo), su uso se
difundi muchsimo en el mbito cientfico y comercial, por lo que se vio la necesidad de
establecer una definicin estndar. As fue que en 1983 se crea el comit del American
National Standards Institute (ANSI) que genera la norma ANSI C.
Evoluciona el lenguaje y se genera una nueva versin llamada C++, que es normada en
1989 bajo la norma ANSI C++.
C es un lenguaje Compilador, lo cual significa lo siguiente:
Para ser ejecutado un programa escrito en Alto Nivel, es necesario convertirlo en a lenguaje
de mquina (que es el nico que entiende el hardware). Para realizar la traduccin se usa un
130
programa llamado compilador. Un compilador de C es, por tanto, el software que permite
escribir y ejecutar programas en C.
El programa escrito en alto nivel, se denomina programa fuente. Al someterle al proceso de
traduccin, (compilacin) se genera otro programa llamado objeto, en lenguaje de mquina.
Ambos contienen los mismo pasos pero en distintos lenguajes (alto y bajo nivel,
respectivamente). Sin embargo, todava no puede ejecutarse. Para ello se requiere de pasos
adicionales que preparen al programa para su ejecucin. Este proceso de preparacin
consiste en enlazar (link) el programa objeto con otras instrucciones y luego cargar el
programa en la memoria. Como resultado se obtiene una tercera versin del programa, el
ejecutable.
Nota: Revisar el archivo Proceso de Compilacin.
3.2. TIPOS DE DATOS EN LENGUAJE C
En C se utilizan los siguientes tipos de datos, los mismos que se comportan de acuerdo
a lo mencionado en el apartado (Ver apartado 1.5 ):
TIPO
NOMBRE
EN C
char
RANGO EN MSDOS
-128...127
Caracter
Unsigned char 0 .. 255
int
-32768..32767
long int
Enteros
2147483648 ..2`14
7`483``647
Unsigned int 0 .. 655 35
Decimales float
+- 10-37 ..+-10+38
Double
+-10-307 .. +-10+308
Long double
+-10-4932 .. +-10+4932
Requerimiento OBSERVACIONES
de memoria
1 byte
Las constantes se
escriben entre
comillas simples. Ej
A
1 byte
Sin signo
2 bytes
4 bytes
Largo
2 bytes
4 bytes
Sin signo
Reales Trabajan con
6 dgitos en la parte
decimal
8 bytes
Doble precisin.
Trabajan con 10 de
dgitos en la parte
decimal.
10 bytes
Largo de doble
precisin. 10 dgitos
en la parte decimal.
Tamao * 1+1 Conjunto de
bytes
caracteres.
131
Tambin existen otros tipos de datos como enumerados (En lenguaje C enum), los mismos
que estn formados por un conjunto de constantes enteras. Ms adelante, en el acpite
siguiente se explica su comportamiento.
Existen adems los datos tipos void que se los utiliza para referirse fundamentalmente a
funciones que no retornan valores (Ej. void main()) o para punteros void (aquellos que
referencian a datos objetos- de tipo desconocido).
3.3. Identificadores.
Los identificadores son nombres que se asignan a variables, a funciones, a constantes
denominadas simblicas, a arreglos y a otros elementos de programacin ms avanzados
como clases y similares.
Se forman con la combinacin de letras y dgitos y del caracter _ (guin bajo). Siempre
empezarn con una letra. Son nombres cortos. El nmero de caracteres depende de la
versin del compilador. Algunas admiten hasta 8 caracteres. Los actuales permiten 32
caracteres. Sin embargo, a juicio del autor no es conveniente utilizar muchos caracteres.
Es importante tener en cuenta que las letras maysculas y las minsculas son consideradas
diferentes en lenguaje C (Se dice que C es sensible a maysculas y minsculas). Un
identificador x es diferente a otro X.
Debe tenerse sumo cuidado de no usar como identificadores palabras que forman parte del
lenguaje (Se las llama palabras clave) como int, if, break, etc.
3.4. Constantes en C.
El lenguaje C permite el uso de constantes segn el tipo de datos del que se trate. La tabla
siguiente ilustra con ejemplos las constantes correspondientes a cada tipo de datos:
Tipo
Int
Ejemplo
56 0 32767 -32768 2
Long int
Unsigned int
Unsigned long int
Float
45245U 100U
65425UL
1. 2.56 .56 0.56 3e5
-2.5e-3
double
3.1416L
Observaciones
No admiten punto , coma o
exponente.
Tienen un rango mayor que
int. Admiten la L o l al final
No tienen signo (U o u)
Sin signo en un rango mayor
Admiten punto y/o
exponente. El exponente
siempre ser entero
Lol
132
Char
A a \n
ECUADOR A 1
ecuador\nmi pas
(*) Las letras que se acompaan a las constantes pueden ser minsculas o maysculas. Sin
embargo algunas versiones solamente admiten una de las dos formas. Hay que consultar el
manual correspondiente (O la ayuda).
Cuando se utilicen datos tipo caracter, stos pueden contener cualquiera de los
caracteres ASCII. Sin embargo para ciertos caracteres (Especialmente aquellos que
representan acciones que realiza el computador), es necesario utilizar las denominadas
secuencias de escape. Algunas de ellas son:
Secuencia de
escape
`\a`
Accin
`\b`
`\f`
Retroceso
Avance de
pgina
Avance de lnea
o nueva lnea
(Enter)
Retorno de
carro
`\\`
`\``
Tabulacin
vertical
Barra inclinada
Comilla simple
`\`
Comilla doble
`\?`
Tabulacin
horizontal
Caracter nulo
`\nnn`
Interrogacin.
Es posible en
ciertos
compiladores
suprimirla
Nmero octal
`\n`
`\r`
`\t`
`\0`
Bell (Alarma)
Secuencia de
escape
`\v`
`\xnn`
Accin
Nmero
hexadecimal
int a,b;
float raiz1,x,valor_2;
133
char a, letra;
char nombre [30]; (Aceptar hasta 30 caracteres).
Short a,b,c;
Long r,s,t;
Int p,q;
Unsigned m,n;
Double x;
Double y;
134
3.6. Operadores En C
En lenguaje C las expresiones que permiten relacionar datos tienen la siguiente forma:
[operando1] operador [operando 2]
donde los operandos 1 y 2 pueden ser constantes, variables o expresiones (segn sea
el caso) que se relacionan mediante el operador.
Lo que est entre [ ] puede eventualmente omitirse. Sin embargo, siempre debe
existir al menos un operando (El 1 o el 2).
Existen varios operadores en lenguaje C, con lo que es posible realizar operaciones de
variada ndole. Conviene clasificarlos de acuerdo a su funcin:
Para los ejemplos considerar los siguientes datos con sus respectivos tipos:
Int a=7,b=3;
Float c=3.0, d= 1.2;
Char x=A,y=B;
135
Nombre[5]=ESPE;
Operadores aritmticos
Realizan operaciones sobre dos operandos.
Operador
+
*
/
Operacin
Adicin
Sustraccin
Multiplicacin
Observaciones
Entre
operandos
enteros
Divisin
Al menos un
operador
flotante
Resto de la divisin entera
entera (el
cociente entero
de la divisin)
flotante
Entre enteros
nicamente
Ejemplo
a+b; (10)
a-b (4)
a*b (21)
a/b (2)
c/d (1.944444)
a%b (1)
La divisin entre enteros es una divisin trunca. Esto quiere decir que se desprecia la
parte decimal, sin importar su valor (No existe aproximacin). El resultado es otro
entero.
Cuando los operandos son de diferente tipo, el lenguaje se encarga de realizar las
conversiones de tipo de dato necesarias para posibilitar la ejecucin de las operaciones.
Tales conversiones son temporales; es decir, el nuevo tipo de dato se mantiene mientras
se realiza la operacin. Enseguida el dato recupera el tipo con el que fue declarado.
Por omisin se producen las siguientes conversiones:
136
Caso
1
2
3
4
Tipo primer
operando
flotante:
flota
double
flotante
float
float
diferente de float
long int
long int
diferente de float
diferente long int
Tipo segundo
operando
flotante de diferente
precisin
double
long double
char o int
char
int
diferente de float
int
char
diferente float
diferente long int
Resultado
double
long double
float
float
long int
long int
int
int
Operadores monarios
Actan sobre un solo operando:
Operador Operacin
Cambio de signo
Observaciones
Equivale a
multiplicar por
(1)
Es tambin de
asignacin
Es tambin de
asignacin
Ejemplo
-a (-7)
sizeof (a) (2
bytes)
sizeof (d)
(4bytes)
sizeof (x) (1
byte)
sizeof (nombre)
(5 bytes)
int (c) se
convierte
temporalmente
en entera. (se
pierde la parte
decimal).
++
Incremento en 1
--
Decremento en 1
Sizeof
(tipo)
Conversin
temporal
Tambin
llamada cast
++a; (8)
a++ (8)(*)
--a (6)
a-- (6)(*)
137
En C++ ciertos
compiladores
admiten int(c)
(*)
pantalla
4
pantalla
4
138
..
La prueba de escritorio es:
a
3
pantalla
3
4
Mientras que para:
..
++a;
printf (%d,++a);
..
La prueba de escritorio es:
a
3
pantalla
4
4
No son equivalentes. Si bien ambas calculan como valor final de a el 4 no presentan el
mismo valor.
En el primer caso (printf(%d,a++)) debe entenderse como la instruccin Primero
imprima el valor de a (3) y luego incremente a en 1 (4)
En el segundo caso (printf(%d,++a)) debe entenderse como la instruccin Primero
incremente el valor de a en 1 (4) y luego presente el valor de a (4).
De manera similar para:
int a=3,b;
..
a++;
b=a;
..
La prueba de escritorio es:
a
3
139
4
4
Para:
int a=3,b ;
..
++a;
b=a;
..
La prueba de escritorio es:
a
3
4
b
4
b
3
4
En tanto que para:
int a=3,b ;
..
b=++a;
..
La prueba de escritorio es:
140
a
3
4
b
4
No son equivalentes.
Este mismo criterio ha de aplicarse a cualquier otra expresin en la que se usen los
operadores monarios ++ y de manera similar.
Nota: las expresiones printf(%d,++a) y printf(%d,a+1) no son equivalentes. La
primera es de asignacin: en ella, la variable a cambia de valor (se incrementa en 1). En
la segunda la variable a no cambia de valor . Sin embargo ambas presentan el mismo
valor.
Operadores relacionales
Realizan las comparaciones simples:
Operador
<
>
<=
>=
Operacin
Menor que
Mayor que
Menor o igual que
Mayor o igual que
Observaciones
Ejemplo
a<b (v 1)
a>b
(f 0)
a>=7 (v 1)
b<=4 (v 1)
Observaciones
Pregunta
Pregunta
Ejemplo
a==7 (V 1)
b!=3
(F 0)
Operadores de igualdad
Realizan comparaciones de igualdad:
Operador Operacin
==
Igual a
=
No es igual a
Operadores lgicos
Realizan comparaciones entre expresiones que son comparaciones simples. Responden
a las leyes del lgebra Booleana.
Considerar:
141
int m=4,n=3,p=2,q=1;
Operador
||
&&
Operacin
Operacin lgica O (disyuncin)
Operacin lgica Y (Conjuncin)
Negacin
Observaciones Ejemplo
m>n||q<p (V 1)
m>n&&p<q (F 0)
(m<n) (V 1)
Operadores de asignacin
Asignan un valor a un identificador (O a varios):
Operador
=
Operacin
Igual a
Observaciones
asignacin
Ejemplo
a=10 (10)
Operacin equivalente
Nuevo valor de a
+=
-=
a+=b
a-=b
a=a+b
a=a-b
10
4
*=
a*=b
a=a*b
21
/=
a/=b
a=a/b
%=
a%=b
a=a%b
142
Ejemplos:
Int a,b,c;
..
scanf(%d,&b);
scanf(%d,&c);
a=b>c?b;c;
pritnf(%d,a);
..
Prueba de escritorio:
b
5
4
c
4
5
Int a,b,c;
..
a=10;
scanf(%d,&b);
scanf(%d,&c);
a+=b>c?b%c;c++;
pritnf(%d,a);
..
b>c
V
F
a
5
5
pantalla
5
5
143
Prueba de escritorio:
a
b>c
pantalla
10
7
4
V
13
13
10
4
7
F
17
8
17
Nota: no necesariamente el valor que devuelva una sentencia condicional debe ser
asignada a un identificador. Puede realizarse una operacin o accin. Ejemplo:
printf(%f, a<b?a*2:b/2);
Se imprimir el doble de a cuando a sea menor que b y la mitad de b cuando a no sea
mayor que b.
3.6.1. Precedencia y Asociatividad de los operadores
Grupo
Monarios
Aritmticos
Aritmticos
Relacionales
De igualdad
Y lgico
O lgico
Condicional
Asignacin
Operadores
- ++ -- sizeof cast
* / %
+ < <= > >=
== =
&&
||
?:
= += -= *= /= %=
Asociatividad
Derecha a izquierda
Izquierda a derecha
Izquierda a derecha
Izquierda a derecha
Izquierda a derecha
Izquierda a derecha
Izquierda a derecha
Izquierda a derecha
Derecha a izquierda
144
Ejemplo:
Si a es entero, b flotante, c caracter y d[20] una cadena de caracter, la sentencia
37
145
scanf(%d %f %c %s,&a,&b,&c,d);
permitir el ingreso de 4 variables (una entera, la segunda flotante, la siguiente de
caracter y la ltima cadena de caracter de mximo 20 caracteres). Despus de cada uno
de los datos se digitar la tecla Enter o, despus de cada uno de los tres primeros un
espacio en blanco. Para el ltimo dato siempre se requiere digitar enter .
Se logra lo mismo escribiendo 4 sentencias scanf (1 para cada dato). Ej:
scanf(%d ,&a);
scanf(%f,&b);
scanf(%c ,&c);
scanf(%s,d);
Longitud de campo.
Campo es el conjunto de caracteres que forman un dato.
La longitud de campo representa el mximo nmero de caracteres que puede contener
un dato ingresado. Si se digitan ms caracteres, los que superan al nmero se almacenan
en otras variables. E:
Si a,b,c son enteros, entonces la sentencia
Scanf(%3d %3d %3d,&a,&b,&c);
Permite el ingreso de tres nmeros enteros, cada uno de mximo 3 dgitos.
Los resultado de digitar los siguientes valores, dar como resultado la asignacin de los
datos siguientes:
Ingreso
987 654 321 enter
987 enter
654 enter
321 enter
987 enter
654 321 enter
9 876 543
Resultado
a=987; b=654; c=321
a=987; b=654; c=321
987654321
Observaciones
Mximo 3 caracteres
Mximo 3 caracteres
146
38
147
Ejemplo:
Si a es entero, b flotante, c caracter y d[20] una cadena de caracter, la sentencia
Printf (%d %f %c %s,a,b,c,d);
Presentar los valores de 4 variables (una entera, la segunda flotante, la siguiente de
caracter y la ltima cadena de caracter de mximo 20 caracteres.)
Se logra lo mismo escribiendo 4 sentencias printf (1 para cada dato). Ej:
printf(%d ,a);
printf(%f,b);
printf(%c ,c);
printf(%s,d);
148
Longitud de campo.
Representa el mnimo nmero de caracteres con el que puede ser presentado un dato.
Ejemplo: printf(%4d%6f,a,b);
Aqu 4 y 6 son los nmeros mnimos de caracteres con los que se representarn los
datos a y b en pantalla, respectivamente. Para los flotantes, la longitud de campo
incluye el signo, el punto decimal, las cifras decimales y el exponente.
Si el nmero tiene ms caracteres que la longitud de campo, automticamente se genera
una longitud de campo que permita la presentacin de todos los dgitos.. Si el nmero
de caracteres es menor que la longitud de campo, sta se completa con tantos espacios
en blanco a la izquierda del dato, cuantos sea necesario para completar la longitud.
Precisin de campo
Junto a la longitud de campo y a su derecha puede eventualmente escribirse un punto
decimal seguido por un entero, el mismo que significa la precisin del valor a imprimir,
segn el tipo de dato:
TIPO DE DATO
Flotante (float)
Cadena de caracteres
Entero (int)
SIGNIFICADO DE LA
PRECISION
Representa la cantidad de
cifras decimales a
presentarse
Nmero mximo de
caracteres a presentarse
Es la cantidad de dgitos a
imprimirse, Si son menos
que la longitud antepone
ceros.
EJEMPLO
%7.3f Presenta 7
caracteres de los cuales 3
son las cifras decimales
6.8s Presenta una cadena
de caracteres d mnimo 6 y
mximo 8 caracteres. Si son
menos de seis completa con
espacios en blanco. Si son
ms de 8, trunca la cadena
en el octavo caracter
%12.4. Presenta el dato
con 12 caracteres como
mnimo. Si son menos, deja
espacios en blanco a la
izquierda. Si son menos de
4 pone ceros en las
posiciones inmediatamente
anteriores a las cifras
significativas hasta
149
completar 4 cifras.
Modificadores de formato
Ciertos autores los llaman Indicadores de formato ( Gottfried Byron S. Programacin en
C.). Modifican la manera en que los datos se presentan en pantalla. Ellos se escriben
siempre inmediatamente despus del caracter %.
Algunos de ellos son:
MODIFICADOR
-
Espacio en blanco
#
SIGNIFICADO
El dato se alinea a la
izquierda. De ser necesarios
ms caracteres, se aumentan
blancos a la derecha
Cada dato numrico es
presentado con su signo. Si
se omite, nicamente el dato
numrico menor que cero
aparece con su signo.
Se presentan ceros en lugar
de blancos cuando el dato
tiene menos caracteres que la
longitud. Se aplica
nicamente cuando estn
alineados a la derecha
Los positivos son precedidos
de un espacio en blanco. Se
ignora si se us el signo +
Todos los datos tipo e, f o g
se presentan con un punto
aunque tengan valor
entero.
150
Posicin en pantalla
1 2 3
Dato
sentencia
int a=12 printf(%d,a);
12
int a=12 printf(%10d,a);
int a=12 printf(%10.4d,a);
int a=12 printf(%+10d,a);
int a=12 printf(%-10d,a);
1 2
float
printf(%f,b);
1 2 .
b=12.578
float
printf(%10f,b);
1 2
b=12.578
float
printf(%10.4f,b);
b=12.578
float
printf(%+10.2f,b);
b=12.578
float
printf(%-10.1f,b); 1 2 .
b=12.578
char
printf(%c,c);
A
c=a
char
printf(%10c,c);
c=a
char
printf(%-c,c);
a
c=a
Tanto scanf como printf son funciones
stdio.h
0
+
1
1
1
10 11
2
2
2
cursor
cursor
cursor
cursor
cursor
cursor
cursor
cursor
cursor
12 13 14
cursor
cursor
a
cursor
cursor
Para ingresar y presentar datos tipo caracter existen otras funciones que aunque no
pertenecen a la norma ANSI , son frecuentemente utilizadas.
3.7.3. Getchar y putchar
getchar sirve para ingresar un dato tipo caracter. La sintaxis es: variable = getchar();
putchar sirve para presentar en monitor un dato tipo caracter. Sintaxis: putchar(variable);
Ejemplo:
char a;
a=getchar();
putchar(a);
permite el ingreso de un caracter y presenta en pantalla el dato ingresado.
151
putchar puede emplearse con datos tipo char sin importar con qu funcin fue ingresado.
(No se vaya a pensar que solamente debe usarse cuando se ingresa con getchar() ).
getch() y getche()
Son funciones que permiten tambin el ingreso de un dato tipo char.
Todas estas funciones estn incorporadas en el archivo de cabecera stdio.h . Todas ellas
son parte de C.
3.7.4. cin y cout
C++ dispone de otras funciones para entrada y salida y que se encuentran en la biblioteca
iostream.h.
C++ trata las entradas y salidas como flujos de caracteres. Por ejemplo, cuando se ingresan
datos desde el teclado, C++ lo entiende como un flujo de caracteres desde el teclado hasta
el programa (Hasta la variable). En tanto que en una salida de datos ese flujo va desde el
programa hacia el dispositivo de salida.
Para lograr dicho flujo, C++ se vale de las funciones cin y cout, para entrada y salida de
datos, respectivamente.
cin
variable
>>
cout
<<
Valor de
Variable
152
Una importante ventaja de las funciones cin y cout frente a sus equivalentes scanf y printf
radica en el hecho de que las primeras requieren de elementos que identifiquen el tipo de
dato de los operandos (lo que se consigue mediante los caracteres de conversin), mientras
que cin y cout no requieren de ellos. Se dice que son inteligentes 39. Por ellas mismas
saben cules son los tipos de datos de los operandos y pueden darles formato.
cin es una funcin (flujo de entrada) conectado a la entrada estndar (el teclado)
cout es una funcin (flujo de salida) conectado a la salida estndar (pantalla).
La sintaxis es:
cin >> variable;
Ej.
cin >> x ;
cin >> radio;
153
Descripcin
Sintaxis
convierte un entero a decimal cin>>dec>>x ;
cou<<dec <<x ;
convierte a hexadecimal un cin>>hex>>x ;
entero
cout<<hex<<x ;
convierte un entero a octal
cin>>oct>>x;
cout<<oct<<x;
Salta caracteres en blanco en Cin>>ws;
la entrada
Establece la precisin de un Cin>>setprecision(10);
flotante (En un nmero de ci Cout<<setprecision(6);
fras especificado)
Establece la longitud de Cin>>setw(12)>>buf;
campo (En un nmero de Cout<<setw(12)<<x;
dgitos especificado)
Establece el caracter de Cin>>setfill(.);
rellenado en los espacios no Cout<<setfill(.);
utilizados por el dato
int x=25;
...
cout<<dec<< x;
cout<<hex<< x;
cout<<oct<< x;
//Presenta 25
//presenta 31
//presenta 19
En este caso se fijaron como bases la decimal, luego la hexadecimal y finalmente la octal.
La ltima base fijada queda activada para las siguientes instrucciones. As, si se continua
con el programa:
154
...
cout <<x;
ltima base fijada.
155
...
cout <<setw(10)<<setprecision(2)<<a;
cout <<setw(10)<<b;
generan la salida:
2.57
yo
Ejemplo
Sea el siguiente programa:
#include <iostream.h>
#include <conio.h>
void main()
{
int h=200,m=150;
float ph,pm;
char hom[ ]=HOMBRES,muj[ ]=MUJERES;
//INICIO
ph=h/(h+m)*100;
pm=m/(h+m)*100;
//Porcentaje de hombres
//Porcenatje de mujeres
clrscr();
//borra la pantalla
cout << setw(17) << POBLACION\n\n;
cout << ITEM << setw(9) << DESCRIP. << setw(5) << No. << setw(6) << %;
cout =========================\n;
cout << setw(3) << 1 << << HOMBRES << setw(5) << h << setw(8) <<
setprecision(2)<< ph<< \n;
cout << setw(3) << 2 << << MUJERES << setw(5) << m << setw(8) <<
setprecision(2)<< pm << \n;
cout << setw(11) << TOTAL << setw(7) << h+m << setw(8) <<
setprecision(2)<< ph+pm;
cout \n=========================;
}
La salida ser:
156
P OBL ACI ON
I TEM DES C
== = = = = = = =
1
HOM
2
MU J
TOT
== = = = = = = =
R
=
B
E
A
=
I P
= =
RE
RE
L
= =
.
No .
%
= = == = ======= ==
S
2 00
5 7. 1 4
S
1 50
4 2. 8 6
3 00
1 0 0. 0 0
= = == = ======= ==
157
Por estar las constantes simblicas definidas en las instrucciones de preprocesador, tienen
un mbito global, es decir, pueden ser convocadas desde cualquier funcin. (No son
patrimonio de ninguna funcin en particular).
Ejemplo:
Calcular la longitud de una circunferencia, el rea de un crculo y el volumen de la esfera
definidos por un radio que se ingresar por teclado:
#include <iostream>
#include <conio.h>
#include <math.h>
# define PI 3.1416
void main()
{
float r, l,a,v;
//INICIO
clrscr();
cout<< Ingresar el valor del radio : ;
cin>>r;
l=2*PI*r;
a=PI*pow(r,2);
v=4./3*PI*pow(r,3);
cout<<Resultados: \nLongitud = <<l<<\nArea = <<a<<\nVolumen = <<v;
}
3.9. Sentencias de control
En el Captulo 2 se revisaron las estructuras de control desde el punto de vista de los
algoritmos. En esta parte se las revisar desde el punto de vista del lenguaje C, por tanto se
pone nfasis en la sintaxis y su comportamiento .
3.9.1. Bucles (Estructuras de repeticin)
Permiten la ejecucin de procesos un nmero finito de veces. Se repite la ejecucin
mientras una condicin sea verdadera. Las estructuras de repeticin son:
5.9.1.1. while
Equivale a la estructura Mientras Repetir.
Sintaxis:
158
Sntencia1;
..
while (sentencia condicional)
{
sentencia2;
sentencia3;
..
}
Las sentencias al interior del bucle se ejecutan mientras la sentencia condicional tenga un
valor de verdad verdadero
Para que sea posible evaluar la sentencia condicional es necesario que exista una sentencia
anterior (La sentencia1) que asigne un valor a la variable que sea evaluada en la sentencia
condiconal.
De otra parte, en alguna de las sentencias al interior del bucle deber modificarse el valor
de la variable evaluada en la sentencia condicional., para que en algn momento el valor de
verdad de la sentencia condicional sea falso, en cuyo caso el bucle finaliza.
Ejemplos:
void main()
{
int d;
d=0;
while(d<10)
{
printf(%4d,d);
d=d+1;
}
}
El programa presenta en pantalla los dgitos (del 0 al 9)
void main()
{
float x;
scanf( %f,&x);
while(x<0)
{
printf(%f,x);
scanf(( %f,&x);
159
}
}
El programa permite el ingreso y la impresin de datos flotantes mayores o iguales a cero
Sentencia nula.
Existe en C y C++ una sentencia que no ejecuta nada. Se la conoce como sentencia nula y
se la representa con el caracter;.
Tiene varias utilidades. Sin embargo su uso equivocado puede generar resultados
inesperados en un programa en C.
Por ejemplo, si en el caso anterior as:
void main()
{
int d;
d=0;
while(d<10); // la sentencia nula est escrita enseguida despus de la condicin
{
printf(%4d,d);
d=d+1;
}
}
El programa entrar en un proceso infinito ya que d toma el valor de 0. La condicin
(d<110) es verdadera, por tanto se ejecuta la siguiente instruccin, es decir, se ejecuta la
sentencia nula (No hace nada) y luego regresa a la condicin. Como no se modifica el valor
de d, la condicin seguir siendo verdadera y la sentencia nula se ejecutar un nmero
infinito de veces.
En la estructura Mientras repetir (while) nunca debe escribirse la sentencia nula despus
de la condicin, ya que se produce un proceso de reejecucin infinita.
Ahora bien, si en el mismo programa, a d se asigna un valor 11:
void main()
{
int d;
160
d=11;
while(d<10)
{
printf(%4d,d);
d=d+1;
}
}
El programa, despus de evaluar la condicin (d<10 11<10), por ser sta Falsa, no
ejecuta las sentencias contenidas entre las llaves y finaliza.. En tanto que si se coloca la
sentencia nula despus de la condicin:
void main()
{
int d;
d=11;
while(d<10); // la sentencia nula est escrita enseguida despus de la condicin
{
printf(%4d,d);
d=d+1;
}
}
Por ser la condicin falsa, no ejecuta la sentencia nula y pasa a ejecutar la sentencia
compuesta escrita entre llaves, por tanto imprimir el valor 11, se incrementa d en 1 y
finaliza.
Ejemplo: Qu hace el siguiente programa?
void main()
{
int d;
d=4;
while(d)
{
printf(%4d,d);
d=d-1;
}
}
161
Prueba de escritorio:
d d?
d0 ?
Pantalla Observaciones
INICIO
4
3
2
1
0
40
30
20
10
00
V
V
V
V
F
4
3
2
1
FIN
162
Despus de ejecutar una vez el programa, otra vez aparecer el mensaje: Desea
Reejecutar?. Del mismo modo, si el usuario digita una s o S, se volver a ejecutar, hasta
cuando el usuario conteste con una letra distinta de s o S.
void main()
{
float a,b;
char resp;
//INICIO
clrscr() ;
cout<<Desea Ejecutar el programa : ;
cin>>resp;
while(resp==S||resp==s)
{
printf( Ingresar primer nmero : );
scanf(%f,&a);
printf( Ingresar segundo nmero : );
scanf(%f,&b);
cout<<La suma de <<a<<+<<b<< es <<a+b;
cout<<Desea Reejecutar el programa : ;
cin>>resp;
}
}
El programa se ejecutar tantas veces cuantas la respuesta sea una S o s. Al digitar
cualquier otra letra, el programa finaliza.
Mas lo ideal es que el programa se ejecute (o reejecute) cuando se trate de una S
mayscula y finalice cuando se trate de una N. Con cualquier otra letra el programa deber
volver a presentar la pregunta si desea Ejecutar (o reejecutar). La solucin es:
#include <iostream.h>
#include <ctype.h>
#include <conio.h>
void main()
{
float a,b;
char resp;
//INICIO
clrscr() ;
cout<<Desea Ejecutar el programa : ;
cin>>resp;
resp=toupper(resp); // se covierte resp en mayscula
163
while(resp!=S&&resp!=N)
{
cout<<Error, Desea Ejecutar el programa : ;
cin>>resp;
resp=toupper(resp); // se convierte resp en mayscula
}
// Se valida para que la respuesta sea nicamente S, o s o N o n
while(resp==S)
{
printf( Ingresar primer nmero : );
scanf(%f,&a);
printf( Ingresar segundo nmero : );
scanf(%f,&b);
cout<<La suma de <<a<<+<<b<< es <<a+b;
cout<<Desea Reejecutar el programa : ;
cin>>resp;
resp=toupper(resp);
while(resp!=S&&resp!=N)
{
cout<<Error, Desea Reejecutar el programa : ;
cin>>resp;
resp=toupper(resp); // se convierte resp en mayscula
}
}
}
Cuando lo que deba reejecutarse es una sola sentencia, no hace falta escribir las llaves, sino
nicamente un caracter ; despus de esa sentencia. Ejemplo
void main()
{
int i;
.
i=1;
while(i++<=10)printf(=);
}
El programa imprime 10 veces el signo =.
La prueba de escritorio es:
164
i++<=10 Pantalla
1<=10
V
Observaciones
INICIO
=
2<=10
V
10 V
==
..
9
9<=10
V
=========
10<=10
V
==========
FIN
10
11
11<=10
F
5.9.1.2.
FIN
do while
165
Para que sea posible evaluar la sentencia condicional es necesario que exista al interior del
bucle, una sentencia que deber modificar el valor de la variable evaluada en la sentencia
condicional., para que en algn momento el valor de verdad de la sentencia condicional sea
falso, en cuyo caso el bucle finaliza.
Una importante diferencia entre las sentencias while y do while es que while da la
posibilidad de que las sentencias al interior del bucle no se ejecuten ni una sola vez, en
tanto que do while hace que esas sentencias se ejecuten al menos una vez.
Ej. Si se trata de imprimir los nmeros pares menores que 10, el programa es:
void main()
{
int p;
p=2;
do
{
printf(%4d,p);
p=p+2;
}
while(d<10);
}
El programa presenta en pantalla los pares (del 2 al 8)
Prueba de escritorio:
p
2
4
6
8
p<=10
4<10
V
6<10
V
8<10
V
Pantalla
2
4
6
8
Observaciones
INICIO
166
10 10<10
F
FIN
Ejemplo :
void main()
{
float x;
do
{
scanf( %f,&x);
printf(%f,x);
}
while(x<0);
}
El programa permite el ingreso y la impresin de datos flotantes menores a cero
Y solamente un dato que sea >= 0, con el que finaliza el bucle. Efectivamente, si el primer
dato ingresado es el 0, se imprime ese dato y por ser falsa la condicin, finaliza el
programa.
Es posible realizar validaciones con la estructura do while; por ejemplo, si se desea ingresar
un numero positivo, el programa ser:
void main()
{
int n;
do
{
printf(Ingresar Nmero positivo
scanf(%d,&n);
}
while(n<=0);
}
El programa obligar a que el usuario ingrese un nmero mayor que 0.
Prueba de escritorio:
167
p<=10 Pantalla
Observ
acione
s
INICI
O
#include <iostream.h>
#include <conio.h>
#include <ctype.h>
void main()
{
float a,b;
char resp;
//INICIO
do
{
clrscr() ;
printf( Ingresar primer nmero : );
scanf(%f,&a);
printf( Ingresar segundo nmero : );
scanf(%f,&b);
cout<<La suma de <<a<<+<<b<< es <<a+b;
cout<<Desea Reejecutar el programa : ;
cin>>resp;
168
resp=toupper (resp);
while(resp!=S&&resp!=N)
{
cout<<Error, Desea Reejecutar el programa : ;
cin>>resp;
resp=toupper(resp); // se convierte resp en mayscula
}
}
while(resp==S) ;
clrscr();
}
5.9.1.3 for
Equivale a la estructura Desde hasta con incrementos de... De manera general ejecuta un
conjunto de sentencias un nmero determinado de veces (Aunque ello no es una norma
rgida)
Sintaxis:
for(exp1;sentencia condicional;exp2) sentencia 1;
En este caso, se ejecuta la expresin1 (en la que generalmente se asigna un valor inicial a
la variable que es sometida a la condicin), luego se evala la sentencia condicional. Si es
verdadera, se ejecuta la sentencia 1. Enseguida se ejecuta la exp2(en la que generalmente se
modifica el valor de la variable que es sometida a la condicin), para nuevamente evaluarse
la sentencia condicional. Cuando sta devuelve un valor de verdad falso, el programa
termina.
Otra forma de la estructura es;
for(exp1;sentencia condicional;exp2)
{
sentencia 1;
sentencia2;
...
}
Aqu, la diferencia radica en que mientras la sentencia condicional devuelve un valor de
verdad Verdadero, se reejecutan las sentencia 1, 2,.... En la expresin2, como antes, , se
modificar el valor de la variable que es sometida a la condicin.
169
Ejemplos:
void main()
{
int digito;
for(digito=1;digito<10;digito=digito+1)
printf(%d6,digito);
}
El programa presenta los nmeros dgitos (del 1 al 9)
Prueba de escritorio:
digito
digito<=10
1
2
3
...
9
10
1<=10 V
2<=10 V
3<=10 V
9<=10 V
10<=10 F
Panta Observaci
lla
ones
INICIO
1
2
3
..
9
FIN
Prueba de escritorio:
170
n
5
i<=n
1
2
3
4
5
6
1<=5
2<=5
3<=5
4<=5
5<=5
6<=5
V
V
V
V
V
F
fact
1
1
2
6
24
120
Pantalla
Observaciones
INICIO
120
FIN
for(f1=1;f1<=10;f1++)
{
clrscr();
printf(\TABLA DEL %d\n\t,f1);
for(i=1;i<=12;i++)printf(=);
printf(\n);
for(f2=1;f2<=10;f2++)
{
p=fq*f2;
printf(\n%4d x %2d = %3d,f1,f2,p);
}
printf(\n\nDigite una tecla para continuar.);
getch();
}
clrscr();
}
La estructura for puede presentarse con algunas variantes; a saber:
for(i=9 ; i ; i--) printf(%4d,i);
Ntese que no existe una condicin explcita. La presencia de i; implica la existencia de una
condicin implcita, que tendr valor de verdad verdadero cuando i sea distinto de 0 y Falso
cuando i sea 0. Por tanto, el programa presentar los nmeros del 9 al 1, de uno en uno.
El mismo resultado puede alcanzarse con las siguientes instrucciones:
171
..
i=9;
for(i ; i ; i--) printf(%4d,i);
o con :
i=9;
for( ; i ; i--) printf(%4d,i);
o bien:
i=9;
for( ; i ; )
{
printf(%4d,i);
i--;
}
La estructura for es til para un sinnmero de aplicaciones. Por ejemplo si se quiere
subrayar el texto APLICACIONES A LA MATEMATICA, se lo har de la siguinete
manera:
void main()
{
int i;
clrscr();
printf(APLICACIONES A LA MATEMTICA\n);
for (i=1;1<=28;i++)printf(=);
}
El programa imprimir 28 veces el signo =, con lo que quedar subrayado eltexto.
En ocasiones pude requerirse que una pantalla quede temporalmente presentada y luego
borrarse. Se consigue esto as:
void main()
{
//impresin de la pantalla
for (i=1;i<=5000;ii++);
clrscr();
}
172
La pantalla quedar visible mientras se ejecuta el bucle for y luego se borrar. Existen otras
maneras, posiblemente ms eficientes, de hacerlo. Ms adelante se las revisar.
3.9.2. Estructuras de decisin
3.9.2.1. Estructura de decisin binaria : Si entonces caso contrario
Se presentan dos casos: El primero que requiere de solamente si y el segundo de si con caso
contrario:
La sintaxis para si (sin caso contrario) es :
if (expresin condicional)
{
sentencia1;
sentencia2;
....
}
Si el valor de verdad de la expresin condicional es verdadero, se ejecutan las sentencias 1,
2, .... .
En caso de ser falsa, se ejecutarn las sentencias que se encuentren fuera de las llaves.
O tambin:
if (expresin condicional)sentencia1;
sentencia2;
Si la expresin condicional es verdadera se ejecuta la sentencia 1 y luego la sentencia 2. En
tanto que si la expresin condicional es falsa, directamente se ejecuta la sentencia 2.
Ejemplo: Si se ingresa un nmero flotante y se requiere su raz cuadrada (si no es positivo,
previamente hay que cambiarlo de signo), el programa ser:
void main()
{
float n, raiz;
scanf(%f,&n); // o bien cin>>n;
if(n<0) n=n*-1;
raiz=sqrt(n);
printf(%.2f,raiz);
}
173
Cuando se ingrese un real negativo, la expresin n<0 ser verdadera, por tanto se ejecuta la
sentencia n=n*-1; y n ser positivo. Enseguida se calcula la raiz de n y se la presenta en
pantalla.
Cuando se ingrese un n positivo, la expresin condicional n<0 ser falsa, por tanto no se
ejecuta la sentencia de cambio de signo sino que directamente se calcula la raiz.
La sintaxis para si con caso contrario es :
if (expresin condicional)
{
sentencia1;
sentencia2;
}
else
{
sentencia3;
sentencia4;
...
}
Ejemplo: Si se ingresa un nmero y se desea conocer si es par o impar:
void main()
{
int n;
cout<<Ingresar nmero entero positivo : ;
cin>>n;
if(n%2==0)
{
cout << El nmero << n ;
cout Es Par;
}
else
{
cout << El nmero << n ;
cout Es Impar;
}
}
El mismo resultado puede lograrse con la siguiente solucin:
174
void main()
{
int n;
cout<<Ingresar nmero entero positivo : ;
cin>>n;
cout << El nmero << n << Es
if(n%2==0)cout Par;
else Impar;
}
Solucin que es ms eficiente.
Cundo utilizar la estructura if con o sin else?. Si el proceso a ejecutar cuando la
sentencia condiconal es verdadera es excluyente con el proceso que se ejecuta cuando es
falsa, Se usa if con else. En cambio, si el proceso a realizar cuando la sentencia
condicional es verdadera es complementario del que se ejecuta cuando es falsa, se usa if sin
else.
Ejercicio:
Qu hace el siguiente programa?:
void main()
{
int y;
cin>>y;
if (y) cout<<Verdadero;
else cout<<Falso;
}
Respuesta: Recuerde el concepto de condicin implcita. En este caso se presenta
precisamente este caso. En la expresin if(y) se est implcitamente preguntando Es y
diferente de 0?. Por tanto cuando se ingresa un valor distinto de cero, la condicin es
verdadera, por tanto, se presenta en pantalla la palabra Verdadero. En caso contrario,
(cuando el valor ingresado es un cero) la condicin es falsa, por tanto se imprime Falso.
Es posible anidar estructuras if; por ejemplo, las siguientes expresiones se comportan como
se muestra:
175
...
if(condicin1) sentencia 1;
else if (condicin2) sentencia2;
else if(condicin3) sentencia3;
..
Prueba de escritorio:
Condicin 1
V
F
F
F
Observacin
FIN
FIN
FIN
FIN
En tanto que :
...
if(condicin1) sentencia 1;
if (condicin2) sentencia2;
if(condicin3) sentencia3;
..
Prueba de escritorio:
Condicin 1 Sentencia1 Condicin2 Sentencia2 Condicin3 Sentencia3 Observacin
V
X
F
F
FIN
F
V
X
F
FIN
F
F
V
X
FIN
F
F
F
FIN
En ambos casos el resultado final es el mismo. Sin embargo, la primera solucin es ms
eficiente ya que realiza menos evaluaciones de las condiciones .
5.9.2.2 Estructura Switch
Permite la ejecucin de uno o ms procesos dependiendo de la evaluacin de una
expresin.. Corresponde a la estructura Evaluar-caso.
Sintaxis:
switch(expresin entera)
{
case constante1:
sentencia1_1;
sentencia1_2;
176
...
break;
case constante2:
sentencia2_1;
sentencia2_2;
...
break;
case constante3;
......
break;
default:
sentencian_1;
sentencian_2;
...
}
Aqu a case se conoce como etiqueta.
Cuando la constante1 tiene valor igual al que devuelve la expresin entera, se ejecutan
sentencia1_1, sentencia1_2,... hasta la sentencia break y finaliza la estructura switch.
En caso de que la constante1 no sea igual al valor devuelto por la expresin entera, se
evala la constante2. Si es igual al valor devuelto por la expresin entera se ejecutan
sentencia2_1 , sentencia2_2,... hasta el nuevo break y sale de la estructura switch. Similar
comportamiento se obtendr cuando las constantes 1 y 2 no sean iguales a la expresin
entera.
Si ninguna de las constantes son iguales a lo devuelto por la expresin entera, se ejecutan
las sentencias que estn despus de default.
Default puede ser omitido, dependiendo de lo que se desee realizar.
Es conveniente tomar en consideracin los siguientes aspectos al momento de utilizar
switch:
Expresin entera puede ser una constante entera, una constante tipo caracter (es un
dato entero), una variable entera, una variable tipo caracter, una expresin que
devuelva un valor entero o caracter , un llamado a una funcin que retorne un valor
entero o caracter. Ejemplos:
5, 3, A,x, letra, x+5, A+5, entero(2,3)
Constante1_1,constante2_1, etc. (Lo que se escribe despus de cada etiqueta case)
puede ser una constante entera (3, 6, 0), una constante de caracter (A, z) o una
expresin que devuelva una constante (x+32).
Pueden escribirse varias etiquetas case continuas, acompaadas de las respectivas
constantes, en cuyo caso se evaluarn en el orden en que estn escritas y cuando una
de ellas tenga un valor igual al de la expresin entera, se ejecutarn las sentencias
correspondientes a ese grupo de etiquetas case. Ejemplo:
177
cin>>e_civil;
switch(e_civil)
{
case S:
case s:
cout<<SOLTERO;
break;
case C:
case c:
cout <<CASADO;
break;
case v:
case V:
cout<<VIUDO;
break;
default:
cout<<DIVORCIADO;
}
Si se ingresa una letra s, se evala el primer case (S); por no ser igual a s , se
evala el siguiente case (s). Por ser igual, se presenta en pantalla SOLTERO.
Esto equivale a decir que no es posible dar case con rangos de valores ni
condiciones. Cada valor tendr su propio case.
Ejemplo:
178
void main()
{
char operador;
int a=2,b=3;
int flag=1;
cin>>operador;
switch(operador)
{
case +:
z=a+b;
flag=2;
break;
case -:
z=a-b;
flag=2;
break;
case *:
z=a*b;
flag=2;
break;
case /:
z=a/b;
flag=2;
break;
default:
cout<<Operador Incorrecto;
}
if (flag==2)cout<<z;
}
En ambos casos se logra obtener el resultado de operar a y b segn el operador que se ha
ingresado.
Otra solucin, sin default:
void main()
{
char operador;
int a=2,b=3;
cin>>operador;
while(operador!=+&& operador!=-&& operador!=*&& operador!=/&&)
{
cin>>operador;
}
179
switch(operador)
{
case +:
z=a+b;
break;
case -:
z=a-b;
break;
case *:
z=a*b;
break;
case /:
z=a/b;
break;
}
cout<<z;
}
Uso de break
Como se revis, break forza la salida de la estructura switch. Sin embargo, break no
es patrimonio exclusivo de switch, sino que trabajo de la misma forma con cualquier
otra estructura; es decir, rompe la ejecucin del bucle y la ejecucin se reanuda
despus de la estructura en la que est ubicada.
Por ejemplo, el siguiente programa:
void main()
{
int i;
for (i=0;i<=9;i++)
{
cout<<i;
}
}
presenta los dgitos (del 0 al 9).
Mas si se modifica el programa:
void main()
{
int i;
for (i=0;i<=9;i++)
{
if(i==5)break;
cout<<i;
}
}
Se presentarn los dgitos del 0 al 4, ya que al ser i=5, se ejecutar la sentencia break,
finaliza el bucle .
Si existieran otras sentencias despus de for, se ejecutarn.
Del mismo modo se comportar break en cualquiera de las otras estructuras de control
(while, do-while)
Uso de continue
Continue hace que se interrumpa la ejecucin para la iteracin actual y que se reanude
en la siguiente. Ejemplo:
void main()
{
int i;
for (i=0;i<=9;i++)
{
if(i==5)continue;
cout<<i;
}
}
Se presentarn los dgitos del 0 al 4 , salta el 5 y vuelven a presentarse del 6 al 9.
Uso de exit
Forza la salida (finalizacin) del programa. Ejemplo:
void main()
{
int i;
for (i=0;i<=9;i++)
{
if(i==5)exit(1);
cout<<i;
}
}
Se presentarn los dgitos del 0 al 4 y finaliza el programa. Es decir, si existen otras
sentencias despus de for, ya no se ejecutan.
EJERCICIOS MISCELANEOS
1.
Desviacin standard = s
[( xi ) 2 / n]
n 1
Para resolver, hacer grupos de tres estudiantes. Cada grupo resolver el programa
completo, para lo cual se construirn funciones como las que se indican a continuacin:
ALUMNO
1
2
3
TIEMPOS:
Organizacin
15 minutos
95 minutos
REGISTRO DE VOLUMENES
TABULACION DE
TABLA DE
DATOS
FRECUENCIAS
No.
1ER 2do. Total Valo Frecuenci F.
.
GR
r
a
Acumulada
GR UP
UPO O
1
3.2 3.0
3
3.0
1
1
2
3.5 3.4 3.2 3.2
3
4
3
3.2 3.5 3.2 3.3
2
6
4
3.2 3.3 3.2 3.4
2
8
5
3.4 3.3 3.3 3.5
3
11
6
3.5
3.3
7
3.4
8
3.4
9
3.5
10
3.5
11
3.5
Mediana
3.3 Posicin 6 to. lugar
Desviacin Standard 0.16
Volumen de menor
3.0
1
frecuencia
Volumen de mayor
3.5
3
frecuencia
Si existen otras frecuencias de igual valor a la nota mxima
oa
la mnima, presentarlas.
Desviacin standard = s
ALUMNO
1
2
3
TIEMPOS:
Organizacin
15 minutos
2
i
[( xi ) 2 / n]
n 1
95 minutos
4.
Resolver una ecuacin de la forma ex-b =0, con un error mximo que ser ingresado
por teclado. Usar el mtodo de biseccin.
Resolver una ecuacin de la forma f(x)=tg(x)-x-c=0. Ingresar un intervalo de
bsqueda de la solucin. Usar el mtodo de la falsa posicin modificada.
Calcular la raz positiva ms pequea de y=tan(x)-ax, mediante el mtodo de
Newton
Ingresar por columnas una matriz de orden M x N y calcular su inversa. Imprimir
las dos matrices.
Ingresar una matriz cuadrada y descomponer en matrices L U. (L= matriz triangular
inferior y U matriz triangular superior) . A=LU
Resolver un sistema de 3 ecuaciones con tres incgnitas por el mtodo de Gauss
Resolver un sistema de m ecuaciones con n incgnitas (m<= n) por el mtodo de
Gauss-Jordan.
Escribir un programa que permita jugar tres en raya al usuario vs. El computador.
Usar arreglos y modo grfico.
Escribir un programa que permita jugar al BINGO.
Ingresar un conjunto de elementos tipo char en una matriz de MxN; ordenarlos en
la misma matriz (De manera ascendente) en funcin de los elementos de la
primera fila. Imprimir tanto el arreglo inicial (Desordenado) como el final
(Ordenado).
Ingresar un arreglo desordenado de N elementos numricos: imprimir el arreglo;
ordenarlo, imprimirlo e ingresar un nmero k y determinar en qu posicin se
encuentra el elemento igual a k (S lo hay). Usar "Bsqueda Binaria". Presentar
el vector con las ubicaciones de los elementos, el nmero k y la posicin
hallada.
Ingresar un vector de n elementos reales. Mediante dos funciones determinar la
diferencia ms grande y la ms pequea entre dos elementos consecutivos del
vector. Imprimir el vector y las diferencias.
Almacenar en un arreglo los nmeros primos comprendidos entre 3 y N que se
ingresar por teclado. Imprimir tal arreglo. Usar el mtodo de la Criba de
Eratstenes.
Ingresar por columnas una matriz de orden M x N y calcular su inversa. Imprimir
las dos matrices.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
El programa permitir el ingreso de los coeficientes de dos polinomios, con sus grados
previamente ingresados. Se imprimirn los polinomios en la forma arriba mostrada. Se
realizar el producto de los polinomios. Se imprimir el producto en la misma forma
anterior.
19.
Comprobar que Se cumple la siguiente igualdad con error < 0.000001. (Usar dos
funciones).
tgh 1 x
x3 x5 x7
.....
3
5
7
20. Ingresar en un arreglo los coeficientes de una funcin y = a1xn+a2xn-1+a3xn3+.....an, de grado n, valor que ser ingresado por teclado. Presentar el anlisis
completo de la funcin, con los siguientes elementos:
Mximos y mnimos,
Puntos de inflexin,
Intervalos de x en los que y crece,
Intervalos de x en los que y decrece,
Intervalos de x en los que y tiene pendiente paralela al eje x
Curvatura : concavidad hacia arriba o hacia abajo.
21. Ingresar las matrices A y B par filas y columnas respectivamente, y probar que
(A+B)' = A' + B' . Presentar las matrices originales y los resultados. Usar una
funcin para hallar la traspuesta y otra para determinar que se cumple la
igualdad. Devolver 1 si se cumple y 0 si no se cumple.
22. Hallar la adjunta de una matriz de 3 x 3. Usar una funcin para calcular cada
elemento de la adjunta
23. Probar que si A y B son matrices, Bt = B si b= A+ At
24. Probar que si A y C son matrices, Ct = -C si C= A - At
25. Probar que si A y B son matrices, | A.B | = |A | . | B |. Una funcin calcular los
determinantes.
26. Probar que si A es matriz, |A.At | = | A | 2
27.
Requisitos:
Los coeficientes de las variables de las tres ecuaciones sern ingresados por teclado
y almacenados en una matriz. El ingreso ser por filas.
28.
29.
(Si cumple)
(No cumple)
A . B a k bk
k 1
Las matrices ;
Los vectores (Cada fila de la matriz, almacenada en un vector);
Las longitudes de cada uno de ellos;
El producto escalar de los vectores.
Un mensaje que indique si la matriz generada es o no del tipo Hadamard.
El nmero de matrices de Hadamard.
Usar funciones para los siguientes procesos:
Generar las matrices
Impresin de matrices
Generar los vectores
Calcular el producto escalar
Calcular la longitud del vector
Imprimir cada uno de los vectores
Devolver el valor de una bandera (1 si es del tipo Hadamard, y 0 si no lo es).
El tamao de los arreglos deber ser definido (Usar una constante simblica).
EVALUACION:
TEMA
Generacin de las matrices
Obtencin de las longitudes
Funcin para generar los vectores
Funcin para calcular el producto escalar
Funcin para determinar si la matriz es del tipo buscado
Funcin para imprimir los vectores
Impresin de las matrices
Funcin principal
TOTAL
PUNTAJE
4
2
2
3
3
2
2
2
20 Puntos
BIBLIOGRAFA
1 Allen Weiss, Mark, Estructuras de datos y algoritmos. Editorial Addison-Wesley
Iberoamericana, USA, 1996
2 Gottfried Byron S. Programacin en C.
3 Granizo Montalvo, Evelio, Lenguaje C, editorial ESPE, Quito, 1998
4 Granizo Montalvo, Evelio, Programacin estructurada en pseudocdigos, editorial
ESPE, Quito, 1998
5 Hekmatpour, Sharam, Gua para programadores en C, editorial Prentice Hill, Mxico
1994.
6 Joyanes Aguilar, Luis, Un enfoque orientado a objetos, editorial McGRaw Hill,
Mxico, 1998
7 Manual de C. Bordland
8 Vergara Ordez, Marco A, Apuntes de programacin en C. Quito, 2001
9 Munch Lourdes, Angeles Ernesto, Mtodos y Tcnicas de investigacin, editorial
Trillas, Mxico, 1996