Você está na página 1de 190

Ir a funciones

APUNTES DE PROGRAMACION EN C

Marco A. Vergara Ordez


Docente de la Escuela Politcnica del Ejrcito

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.

PASOS PARA RESOLVER UN PROBLEMA CON LA AYUDA DEL COMPUTADOR..................9


1.1.
Definicin del problema...........................................................................................................10
1.2.
Anlisis de la solucin..............................................................................................................13
1.3.
Control de calidad sobre el anlisis..........................................................................................13
1.4.
Determinacin de la solucin ptima.......................................................................................14
1.5.
Elaboracin de la tabla de variables y/o constantes................................................................15
1.6.
Construccin del algoritmo en pseudocdigo..........................................................................17
1.7.
Control de calidad II, sobre el algoritmo. ................................................................................21
1.8.
Codificacin en lenguaje de programacin..............................................................................21
1.9.
Compilacin y corrida del programa (Control de calidad 3, sobre el programa. Control
sintctico y semntico).............................................................................................................................25
1.10.
Determinacin del error............................................................................................................25
1.11.
Conclusiones.............................................................................................................................28
1.12.
Documentacin.........................................................................................................................28
2. ALGORITMOS TIPICOS Y ARTIFICIOS.........................................................................................34
2.1.
Ejecucin De Un Proceso Una Sola Vez (Estructura secuencial).............................................34
2.2.
Ejecucin de Un proceso Un Nmero infinito de veces (Uso de Repetir)..........................38
2.3.
Contadores................................................................................................................................40
2.4.
Acumuladores...........................................................................................................................42
2.5.
Test lgico.................................................................................................................................43
2.5.1.
Comparacin simple............................................................................................................43
2.5.2.
Comparaciones compuestas o relaciones lgicas................................................................44
2.6.
Estructuras de control...............................................................................................................46
2.6.1.
Estructuras de repeticin o Bucles.......................................................................................46
2.6.2.
Estructura Mientras-Repetir.................................................................................................47
2.6.3.
Estructura Repetir Mientras..............................................................................................50
2.6.4.
Estructura Desde - Hasta, con incrementos de....................................................................53
2.6.5.
Estructuras o bucles anidados..............................................................................................57
2.7.
Estructuras de Decisin o seleccin.........................................................................................58
2.7.1.
Estructura "Si - entonces - caso contrario"..........................................................................58
-x, si x10............................................................................................................................................66
2.7.2.
Estructura de seleccin mltiple: Evaluar - caso...............................................................66
2.8.
Validacin de datos de ingreso.................................................................................................73
2.9.
Uso de "Banderas" -"flags"-.....................................................................................................74
2.10.
Registro centinela.....................................................................................................................76
2.11.
Uso de operadores especiales...................................................................................................77
3. FUNCIONES.......................................................................................................................................87
3.1.
Declaracin de funciones..........................................................................................................88
3.2.
Llamado a funciones.................................................................................................................90
3.3.
Definicin de la funcin...........................................................................................................91
3.3.1.
Cabecera de la funcin.........................................................................................................91
3.3.2.
Cuerpo de la funcin............................................................................................................91
3.4.
Paso de argumentos..................................................................................................................95
4. ARREGLOS......................................................................................................................................104
4.1.
Declaracin de un arreglo.......................................................................................................105
4.2.
ndices.....................................................................................................................................107
4.3.
Definicin de arreglo:.............................................................................................................108
4.4.
Arreglos bidimensionales.......................................................................................................109
4.4.1.
Declaracin de arreglos bidimensionales...........................................................................110
4.5.
Funciones con parmetros que son arreglos...........................................................................114
4.5.1.
Paso de arreglos unidimensionales a funciones.................................................................114
4.5.2.
Paso de arreglo bidimensionales a funciones.....................................................................116

Apuntes de Programacin

5.

ALGO SOBRE LENGUAJE C++

............................................................................................................................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

uando en el ao 1994 se me encarg la ctedra de Computacin 2 en la Escuela


Politcnica del Ejrcito consider necesaria la existencia de un documento que
sirviera como una gua para los estudiantes, que complemente a la muy
interesante bibliografa existente. Una gua que, de otra parte, evite que el estudiante
dedique buena parte de su tiempo en el aula a tomar apuntes y que pueda, en lugar de
ello, participar activamente en la construccin de conocimiento.
Pens en algo que reemplace a los copiados de los estudiantes. A partir de entonces he
ido construyendo el presente trabajo, al que he denominado Apuntes de
programacin, y que intento sea precisamente eso. No pretendo reemplazar a la vasta y
muy valiosa literatura existente. Apenas intento aportar con una herramienta que
ayude al estudiante en la resolucin de problemas mediante la construccin de
programas de computador. Un problema es una necesidad no satisfecha; en el presente
caso, esa necesidad tiene que ver con la solucin de una amplia gama de ejercicios,
situaciones, etc., por lo general de carcter matemtico, que por requerir de procesos de
repeticin, o de procesos complejos, con una gran cantidad de variantes, se los puede
resolver mediante el diseo de programas informticos. Mas la solucin del problema
no es el fin al que se pretende llegar. Lo importante es alcanzar competencias tales que
permitan llegar a ese punto. Por tanto, para lograr el diseo y escritura de programas,
es necesario desarrollar ciertas habilidades, competencias, relacionadas con las
actividades previas a la construccin del programa y que tienen que ver con el
establecimiento de los objetivos del problema, el anlisis de las posibles soluciones, la
determinacin de la validez de ellas, la seleccin de una alternativa eficaz y eficiente,
para solamente entonces pasar a la escritura de un programa de computacin.
Es precisamente la conviccin de que son estos pasos previos los que ms atencin
deben tener por parte del futuro programador, la que ha determinado la estructura del
documento, en el que buena parte de su contenido est pensado en alcanzar un alto nivel
de preparacin en la fase previa a la escritura del los programas.
Los apuntes estn orientados a lograr que el estudiante desarrolle, potencialice o ponga
en prctica los procesos intelectuales como la comprensin, el razonamiento, la

Apuntes de Programacin

planificacin, la toma de decisiones, el pensamiento crtico, su capacidad creativa, su


habilidad para enfrentar problemas y solucionarlos, la aplicacin de los conocimientos,
etc.
El documento pretende, de otra parte, coadyuvar en el procesos de crecimiento del
estudiante, motivndolo para que recorra este formidable camino de la construccin de
algoritmos y por sobre todo de uno de ellos, el camino de la realizacin individual, en
base a un permanente aprender . Toma mucha importancia entonces lograr que el
estudiante aprenda a aprender. Es parte de la misin.
En ese contexto, el documento contiene un primer captulo relacionado con las
competencias que debe desarrollar el estudiante para convertirse en programador, lo
que se aborda desde el punto de vista de los pasos que deben realizarse para resolver
problemas con el uso del computador. Si bien no es un tema ortodoxo en la
bibliografa, parece muy interesante su tratamiento.
El captulo 2 tiene que ver con algoritmos tpicos que con frecuencia se encuentran en el
trabajo de un programador. Se combinan con ellos aspectos conceptuales que se los
aplica en los algoritmos. Si bien mucho de lo aqu tratado es comn en la programacin,
la forma en que los temas son tratados es muy sui gneris y que en la prctica docente
ha dado buenos resultados.
El captulo 3 aborda el tema de las funciones de programacin creadas por el usuario.
Su tratamiento est ya ms vinculado al lenguaje C. Se mantiene un tratamiento
algortmico relacionndolo con el lenguaje.
El Captulo 4 trata los arreglos y su comportamiento como argumentos y/o parmetros
en las funciones. El tema es tratado desde el punto de vista del lenguaje, bsicamente.
En la presente edicin se aade el Captulo 5 que tiene que ver con el lenguaje C. En l
se revisan los tipos de datos, los operadores, las estructuras de control y otros
elementos de lenguaje. Con la inclusin de estos temas se pretende complementar el
manejo de algoritmos con la codificacin en lenguaje C.
A fin de captulo o de ciertos temas se presentan un conjunto de ejercicios, que se ha
procurado, vayan desde lo ms simple y alcancen un nivel de dificultad medio. Con ello
se intenta que el estudiante refuerce sus conocimientos y ponga en prctica sus
competencias en forma incremental.
Al final se insertan ejercicios, casi todos ellos motivo de trabajos realizados en perodos
acadmicos anteriores, que revisten un importante nivel de dificultad y demandan de
algn esfuerzo y tiempo.
Finalmente los anexos que se incluyen tienen relacin con temas vinculados al lenguaje,
los mismos que debern ser revisados en los manuales correspondientes o en
bibliografa especialmente dedicada a aquello. Sin embargo, lo presentado permite al
estudiante desenvolverse con solvencia en la programacin.

Apuntes de Programacin

En la presente versin se presenta una interesante innovacin, y es que se pone ms


nfasis que en las versiones anteriores, en el uso del lenguaje de programacin. Por
tanto, despus de revisarse cada uno de los temas algortmicos, se presenta el
tratamiento mediante el uso del lenguaje C++. Esto, estoy seguro, contribuir para que
los estudiantes encuentren en una misma fuente tanto los contenidos algortmicos
cuanto los de lenguaje, que hasta la versin anterior demandaban de dos fuentes
distintas. Recomiendo que el estudiante revise los temas algortmicos contenidos en los
captulos 2, 3 y 4 y los relacione con los del Captulo 5.
De otra parte se insertan ms ejercicios clasificados segn su campo de aplicacin, para
que el estudiante los elija en funcin de sus intereses.

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

1. PROCESO DE CONSTRUCCIN DE PROGRAMAS

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

CONT ROL DE CALIDAD(2)

Figura 1 Proceso de construccin de programas


La solucin de un problema a travs de un programa de computador implica la
realizacin de un conjunto de etapas (o pasos) (Ver Figura 1 ) concatenadas entre ellas,
complementarias e interdependientes, en una estrecha relacin sistmica, todos de igual
importancia; a saber:
1.
2.
3.
4.
5.
6.
7.
8.
9.

Definicin del problema


Anlisis de cada una de las soluciones
Control de calidad I (de los pasos 1 y 2).
Seleccin de la solucin ptima.
Elaboracin de la tabla de variables y/o constantes
Construccin del algoritmo en pseudocdigo.
Control de calidad de los pasos 4 al 6.
Codificacin en lenguaje de programacin.
Compilacin (o interpretacin) (Control de calidad III)

Apuntes de Programacin

10

10. Corrida el programa.


11. Control de calidad IV. (Evaluacin de resultados)
12. Determinacin del error.
13. Conclusiones.
14. Documentacin.
15. Bibliografa.
Es necesaria la ejecucin de cada uno de ellos; y lo es ms en la etapa de formacin de
un programador en la que el objetivo, como se anot antes, es desarrollar las
habilidades, capacidades, y en general las competencias que le permitan escribir
programas eficientes. Sin embargo, cuando se haya adquirido la suficiente experiencia y
habilidad, eventualmente algunos de ellos podran ser explcitamente omitidos, aunque
implcitamente siempre se los estar ejecutando. A partir de ahora, se revisan cada uno
de esos pasos:
1.1. Definicin del problema.
Para nuestro objetivo, la definicin de un problema tiene que ver con la habilidad para
identificar problemas en trminos exactos (en lo posible con sus propias palabras), lo
que implica establecer los lmites del problema, reconociendo la informacin de la que
dispone y precisando a dnde se quiere llegar con la solucin.
Muchas veces el enunciado del problema constituye ya la definicin.
En este paso, se determinan con claridad cules son los datos de entrada y cul la
informacin de salida. En otras palabras, se distinguen situacin inicial y final.
Datos de entrada - o situacin inicial - son aquellos elementos que se ingresarn al
computador, sin importar el momento en que se lo haga, mediante cualquiera de las
unidades de entrada de datos, mientras que la informacin de salida o situacin final se refiere a aquellos elementos que sern entregados por el computador mediante
cualquiera de las unidades de salida.
De lo expresado se desprende que eventualmente un dato de entrada puede ser tambin
de salida. As mismo, un problema determinado bien puede no tener datos de entrada.
En ese caso, muy probablemente existirn elementos que se generan en los procesos que
constituyen el programa.
Lo que no tendra sentido es un programa sin informacin de salida.
Ntese que la definicin1 de un problema no implica, necesariamente, el conocer el
camino de solucin ni tampoco el dominio del tema sobre el que versa el problema.2
El ejercicio 1, que consta ms adelante contiene todos los pasos para resolver un
problema, por lo que resulta interesante revisarlo de acuerdo con el avance de los
contenidos. (Ver ejemplo 2.1)
Definir un problema es determinar la situacin inicial (datos ) y la situacin
final (informacin) a la que se quiere llegar.
1

Acptese, de momento, y a modo de convencin, el alcance que se da al trmino definicin. Algunos


autores incluyen en la definicin al anlisis y otros, van ms all e incluyen tambin la solucin.
2
Si se quiere, interprtese la definicin en los trminos en que Leibnitz lo haca. Es decir, distingua la
definicin nominal de la real. La nominal , que es a la que nos referimos en esta parte del documento, que
se refiere a la que contiene solamente la marca de las cosas (problemas) que se quieren distinguir de las
restantes, y la definicin real, que establece la posibilidad de las cosas definidas. (Meditaciones sobre
el conocimiento, la verdad y las ideas , 1664) Gran Enciclopedia Larousse, tomo 7, Pg. 3086.

Apuntes de Programacin

11

Observacin: La informacin de orden terica de la que se dispone y que es


imprescindible para la solucin del problema no forma parte de la situacin inicial. Ej.
Si se trata de construir una solucin para resolver una ecuacin de segundo grado, la
frmula general conocida por todos
x

b b 2 4ac
, no es parte de la situacin inicial. Es un conocimiento previo que
2a

estar inmerso en el segundo paso de la solucin de problemas ( anlisis), como se ver


ms adelante. Es parte el programa.
Ejemplo 1

Sea el enunciado: Ingresar dos nmeros enteros y encontrar la suma de ellos.


La definicin es: Situacin inicial: Dos nmeros enteros; Situacin Final: La suma de
los dos nmeros enteros.
Ejemplo 2

Sea el enunciado: Un libro cuesta $25, cunto cuestan 10 libros?


En programacin no conviene desarrollar algoritmos o programas para resolver casos
especficos como los del enunciado. Conviene, por tanto, modificar el enunciado para
darle generalidad al problema. El nuevo enunciado es: Un libro cuesta x dlares;
cunto cuestan n libros?
Definicin: Situacin inicial: Costo de un libro (x) y nmero de libros (n) cuyo costo se
busca. Situacin final: Costo de los n libros.
Ejemplo 3

Construir una tabla de equivalencia entre metros y pulgadas, para el conjunto


comprendido entre 0 a 100 metros con incrementos de 1 metro.
Definicin: Situacin inicial: Nula (No hay datos que se ingresan). Situacin final:
Tabla de equivalencia entre metros y pulgadas para el intervalo comprendido entre 0 y
100 metros con incremento de 1 metro.
Suele confundirse en estos casos: Se piensa que la situacin inicial es la equivalencia
que existe entre metros y pulgadas. Ese es conocimiento previo que ms tarde estar
formando parte del desarrollo de la solucin.
Ejercicio 1.1
Definir los siguientes enunciados:
a) Hallar la edad en aos de una
persona, a partir del ao de
nacimiento

Apuntes de Programacin

b) Presentar en pantalla los


nmeros pares comprendidos
entre 2 y 20.

12

c) Presentar en pantalla los


nmeros pares comprendidos
entre un lmite inferior y otro
superior.
d) Hallar las seis funciones
trigonomtricas de un ngulo
expresado en grados.
e) Hallar el promedio de las edades
de un grupo de personas. (el
nmero de personas es variable)
f) Una cierta cantidad de dinero ha
de representarse utilizando la
menor cantidad de monedas y
billetes.
g) Conocidos la velocidad inicial y
al ngulo de partida de un mvil
que
describe
trayectoria
parablica,
describir
el
movimiento.
h) Resolver un sistema lineal de n
ecuaciones con n incgnitas.
i) Hallar la equivalencia de grados
Celsius, en Fahrenheit y Kelvin.
j) Determinar el Capital que se
obtendr al cabo de n perodos si
un capital inicial se pone a un
inters del i%.
k) Hallar el valor de la serie
n

y 12i log(2i 1)
i 1

l) Encontrar la abscisa y la altura


de un punto si se conoce la
distancia inclinada del origen al
punto y el ngulo que hace con
la horizontal.
m) Conocido el OH de una
sustancia, hallar su ph y el tipo
de sustancia (bsica, neutra o
cida)
n) Dado el total a pagar de una
compra (Includo el IVA), Hallar
el valor de la compra y el monto
del IVA, si se conce el % del
IVA.
o) Dadas las coordenadas de 2
puntos, determinar la ecuacin
de la recta que pasa por ellos.

Apuntes de Programacin

p) Ingresar un conjunto de datos


enteros y presentarlos en
pantalla. El nmero de datos
ser ingresado.
q) Al problema p aadir: ingresar
un valor entero y verificar si
dicho dato se encuentra en el
conjunto
r) Al problema p aadir: Ingresar
un valor entero y determinar
cuntas veces est presente en el
conjunto.
s) Ingresar la secuencia de una
protena expresada en formato
de una sola letra para cada
aminocido y presentarla en
pantalla
t) Ingresar la longitud de un lado
de un terreno cuadrangular y
calcular la cantidad de alambre
necesaria para cercarlo, si se
desea colocar n hileras.
u) Dados los elementos de dos
conjuntos de nmeros enteros,
hallar los conjuntos unin e
interseccin.
v) Dada una matriz de orden MxN,
hallar su inversa
w) Ingresar una clave de acceso. Si
es correcta escribir Logueado,
caso contrario escribir Sin
autorizacin
x) Durante una colisin, la fuerza F
(en Newtons) que acta sobre un
objeto vara con el tiempo t de
acuerdo con la ecuacin
F= at-bt2, donde t est en
segundos.
Para qu valor de t fue mxima la
carga?
Cul fue el valor mximo de la
fuerza?

13

Cmo es el comportamiento de la
fuerza a travs del tiempo en el

Apuntes de Programacin

intervalo entre 0 y tf segundos?

14

1.2. Anlisis de la solucin.


Consiste en determinar con precisin la estrategia ha seguirse para alcanzar la solucin.
Para esta fase se desarrollarn destrezas para tomar en cuenta todos los aspectos
implicados3 en el problema: ..habilidad para reconocer las variables o factores
importantes y concernientes al problema, capacidad para evaluar datos, conocer y
evaluar los fundamentos tericos para la solucin del problema, capacidad para
proponer ideas innovadoras, etc., etc.
Conviene previamente realizar un anlisis matemtico de la solucin (Si sta demanda
ese tipo de anlisis) o de la naturaleza que demande el problema.
En solucin de problemas, el anlisis equivale al establecimiento de cada uno de los
pasos a seguir en la solucin; por tanto, se realizar una enumeracin de los pasos y su
desarrollo.
En esta fase, que es realizada usando el lenguaje corriente, se usarn verbos en
infinitivo, con frases cortas; se procurar eliminar todo lo accesorio y formal,
concentrndose en los aspectos cualitativos que sean parte de la solucin.
El conjunto de pasos ser finito, ordenado, lgico, simple, coherente, que contemple, en
lo posible, la generalidad de las situaciones que puedan presentarse.
Se establecern las variables que posteriormente aparecern en el programa de
computador. Para tal fin, se observarn las recomendaciones constantes en el punto 1.5.
(Ver ejercicio 1)

1.3. Control de calidad sobre el anlisis.


Es siempre conveniente verificar que lo realizado hasta este momento arroje los
resultados buscados. Para ello se puede usar la por varios autores llamada prueba de
escritorio que no es otra cosa que hacer un seguimiento manual (usando papel y lpiz)
de los pasos a seguir4 y que fueron detallados en el anlisis.
Se comprobar con algunos conjuntos de datos, para verificar si se obtienen los
resultados esperados.
Los datos con lo que se probar sern los que representen, de una parte, a la
generalidad de las situaciones; y, de otra, a los casos denominados crticos; es decir,
aquellos que puedan llevar a comportamientos de excepcin o que lleven a ciertos
procesos que deban ejecutarse cuando una o algunas condiciones deban cumplirse.

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

De manera general, esos casos crticos corresponden a valores o situaciones iniciales y


finales y aquellos, que como se mencion, llevan a un comportamiento muy particular.
Especial cuidado ha de tenerse en reproducir los pasos tal como fueron presentados en
el anlisis, ya que es muy frecuente asumir la ejecucin de operaciones, procesos, etc.
cuando stos no estn especficamente determinados. Y esto es ms grave cuando se
trata de procesos que realizados manualmente (sin programas de computador) resultan
obvios, pero que al ser ejecutados por el computador, dejan de serlo.
En el desarrollo del ejercicio 1 se presenta una sugerencia de formato para la prueba de
escritorio.
En el caso de que este control de calidad demuestre que se han cometido errores,
debern revisarse, rehacerse o modificarse, segn sea el caso, los pasos anteriores.
1.4. Determinacin de la solucin ptima
Los pasos 2 y 3 se realizan para distintas alternativas de solucin que existan. Una vez
realizado ello, se elige la solucin que puede ser considerada como ptima, dentro de la
relatividad del trmino.
Para la eleccin han de considerarse los siguientes parmetros5:
Integridad, considerada como sinnimo de que los clculos y operaciones lgicas sean
correctos cualitativa y cuantitativamente.
Claridad y sencillez. El anlisis debe ser fcilmente interpretado por el autor y por
cualquier otra persona que lo lea. Ello permitir la realizacin de los siguientes pasos
con mayor facilidad y tambin la modificacin, ampliacin y mantenimiento en el
tiempo. A la claridad se llega bsicamente con un anlisis ordenado y disciplinado y
hacindolo de manera ms simple. Conviene inclusive sacrificar ciertos otros aspectos
en aras de la sencillez y claridad
Eficiencia. No se pierda de vista el hecho de que todo lo tratado en este documento
apunta hacia la elaboracin de programas de computador. Desde esa ptica, la
eficiencia de un anlisis est estrechamente relacionada con la velocidad de ejecucin y
aprovechamiento de la memoria. As pues ha de procurarse el uso de un mnimo de
variables, la optimizacin de las mismas, etc... Sin embargo, cuando exista una
contradiccin entre la eficiencia y la claridad y sencillez, es probable que deban
priorizarse stas ltimas. Queda en todo caso, a merced de la experiencia y sentido
comn del programador.
Generalidad. Deber procurarse que una solucin sea lo ms general posible; esto es,
que abarque la mayor cantidad de posibilidades, dentro, claro est, de lo relativo. Esa
variedad de posibilidades se refiere a aspectos cuantitativos y cualitativos; a saber: No
convendr establecer cantidades fijas sino usar variables para asignarles las cantidades;
y, de otra parte considerar casos y subcasos del problema. Es frecuente que un anlisis
5

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

no comprenda a la totalidad de esos casos, entonces debern establecerse con claridad


las restricciones del anlisis.
Modularidad. En lo posible se separarn las diferentes partes del problema en partes o
mdulos que as lo ameriten. La generalidad de los lenguajes de programacin actuales
permiten dar un tratamiento por separado a esos mdulos, lo que resulta de suma
utilidad al momento de alcanzar claridad, correccin y de mantenerlo y actualizarlo.
Amigabilidad (Interactividad). El anlisis debe, en alguna medida, contemplar la
satisfaccin de la necesidad de facilitar la interaccin entre el usuario y el programa
mismo. As pues, har las preguntas adecuadas, guiar e el ingreso de los datos, en sus
restricciones y le permitir comprender el significado de la informacin que ser
entregada.
Una vez evaluados esos parmetros se optar por una de las alternativas (la que mejor
cumpla con ellos), con la que se trabajar en los subsecuentes pasos.
1.5. Elaboracin de la tabla de variables y/o constantes.
Podra, por facilidad decirse nicamente Tabla de datos. Este paso consiste en
realizar una tabulacin de las variables y cierto tipo de constantes a ser utilizadas en el
futuro programa. Recordar que en anlisis se escribieron los nombres de las variables a
ser utilizados. La tabla har referencia a ellos en los siguientes aspectos:
Variable (o constante). Corresponde al nombre de la variable empleada en el anlisis. Se
sugieren las siguientes caractersticas:
No usar nombres muy largos. Mejor hasta 8 caracteres, aunque las versiones actuales de
los lenguajes admiten muchos ms.
El nombre deber indicar algo respecto de su contenido.
Estar formado por la combinacin de dgitos y letras (puede incluirse el caracter _)
empezando por una letra.
Si se trata de programa en C, prefirase usar solamente minsculas. En general se
diferencian las maysculas de las minsculas (La variable r1 es diferente de la variable
R1)
Cuando se trate de constantes que no se quiere que aparezcan como valores especficos
Ej. El nmero (3.1416) - se usar la palabra PI escrita en maysculas. Cada vez
que se requiera se convocar a la palabra PI para hacer referencia a tal valor. A este tipo
de constante se denomina Constante Simblica.
Ms adelante se revisarn otros elementos que suelen constar en la tabla de datos.
Descripcin. Se escribir el significado de la variable en el programa. Ej. Si se us una
variable r para hacer referencia al valor del radio de una circunferencia, en la
descripcin se escribir radio de la circunferencia.
Tipo de dato. En trminos de programacin se usan los siguientes tipos de datos:
(Tabla 1 Tipos de datos)
Los nmeros enteros, como se indica en el cuadro, son exactos; esto es, en la recta
numrica
son representados por un punto, mientras que los decimales no
necesariamente cada nmero corresponde a un punto especfico, sino que ste el

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

Tabla 1 Tipos de datos

Es importante resaltar que, desde el punto de vista de la informtica, las propiedades de


los datos numricos no son idnticas a aquellas relacionadas con la matemtica
convencional. Por ejemplo, en matemticas, la recta numrica, con respecto al conjunto
de nmeros decimales, goza de la propiedad de densidad; esto es, siempre es posible
representar entre dos decimales, otro decimal. En informtica, dado el carcter discreto
de la representacin de nmeros, ello no es siempre posible. Por tanto, varios nmeros
de la matemtica, pueden, eventualmente, ser representados por uno slo en la mquina.
En lo que tiene que ver con los enteros, tal propiedad obviamente s se cumple cuando
del procesamiento en el computador se trata.
Por otro lado, la aritmtica de los enteros difiere con la de la de la matemtica, ya que
en aquel mbito, se define la operacin Divisin Entera, que consiste en que, cuando
dividendo y divisor son enteros, su cociente es otro entero al que se conoce como
entero trunco, ya que resulta de omitir la parte decimal que resultara en la divisin de
la matemtica convencional. Ejemplo: al dividir los enteros 7 y 3 (7/3), el resultado es 2
(No 2.33333333333..) . Similar efecto se obtiene al dividir los enteros 8 y 3 (el entero
trunco de 2.666666666).
Adicionalmente, existe la operacin resto de la divisin entera, que entrega el residuo
de una divisin entre enteros. As, en la divisin 7/3, el resto es 1, mientras que en 8/3,
es 2. (Para su representacin, ver seccin 2.10)
Ms adelante, cuando se revisen los datos en lenguaje C se establecern otros subtipos
de datos y sus rangos.

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.

1.6. Construccin del algoritmo en pseudocdigo.


Es un paso especialmente interesante desde el punto de vista de la programacin, por lo
que deber ser tratado muy detenidamente.
Algoritmo
Un algoritmo es "Un conjunto organizado de instrucciones sencillas, claramente
especificado, que se debe seguir para resolver Un problema".6
Naturalmente, tal conjunto de instrucciones o pasos debe ser ordenado, lgico y
concreto, que no deje nada al azar ni de lugar a ms de una interpretacin, de tal
manera que con el se resuelva el problema en un tiempo finito y lo ms corto posible.
Las instrucciones o pasos se organizan mediante estructuras y en base a ciertas
condiciones.
6

Weiss Mark Allen. Estructura de datos y algoritmos. Pg. 17

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

Figura 2. Representacin de un proceso informtico procedimental

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

Lista de elementos usados


(declaracin de variables)

Instrucciones de los
Procesos
(Ingreso de datos y otras operaciones

Detalle de elementos de salida


(resultados)

Finalizacin del algoritmo

Figura 3 Esquema de un algoritmo

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:

x 5 ; por tanto a partir de aqu x tiene como valor 5.


y x ; y a partir de aqu tiene como valor tambin 5.
y x+10 ; y a partir de aqu tiene como valor 15 (5 que vale x, ms 10)
x x + 3 ; x cambia de valor. Debe leerse: El valor actual de x es su valor anterior
(5) ms 3. Por tanto x a partir de ahora tiene un valor de 8.

Ntese que la variable que aparece a la izquierda del smbolo de asignacin


cambia de valor, mientras que la o las que aparezcan a la derecha, mantienen sus
valores. Esta operacin no es conmutativa. No est definida una asignacin de
izquierda a derecha.

c A; c contiene una letra A mayscula.


f 2.* 15.5; f valdr 31.00
l ESPE, l contendr la palabra ESPE.

Enunciado de salida de datos.


Sirve para que el algoritmo entregue la informacin de salida. Se usan los verbos
escribir, presentar, imprimir, guardar, almacenar, etc. Para el caso ms
general en que la informacin es presentada en monitor o impresora, el verbo es
imprimir.

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

Dichos verbos precedern a la variable o lista de variables cuyos valores se desea


presentar. Pero tambin pueden preceder a expresiones matemticas o de otro tipo,
segn se revisa ms adelante.
Otros enunciados.
Existen otros enunciados, cada uno de los cuales permite la ejecucin de procesos
especficos como los de repeticin, decisin, seleccin, etc., los mismos que son motivo
de estudio en el Captulo 3.
1.7. Control de calidad II, sobre el algoritmo. 10
Conviene en este punto determinar si lo realizado hasta el momento es correcto. Para
ello se puede realizar una nueva prueba de escritorio sobre el algoritmo. Si todo est
bien, sta coincidir con la prueba de escritorio realizada sobre el anlisis.
En caso de existir error, deber volverse sobre los pasos posteriores a la ltima prueba
de escritorio que arroj resultados correctos.
1.8. Codificacin en lenguaje de programacin.
Consiste en escribir el pseudocdigo en un lenguaje de programacin especfico, de los
muchos existentes. El Captulo 5 trata en detalle los elementos de este paso
Conviene, en este punto, presentar un ejemplo de problema a ser resuelto mediante los
diferentes pasos revisados:
Ejemplo 2. 1

Escribir un algoritmo en seudo cdigo, que permita calcular el rea de un crculo, a


partir del valor del radio, el mismo que ser ingresado por teclado.
Paso 1. Definicin del problema. Ingresar por teclado el valor del radio y calcular el
rea del circulo. Presentar en pantalla tanto se radio como su rea.(Regresar)

Paso 2 Anlisis (de una solucin).


1. INICIAR
2. INGRESAR radio
3. CALCULAR area = 3.141*radio*radio
10

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

4. IMPRIMIR radio, rea


5. FINALIZAR
Puede eventualmente incluirse como paso 1 la identificacin del anlisis (Nombre y
propsito) (Regresar)
Paso3. Control de Calidad 1. Prueba de escritorio (Sobre el anlisis)11
Paso (*)
1
2
3

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

Debe validarse el radio de tal


manera
que
se
acepten
radio>0.FIN
FIN

(*) 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

Ingresado por teclado


area=pi*radio*radio

Paso 5. Algoritmo en pseudocdigo12


Calculo del rea de un crculo areacir1Marco Vergara 0.
10/10/2004

Identificacin

USAR:
Decimal radio;
11

Declaracin de variables

Para algoritmos sencillos es factible realizar la prueba de escritorio paso a paso


Aunque la pseudocodificacin no est normalizada, es frecuente escribir las instrucciones con
maysculas, y usar la flecha a izquierda () como operador de asignacin.
12

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

Prueba de escritorio (Sobre el algoritmo en

radio
2

rea
Pantalla
12.5664 CALCULO DEL AREA DE UN
CIRCULO
INGRESE EL RADIO : 2
Radio = 2 Area= 12.5664

Observaciones
FIN

-2

12.5664 CALCULO DEL AREA DE UN


CIRCULO
INGRESE EL RADIO : -2
Radio = -2 Area= 12.5664
0
CALCULO DEL AREA DE UN
CIRCULO
INGRESE EL RADIO : 0
Radio = 0 Area= 0

Debe validarse
de tal manera
que se acepten
radio>0.FIN
FIN

Paso 7. Codificacin en Lenguaje C13


/* Calculo del rea de un circulo/
/* Marco Vergara 0*/
/* 03/10/2005*/
#include <stdio.h>

Identificacin del programa


Instrucciones de preprocesador

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);
}

Ntese la semejanza entre la estructuracin de un algoritmo escrito a modo de


pseudocdigo y el programa en lenguaje C. Se diferencian en los elementos sintcticos
y semnticos del lenguaje de programacin.
Paso 7. Control de calidad 3. Prueba de escritorio sobre el programa en lenguaje C
Es un paso que podra omitirse, a no ser que se tenga dudas respecto del
comportamiento de los diferentes elementos del lenguaje. Sin embargo, para el
principiante resultar siempre de provecho realizarlo.
radio
2

rea
Pantalla
12.5664 CALCULO DEL AREA DE UN
CIRCULO
INGRESE EL RADIO : 2
Radio = 2 Area= 12.5664

Observaciones
FIN

-2

12.5664 CALCULO DEL AREA DE UN


CIRCULO
INGRESE EL RADIO : -2
Radio = -2 Area= 12.5664
0
CALCULO DEL AREA DE UN
CIRCULO
INGRESE EL RADIO : 0
Radio = 0 Area= 0

Debe validarse
de tal manera
que se acepten
radio>0.FIN
FIN

Observe que este resultado es idntico al obtenido en la prueba de escritorio sobre el


algoritmo.

Apuntes de Programacin

26

1.9. Compilacin y corrida del programa (Control de calidad 3, sobre el


programa. Control sintctico y semntico).
Una vez digitado el programa en el editor del lenguaje, se procede a la compilacin. En
este proceso el computador puede detectar errores sintcticos y semnticos en el
programa y permite su correccin. Cualquier error de orden lgico no ser detectado
sino al momento de correrlo (Ejecutarlo), con la comparacin de los resultados
obtenidos en los controles de calidad anteriores y los de este paso.
Al ejecutar el programa (correr el programa)14, los resultados que arroje servirn para
determinar si est o no resolvindose adecuadamente el problema.
Este control de calidad resulta mucho ms simple y rpido que los anteriores, toda vez
que se lo realiza mediante el uso del computador. Es entonces posible realizar muchas
comprobaciones, con cualquier cantidad de casos.

1.10.

Determinacin del error.

Las soluciones que se hallan mediante la construccin de algoritmos y luego mediante


programas de computador, por lo general entregan resultados con algn tipo y nivel de
error. Es importante, por tanto, definirlos, comprender dnde y como se generan,
analizar los mtodos de estimacin, y , por sobre todo, la forma de advertirlos y
minimizarlos.15
Existen varias formas de expresar el error. Algunas de ellas se revisan a continuacin:
Error absoluto
Es la diferencia entre el valor exacto ( o un nmero) y el valor calculado, redondeado
o aproximado. En el mbito de la programacin, el valor exacto es aquel calculado sin
hacer uso de los algoritmos o programas y el calculado el que entregan tanto el
algoritmo como el programa. (Ecuacin 1 Error absoluto )
Errorabsoluto valorexacto valorcalculado

Ecuacin 1 Error absoluto

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

el valor obtenido depender del nmero de trminos en el que se trunque

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

es igual al error relativo de


entrada

1.11.

Conclusiones.

Una vez completado el anlisis de error, es conveniente realizar un anlisis de todo lo


actuado a efectos de concluir respecto de las bondades del programa, sus limitaciones,
el significado del error, los elementos que han de ser considerados por el usuario del
programa, las restricciones, etc.
1.12.

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

operacin, restricciones, nivel esperado de error, ejemplos de corridas, derechos


reservados, etc.
Naturalmente se harn constar todas las fuentes y referencias bibliogrficas utilizadas.
Conviene luego de ello realizar un control de calidad final a modo de verificacin para
poner el visto bueno final al trabajo.

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

de error. Realizar una grfica del


error en funcin del exponente al
que est elevada la variable radio.
4) Realizar el anlisis
de error
propagado para las funciones
y= seno(x) y para y = tangente (x).
Para los dos casos realice el grfico
del error propagado vs. x
5) Al encargado de la bodega de un
almacn le fue necesario pesar 5
sacos de harina. En la bodega haba
una balanza, pero faltaban algunas
pesas y era imposible hacer pesadas
entre 50 Y 100 Kg.. Los sacos
pesaban alrededor de 50-60Kg.
Cada uno.
El
bodeguero
procedi
inicialmente as: Pes los sacos
de dos en dos. Con cinco sacos
se formaron 10 pares distintos.
Por tanto hubo que hacer 10
pesadas. Result una serie de
nmeros, que se reproducen a
continuacin,
en
orden
creciente:

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.

6) Definicin: Determinar si una figura de cuatro lados es un cuadrado.

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 )!)

determinar el nmero de trminos


necesarios para que el error por
truncamiento no sea mayor que un
valor admisible que ser ingresado (Por
ejemplo 0.001).

Apuntes de Programacin

13) Realizar la prueba de escritorio del


siguiente algoritmo:
USAR:
Entero a,d;
Decimal b;
Decimal c,e;
INICIO
Ingresar b;
Ab;
Cb-a;
D a%-5;
E a/d;
Imprimir a,b,c,d,e;
FIN
Probar para b=-20.89, 29.51 y 1.45.
14) Un profesor llega a casa y encuentra
que su esposa se apresta a freir tres
filetes. Los tres del mismo tamao.
En la sartn solo caben 2 filetes. Se
tardan 10 minutos en frer cada
filete por un lado. Por tanto el
tiempo para frer los tres filetes por
los dos lados es: 20 minutos para
frer 2 filetes al mismo tiempo por
los dos lados y 20 minutos ms para
frer el tercer filete por los dos
lados, con un total de 40 minutos. El
profesor nicamente dispone de 40
minutos de los cuales 10 minutos
demora en servirse el alimento. Es
posible que el profesor almuerce los
tres filetes, todos cocidos?. Explique
15) A partir de los algoritmos siguientes
escriba la definicin. Previamente
realice la prueba de escritorio:
a)
INICIO
Ingresar un nmero
Ingresar un segundo nmero
En una variable auxiliar poner el
primero
En el primero poner el segundo

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.

ALGORITMOS TIPICOS Y ARTIFICIOS

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

Figura 4 Esquema de un proceso que se ejecuta una sola ocasin

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

Otra manera de presentar un algoritmo es mediante el uso de la diagramacin


estructurada, la misma que consiste en una serie de diagramas que representan a los
procesos y el flujo del control de los mismos. Una caracterstica fundamental es que
permiten ver claramente cmo cada paso (considerado como una instruccin, o como un
conjunto de instrucciones proceso, considerado como un todo nico-) lleva al
siguiente, sin dar lugar a que se altere la secuencia de ejecucin.
Para la estructura secuencial, el diagrama estructurado es:
Inicio
Proceso
Fin
Donde, en lugar de proceso pueden escribirse filas con las diferentes instrucciones que
lo conforman.
Ejemplo 2. A partir de las longitudes de los catetos, resolver el tringulo rectngulo. Los
valores de los catetos sern ingresados por teclado. Presentar en pantalla todos los
elementos del tringulo.17
ALGORITMO:
-trial- Resolucin de un tringulo rectngulo
Marco Vergara O.
03-10-2005
USAR
Decimal cmayor;
Decimal cmenor;
Decimal hipote;
Decimal tangen;
Decimal angulol;
Decimal angulo2;
Decimal perime;
Decimal sperime;
Decimal area;
17

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:

La edad de Pilar es 21 aos.


7. Ingresar por teclado el valor del lado
de un cuadrado y hallar permetro y
rea.
8. Modificar el ejercicio 7 de tal forma
que se calculen permetro y rea de
un rectngulo (Qu datos deben ser
ingresados?).Lo mismo realizar (En
algoritmos separados) para
un
rombo, trapecio, circunferencia y un
polgono regular.
9. Dilatacin de los cuerpos. Cuando
un cuerpo slido es sometido a un
incremento de temperatura, se dilata
en todos los sentidos. Si una varilla
de metal de lo metros de longitud
inicial se dilata en delta m. Cuando
hay una elevacin de temperatura
que parte de To y llega a Tf OC.
Hallar el coeficiente de dilatacin
, a partir de la siguiente ecuacin
fsica:
l0 (1 ( Tf To ))
10. Presa-Depredador
En una
reserva ecolgica el nmero y de
presas
consumidas
por
un
depredador
individual en un
perodo dado es
y

10x
1 01
. x

donde x es la densidad de presas


(nmero de presas por unidad de
rea). Cul es la densidad de presas
que permitir al depredador
sobrevivir si necesita consumir n
presas en un perodo. El valor de n
ser ingresado por teclado.&
11. Logaritmos. Escribir un algoritmo
que permita ingresar por teclado un
nmero real positivo y que calcule
los logaritmos en base 10 y en base
e.
&

Tomado de Haeussler Ernest F, Jr & Pal


Richard S. Matemticas para Administracin,

Economa, Ciencias Sociales y de la


Vida. Prentice Hall. Octava Edicin,
1997. Pp 44.
En adelante y
debido a que para la
formulacin de los ejercicios, en ocasiones se
han tomado ideas, en otras se toman
literalmente, y ocasionalmente en otras se
adaptan ejercicios o ejemplos de esta misma
fuente, se har mencin, con el mismo smbolo
de nota al pie, a la pgina correspondiente de
la fuente.

12. Prefijos en el Sistema SI. Generar


una tabla que contenga los prefijos
utilizados con unidades SI
Prefijo Smbolo Significado
Tera
T
1000000000000
Giga G
1000000000
Mega M
1000000
Kilo
K
1000
Deci d
1/10
Centi c
1/100
Mili
m
1/1000
Micro u
1/1000000
Nano n
1/000000000
Pico
p
1/1000000000000
13. En promedio, la ingesta diaria de
glucosa (una forma de azcar) de
una persona es 0.0833 libras (lb).
Cunto es esta masa en miligramos
(mg)?. (1lb=453.6g).
14. Un adulto promedio tiene 5.2 l de
sangre. Cul es el volumen de
sangre en cm3?
15. Transformacin de Unidades de
temperatura.
a) Normalmente el cuerpo
humano puede soportar
una temperatura de 105
F por cortos perodos
sin
sufrir
daos
permanentes
en
el
cerebro y otros rganos
vitales. Cul es esa
temperatura en escala
Celsius?
b) El etilngicol es un
compuesto
orgnico

lquido que se utiliza


como anticongelante en
los radiadores de los
automviles. SE congela
a 11.5 C. Calcular la
temperatura en F.
c) La temperatura de la
superficie del sol es de
alrededor de 6300 C.
Cul es la temperatura
en K?
16. Realizar las siguientes conversiones:
a) n aos luz a millas (un ao luz es
una medida astronmica de
distancia, es la distancia que
recorre la luz en un ao 0 365
das. La velocidad de la luz es
3.00x108 m/s.
b) X yardas a centmetros,
c) Z
17. El volumen total de agua de mar es
1.5 x 1021 l. Suponga que esta agua
contiene p porcentaje en masa de
cloruro de sodio y su densidad es de
1.03 g/ml. Calcule la masa total de
cloruro de sodio en kg y Toneladas
(1 Ton=2000 lb; 1 lb =453.6 g).
18. La masa de un electrn se calcula
con la expresin :
masa

c arg a
c arg a / masa

, Si la carga es

1.6022x1019C y la relacin carga masa

es 1.76x 108 C/g. Calcular la masa de


un electrn.
19. El cobre, un metal conocido desde
pocas remotas, se utiliza en cables
elctricos y en monedas, entre otras
cosas. Las masas atmicas de sus
dos
istopos
estables
65
63
y 29 Cu (30.91%) ,
29 Cu (69.09%)
son 62.39 uma y 64.9278 uma,
respectivamente. Calcular la masa
atmica promedio del cobre. Los
porcentajes entre parntesis indican
las
abundancias
relativas.
Generalizar para cualquier par de
istopos con sus respectivas
abundancias
20. Calcular la composicin porcentual
en masa de cada uno de los
elementos de un compuesto. Se
ingresar El smbolo, el nmero de
tomos de cada elemento y la masa
de cada tomo.
El porcentaje en masa de cada
elemento se obtiene al dividir la masa
total de cada uno de los tomos entre
la masa molar del compuesto,
multiplicado por 100.
Trabajar para
compuesto de 3 tomos (H3PO4 cido
fosfrico, H2SO4 cido sulfrico, etc)
Ejercicios 12 al 20, Fuente: Qumica de
Raymond Chang. Mc Graw Hill, 2003.

2.2. Ejecucin de Un proceso Un Nmero infinito de veces (Uso de


Repetir)
Permite la reejecucin de un proceso un numero infinito de veces. No permite la
finalizacin de la repeticin, por tanto no se especifica una condicin para que tal cosa
suceda.
Si bien no tiene aplicacin de orden prctico, ya que todo algoritmo (consiguientemente
un programa) debe ser finito, sin embargo, razones estrictamente didcticas hacen
necesaria su revisin. Los procesos finitos se los revisa ms adelante, en la seccin 3.6.

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.

ESQUEMA DEL COMPORTAMIENTO


INICIO
Repetir
Proceso
FIN

Figura 5 Esquema de un proceso de repeticin infinita

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.

La prueba de escritorio* es:


Paso
1
2
3

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

La prueba de escritorio es:


Paso
1
2
3
4
5
6

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

La prueba de escritorio es:


Paso
1
2
3
4
5
6

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.

Generar (y presentar en pantalla)


los nmeros pares, si se sabe que :

n N Pares { p / p 2 * n}

6. Generar (y presentar en pantalla) los


nmeros impares, si se sabe que :
n N Im pares {i / i 2 * n 1}

7. Generar (y presentar en pantalla)


en forma decreciente los mltiplos
del 10 empezando en 1000.
8. En el periodo 0 una especie tiene 30
ejemplares. Si crece de acuerdo a la
funcin p=po(1+i)n, hallar el
nmero de ejemplares en los
siguientes perodos. Presentar el
nmero de perodo y el nmero de
ejemplares.

9. Hallar el factorial de cada uno de


los nmeros cardinales. Presentar
nmero y su factorial
10. Un mvil parte del reposo en el
instante 0. Si se desplaza con
velocidad constante de 3m/s,
determinar la distancia parcial y la
acumulada recorridas en cada
segundo.
11. Modificar el problema 10 de tal
manera que el mvil se desplace con
aceleracin constante de 1m/s2.
12. Una especie en extincin tiene una
poblacin
inicial
de
1000
ejemplares. Si cada periodo su
nmero baja a la mitad, determinar
en qu periodo se extingue.

2.5. Test lgico.


Se denomina as a una expresin que compare dos o ms elementos de tal forma que el
resultado de tal comparacin (evaluacin) sea Verdadero (V 1) o Falso (F 0).
Existen varios tipos de test, los mismos que tienen relacin con algunas de las
operaciones del lgebra proposicional.
En un test lgico, al menos existir una variable que participe en la evaluacin. Ej.
x>10?, etc.

2.5.1. Comparacin simple.


Se presenta cuando los elementos que se comparan son dos expresiones simples, dos
variables, una variable y una constante, una expresin y una variable, una expresin y
una constante. Los elementos que hacen posible la comparacin son los operadores
de comparacin o relacionales. Ellos son:

OPERADOR
SIGNIFICADO
<
Menor que?
>
Mayor que?
=
Igual a?

Menor o igual que?


Mayor o igual que?
Diferente de?

Tabla 2 Operadores de comparaciones simples o relacionales

2.5.2. Comparaciones compuestas o relaciones lgicas.


Realmente son conexiones (o conectivos lgicos) entre comparaciones simples. En
informtica las usadas directamente son la conjuncin, disyuncin y negacin.
Si c1 y c2 representan enunciados simples, el siguiente cuadro presenta la tabla de
verdad correspondiente:

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

Tabla 3 Tabla de Verdad de los operadores relacionales

Cuando se tienen relaciones lgicas (compuestas) , ha de tenerse en cuenta el grado de


precedencia (o "fortaleza"19) de las operaciones y su asociatividad (Orden de ejecucin),
los mismos que aparecen en la siguiente tabla:
PRECEDENCIA
1
2
3

OPERACION
Negacin
Conjuncin
Disyuncin

OPERADOR

Tabla 4 Tabla de precedencia y asociatividad de operadores lgicos

19

Vergara Garcs Jorge. Matemtica Moderna. Pg. 87

ASOCIATIVIDAD
ID
ID
ID

(*) La disyuncin a la que se refiere la tabla es la inclusiva. En programacin de


computadoras debe tenerse sumo cuidado de que la lgica contemple adecuadamente
los casos de disyuncin exclusiva, ya que el computador no podr diferenciar aquellos
casos en que las dos condiciones simples sean verdaderas y que en la prctica ello no
tenga sentido.20
Condicin implcita.
Como se ha visto, la expresin x<3 en programacin se entiende como la preguna es
x < 3?, por tanto tiene dos posibles valores de verdad, segn cul sea el valor que en ese
momento tenga x.
Es posible formular la condicin x , que equivale a la pregunta x?. Tambin es una
condicin, que por ser tal admite dos valores de verdad: Ser Verdadera cuando x tenga
un valor diferente de 0 y Falso cuando sea 0. Por tanto, la condicin x es equivalente a:
x0 (Es x diferente de 0?) . Se ve con claridad cundo ser verdadera y cundo falsa.

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

Condicin opuesta: (Para rechazar un nmero menor o igual a 0):


n<=0
n
0
-4
4
1)
2)
3)
4)
20

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

Gottfried Byron S. Programacin en C.

5) Reejecutar un proceso cuando la respuesta sea S, s.


6) Numero menor o igual a 20
7) Aceptar un nmero que se halle en el intervalo 5 x 5
8) Aceptar un nmero que se halle en el intervalo 5 x 5
9) Aceptar un nmero menor a 5 o mayor a +5
10) Aceptar una letra mayscula
11) Aceptar caracteres que sean dgitos
12) Aceptar la palabra FIN
13) Reejecutar un proceso cuando el error calculado sea mayor que el error admisible .
14) Aceptar los valores de dos radios de crculos de tal forma que ambos sean positivos
y el 2do sea mayor que el primero
15) Si los lmites de una secuencia de nmeros son xo y xf, aptar el valor de ujn
incremento que permita ir desde xo hasta xf.
2.6. Estructuras de control.
La solucin a muchos problemas no requieren nicamente de procesos que se ejecutan
una sola vez, sino, por el contrario, necesitan de instrucciones que se ejecuten
repetidamente, hasta que o mientras " alguna condicin [lgica] se satisfaga. A estas
estructuras se denominan bucles o lazos. A veces no se conoce por adelantado el
nmero de repeticiones; se repite mientras cierta condicin [lgica] sea verdadera. Otras
veces, un grupo de instrucciones consecutivas se repiten un nmero de veces
especificado. Esta es otra forma de bucle". 21
En otros casos, el camino que tome la solucin depender del resultado de un test
lgico que tenga como nicas posibles respuestas el valor diferente de 0 para Verdadero
o el 0 para Falso. Se est en el caso de la sentencia o estructura de decisin (tambin
conocida como condicional)
De otra parte, en ocasiones se requiere ejecutar una de varias alternativas posibles. Las
sentencias que permiten hacer aquello se denominan sentencias o estructuras de
Seleccin.
A todo este conjunto de sentencias se denomina Estructuras de Control, las mismas
que tienen la particularidad de permitir que dentro de ella se produzca el proceso de
repeticin o de seleccin de procesos y ofrecen por s mismas, la posibilidad de salir de
ellas. (Ej. Abandonar el proceso repetitivo). Este hecho constituye una importante
ventaja sobre mtodos anteriores en los que el programador deba hechar mano de
sentencias como el "go to" para salir de esos procesos repetitivos o de seleccin, lo que
ocasionaba confusin en el programa.
En adelante se estudian las diferentes estructuras desde el punto de vista de los
algoritmos
2.6.1. Estructuras de repeticin o Bucles.

21

Gottfried Byron S. Programacin en C. Pag. 132

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

Figura 6. Esquema de la estructura "Mientras-repetir "

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.
(**)

Otra opcin es repetir mientras dgito sea menor o igual a 9.

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.

Generar los nmeros naturales


menores que 50.

Generar los nmeros pares


menores que 100
3.
Generar los nmeros impares
mayores a 11 y menores que 30

4.

Ingresar por teclado un nmero


real. Mientras el nmero sea negativo
reingresarlo (no aceptarlo) . Presentar el
nmero aceptado.
5.
Ingresar una letra y presentarla
en pantalla. Repetir dicho proceso

mientras la letra sea diferente de z .


(Finalizar cuando la letra sea z)
6.
Ingresar un conjunto de edades y
calcular su promedio. El ingreso
finalizar cuando la edad sea 0 o menor
que 0.

7.

10.

Calcular la suma de n trminos


de la serie:
y x2

x.

x 4 x 6 x8

.... , en donde
2
3
4

Calcular y presentar en pantalla


el nmero de trminos necesarios para
que el valor de la siguiente sumatoria se
aproxime lo ms cercanamente a 1000
sin que lo exceda. (*)

n ser ingresado por teclado.

k2 1
k 1 k

8.

11.

Hallar el factorial de un nmero


n que ser ingresado por teclado.
9.
Imprimir una tabla de cuadrados
, cubos, y raz cuadrada de los nmeros
comprendidos entre 0 y 20.

Presentar en pantalla los n


primeros trminos de la sucesin de
Fibonacci. (Se genera empezando con
los nmeros 0 y 1 y hallando cada
nuevo trmino como la suma de cada
dos trminos precedentes)

(*)

Guillermo Correa Uribe, Desarrollo de Algoritmos y sus aplicaciones. Mc Grew Hill.


Pg. 84
2.6.3. Estructura Repetir Mientras.
Permite que los procesos al interior del bucle se ejecuten al menos una vez, o, mientras
la condicin sea verdadera, varias veces.
FORMA:
repetir
proceso1
sentencia1
Mientras (condicin)
proceso2

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

Guillermo Correa Uribe, Desarrollo de Algoritmos y sus aplicaciones. Mc Graw Hill.


Pg. 84
Figura 7 Esquema de la estructura Repetir-Mientras

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

18. El valor actual neto de u


proyecto de inversin se calcula
mediante la frmula:
VAN

n
t 0

Ft
(1 k )t

donde : VAN = Valor actual neto,


k= tasa de rendimiento
requerida,
Ft = flojo de fondos en el
periodo t
n = nmero de periodos.

Hallar el VAN para una tasa k, con Ft en


n periodos. Todos stos datos sern
ingresados por teclado.
5. El valor actual neto de u proyecto
de inversin se calcula mediante la
frmula:
VAN

n
t 0

Ft
(1 k )t

donde : VAN = Valor actual neto,


k= tasa de rendimiento
requerida,
Ft = flojo de fondos en el
perodo t
n = nmero de perodos.
Hallar el VAN para una tasa k, con Ft en
n perodos. Todos stos datos sern
ingresados por teclado.
6. Imprimir 10 veces la palabra
ESPE.
7. Hallar la aproximacin 3.1416 de
mediante la serie :

1 1 1
1 ........
4
3 5 7

8. Hallar la posicin de un mvil


que se desplaza con movimiento
acelerado y que parte con una
velocidad inicial de 5 m/s, e el
instante t=0 y tiene una aceleracin
de 2m/s2

2.6.4. Estructura Desde - Hasta, con incrementos de.


Ejecuta un proceso un nmero fijo de veces. Ms propiamente debera llamrsela
estructura desde-mientras, con incrementos de. Sin embargo, bien podra tambin
aceptarla con el nombre Estructura Para Repetir, e incluso Para Mientras Repetir.
Independientemente de cmo se la llame, su forma y comportamiento son las siguientes

FORMA:

Desde(*)
(expresinl;
expresin2)
procesol
repetir
proceso 2

mientras(condicin);

expresin1 es una expresin en la que a la(s) variable(s) que ser(n)


sometida(s) al test lgico Se le(s) asigna un valor inicial. El trmino
Desde se aplica a sta expresin.
condicin Es un test lgico, en el que de preferencia, ha de intervenir la
variable de la expresin 1
expresin2, modifica el valor de la variable de la expresin 1, o el de la
variable que interviene en el test. Generalmente lo hace mediante
incrementos o decrementos (suma o resta).
COMPORTAMIENTO

Desde(expresin1; mientras(condicin); expresin2)


Proceso 1
Repetir
proceso2

Figura 8 Esquema de la estructura Desde-Hasta [Para-Mientras]

(*)

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

Ejemplo 6 Escribir un algoritmo en pseudocdigo que permita Calcular la equivalencia


de grados Fahrenheit y Centgrados. Presentar una tabla que contenga las equivalencias
desde -100 hasta +100 grados Fahrenheit.
Definicin: Generar una tabla de equivalencia entre grados Fahrenheit y Centgrados,
en el intervalo
-1OO F + 1OO
Anlisis de una solucin:
1. Imprimir ttulos
2. Desde -100 hasta +100 grados Fahrenheit con incrementos de 1 grado,
calcular el equivalente a grados centgrados mediante la expresin:
C

5
( F 32)
9

3. Finalizar
Algoritmo:
-desde- Uso de desde-hasta
Marco Vergara 0.
12/10/2002
USAR:
Entero fare;
Entero centi;
INICIAR

Imprimir Tabla de equivalencia F C";


Saltar e imprimir F | C;
Saltar e imprimir ------------ ;
Desde (fare=100; mientras(fare<101); farefare+1)
centi (5/9)*(fare-32);
Saltar e imprimir "# |#", fare, centi;

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

centmetros. Desde 0 has 20


pulgadas, con incremento de una
pulgada.
5. Construir una tabla de cdigos
ASCII.
6. Generar una tabla de las
funciones trigonomtricas para
ngulos comprendidos entre 0 y

360 grados, con variacin de 1


grado.
7. Modificar el problema anterior
de tal forma que se genere la
tabla en el rango comprendido
entre un ngulo inicial, otro
final, con un incremento que
ser ingresado por teclado
(Naturalmente los lmites
ngulo inicial y final-, tambin
sern ingresados por teclado)
8. Ingresar por teclado la inicial, el
peso, la talla y la edad de un
grupo de n personas y calcular
los promedios de peso, talla y
edad.

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.

2.6.5. Estructuras o bucles anidados


Cuando como parte del proceso que realizan todos los bucles o estructuras analizadas se
encuentran otros bucles, se habla de bucles anidados, ya que el interno queda anidado
dentro del externo. Este anidamiento puede hacrselo con cualquier nmero de bucles
internos Sin embargo, es esencial que un bucle se encuentre completamente incluido
dentro del otro"22 Los bucles que forman el anidamiento no han de ser, necesariamente
del mismo tipo. Pueden utilizarse indistintamente cualquiera de los revisados y sus
combinaciones. La Figura 9 Esquema de bucles anidados es una representacin
esquemtica de cmo se comportan los bucles anidados..

INICIO BUCLE 1
INICIO BUCLE 2
INICIO BUCLE 3
INICIO BUCLE n
FIN BUCLE n
FIN BUCLE 3
FIN BUCLE 2
FIN BUCLE l

Figura 9 Esquema de bucles anidados

22

Gottfried Byron S. Programacin en C. Pag. 144

2.7. Estructuras de Decisin o seleccin.

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

condicin: Es un test lgico


Si, entonces, caso contrario: son parte de la sintaxis.
Proceso3 Es un proceso independiente de la estructura y es
inmediatamente posterior a
sta
[]

Indican que aquello que est escrito en su interior puede,


eventualmente, omitirse. El hecho e omitirse "caso contrario",
puede cambiar los resultados.
El trmino entonces no obstante ser parte lgica de la estructura,
no es necesario escribirlo. Debe entenderse que si la condicin es
verdadera, entonces se ejecuta el proceso 1. Sin embargo, si el
programador prefiere, podra escribirlo en el pseudocdigo.

COMPORTAMIENTO (a) Sin "Caso contrario"

Si (condicin)

[entonces]
Procesol
Proceso2
Proceso3

Figura 10 Esquema de la estructura Si -entonces

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

Ejemplo 7 Escribir un algoritmo en pseudocdigo, que permita ingresar al computador


un nmero cualesquiera , calcular su raz cuadrada. Si el nmero es negativo, cambiarlo
de signo. Presentar en pantalla el nmero original o el cambiado de signo y el resultado.
Definicin: Ingresar al computador un nmero cualquiera y calcular su raz cuadrada.
Si se nmero es negativo, antes de extraer la raz, multiplicarlo por -1. Presentar
nmero y raz en pantalla.
Anlisis
1. INICIAR
2. Ingresar numero;
3. Si numero<0
[condicin]
3.1.
entonces multiplicarlo par -1;
[proceso 1]
3.2.
extraer la raz del numero 0 del numero cambiado de signo
[proceso 2]
4. Presentar en pantalla numero y raz
[proceso 3]
5. FIN
Algoritmo :
Uso de si-entonces -sien- Marco Vergara 0.
13/10/2002
USAR:
decimal numero;
decimal raz;
INICIAR
Imprimir "Raz cuadrada de un numero";
Saltar e imprimir Ingrese un nmero : ";
Ingresar numero;
Si (numero <0)
Entonces numero numero*(-1);
raiz = numero;
c;
[proceso3]
FINALIZAR

[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

Raz cuadrada de un numero


Ingrese un numero:
-4
+4

+4

Nmero = 4 Raz = 2

Raz cuadrada de un nmero


Ingrese un numero
Nmero = 4 Raz = 2
FIN

Numero * (-1)
FIN

COMPORTAMIENTO (b) Con Caso Contrario

Si (condicin)

[entonces]
Procesol
Caso Contrario
Proceso2
Proceso3

Figura 11 Esquema de la estructura Si entonces - caso contrario

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 3 que es
posterior a la estructura (ya no forma parte de ella); por tanto, en este caso no se
ejecuta el proceso2.
Cuando el valor de verdad es Falso (0), no se ejecuta el proceso 1 pero s el proceso
2, e inmediatamente despus el proceso 3.
En resumen, dependiendo del valor 1 0 que arroje la evaluacin de la condicin,
se ejecutan de manera excluyente los procesos 1 y 2 respectivamente. En cualquier
caso, solamente despus de salir de la estructura se ejecuta el siguiente proceso, el
3.

Diagrama estructurado:
Condicin
VERDADERO
Proceso 1

FALSO
Proceso 2
Proceso 3

Ejemplo 8. Escribir un algoritmo en pseudocdigo que permita a partir de los


coeficientes de una ecuacin de segundo grado calcular sus races reales. De no
existir, presentar el mensaje No hay solucin en los reales.
Definicin: Ingresar por teclado los coeficientes de una ecuacin de segundo
grado. Calcular sus races reales. De no existir stas, presentar el mensaje N o hay
solucin en los reales. Presentar los coeficientes y las races.
Anlisis de una solucin:
1. Ingresar los coeficientes a, b y c;
2. Calcular el discriminante ( dis = b2-4ac)
3. Si dis>0 entonces calcular raz1 = (-b + dis)/(2a) y raiz2 = (-b - dis)/
(2a) e imprimir a, b, c, raiz1 y raiz2
4. Caso contrario Imprimir No hay solucin en los reales
5. Finalizar.
Algoritmo:
-sienca- Unos de si entonces caso contrario
Marco Vergara O.
13/10/2005
USAR:
decimal a, b, c; decimal dis;
decimal raizl,raiz2;
INICIAR
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
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";

Control de Calidad Prueba de escritorio (Sobre el algoritmo)


a

C dis

raiz1

1
2
-3
16
1
2
3
-8

raiz2

Pantalla

Solucin de una Ecuacin de 2do. Grado


Ingrese el coeficiente A:
Ingrese el coeficiente B:
Ingrese el trmino C:
-3
A=1 B=2 C= -3 raizl=1 raiz2=-3

Observ
INICI

FIN

Solucin de una Ecuacin de 2do. Grado


Ingrese el coeficiente A:
Ingrese el coeficiente B:
Ingrese el trmino C:
No existe solucin en los reales
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

raz ; y, c) el nmero ingresado, el


cambiado de signo y la raz.
5. Derrape de un vehculo. La polica
ha usado la frmula s 30 fd para
estimar la velocidad s en Km. por
hora de un vehculo si derrap un
tramo de d metros cuando se detuvo.
La variable f es el coeficiente de
friccin propio del tipo de capa de
rodadura de la va (hormign,
asfalto, grava, alquitrn) y si est
hmedo o seco. Algunos valores de
f estn dados en la tabla. Determinar
la velocidad a la que circulaba el
vehculo si derrap una distancia d
en un camino que puede ser de
hormign seco o hmedo o de
alquitrn seco o hmedo. Para
determinar el tipo de capa de
rodadura y su estado se ingresarn
por teclado el nmero y la letra que
aparece en la tabla.

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

Calcular la bonificacin par un sueldo y


para n aos de trabajo (Ambos sern
ingresados por teclado).
7. Se ingresa por teclado la edad de
cada una de las n personas de un
conjunto, junto con el cdigo de
sexo (h = hombre, m = mujer).
Hallar el promedio de edades de
hombres, de mujeres y totales.
8. Construir una tabla de valores (x,
f(x)) para la funcin:
-x, si x10

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,

Hallar t para una temperatura T. Cul es


el dominio?. Probar para T 30, 36, 39.
10 . En un peaje se desea conocer
cuntos vehculos livianos, pesados y
buses circulan. Se quiere conocer
adems el promedio de personas por
cada tipo de vehculo. Al pasar por el
peaje se registra tipo de vehculo (1=
liviano, 2 = pesado y 3= bus), y el
nmero de personas que transporta.
Cuando se ingresa como tipo de
vehculo el nmero cero (0), finaliza el
ingreso de datos.

2.7.2. Estructura de seleccin mltiple: Evaluar - caso


Permite evaluar una expresin y ejecutar diversos procesos en funcin del
resultado.

FORMA:

Evaluar

(variable entera)

Caso constantel:
Procesol
[fin proceso1]
Caso constante2:
Proceso2
[fin proceso2]
..
..
..
Caso constanten:
Proceson
FTN

Variable entera: Es un variable que ser evaluada y de cuyo valor


depender el proceso a ejecutarse.
Constantel, constante2,... constanten: Contienen los valores que sern
comparados con el de la variable entera. En caso de ser iguales, se
ejecutan los procesos a partir de los precede.
Procesos Los que Se ejecutan, dependiendo del valor de La variable
entera
[ ] Indican que aquello que est en su interior puede, eventualmente,
omitirse . El hecho de omitirse "fin del proceso", har que se
ejecute el proceso que corresponda segn el valor de variable
entera y de ah los dems procesos hasta encontrar "fin de
proceso" o el Final de la estructura.

COMPORTAMIENTO

Evaluar (variable entera)


(Constante1=? Variable entera)
Caso constantel:
V

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)]

Figura 12 Esquema de la estructura "evaluar- caso

Si se omitiera la expresin "fin de casol", el control pasara al proceso 2, sin evaluar


"caso constante2". De omitirse "fin caso2", asimismo, se ejecutara proceso3 a pesar de
que constante3 es diferente de Variable entera, y as sucesivamente, hasta encontrar un
"fin de caso", que hace que el control se traslade al fin de la estructura.
Despus del ltimo proceso ('proceso n), no hace falta incluir la sentencia fin de
proceso", ya que lo siguiente es la finalizacin de la estructura. Sin embargo, si se la
incluye, el comportamiento no variar.
Diagrama estructurado:
Evaluar (variable entera)
Caso constante Caso constante Caso constante Caso constante Por omisin
1
2
3
n
Proceso 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

-evaca- Uso de evaluar- caso(a)


Marco Vergara O~
"Divorciado";
10/10/2004
USAR:
caracter codigo;
INICIAR
Imprimir "Estado civil";
Saltar e imprimir Ingrese el codigo de estado
civil : ":
Ingresar codigo;
Evaluar (codigo)
Caso 'C';
Caso 'c';
Saltar e imprimir "Casado";
Fin caso;

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;

evaca- Uso de evaluar- caso (b)


Marco Vergara 0.
10/10/2004
USAR:
caracter codigo;
INICIAR
Imprimir "Estado civil;
Saltar e imprimir ingrese el codigo de estado civil" :
Ingresar codigo;
Evaluar (codigo)
Caso 'C';
Caso 'c';
Saltar e imprimir "Casado";

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

Control de Calidad. Prueba de escritorio (Sobre el algoritmo).

Caso D
Caso d
Saltar e
imprimir
"Divorciado"
;

Por omisin
Saltar e
imprimir
"Dato mal
ingresado";

(a)

(b)

Codig Pantalla Observaciones


o
C
Casado No evala caso c ni
las restantes
FIN
c
Evala caso C
Casado Evala caso c
No
evala
las
restantes
FIN
S
Evala caso C
Evala caso c
Evala caso L
Evala caso l
Evala caso S
Soltero Evala caso s
No
evala
las
restantes
FIN
H
Evala todos los
casos
FIN

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

Al no poner "fin caso (en el segundo algoritmo) se ejecutan las instrucciones


posteriores que no contengan "fin caso", hasta encontrar un "fin caso", o la finalizacin
de la estructura. No es, por tanto, la solucin al problema.
Vase que cuando, en el algoritmo (a), se digit 'h', no contemplada en ninguno de los
casos, el algoritmo no imprime nada en pantalla. Si se quisiera lograr la impresin de
"No digit el cdigo correcto", o cualquiera otra frase, ser suficiente aadir la
expresin "por omisin", seguida por la instruccin de impresin correspondiente. Ver
parte (b) del ejemplo.
2.8. Validacin de datos de ingreso
Validar un dato es asegurarse que cumpla con ciertas condiciones impuestas por el
problema. Generalmente se refiere este proceso a datos que son ingresados por teclado.
Por ejemplo, si se trata de ingresar el valor del radio de una circunferencia, ste deber
ser mayor 0 a lo sumo igual a 0. No tendra sentido ingresar un valor negativo. El
algoritmo debe contemplar la posibilidad de validar ese dato y permitir el reingreso de
nuevos valores hasta que se cumpla con la condicin.
La validacin esta formada por tres elementos:

1. Ingreso del primer valor


2. Comparacin con la condicin; y,
3. Reingreso en caso de no cumplir la condicin,
hasta que sta se cumpla.
La estructura que mejor responde a este requerimiento es la "mientras - repetir". Sin
embargo la estructura " repetir - mientras" funciona bien excepto por no permitir
diferenciar el mensaje en caso de reingreso. (En el ejemplo 10, para el primer caso
"Ingrese radio de la circunferencia", para los dems, "Reingrese radio de la
circunferencia").
La estructura "si - entonces" por no posibilitar la ejecucin repetida de procesos, no es
aplicable a la validacin..
Importante: La condicin que se ha de evaluar en el algoritmo (por tanto en el
programa) ser siempre la contraria ala condicin que debe cumplir el dato para ser
aceptado. Por ejemplo si ha de ingresarse un nmero entero positivo, la condicin del
problema es n>0. La condicin de programacin ser n 0, contraria a la anterior.
Ejercicio: A qu se debe que la condicin del programa es la contraria a la condicin
del problema en la validacin de datos?

Ejemplo 10 Modificar el ejemplo 1 validando el valor del radio.


Paso 1 Definicin Ingresar por teclado se valor del radio y calcular se rea del crculo.
Presentar en pantalla tanto el radio como el rea. Validar que el valor del radio sea
mayor 0 igual a cero.
Paso 2. Anlisis de una solucin
1. INICIAR
2. INGRESAR radio
3. VALIDAR radio
4. rea 3.1416*radio*radio
5. IMPRIMIR radio, rea
. FINALIZAR
Los pasos intermedios ver en el ejemplo 1
Paso 5. Algoritmo en pseudocdigo
-areacir2- Calculo del rea de un crculo
Marco Vergara 0.
13/10/2002
USAR:
decimal radio;
decimal rea;
INICIAR
Imprimir "CALCULO DEL AREA DE UN CIRCULO;
Saltar e Imprimir "INGRESE EL RADIO :";
Ingresar radio;
Mientras (radio<0)
Saltar e Imprimir "REINGRESE EL RADIO ;
Ingresar radio;
Repetir

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

Solucin de una ecuacin de 2do. Grado


Ingrese el coeficiente A:
Ingrese el coeficiente B

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

Tambin llamado registro ciego23. En muchas ocasiones no se conoce de partida el


nmero de datos o conjunto de datos a ser procesados; pero s cuando stos terminan.
Por ejemplo, si se trata de calcular el promedio de las edades de un conjunto de
personas, para lo cual se ha especificado que se ingresar como edad el valor 0 (cero)
cuando ha concluido el conjunto de personas. Tal valor constituye el registro
centinela. Es decir, aquel valor que controla que despus de l ya no pasen ms. Por
tanto sirve para indicar cuando se agotan los datos (significativos). Mas pueden darse
dos casos: El primero en el que el valor centinela debe ser parte del conjuntos de datos a
procesarse (En el ejemplo, se deber considerar la edad 0 como un dato ms que debe
ser considerado en el clculo del promedio), en cuyo caso, una vez procesado ste
finaliza el ingreso de los datos. El segundo cuando el dato centinela no debe formar
parte de los clculos. Con su ingreso finaliza tambin el ingreso y no se realiza el
clculo con l.
En el primer caso, se utiliza la estructura repetir-mientras , en cuya condicin se
preguntar si el valor ingresado es distinto al centinela, lo que permite que en el
peor de los casos si se ingresa como primer valor e correspondiente al valor
centinela, los procesos se ejecutan una sola vez (Con el valor centinela).
Para el segundo caso resulta til el uso de la estructura mientras repetir, en la que
la condicin ser precisamente que el valor de la variable que reciba el valor
centinela sea diferente a ste. Ello posibilita incluso, que al ingresar como primer
valor el correspondiente al centinela, los procesos no se ejecutan ni una sola
ocasin.
Ejemplo 12. Calcular el promedio de las edades de un conjunto de personas. Se
ingresar por teclado la edad. El ingreso finalizar cuando el valor ingresado de la edad
sea cero (0). Considerar (a) que la edad no ser parte de los datos; y, (b) que s ser
parte de los datos.
Solucin (a)
Inicio
np0;
se0;
Imprimir ingresar edad;
Ingresar edad
Mientras (edad <>0) repetir
se se+edad
np np +1
Ingresar edad

23

Correa Uribe, Guillermo. Desarrollo de algoritmos y sus aplicaciones. Pg. 33

np0
Verdadero

Falso

promse/np

imprimir No se
han ingresado datos
vlidos

imprimir prom
Fin
Solucin (b)
Inicio
np0;
se0;

Imprimir ingresar edad;


Ingresar edad
se se+edad
np np +1
repetir Mientras (edad 0)
promse/np
imprimir prom
Fin
2.11.

Uso de operadores especiales.

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

Granizo Evelio. Programacin Estructurada en Pseudocdigos. Pg. 13


Joyanes Aguilar Luis. C++ a su Alcance. Pg. 54

como smbolos / para la divisin entre enteros, y % para el resto de la divisin


entera, que son los utilizados en dicho lenguaje. (Ir a seccin 1.5)
Ejemplo 12 Determinar Si un nmero ingresado por teclado es par.
Paso 1. Definicin. Ingresar por teclado un nmero entero y determinar si es par.
Presentar en pantalla el resultado correspondiente.
Paso 2. Anlisis de una solucin.
1.
2.
3.
4.
5.

INICIAR
INGRESAR numero
Calcular el residuo entre numero y 2
Si el residuo es cero imprimir Par, caso contrario, Impar.
FINALIZAR

Paso 5. Algoritmo en pseudocdigo


-par- Determinacin de numero Par
Marco Vergara 0.
13/10/2002
USAR:
entero numero;
entero residuo;
INICIAR
Imprimir "DETERMINACION DE UN NUMERO PAR;
Saltar e Imprimir "INGRESE UN NUMERO ENTERO :";
Ingresar numero;
residuo numero MOD 2
Si (residuo = 0) entonces Saltar e imprimir El nmero # es PAR", numero;
Caso contrario Saltar e imprimir "El nmero # es IMPAR", numero;
FINALIZAR
Paso 6. Control de Calidad 2. Prueba de escritorio (Sobre el algoritmo).
numero

residuo

Pantalla

Observaciones

DETERMINACION DE UN NUMERO PAR


INGRESE UN NUMERO ENTERO: 4
El nmero 4 es PAR
FIN
DETERMINACION DE UN NUMERO PAR
INGRESE UN NUMERO ENTERO: 5
EI nmero 5 es IMPAR.
FIN

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.

Ingresar un entero n, validar para n>100. Determinar si el nmero ingresado es


divisible por 8. Presentar un mensaje que indique si es o no.
4.
Ingresar 3 longitudes, a b, c , y si ellas forman un tringulo, calcular el
semipermetro. Presentar los lados y el semipermetro. De no formar un tringulo,
no hacer nada
5.
Se ingresa en edada la Edad de un alumno. En edadb la Edad de otro estudiante. Los
datos se han ingresado cambiados. Intercambiar los valores de las edades.
6.
Ingresar 3 nmeros reales. Averiguar cul es menor y presentarlo.
7.
Imprimir Ttulos que ocupen tres lneas y 200 lneas de texto. Cada 18 lneas se
limpiar la pantalla y se presentarn los mismos ttulos.
Uso de la estructura Mientras Repetir
8.
Una progresin asimtrica y geomtrica combinada tiene la siguiente forma:
9.

a, (a+d)r, (a+2d) r2,.... [a+(n-1)d] r n-1

Ingresar por teclado los valores de a, d, r, n. Calcular e imprimir la suma de los n


primeros trminos de la serie.
Uso de la estructura Repetir Mientras
10.

La sucesin de Fibonacci, 0, 1, 1, 2, ... se genera empezando con los nmeros 0 y 1


y calculando cada nuevo miembro como la suma de dos miembros precedentes de la
sucesin. Calcule e imprima los N primeros trminos de la sucesin y su suma. De
otra parte, calcule el nmero mximo de trminos de la sucesin de Fibonacci cuya
suma no exceda de 10000.

Uso de la estructura Desde Hasta, con incrementos de..


11.

Una terna Pitagrica es el conjunto de los tres valores enteros correspondientes a


los lados de un tringulo rectngulo. Los tres lados deben satisfacer el teorema de
Pitgoras. Escribir un algoritmo en pseudocdigo que encuentre todas las ternas
pitagricas para cateto1, cateto2 e hipotenusa, todos ellos no mayores a 600. Usar la
estructura del objetivo.

Diferenciacin entre contadores y acumuladores


12.

Ingresar los siguientes datos de un conjunto de n personas:


Sexo: M masculino, F femenino
Ao de nacimiento
Estado civil: 1 soltero, 2 casado.
Se desea saber:

El nmero de hombres solteros que pueden votar


El nmero de hombres casados que pueden votar
El nmero de mujeres solteras que pueden votar
El nmero de mujeres casadas que pueden votar
El nmero total de personas solteras que pueden votar
El nmero total de personas casadas que pueden votar
El nmero total de personas que pueden votar
El promedio de edades del grupo.

El nmero de personas se ingresar por teclado.

Uso de la estructura S Entonces - Caso contrario


13.

Calcular la velocidad terminal de asentamiento de una partcula esfrica, dados el


dimetro y la densidad de la partcula y la densidad y viscosidad del lquido donde
se asienta la partcula. Los datos de entrada consisten en los valores de los cinco
parmetros.
D, Dimetro de la partcula, cm.
G , aceleracin de la gravedad, cm/s2
, densidad del lquido g/cm3
s, densidad verdadera de la partcula g/cm3
, viscosidad del lquido, g/cm-s
La velocidad v de la partcula relativa a la del lquido, en cm/s, depende del nmero de
Reynolds, que se define por:
N R Dv /

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

1000 NR < 200.000

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

El programa decidir cul de las tres expresiones de velocidad es aplicable verificando


el Nmero de Reynolds despus del clculo de cada velocidad. Si el nmero de
Reynolds es mayor de 200.000, indicarlo en la impresin no imprimir ningn valor de la
velocidad.
Validacin de datos
14.

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.

Resolver una Ecuacin de segundo grado. A, B y C (Coeficientes y trmino


independiente) se ingresarn por teclado. Usar banderas para la ecuacin de las
respuestas en los siguientes casos:

Races reales e iguales


Races reales y desiguales

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.

Ingresar tres nmeros y ordenarlos en forma: a) ascendente; y, b) descendente.


Presentarlos en el orden de ingreso y ordenados
Ingresar dos nmeros y determinar si el nmero mayor es mltiplo del otro
Ingresar un nmero y determinar si es primo
Ingresar un nmero decimal y el nmero de cifras decimales al que se quiere
aproximar. Obtener la aproximacin.
Ej. Dados el nmero 4.657896 y 4 (cifras decimales), la aproximacin
ser 4.6579 (Para cifras menores o iguales a 5 aproximar hacia abajo).

Determinacin de errores.
21.

Escriba un programa en C para resolver la siguiente funcin:

f ( x)

1
, en cul rango de x aparece un desborde o una divisin entre cero
1 tanh( x )

originados por el error de redondeo.


Usar el nmero positivo ms pequeo y el psilon de la mquina. Sugerencia:
Consultar de Shoichiro Nakamura, Mtodos numricos aplicados con Software. Prentice
Hill. Pgs. 5-21. Justificar tericamente el resultado.
Uso de la estructura Evaluar caso
22.

Formar un MENU que tenga 8 opciones: del 1 al 7 para ejecutar los


correspondientes ejercicios, y el 8 para finalizar la ejecucin.

Diferenciacin entre contadores y acumuladores


23.

Se hace una serie de n tiros al blanco mostrado en la figura. La posicin de cada


tiro se da por sus coordenadas (x,y). Cada buena se anota con dos puntos, una
falla con cero y los tiros en las lneas de contorno, con un punto.
Escribir el algoritmo que permita el ingreso por teclado de los valores (x,y) y que
calcule la puntuacin, el nmero de buenas, de Fallas y de contornos. La
Finalizacin del ingreso de los datos se har a travs de un registro centinela (0,0).

(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.

Usar banderas para los clculos y la presentacin de los resultados.


Uso de diferentes tipos de datos en C.
25.
Ingresar por teclado datos tipo char, int, short int, long int, float, double y long float.
Presentarlos en pantalla, usando, para cada tipo de dato, mscaras distintas.
26.
Presentar en pantalla la cantidad de bytes que ocupa cada uno de esos tipos de
datos.
27.
Demostrar los rangos en que trabajan los diferentes tipos de datos.
28.
Ingresar y presentar en pantalla datos (y arreglos) tipo char mediante las funciones
get, put, gets, puts.
29.
Ingresar por teclado una cadena de caracteres digitada en letras minsculas y
presentarla en maysculas.
Manejo de fechas.26
30.
Ingresar la fecha de nacimiento de una persona en formato ao mes da. En una
funcin hacer que se imprima la fecha de nacimiento en formato de texto.
Ej. : Si se ingresa 30 05 2000, se imprimir treinta de mayo del dos mil.
En otra funcin determinar el signo del zodaco que le corresponde.
Finalmente calcular la edad de cada persona
Validar en otra funcin, los datos para que se hallen dentro de los rangos
correspondientes, incluyendo el ao bisiesto.
31.

Resolucin de un sistema de tres ecuaciones lineales, con tres incgnitas:

Ingresar por teclado los coeficientes y trminos independientes de un sistema expresado


en la siguiente forma:
a1x + b1y + c1z = d1
a2x + b2y + c2z = d2
a3x + b3y + c3z = d3
Los coeficientes tendrn 8 dgitos, 3 decimales y se presentar su signo. El trmino
independiente se presentar en forma de exponente.
Las soluciones (x, y z) tendrn 10 dgitos, 5 decimales, alineados a la derecha.

26

Tomado parcialmente del Libro Lenguaje C. Ing. Evelio Granizo.

De no existir solucin, o existir solucin mltiple, en lugar de solucin se


presentar el mensaje correspondiente.
Los datos se ingresarn en posiciones especficas de la pantalla. Ej. :
a

-1

-4

Graficar las rectas.


32.

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.

Clculo del volumen de un recipiente.


El volumen de combustible contenido en un tanquero de seccin elptica y largo l,
es determinado mediante una regleta marcada cada centmetro, que se introduce en
un orificio en su parte superior. El lquido deja una marca en ella. Elaborar una tabla
que contenga la correspondencia entre la lectura (altura) de la regleta y el volumen
contenido (a esa altura
Los resultados sern presentados en dos columnas, con formato de
nmeros. Se ingresar por teclado D, d y l.
Deber imprimirse los ttulos en una funcin, lo que se repetir cada
cambio de pantalla.

34.

Representacin grfica de curvas:28

Hallar las coordenadas del punto de interseccin de las curvas


27

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.

Uso de operadores relacionales y lgicos:

Sean x=(a=b) , y=(pq), z=((p+q) r), m=(s=11), n=(q= \0),


donde a, b, p, q, r, s m y n sern ingresados por teclado, y las expresiones entre
parntesis son relacionales.
Presentar en pantalla las tablas de verdad para las siguientes proposiciones:
xy
xy
(xy) c(xy)
(x y) x y ( z (m) n),
n z (x z) (z-p+(-125)( \0 %s = 0))
Presentar efectivamente, en forma de tabla, con filas y columnas impresas. Ej.

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.

Uso de la estructura S Entonces - Caso contrario

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,

forman un tringulo escaleno no rectngulo,


forman un tringulo escaleno rectngulo,
En caso de que formen tringulo, resolverlo con un mtodo general.

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.

La declaracin de una funcin tiene como objetivos el asignar el nombre a la funcin,


determinar qu tipo de dato devuelve la funcin y la cantidad, orden y tipo de
parmetros con las que trabajar. Tambin se la llama Prototipo de la funcin. Toda
funcin debe tener un prototipo, lo cual equivale decir a que debe ser declarada.
En C, la sintaxis de la declaracin es:
Tipo nombre ([tipo parmetro1, tipo parmetro2,....., tipo parmetron]);
29

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).

x1=raiz(a,b,c,1); x1 tomar el valor de la primera raiz real de una ecuacin de


segundo grado.
x2=raiz(a,b,c,2); x2 tomar el valor de la segunda raiz real de una ecuacin de
segundo grado.
Nota: las constantes 1 o 2 del llamado, que sern recibidas por la variable flag
(bandera) le indicarn a la funcin qu raiz retornar .
c. Sea la funcin void circunf(float x, flota y, float r); que presenta en pantalla la
ecuacin de una circunferencia que tiene como coordenadas del centro a x e y y
como el valor del radio a r.
Y sea la funcin float longitud(float x1, float y1, float x2, float y2); que calcula la
distancia que existe entre dos puntos en base a sus coordenadas.
Entonces un llamado puede ser: circunf(2, yc, longitud(0,0, m,n)); La funcin circunf
presentar en pantalla la ecuacin de la circunferencia cuyo centro tiene las coordenadas
2, yc y cuyo radio sea el valor que devuelve la funcin longitud cuando calcula la
distancia entre los puntos de coordenadas (0,0) y (m,n).
2.14.

Definicin de la funcin.

La definicin de una funcin es la determinacin de lo que hace la funcin y cmo lo


hace. 31 . La definicin est formada por dos elementos: Cabecera de la funcin y cuerpo
de la funcin.
2.14.1. Cabecera de la funcin.
La cabecera de la funcin es una copia del prototipo o declaracin de la funcin,
excepto que no termina con punto y coma (;). Por tanto la sintaxis de la cabecera es:

Tipo nombre ([tipo parmetro1, tipo parmetro2,....., tipo parmetron])


A los parmetros se los denomina parmetros formales y son variables que reciben loas
valores enviados a travs de los argumentos en la llamada a la funcin.
2.14.2. Cuerpo de la funcin.
Inmediatamente despus de la cabecera de la funcin, se escribe el cuerpo, que es un
conjunto de sentencias que se encargan de realizar los procesos motivo de ser de la
funcin. Por ser un conjunto de sentencias inician y finalizan con llaves ({}). (Sentencia
compuesta).
Se declaran las variables requeridas con la funcin. Estas variables toman el nombre de
variables locales debido a que existen nicamente cuando el control del programa se
31

Para Luis Joyanes Aguilar (C++ Orientado a objetos. Pg 18) la definicin es la descripcin de la
funcin.

encuentre en la funcin, y desaparecen al salir de ella. Igual comportamiento tienen los


parmetros formales.
En toda funcin a la que llamaremos secundaria, para diferenciarla de la principal-,
existir el menos una instruccin de retorno (return) que hace una de las dos
actividades:
a. Cuando la funcin es de tipo distinto a void, devuelve un valor a la funcin desde la
que fue llamada con el nombre de la funcin; por tanto, el control del programa
regresa a la instruccin de llamada a la funcin secundaria; En este caso, se usa l a
expresin:
return(constante, variable o expresin);
Ej. return(1);
return (x);
return(a-b);
b. Cuando la funcin es tipo void, devuelve el control del programa a la siguiente
instruccin a la de llamada a la funcin. Se usa la expresin :
return;
Es importante destacar que cualquier funcin distinta de void retorna un valor y slo
uno.
Sin embargo, en una funcin secundaria puede haber ms de una expresin return. Mas
ser la lgica del programa la que determinar cul es el nico valor a ser retornado.
Ejemplo 3. 2

...
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

Tipo nombre(tipo parmetro);

Variable o expresin nombre(argumento);

Return(variable);

void
void
Void

No
Si
No

Tipo nombre();
Void nombre(tipo parmetro);
Void nombre();

Variable o expresin nombre ();


Nombre(argumento);
Nombre();

Return(variable);
Return;
Return;

2.15.

Paso de argumentos.

Se mencion ya que al momento de llamar a una funcin, se le entrega a sta los


argumentos correspondientes, los mismos que sern recibidos en los parmetros
formales, para con ellos trabajar. Este paso se lo hace de dos formas: Paso por valor y
paso por referencia o direccin .
Por defecto, cuando se trabaja con variables comunes, el paso de los argumentos se los
hace por valor (excepto cuando se trabaja con arreglos). Lo que realmente sucede es que
una copia del valor del argumento es entregada al parmetro correspondiente, y es con
ella con la que trabaja la funcin secundaria. Ello implica que la variable argumento
conserva el valor original, y aun cuando en la funcin secundaria se modifique el valor,
en la funcin que la llama se mantiene el valor original. Esto se demuestra en el
Ejemplo 4. 4
En otros casos, el paso de argumentos se lo hace por posicin, cosa que ser analizada
ms adelante en el captulo correspondiente a funciones con arreglos
Se emplean funciones para lograr Modularidad en el programa. Entonces cada mdulo
se maneja con relativa autonoma. Inclusive, en proyectos grandes, cada mdulo puede
estar en manos de diferente programador o equipo de programacin. Solamente es
necesario que el grupo previamente elabore la estrategia de programacin con ciertos
acuerdos: Qu nombre tiene cada funcin, para qu existe, que dato devuelve y de qu
tipo, cuntos argumentos, de qu tipo y en qu orden deben ser enviados.
El ejercicio 5.1 que deber ser resuelto en la modalidad de taller es un ejemplo de
programacin modular y en equipo.

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

5. Mediante la funcin area hallar area menor , con rmenor; (amenor=area(rmenor))


6. Ingresar radio mayor (rmayor);
7. Validar radio mayor (10<rmayor100); Condicin impuesta
8. Mediante la funcin area hallar area mayor , con rmayor; (amayor=area(rmayor))
9. Calcular area de la corona (acorona=amayor-amenor);
10. Presentar acorona.;
11. Fin
Funcin area
1.
2.
3.
4.
5.

Inicio
Recibir radio;
Calcular area de crculo; (a=3.1416*radio*radio)
Retornar a;
Fin

Paso3. Control de Calidad 1. Prueba de escritorio (Sobre el anlisis)


rmenor

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

Paso 4. Tabla de datos.


Dato
rmenor
amenor
rmayor
amayor
acorona
area
radio
a

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

Paso 5. Algoritmo en pseudocdigo


Calculo del rea de corona circular
Marco Vergara 0.
03/10/2005

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

Paso 6. Control de Calidad 2. Prueba de escritorio (Sobre el algoritmo en


pseudocdigo). Se recomienda al estudiante realizar este paso.
Paso 7 . Codificacin en lenguaje C.
#include <stdio.h>
#include <conio.h>
float area (float radio); // prototipo de la funcin area que calcula el rea del crculo
void main()
{
float rmenor,rmayor; // radio menor, radio mayor
float amenor,amayor; // rea menor , rea mayor
float acorona;
// rea de la corona
printf(Ingresar radio menor : );
scanf(%f, &rmenor);
amenor=area(rmenor); //llamado a la funcin
printf(Ingresar radio mayor : );
scanf(%f, &rmayor);
amayor=area(rmayor); //llamado a la funcin
acorona=amayor-amenor;
printf(\nEl rea de la corona es %.2f,acorona);
getch();
}
float area(float radio)
//Cabecera de la funcin
{
float a;
//variable local
a=3.1416*radio*rado;
return(a);
}
Didcticamente conviene representar a las funciones y su mbito de memoria de la
siguiente manera:
Ver comportamiento de las funciones.
Paso 8. Control de calidad 3. Prueba de escritorio sobre el programa en lenguaje C
Se recomienda al estudiante realizar este paso.

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:

Declaracin: int validar(int num);


Llamado: dat0=validar(dato);
Definicin:
Int validar(int num)
{
while (dato<=0){
printf(Reingresar dato );
scanf(%d,&dato);
}
return (dato);
}
b) Devuelve un valor flotante y no requiere de parmetros
c) Devuelve un caracter y tiene un parmetro tambin caracter.
d) Devuelve un flotante y requiere de un parmetro entero, otro char y un tercero
flotante.
e) No devuelve valor y requiere de un parmetro entero
f) No devuelve valor y no requiere de parmetros.
g) Devuelve dos valores enteros y no requiere parmetros.
2) Escriba la declaracin y la definicin para una funcin que es llamada as:
a) void main()
{
float x;
int y
scanf(%d,&y);
..
x= area cir(y);
..
}
3) Escriba la declaracin y el llamado a una funcin cuya definicin es:
Void (int flag, char letra)
{
printf(\n%c,toupper(letra));
if (flag ==1) printf (SPE);
else printf(OLITECNICA NACIONAL);
return;
}
4) Escriba la declaracin y la definicin para una funcin que es llamada as:
float x1, x2;
..
int y1,y2;
y1=entero(x1);
y2=entero(x2);
...

5) Escribir un programa que mediante una funcin de nombre titulo imprima la


cartula de un trabajo de programacin
6) Escribir un programa que mediante una funcin de nombre ingreso permita el
ingreso de un nmero flotante. La funcin principal presentar en pantalla los
valores ingresados.
7) Escribir un programa que mediante una funcin de nombre valida valide un nmero
flotante ingresado por teclado. (n>0). La funcin principal presentar en pantalla los
valores validados.
8) Escribir un programa que mediante una funcin de nombre ingval ingrese y valide
un nmero entero.( -10 <=n<=+10). La funcin principal presentar en pantalla los
valores validados.
9) Escribir un programa que mediante una funcin de nombre ingval1 ingrese y valide
un nmero flotante ingresado por teclado.( mnimo <=n<=mximo). La funcin
principal permitir el ingreso de los valores mnimo y mximo y presentar en
pantalla los valores validados.
10) Escribir un programa que mediante una funcin de nombre impmayus presente en
pantalla un dato de tipo caracter (mayscula) que ser ingresado por teclado en la
funcin principal.
11) Escribir un programa que mediante una funcin de nombre par presente en pantalla
los 20 primeros nmeros pares.
12) Modificar el ejercicio 11 de tal manera que se presenten en pantalla los n primeros
pares. n ser ingresado en la funcin principal.
13) Escribir un programa que permita mediante una funcin ingresar 5 letras
maysculas y las presente en pantalla
14) Escribir un programa que mediante un funcin de nombre valfecha valide el da, el
mes y el ao , datos que sern ingresados por teclado en la funcin principal. Se
llamar a la funcin tres veces: una para validar el ao, otra para el mes y una
tercera para validar el da La fecha ingresada no podr ser mayor a la actual ni
menor al 1 de enero de 1900. La fecha actual considrese como dato en la funcin
valfecha.
Matemtica:
15) Escribir un programa que mediante una funcin de nombre factorial calcule el
factorial de un nmero n. N ser ingresado en la funcin principal, la misma que
presentar en pantalla el nmero y su factorial.
16) Dadas las coordenadas de los tres puntos en el segundo cuadrante realizar los
siguientes procesos:
Mediante una funcin ingval ingresar y validar las coordenadas. En cada llamada
ingresar una coordenada.
Mediante una funcin verificar, determinar si los puntos determinan un tringulo.
La funcin devolver las letras S o N, segn sea el caso.
Mediante una funcin lado, hallar la longitud de cada lado del tringulo. La
funcin devolver tal valor.
Mediante una funcin ngulo, calcular el valor en grados de cada uno de los
ngulos internos del tringulo.
Mediante una funcin area hallar la superficie del tringulo.

Mediante una funcin ecuacin determinar y presentar la ecuacin de cada uno de


los lados del tringulo.
Presentar en pantalla, mediante la funcin imprimir, en una llamada los lados, en
otra los ngulos y en una tercera el rea. Cada impresin ir acompaada de los
ttulos correspondientes.
17) Mediante una funcin ingresar un nmero flotante distinto de cero.
Mediante la funcin descomponer , hallar en una llamada el signo, en otra la parte
entera, en una tercera la parte decimal y en una cuarta llamada el nmero de cifras
decimales (hasta la ltima significativa).
En la funcin principal recomponer el nmero y presentarlo en pantalla.
18) Calcular la suma de los n trminos de la serie dada. Calcular y con la funcin de
biblioteca. Usar las siguientes funciones:
Ingreso para ingresar y validar n
Factorial, para halar el factorial.
Error para determinar el error de la serie respecto del valor de y calculada
mediante la funcin de biblioteca correspondiente.

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 )!

Ingresar por teclado N y J.


Usar la funcin ingval que permita el ingreso de N y de J (una de ellas en cada llamada)
y que las valide. (N debe ser entero positivo y J menor o igual a N).
Y la funcin factorial que calcule el factorial de un nmero.

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];

Lo que se obtiene con ello es :


No. Elemento

18

15

12

17

ndice

edad[5]

edad[0]=
edad[1]=
edad[2]=
edad[3]=
edad[4]=

2.16.

1No. elementoN

N-1 0 ndice N-1

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:

tipo nombre [[tamao]][={elemento1, elemento2,...elemento N}];

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];
..
}

Nunca puede declararse un arreglo con


su tamao contenido en una variable:
void main(){
int n=5;
int edad[n];
..
}
En ocasiones, sin embargo, de inicio no se conoce cul ser el numero de elementos del
arreglo , en cuyo caso habr que hacer un anlisis para determinar cul puede ser el
mximo nmero de elementos que contendr el arreglo en las diversas circunstancias, y
declararlo con ese tamao. A este se denomina tamao fsico del arreglo. Ms adelante
en el programa se almacenar el nmero de elementos a utilizarse realmente en cada
caso para lo cual si puede usarse una variable. El valor de esta variable ser el tamao
lgico del arreglo.
Ej.:

#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

unsigned int [2]={1,3,6};

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 (*)!!

(*) Cuando el nmero de elementos asignados a un arreglo superan al tamao, se


produce un desbordamiento ya que El lenguaje C no chequea los lmites de un array.
Es responsabilidad del programador el realizar este tipo de operaciones. 33Incluso, El
lenguaje C no comprueba los lmites del array, por lo que esos lmites pueden ser

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

Los subndices estn en el rango comprendido entre 1 y n (n es el tamao del


vector). Esta es una importante diferencia con los ndices de los arrays.
Ejercicio 4.1
1.
Generar e imprimir un arreglo que contenga los dgitos
2.
Modificar el problema 1 de tal manera que se presenten los
elementos en forma descendente
3.
Ingresar por teclado los elementos de un arreglo que contenga
10 caracteres y presentarlo en pantalla.
4.
Modificar el ejercicio 2 de tal forma que se presenten en
pantalla los elementos junto a sus ndices.
5.
Ingresar por teclado e imprimir los elementos de un arreglo
de N nmeros reales. N ser definido.
6.
Ingresar por teclado e imprimir los elementos de una arreglo
de n nmeros enteros. n ser ingresado por teclado. No se admitirn ms de 20
elementos.
7.
Ingresar por teclado las componentes de dos vectores en el
espacio y hallar su suma. Presentar los tres vectores.
8.
Multiplicar los n elementos de una arreglo por una constante
k tipo real que ser ingresada por teclado. Presentar el arreglo original, la constante y el
arreglo resultante.
9.
Ingresar los elementos de una arreglo de nmeros enteros.
Usar como registro centinela el nmero 0. Considerar dos casos: a) el centinela es parte
del arreglo; y, b) el centinela no es parte del arreglo.
10.
Hallar el promedio de un conjunto de nmeros reales que se
almacenan en un arreglo. Usar centinela 0.
11.
Ingresar los elementos de un arreglo de tamao n y un valor
k. Determinar cuntas veces se repite el valor k en el arreglo.
12.
En el problema 12 determinar las posiciones en las que se
encuentran los elementos iguales a k.
13.
Ingresar por teclado los elementos de un arreglo de tamao 10
controlando que ningn elemento se repita. Presentar el arreglo.
14.
Resolver el problema 14 usando registro centinela cero (0).
15.
Ingresar por teclado los elementos de un arreglo y luego
ordenarlos en forma ascendente. Usar el mtodo de la burbuja. Presentar los arreglos
desordenado y ordenado.
16.
Se ingresa en un arreglo las iniciales de un grupo de personas,
En otro las edades (aos) y en un tercero las estaturas (en metros). Ordenar los arreglos

Apuntes de Programacin

115

de acuerdo a la inicial. De coincidir dos iniciales, poner primero el de menor edad. De


coincidir tambin las edades, ubicar primero el de menor estatura.
17.
Ingresar por teclado los elementos de dos arreglos de nmeros
enteros. El primero de tamao M y el segundo de tamao N (M y N sern definidos).
Ordenar cada uno de los arreglos. Intercalar los elementos del segundo arreglo en el
primero de forma que queden ordenados. Presentar los arreglos ingresados, ordenados y
el arreglo de intercalacin.
18.
Ingresar los elementos de dos arreglos tipo char. Hallar la
interseccin, la unin y la diferencia de los conjuntos. Presentar los arreglos ingresados
y los resultados de las operaciones con conjuntos.
19.
Dada la funcin :
y ( x 1) 3

Presentar en pantalla la tabla de valores x e y. Graficar la funcin en papel. (Usar un


intervalo para x comprendido entre 3 y +3. ). Un arreglo contendr los valores de x y
otro los de y. La tabla de valores ser presentada en forma vertical.
20.
Ingresar en un arreglo las iniciales de un grupo de 10
alumnos. En otros las calificaciones de programacin del primero, segundo y tercer
aportes (Una arreglo para cada aporte). Hallar en otro arreglo los promedios de cada
alumno. Tambin encontrar en un arreglo los promedios de cada aporte.
Presentar en pantalla con el siguiente formato:
No. INICIAL
1
A
2
B
3
C
..
..
PROMEDIO

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.

Cuando tienen ms de una dimensin, y por tanto requieren de ms de un ndice para


diferenciar a cada elemento, se denominan tablas o matrices.
Matemticamente, una matriz a de tamao M x N tiene M filas (horizontales) y N
columnas (verticales). Se expresa as:
a1,1
a2,1
a3,1
a4,1
a5,1
............
aM-1,1
aM,1

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

En la programacin, la representacin es similar, con la excepcin que los ndices que


determinan fila o columna del elemento estn en el rango:
0ndice filasM
0ndice columnasN
Por tanto la matriz puede representarse as:
a[0],[1]
a[1],[1]
a[2],[1]
a[3],[1]
a[4],[1]
............
a[M-2],[1]
a[M-1],[1]

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}};

unsigned int [2] [2] =


{{1,3},{2,5},{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.

*?# *?# *?#


*?# *?# *?#

Los dos ltimos


espacios
quedan
con basura
Se
produce
desbordamiento
(*)!!

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.

Funciones con parmetros que son arreglos

Con frecuencia se requiere pasar arreglos a funciones secundarias. En lenguaje C no es


posible pasar un arreglo completo a una funcin, pero s se puede pasar un indicador de
posicin al primer elemento del arreglo. A ello se denomina paso por referencia.
Cuando se usa un arreglo (array) como argumento, lo que realmente se pasa a la funcin
es la direccin del primer elemento del arreglo, de tal forma que se tiene acceso al
arreglo y se puede hacer cualquier trabajo con l.
Existen varias formas para hacerlo. Una de ellas es la que sigue (Otra, que usa el
concepto de punteros no se revisa en este documento, por no ser parte del alcance del
mismo).
2.20.1. Paso de arreglos unidimensionales a funciones
Suponga que en la funcin principal se ha declarado un arreglo peso de 10 elementos, y
se desea pasar a una funcin modificar. En la misma que se multiplicarn por 2 cada
uno de los elementos del arreglo. La funcin principal deber imprimir el nuevo
contenido del arreglo.
void main()
{
int i;
float peso[20];

/* para ndice
/* declaracin del arreglo

void modificar(float vector[ ]);


/* Declaracin de la funcin

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

Haeussler Ernest & Paul Richard, Matemtcas. Pg 253

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

Ntese que en la declaracin de la funcin el tipo de sta es void, debido a que al no


existir paso por valor, sino por posicin, la posicin en la memoria ser la
correspondiente al primer elemento del arreglo y all se realizarn los cambios de los
valores. Al retornar el control del programa, la funcin principal encuentra que el
arreglo vector ha sido modificado . (Suele pensarse equivocadamente que la funcin
secundaria debe retornar el arreglo. Ello es imposible, ya que una funcin de tipo
distinto de void nicamente puede retornar un valor y solo uno).
El parmetro de la funcin es float vector[ ]. Es de tipo float porque recibir como
argumento la posicin del primer elemento de un arreglo tambin tipo float. El nombre
del parmetro puede ser cualquiera. A partir de ahora, el arreglo cuya posicin es
pasada, es reconocido con el nombre vector y se refiere al mismo arreglo peso de la
funcin principal. Tal nombre podra ser el mismo que el usado en la funcin principal.
El mbito de la memoria de la funcin secundaria modificar es distinto al de la funcin
principal, por lo que no habr confusin.
No hace falta en la declaracin de la funcin hacer constar el tamao del parmetro
arreglo; es suficiente hacer constar los corchetes abierto y cerrado. El lenguaje C no
verifica los lmites del arreglo. Podra eventualmente inclusive ubicarse tal tamao en la
declaracin, mas nada se gana por la razn indicada. (Por tanto, otra forma de declarar
el parmetro es poner el tamao).
En lo relacionado al llamado a la funcin, por ser de tipo void, nicamente debe usarse
el nombre de la funcin y entre parntesis el nombre del argumento, que en este caso es
el arreglo peso. No se requiere de tamao, ni siquiera de los corchetes. ste acta como
un apuntador (puntero) que seala la ubicacin del elemento de ndice cero del arreglo.
Al pasar el control a la funcin secundaria, el arreglo peso ser reconocido por la
funcin secundaria con el nombre vector .
La definicin, como ya se revis anteriormente, tiene la cabecera que es una copia de la
declaracin, excepto que no termina en ;.
Le sigue el cuerpo de la funcin en donde es necesario declarar la variable local i que
servir como ndice del arreglo vector (que es le mismo peso de la funcin principal).

Apuntes de Programacin

122

Despus de modificado el valor de los elementos del arreglo, mediante la sentencia


return el control regresa a la funcin principal, la misma que encuentra el arreglo peso
modificado y disponible para ser utilizado con los nuevos valores.
Cuando se trate de un arreglo cuyos datos sern asignados en una funcin secundaria y
el arreglo deba luego ser utilizado por la funcin principal, debe ser declarado dentro de
la funcin principal y ser enviado vaco (o con lo que contenga que puede ser
basura-) como argumento a la funcin secundaria para que all sea modificado y quede
disponible con los valores para cualquiera otra funcin.
Es posible, sin embargo, hacer una declaracin fuera de la funcin principal con lo que
estar disponible para cualquier funcin.
Tngase presente que el lenguaje no comprueba dimensin de los arreglos, por lo que
cuando de partida no se conozca cul ser el tamao (fsico o lgico del arreglo), ste
debe ser pasado a la funcin secundaria como argumento (por tanto habr un parmetro
de tipo int en la funcin).
Ejercicio 4.3
2.20.2. Paso de arreglo bidimensionales a funciones
Los criterio considerados para el paso de arreglos unidimensionales se repiten para los
bidimensionales, con las siguientes particularidades.
1. Al declarar la funcin los parmetros que son arreglos unidimensionales no requieren
de la dimensin correspondiente a filas pero s la dimensin de la columnas. Eelo
obedece a que como el lenguaje C no comprueba la dimensin de los arreglos no le
interesa conocer cuntas filas tiene, pero s necesita conocer dnde se inicia cada una
de ellas. Ello es posible sabiendo cuntas columnas tiene (el nmero de elementos de
una fila es el nmero de columnas del arreglo). Entonces, un ejemplo de declaracin de
funcin es:
float promedio (int matriz[ ][3]);
Se trata de una funcin que devuelve un valor tipo float y que recibir un arreglo tipo int
de tres columnas.(Puede ser cualquier cantidad de filas). (Podra tratarse de una funcin
que calcule y devuelva el promedio de los valores enteros contenidos en el arreglo
bidimensional).
2. En el llamado los argumentos que son arreglos bidimensionales no requieren de
tamaos y ni siquiera de corchetes. El lenguaje comprueba que la variable argumento
sea un arreglo.
Ejemplo: Se trata de ingresar los elementos de un arreglo que contiene los elementos de
una matriz cuadrada de orden 2x2. Una funcin secundaria calcular el determinante y
lo presentar en pantalla.

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.

Ingresar un conjunto de nombres


en una matriz de MxN; ordenarlos
alfabticamente en la misma matriz (De manera ascendente). 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.

Apuntes de Programacin

126

4.

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.
5. Ingresar por columnas una matriz de orden M x N y calcular su inversa. Imprimir
las dos matrices.
6.
Generar e imprimir Un Cuadro mgico de dimensin N x N ( N>0 N
impares) . Un cuadrado mgico es una matriz que contiene los nmeros
naturales comprendidos en el rango 1 x N2, sin repetirse y tal que las
sumatorias de filas, columnas y diagonales den como resultado las mismas
cantidades. Las siguientes son las reglas que deben cumplirse:

El No. 1 Se colocar en la primera fila, columna central.

Cada siguiente numero se coloca en 'a casilla correspondiente a 'a fila anterior y
columna posterior.

Si el nmero sigue a un mltiplo de N, no se aplica la regla anterior sino que se


coloca en la casilla de la fila posterior e igual columna.

Se considera que la fila anterior a la primera es la ltima y la posterior a la


ltima es la primera. De manera anloga debe considerarse para las columnas.
N se ingresar por teclado. Se imprimir, la comprobacin de las sumatorias, valores
que sern parte del arreglo.
7.

Un polinomio de orden N se escribe como

ao +a1x + a2x2 +a3x3 + ........+ anxn;


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.
8.

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,

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.

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. ALGO SOBRE LENGUAJE C++

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

Cadenas Char[ tamao]


de
caracteres

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

45L 45245L -50245L

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

Cadenas de caracter (char)

ECUADOR A 1
ecuador\nmi pas

Siempre entre comillas


simples
Siempre entre comillas
dobles

(*) 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

Tabla 5. 1 Secuencias de escape

3.5. Declaracin de Variables


Para declarar variables u otros elementos que requieran de ello, es suficiente citar el
tipo de dato de las variables seguido por uno o una lista de identificadores. La
declaracin siempre termina en ; .
Ej.

int a,b;
float raiz1,x,valor_2;

133

char a, letra;
char nombre [30]; (Aceptar hasta 30 caracteres).

Es posible declarar las variables e inicializarlas36 en la misma sentencia:


int c=3,d; c toma el valor de 3, en tanto que d puede tomar el valor 0 (Ello depende de
la versin del compilador)
float error=0.005, x=3.5, y;
double z=5e+300;
char resp=S;
char mes[ ]=ENERO; la variable mes tiene un tamao 6: 5 bytes para los caracteres
de la palabra ENERO y 1 para el caracter nulo.
Si una variable es declarada y no inicializada, su contenido es indeterminado. Esto
quiere decir que podr contener un valor inesperado y de acuerdo al tipo de dato
declarado.
Se pueden usar las siguientes equivalencias en las declaraciones:
EQUIVALENCIAS EN DECLARACIONES
Short int a,b,c;
Long int r,s,t;
Int p,q;
Unsigned m,n;
Long float x;
Double float y;

Short a,b,c;
Long r,s,t;
Int p,q;
Unsigned m,n;
Double x;
Double y;

La declaracin de datos tipo enum es como el ejemplo indica:


enum {falso, verdad};
en este caso falso y verdad son constantes ( no variables) representadas por smbolos
(falso y verdad) que por ser tales no pueden ser modificadas en su contenido en el
transcurso del programa. Por omisin a la primera variable se le asigna el valor 0 (cero)
y a las siguientes el valor de la anterior aumentado en 1 unidad. En el ejemplo falso
vale 0 y verdad 1.
Sin embargo se puede asignar explcitamente un valor a una constante enum; as:
enum {a, b=0,c,d=1};
36

Inicializar significa asignar un valor de partida a una variable.

134

Entonces a tomar el valor 0, b el valor 0, c el valor 1 (Una unidad ms que b) y d el


valor 1.
Es posible tambin asignar un valor al primer identificador de enum, en cuyo caso los
siguientes tomarn valores incrementados en una unidad respecto del anterior:
enum {LUN=1,MAR,MIE,JUE,VIE,SAB,DOM};
LUN tomar el valor 1 y cada uno de los siguientes identificadores 2,3,...7,
respectivamente

Toda variable debe ser declarada.


Bajo norma C todas las variables deben ser declaradas antes de la primera instruccin
ejecutable.
En C++ puede declararse en cualquier parte, antes de ser utilizada. Sin embargo, por
claridad y orden en el programa conviene declarar todas las variables antes de las
instrucciones ejecutables.

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)

Aclaracin: sea la divisin entre enteros 7/3:

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

Tamao en bytes del valor de


una constante, variable o
expresin.

Depende del tipo


de dato y su
requerimiento de
memoria

(tipo)

Conversin forzosa de tipo de


dato

Conversin
temporal
Tambin
llamada cast

++a; (8)
a++ (8)(*)
--a (6)
a-- (6)(*)

137

En C++ ciertos
compiladores
admiten int(c)
(*)

Las expresiones con operadores monarios a ++ y - - a equivalen a la sentencias de


asignacin a= a+1; y a=a-1;, respectivamente, siempre y cuando se consideren como
sentencias aislada; es decir, no vinculadas a otra.
Ejemplo:
Para la porcin de programa:
int a=3;
..
a++;
printf(%d,a);
..
La prueba de escritorio es:
a
3
4

pantalla
4

En tanto que para:


int a=3;
..
++a;
printf(%d,a);
..
La prueba de escritorio es:
a
3
4

pantalla
4

Son equivalentes. Ambas calculan como valor final de a el 4 y lo presentan en pantalla.


En otro caso:
Para la porcin de programa:
Int a=3;
..
printf(%d,a++);

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

Ambos programas son equivalentes.


En otro caso:
int a=3,b;
..
b=a++;
..
La prueba de escritorio es:
a
3

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)

Existen los siguientes operadores derivados:


int a=7,b=3
Operador Operacin

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

a+=b debe leerse: El nuevo valor de a es el valor inmediato anterior sumado en b


Es posible realizar la siguiente asignacin:
a=b=c=d=e=f=100;
Entonces todos los identificadores tomarn el valor de 100.
Operador condicional (?:)
Es un operador de asignacin. El valor asignado a un identificador depende del valor de
verdad de una condicin (explcita o implcita):

142

Se comporta como la estructura de control si entonces caso contrario

Identificador = condicin ? expresin 1 : expresin 2


F
V

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

3.7. Entradas y salidas


Para el ingreso de los datos y la salida de la informacin el lenguaje C dispone de varias
funciones que permiten tales operaciones.
Para compiladores C existe la biblioteca (Archivo de cabecera) stdio.h que contiene las
funciones scanf, printf, getchar, putchar, gets, puts, y la biblioteca conio.h que contiene
a getche, getch, etc.
3.7.1. scanf():
scanf() devuelve los datos que se han introducido (correctamente) desde el dispositivo
standard de entrada (El teclado). Tiene el siguiente prototipo:

144

scanf(cadena de control, [&]argumento1, [&]argumento2,...,[&]argumenton);


Argumentos: son apuntadores a las variables o arreglos que recibirn los datos
ingresados. El smbolo & es un operador de direccin y que debe ser usado para el
ingreso de datos que se almacenan en variables. No se usan nicamente cuando el
argumento es el nombre de un arreglo tipo cadena de caracter, el mismo que de suyo es
un apuntador (puntero).
Recuerde que el smbolo [ ] o esparte de la sintaxis. Indica que lo que contiene en su
interior puede ser omitido (dependiendo del tipo de argumento).
Cadena de control: es un conjunto de caracteres que contiene informacin respecto del
formato de los datos a ser ingresados. (Un formato para cada dato).
Estructura de la cadena de control
%[longitud de campo] [otros caracteres][caracter de conversin]37,
Naturalmente esa estructura se repite para cada uno de los datos a ser ingresados. (Sin
las comillas dobles, las misma que se abren al inicio de la cadena antes del formato del
primer dato- y se cierra el final despus del formato del ltimo dato)
Los caracteres de conversin usados para la funcin scanf() son:
Caracter
c
d
e
f
g
h
i
o
s
u
x

Significado (Tipo de dato)


caracter
entero en base diez
flota
float
float
entero corto
entero decimal, octal o hexadecimal
entero octal
cadena de caracter
entero en base diez sin signo
entero hexadecimal

Ejemplo:
Si a es entero, b flotante, c caracter y d[20] una cadena de caracter, la sentencia
37

Tambin se lo conoce como especificador de formato Evelio Granizo. Lenguaje C. Pg. 57

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

=987; b=654; c=321

Observaciones
Mximo 3 caracteres
Mximo 3 caracteres

a=987; b=654; c=321


a=9 b=876 c=543

El espacio despus del 9


equivale a enter
Por tener mximo 3
caracteres cada variable,

146

toman 3 dgitos cada una.


Hay que resaltar que cuando se trata de ingreso de datos tipo flota, el punto decimal y
las cifras decimales son parte de la longitud mxima.
Otros caracteres:
Si se intenta ingresar para una cadena de caracteres un espacio en blanco, tal caracter es
considerado como enter y por tanto finaliza el ingreso. En otras palabras, no sera
posible ingresar una cadena de caracteres que contenga un caracter espacio en blanco.
Mas si se requiere el ingreso del caracter espacio en blanco como parte de la cadena, es
posible usar el siguiente formato:
scanf(%[ ABCDEFGHIJKLMNOPQRSTUVWXYZ]s, nombre);38
que permite el ingreso de espacios en blanco o cualquiera de las letras maysculas,
excepto la . Al digitar un caracter distinto al de la lista escrita entre corchetes, el
ingreso finaliza.
Se puede usar
scanf(%[ ^A]s, nombre);
en cuyo caso se aceptar el ingreso de cualquier caracter excepto la letra A mayscula.
Si se digita enter, tambin ser aceptado como caracter que forma parte de los datos.
3.7.2. printf()
Transporta datos desde la memoria hasta el monitor
Tiene el siguiente prototipo:
printf(cadena de control, argumento1, argumento2,...,argumenton);
Argumentos: son variables, arreglos, funciones o expresiones matemticas que
devuelvan datos del mismo tipo que el de la cadena de controll argumento
correspondiente. No requieren del caracter &.

38

los corchetes son parte de la sintaxis. Hay que ponerlos.

147

Cadena de control: es un conjunto de caracteres que contiene informacin respecto del


formato de los datos a ser presentados en el monitor. (Un formato para cada dato).
Estructura de la cadena de control
%[longitud de campo][Modificadores de formato][precisin de campo][caracter de
conversin],
Naturalmente esa estructura se repite para cada uno de los datos a ser presentados. (Sin
las comillas dobles, las misma que se abren al inicio de la cadena antes del formato del
primer dato- y se cierra el final despus del formato del ltimo dato)
Los caracteres de conversin usados para la funcin printf() son:
Caracter
c
d
e
f
g
h
i
o
s
u
x

Significado (Tipo de dato)


caracter
entero en base diez
float Presenta el dato usando exponente (notacin cientfica)
float Presenta el dato sin exponente
Float Presenta el dato usando la conversin e o f segn sea el caso. No se
visualizan ceros ni el punto decimal cuando no sea necesario
entero corto
entero decimal, octal o hexadecimal con signo
entero octal sin el cero inicial
cadena de caracter
entero en base diez sin signo
entero hexadecimal sin prefijo ox

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.

Algunos compiladores aceptan ms de un modificador, siempre y cuando no sean


excluyentes.
Al conjunto de elementos de la cadena de control que permiten cambiar la manera en que
los datos se presentan en el monitor se denomina mscara. (Solamente encbrelo que es
el verdadero dato)
Ejemplo de uso de mscaras
Posicin del cursor

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

que se encuentran en el archivo de cabecera

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.

La variable toma el valor ingresado desde el teclado.

cin >> x ;
cin >> radio;

cout<< variable (constante o expresin) ; Se presenta en el dispositivo estndar de


salida(pantalla) el valor dela variable (la constante o el valor que devuelva la expresin)
cout << x ;
cout << radio;
cout << x*radio;

//Presenta en pantalla el valor de x


//presenta en pantalla el valor de radio
//presenta el valor que devuelve la expresin x*radio

Puede tambin lograrse interactividad mediante cout; as:


cout << El radio es ;
cout << 1;
cout << r;
cout << \n;
Si el valor del radio fuese 6.43, el resultado sera:
El radio 1 es 6.430000 (Y el cursor queda al inicio de la siguiente lnea.)
Lo mismo puede lograrse con la sentencia:
cout El radio <<1<< es <<radio<<\n ;
39

Joyanes Aguilar, L. C++ Un enfoque orientado a objetos. Pg. 102

153

cout reconoce todas las secuencias de escape (Tabla 5. 1 Secuencias de escape)


cin y cout no necesitan especificadores de tipo de dato. Automticamente reconocen el tipo.
Trabajan con todos los tipos de datos estndares como char, int y float y sus
cualificadores- y realizan automticamente las conversiones que requirieran.
As como la funcin printf permite dar formato a los elementos de salida, tambin cout lo
hace. Pare ello se vale de los denominados manipuladores de salida. Algunos de ellos
constan en la tabla siguiente:
Manipulador
dec
hex
oct
ws
setprecision
setw
setfill

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

Se pueden combinar los manipuladores que no sean excluyentes. Ejemplos:


#include <iostream.h>

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.

pese a no haberse fijado una base, presentar en octal, que es la

Los manipuladores setprecision y setx son de formato.


setw establece la longitud de campo (El mnimo nmero de caracteres con el que se
representar un dato). Se comporta de manera anloga a la longitud de campo usada por
printf(Ej. Printf(%10d,x) es similar a cout<<setw(10)<<x; . Puede usarse para alineacin
a la derecha.
Ej.int x=1, y=10,z=100;
cout<<setw(10)<<x;
cout<<setw(10)<<y;
cout<<setw(10)<<z;
genera una salida :
1
10
100.
Alineados a la derecha.
Mas, si se quiere hacer que los espacios queden rellenados con otro caracter, es posible
usar:
cout<<setfill(.)<<setw(10)<<x;
cout<<setfill(.)<<setw(10)<<y;
cout<<setfill(.)<<setw(10)<<z;
genera una salida:
.........1
........10
.......100
Por defecto, los datos tipo numricos se alinean a la derecha, en tanto que los tipo caracter a
la izquierda. As:
float a=2.5678;
char b[3]=yo;

155

...
cout <<setw(10)<<setprecision(2)<<a;
cout <<setw(10)<<b;
generan la salida:
2.57
yo

(El cursor queda ubicado en la posicin del caracter no. 11).

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
= = == = ======= ==

3.8. Constantes Simblicas


Ya se mencion antes que los datos en C pueden ser constantes o variables. Las constantes
son datos que no pueden cambiar de valor en el programa. Para cambiarlo hay que hacerlo
en el programa fuente. Ejemplos de constantes son: 12, 3.1416, A, UNIVERSIDAD,
etc..
C y C++ permiten usar las denominadas constantes simblicas que son aquellas que se
representan mediante un smbolo el mismo que se forma bajo las mismas normas que se
estructuran los identificadores (nombres de variables), con la nica diferencia que por
convencin se utilizan caracteres en mayscula para distinguirlos de las variables (Sin
embargo, es totalmente vlido escribir smbolos en minsculas).
La forma de crear constantes simblicas es mediante la instruccin de preprocesador
#define; as:
...
#define PI 3.1416.
La constante simblica PI, a partir de aqu toma el valor flotante
3.1416. Ms adelante en el programa puede ser convocada por medio del smbolo PI.
Ntese que la sintaxis es como lo expresado: Primero #define, seguido por un espadio;
enseguida el smbolo, un nuevo espacio y la constante.
El tipo de dato de PI ser el de 3.1416; es decir, flotante.
Si en otro programa se incluye la sentencia #define PI 3, PI ser una constante entera, en
tanto que si en un nuevo programa se incluye #define PI ECUADOR, PI ser cadena de
caracter.
La instruccin # define PI es incorrecta ya que no se ha ubicado el dato que ser
representado por el smbolo PI.

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

El programa presenta los nmeros desde el 4 hasta el 1.


Una interesante aplicacin de while es la Validacin datos. Por ejemplo si se desea ingresar
un nmero validndolo para que sea positivo, el programa es:
void main()
{
int n;
clrscr() ;
printf( Ingresar nmero positivo : );
scanf(%d,&n);
while(n<=0)
{
printf( Reingresar nmero. Debe ser positivo: );
scanf(%d,&n);
}
}
El programa es interactivo (amigable con el usuario), le permite distinguir el mensaje para
el primer ingreso y los dems ingresos.
Otra aplicacin interesante de while es la reejecucin de procesos. Por ejemplo, se quiere
disear un programa para ingresar dos nmeros flotantes y presentar la suma de ellos. Al
correr el programa, ste presentar al usuario la pregunta Desea Ejecutar?, Si el usuario
contesta con una letra s (mayscula o minscula), se ejecutar el programa, caso contrario
no.

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

Equivale a la estructura Repetir Mientras.


Sintaxis:
..
do
{
sentencia2;
sentencia3;
..
}
while (sentencia condicional);
...
Las sentencias al interior del bucle se ejecutan al menos una vez y se reejecutan mientras la
sentencia condicional tenga un valor de verdad verdadero

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

Ingresar No. Positivo


-3 -3<=0 Ingresar No. Positivo
V
-6 -6<=0 Ingresar No. Positivo
V
0 0<=0 Ingresar No. Positivo
V
10 10<=0
FIN
F
En este programa el mensaje que se presenta (Ingrese No. Positivo) es el mismo para la
primera vez como para las consecutivas. No hay diferencia entre ingreso y reingreso. Ms
adelante se ver como lograr mensajes distintos.
De otra parte, tambin se logra la reejecucin del programa mediante la estructura do while.
Por ejemplo, si se desea ingresar dos nmeros flotantes y hallar la suma, el programa es:

#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

Un programa que calcula el factorial de 5 es:


void main()
{
int n=5, i,fac=1;
for(i=1;i<=n;i++)fac*=i;
printf(%d,fac);
}

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

Para generar las tablas de multiplicar puede escribirse el siguiente programa:


void main()
{
int f1,f2,p,i;
//INICIO

//f1=primer factor f2=2do. Factor p=producto

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

Condicin2 Condicin3 Sentencia1 Sentencia2 Sentencia3


X
V
X
F
V
X
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.

La sentencia break rompe la ejecucin de las sentencias de cada case y se reanuda


despus de switch. Su uso es opcional. No se utilizar en los casos en que se desee
ejecutar las instrucciones correspondientes a una etiqueta case y de ah en adelante
las instrucciones de otras etiquetas, hasta que aparezca el primer break.
Las sentencias de cada case (sentencia compuesta) no requieren obligatoriamente
del uso de llaves; sin embargo, si se las pone, no se altera el programa. Se sugiere
que, por claridad, se utilicen las llaves.
Como ya se indic, si ninguna de las constantes coincide con el valor que devuelve
la expresin entera, se ejecutarn las sentencias que estn despus de la sentencia
default, la misma que es opcional (Naturalmente si el programa as lo demanda).

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;
}

En ambos casos se consigue realizar la operacin entre a y b segn el operador


ingresado. En el primer caso, si se ingresa un caracter distinto los operadores vlidos,
aparecer el mensaje correspondiente. En el segundo caso, simplemente se obliga al
usuario a ingresar un operador vlido y ya no se requiere de default.
3.10.

Salidas forzosas de las estructuras

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.

Los estudiantes de los 2dos. Cursos A y E de la ESPE son evaluados por el


profesor de Computacin. La evaluacin se la hace por paralelo. Para cada
paralelo se registran las calificaciones por separado.
Escribir un programa en C que permita:
a) Ingresar las calificaciones en dos arreglos, uno por paralelo. El nmero
mximo de alumnos por paralelo es de 25. El puntaje, como es conocido est
entre 1 y 20 (incluidas las dos notas). La finalizacin del ingreso se la har
cuando la nota ingresada sea 0 (cero).
b) Ordenar cada uno de los arreglos, en forma ascendente.
c) Formar un tercer arreglo, intercalando los elementos del un vector en los del
otro, para que queden ordenados. (no ser, por tanto, necesario ordenar el tercer
arreglo despus de generado).
d) Generar una tabla de frecuencias, con valores, frecuencias, frecuencias
acumuladas.
e) Calcular el promedio de las calificaciones de los dos paralelos.
f) Calcular la desviacin standard.
g) Imprimir los resultados en el siguiente formato:
REGISTRO DE CALIFICACIONES
TABULACION DE
TABLA DE FRECUENCIAS
DATOS
No.
2do. A 2do. Tot Valor Frecuencia F. Acumulada
E
al
1
15 10 20
20
3
3
2
20 18 20
18
2
5
3
15 20 20
15
5
10
4
15 15 18
10
1
11
5
18 15 18
6
20
15
7
15
8
15
9
15
10
15
11
10
Promedio 16.45
16.45
Desviacin Standard 3.08
Notas de mayores
15
5
frecuencias
Notas de menores
10
1
frecuencias
Si existen otras frecuencias de igual valor a la nota mxima o a
la mnima, presentarlas.

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

GRUPOS DE TRES ALUMNOS


FUNCIONES
PRINCIPAL
INTERCALACION DESVIACION
INGRESO
FRECUENCIAS
PROMEDIO
ORDENAMIENTO MAXIMO,
IMPRESION
MINIMO
Funciones
(Individual)
60 minutos

Fusin de programas Tiempo total


20 minutos

95 minutos

Guardar el archivo con el nombre A:\unid5##


(## = No. De grupo). En la
identificacin del programa poner el nombre de cada alumno del grupo y su nmero
dentro de l.
2.

En el laboratorio de fsica se determinan los volmenes de una esfera. Dos grupos


de estudiantes hacen las medidas y los clculos. Cada grupo registra por
separado los volmenes obtenidos en cada medida.
Escribir un programa en C que permita:
a) Ingresar los volmenes determinados, en dos arreglos, uno por grupo. El
nmero mximo de medidas por grupo es 20. El volumen est entre 3 y 3.25 cm3
(incluidas los extremos). La finalizacin del ingreso se la har cuando el
volumen ingresado sea 0 (cero).
b) Ordenar cada uno de los arreglos.
c) Formar un tercer arreglo, intercalando los elementos del un vector en los del
otro, para que queden ordenados. (No ser, por tanto, necesario ordenar el tercer
arreglo despus de generado).
d) Generar una tabla de frecuencias, con valores, frecuencias, frecuencias
acumuladas.
e) Calcular la mediana y su posicin, en el arreglo final
f) Calcular la desviacin standard.
g) Imprimir los resultados en el siguiente formato:

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

GRUPOS DE TRES ALUMNOS


FUNCIONES
PRINCIPAL
INTERCALACION DESVIACION
INGRESO
FRECUENCIAS
MEDIANA Y
POSICION
ORDENAMIENTO MAXIMO,
IMPRESION
MINIMO
Funciones
(Individual)
60 minutos

Fusin de programas Tiempo total


20 minutos

95 minutos

Guardar el archivo con el nombre A:\unid5##


(## = No. De grupo). En la
identificacin del programa poner el nombre de cada alumno del grupo y su nmero
dentro de l.
3.

Ingresar un conjunto de N nombres (nombre y apellido) en una matriz. Y las


calificaciones de Computacin, Clculo y Fsica en otra. Cada nombre no tendr
ms de 30 caracteres. Ordenarlos alfabticamente en la misma matriz (De
manera ascendente). Imprimir tanto los arreglos iniciales (Desordenados )
como los finales (Desordenado). El programa permitir hallar las notas de un
alumno cuyo nombre ser ingresado Usar bsqueda binaria.

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.

Un polinomio de orden N se escribe como

ao +a1x + a2x2 +a3x3 + ........+ anxn;

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.

Resolver un sistema de tres ecuaciones con tres incgnitas por el mtodo de


determinantes. Los coeficientes ingresar en una matriz. Los trminos
independientes en un vector. Escribir una funcin para el ingreso de los datos;
otra para generar la matriz para resultante de reemplazar los elementos del vector
por la columna correspondiente; una tercera para calcular el determinante. Otra
para calcular las races. Una ltima para imprimir los resultados.

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.

Los trminos independientes de las tres ecuaciones se ingresarn por teclado y se


almacenarn en un arreglo unidimensional.
Se imprimirn las 3 ecuaciones en la forma A
B
C = T. Independ.
Para el clculo de los determinantes debern crearse matrices en las que los
trminos independientes reemplacen a los coeficientes de cada una de las variables.
(3 matrices)
Para el clculo de los determinantes se usar una funcin.
El programa deber permitir su reejecucin mediante el ingreso del nmero 1, y
concluir con cualquier otro nmero.
Sea A una matriz de orden m x n, probar si An nA (n 1) I , Donde I es la
matriz identidad y n es un nmero entero mayor que 0 .

Escribir un programa en C que permita demostrar si se cumple la Igualdad anterior.


Se presentar en pantalla lo siguiente:
Ttulo
La matriz A
El nmero n
La matriz potencia
La matriz A multiplicada por n
La matriz Identidad multiplicada por (n-1)
La matriz resultante de la diferencia entre las dos ultimas
Un mensaje que indique si se cumple o no la igualdad
Usar funciones para los siguientes procesos:
Ingreso de la matriz
Generacin de la matriz Identidad
Hallar la matriz potencia
Multiplicar una matriz por un escalar
Imprimir cada una de las matrices
Determinacin de la igualdad
El tamao de los arreglos deber ser definido .
EVALUACION:
TEMA
PUNTAJE
Ingreso del valor de la variable n y validacin
1
Generacin de la matriz identidad
1
Funcin para hallar la matriz potencia
2
Funcin para multiplicar una matriz por un escalar
2
Funcin para determinar si se cumple la igualdad
2
Funcin para imprimir las matrices
2
Impresin de todos los resultados
1
Otros elementos (declaracin de variables, archivos de
1
cabecera, etc,)
TOTAL
12 Puntos
Notas:
Solamente podr consultar la tabla de Cdigos ASCII
Grabar el programa bajo el nombre A:\evalfin3 (incluir los cpp, bak, obj y exe.)

El tiempo de duracin es 1hora .


Sugerencia: Probar para las matrices:

29.

(Si cumple)

(No cumple)

Sea A una matriz, hallar el rango de la matriz, previo su escalonamiento.

Escribir un programa en C que permita encontrar los solicitado.


Se presentar en pantalla lo siguiente:
Ttulo
La matriz A
La matriz escalonada
El rango de la matriz
Usar funciones para los siguientes procesos:
Ingreso de la matriz
Escalonamiento de l matriz
Determinacin del rango
Imprimir cada una de las matrices
El tamao de los arreglos deber ser definido .
EVALUACION:
TEMA
PUNTAJE
Ingreso del orden de la matriz y su validacin
2
Funcin para ingreso de la matriz
2
Funcin para hallar la matriz escalonada
6
Funcin para determinar el rango
5
Funcin para imprimir matrices
2
Funcin principal
3
TOTAL
20 Puntos
30.

Se denominan matrices de HADAMARD (por su descubridor) , a aquellas que


tienen las siguientes propiedades:
Son cuadradas;
Cada elemento es 1 o 1;
Cada fila, considerada como un vector V, tiene una longitud igual a n .
longitud Vn.Vn ;
Vn.Vn poducto escalar de Vn y Vn ;
o El producto escalar se define como :
n

A . B a k bk
k 1

El producto escalar de dos filas distintas cualesquiera es cero (0),

Escribir un programa en C que permita generar todas las matrices cuadradas de 2 x 2 ,


que sean del tipo HADAMARD.
Se presentar en pantalla lo siguiente:

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

Você também pode gostar