You are on page 1of 52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

ALGORITMOS
ETAPAS PARA DESARROLLAR UN PROGRAMA COMPUTACIONAL
El programador disea un programa, para resolver un problema particular. Disear es un
proceso creativo. El proceso de diseo de un programa consta de los siguientes pasos o
etapas:
Pasos Etapa
Descripcin
Conducen al diseo detallado por medio un
1
Anlisis del problema
cdigo escrito en forma de un algoritmo
2
Diseo de algoritmo
Se implementa el algoritmo en un cdigo
escrito en un lenguaje de programacin.
3
Codificacin
Refleja las ideas desarrolladas en las etapas de
anlisis y diseo
Compilacin y
Traduce el programa fuente a programa en
4
ejecucin
cdigo de maquina y lo ejecuta.
5
Verificacin
Busca errores en las etapas anteriores y los
elimina.
6
Depuracin
Son comentarios, etiquetas de texto, que
7
Documentacin
facilitan la comprensin del programa
Definicin informal de algoritmo:
Es un mtodo para resolver un problema mediante una serie de pasos definidos, precisos y
finitos.
) Preciso: implica el orden de realizacin de cada uno de los pasos
) Definido: si se sigue dos veces, se obtiene el mismo resultado.
) Finito: Tiene un nmero determinado de pasos, implica que tiene un fin.
Para poder desarrollar un algoritmo tienes que primero analizar quienes son las entradas,
las salidas y las operaciones internas a realizar.
En trminos generales, un Algoritmo debe ser:
Realizable: El proceso algortmico debe terminar despus de una cantidad finita de
pasos. Se dice que un algoritmo es inaplicable cuando se ejecuta con un conjunto de datos
iniciales y el proceso resulta infinito o durante la ejecucin se encuentra con un obstculo
insuperable sin arrojar un resultado.
Comprensible: Debe ser claro lo que hace, de forma que quien ejecute los pasos (ser
humano o mquina) sepa qu, cmo y cundo hacerlo. Debe existir un procedimiento que
determine el proceso de ejecucin.
Preciso: El orden de ejecucin de las instrucciones debe estar perfectamente indicado.
Cuando se ejecuta varias veces, con los mismos datos iniciales, el resultado debe ser el
mismo siempre. La precisin implica determinismo.
Definicin formal:
Esta definicin fue dada por Donald Ervin Knuth(nacido el 10 de enero de 1938 en
Milwaukee, Wisconsin, profesor emrito de la Universidad de Stanford). En realidad es un
intento de formalizarlo matemticamente:
Definicin 1.1 Un mtodo de clculo es una cuaterna ( Q ,I,W, f ) donde:
Q es un conjunto que contiene a I y W
f : Q Q con f ( w) = w para todo w perteneciente a W
Q es el conjunto de estados del clculo,
I es el conjunto de estados de entrada

Elaborado por: Mximo Obregn R.

Pg. 1/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

W es el conjunto de estados salida y


f es la regla de clculo
Definicin 1.2 Una secuencia de clculo es x0,x1,x2, donde x0 I y k 0 : f (xk)=xk+1
La secuencia de clculo acaba en n pasos si n es el menor entero con xn W.
Lo cierto es que nada en este campo esta completamente definido, a continuacin
mostraremos las estructuras algortmicas ms importantes que la mayora de
programadores podra identificar y es que en realidad son los programadores los que
determinan su uso.

Estructuras
Algortmicas

Secuenciales

Asignacin
Entrada
Salida

Condicionales

Simples
Mltiples
Anidadas

Cclicas

Para
Mientras que
Repita Hasta

Para poder implementar la solucin de un problema se dispone de las siguientes


herramientas algortmicas:
Diagrama de flujo
Pseudo cdigo
Diagramas estructurados (Nassi-Schneiderman)

DIAGRAMA DE FLUJO
Consta de rectngulos que encierran las instrucciones y lneas que apuntan hacia la
siguiente instruccin de modo que no se pierda el orden. Adems, las operaciones
elementales como la entrada de datos, salida de datos, etc. (ms adelante se explicarn) se
reconocen de las dems instrucciones porque no se encierran en rectngulos sino en otra
clase de figuras por lo que segn la figura en la que est encerrada la instruccin se
reconoce su significado. Es muy didctico, por lo que es muy fcil de entender. Los
Diagramas de flujo se dibujan generalmente usando algunos smbolos estndares; sin
embargo, algunos smbolos especiales pueden tambin ser desarrollados cuando sean
requeridos. Segn ISO 5807, algunos smbolos estndares, que se requieren con frecuencia
para diagramar programas de computadora se muestran a continuacin:

Elaborado por: Mximo Obregn R.

Pg. 2/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM


Descripcin

Smbolo

Proceso

Entrada/Salida

COMPUTACION I

Funcin
Cualquier tipo de operacin que origine
cambio de valor, formato, posicin de la
informacin almacenada en memoria,
operaciones aritmticas, de transferencia, etc
Este es el smbolo mas usado para la
introduccin de datos en la memoria desde los
perifricos de entrada o salida de resultados
hacia los perifricos
Algunos usan este smbolo para entrada por
teclado

Algunos usan este smbolo para salida por


pantalla

Algunos usan este smbolo para entrada/ salida

Decisin
Conector

Indica una condicin lgica que elige el flujo


del programa segn el resultado sea falso o
verdadero
Sirve para enlazar entre partes cualesquiera de
un diagrama de flujo a travs de un conector,
pero en la misma pagina.

Conector

Sirve para enlazar las partes de un diagrama de


flujo a travs de un conector que estn en la
diferentes pagina

Flechas

Sirve para indicar la direccin del flujo del


programa

Reglas para la elaboracin de diagramas


1. Los Diagramas de flujo deben escribirse de arriba hacia abajo, y/o de izquierda a
derecha.
2. Los smbolos se unen con lneas, las cuales tienen en la punta una flecha que indica la
direccin que fluye la informacin, se deben de utilizar solamente lneas de flujo
horizontal o verticales (nunca diagonales).
3. Se debe evitar el cruce de lneas, para lo cual se quisiera separar el flujo del diagrama a
un sitio distinto, se pudiera realizar utilizando los conectores. Se debe tener en cuenta
que solo se van ha utilizar conectores cuando sea estrictamente necesario.
4. No deben quedar lneas de flujo sin conectar

Elaborado por: Mximo Obregn R.

Pg. 3/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

5. Todo texto escrito dentro de un smbolo debe ser legible, preciso, evitando el uso de
muchas palabras.
6. Todos los smbolos pueden tener ms de una lnea de entrada, a excepcin del smbolo
final.
7. Solo los smbolos de decisin pueden y deben tener ms de una lnea de flujo de salida.
EJERCICIOS
Problema 1. Implemente el algoritmo usando un diagrama de flujo para calcular el
factorial de un numero N.
Solucin: Cuando resolvamos este tipo de algoritmos debemos tener en cuenta que el
algoritmo ser implementado en un programa computacional, por lo que casi siempre se
tiene las instrucciones de ingreso de datos y
Inicio
mostrar los resultados que en este caso se
indica con paralelogramos.
Es importante sealar el sentido de las
Leer N
flechas porque estas indicaran la secuencia
lgica del algoritmo.
i 0
Para poder disear un bucle como la que se
F 1
tiene en este problema, para un mejor
anlisis se construye una tabla, suponiendo
que N sea 4, entonces si seguimos la
i i+1
secuencia del flujo tendremos los siguientes
V
i<N?
F
F*i
valores para i y F:
i
0
1
2
3
4

F
1
1
2
6
24

Observacin
Rectngulo
Rectngulo 1ra vez
Rectngulo 2da vez
Rectngulo 3ra vez
Rectngulo 4ta vez

F
Mostrar F

Fin

Problema 2. Implemente el algoritmo usando un diagrama de flujo para mostrar el mayor


de tres nmeros.
Solucin:
Inicio
Leer n1,n2,n3
mayor n1
mayor n2

mayor<n2?
F

mayor n3

mayor<n3?
F
Mostrar mayor

Fin
Elaborado por: Mximo Obregn R.

Pg. 4/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Problema 3. Implemente el algoritmo usando un diagrama de flujo para mostrar el mayor


de n nmeros.
Solucin:
Forma1

Forma2
Inicio

Inicio

Leer n

Leer n

i 1

i 0
Repetir de 1, n

Leer num

i i+1
mayor num

i=1?

Leer num

F
mayor num

mayor<num?

mayor num

i i+1

i<=n?

i=1?

mayor num

mayor<num?
F

F
Mostrar mayor

Fin
Mostrar mayor

Fin

Elaborado por: Mximo Obregn R.

Pg. 5/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

PSEUDOCODIGO
Es la representacin narrativa de los pasos que debe seguir un algoritmo para dar solucin
a un problema determinado. El Pseudocdigo utiliza palabras que indican el proceso a
realizar. Un Pseudocdigo o falso lenguaje, es una serie de normas lxicas y gramaticales
parecidas a la mayora de los lenguajes de programacin, pero sin llegar a la rigidez de
sintaxis de estos ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa
con mayor agilidad que en cualquier lenguaje de programacin, con la misma validez
semntica, normalmente se utiliza en las fases de anlisis o diseo de Software, o en el
estudio de un algoritmo. Forma parte de las distintas herramientas de la ingeniera de
software. En el pseudocodigo, cada instruccin es una lnea y las operaciones elementales
se escriben de una forma tan clara que sea imposible que algn programador no las
entienda.
No hay ningn compilador o intrprete de pseudocdigo informtico, y por tanto no puede
ser ejecutado en un ordenador, pero las similitudes con la mayora de los lenguajes
informticos lo hacen fcilmente convertible. El pseudocdigo describe un algoritmo
utilizando una mezcla de frases en lenguaje comn, instrucciones de programacin y
palabras clave que definen las estructuras bsicas. Su objetivo es permitir que el
programador se centre en los aspectos lgicos de la solucin, evitando las reglas de sintaxis
de los lenguajes de programacin convencionales.
No siendo el pseudocdigo un lenguaje formal, varan de un programador a otro, es decir,
no hay una estructura semntica ni arquitectura estndar. Es una herramienta gil para el
estudio y diseo de aplicaciones, veamos un ejemplo, que podramos definir como:
lenguaje imperativo, de tercera generacin, segn el mtodo de programacin estructurada.
Problema 1. El ejemplo de cambiar una bombilla fundida es uno de los ms utilizados por
su sencillez para mostrar los pasos de un Algoritmo:
Paso 1. Inicio
Paso 2. Ubicar una escalera debajo de la bombilla fundida
Paso 3. Tomar una bombilla nueva
Paso 4. Subir por la escalera
Paso 5. Girar la bombilla fundida hacia la izquierda hasta soltarla
Paso 6. Enroscar la bombilla nueva en el plafn hasta apretarla
Paso 7. Bajar de la escalera
Paso 8. Fin
Problema 2. Implemente el algoritmo usando un Pseudocdigo para calcular el factorial
de un numero N.
Paso 1: Inicio
Paso 2: Leer N
Paso 3: Hacer i=0
Paso 4: Hacer F=1
Paso 5: Si i<N hacer Paso 6
Sino hacer Paso 9
Paso 6: Hacer i=i+1
Paso 7: Hacer F=F*i
Paso 8: Hacer paso 5
Paso 9: Mostrar F
Paso 10: Fin

Elaborado por: Mximo Obregn R.

Pg. 6/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Problema 3. Consideremos el algoritmo de Euclides para hallar el Mximo Comn


Divisor (MCD) de dos nmeros enteros positivos dados. Obsrvese que no se especifica
cules son los dos nmeros, pero si se establece claramente una restriccin: deben ser
enteros y positivos.
Paso 1: Inicio.
Paso 2: Leer los dos nmeros (a y b). Avanzar al paso 3.
Paso 3: Comparar a y b para determinar cul es mayor. Avanzar
al paso 4.
Paso 4: Si a y b son iguales, entonces ambos son el resultado esperado y
termina el algoritmo. En caso contrario, avanzar al paso 5.
Paso 5: Si a es menor que b, se deben intercambiar sus valores. Avanzar al
paso 6; si a no es menor que b, avanzar al paso 6.
Paso 6: Realizar la operacin a menos b, asignar el valor de b a a y asignar
el valor de la resta a b. Ir al paso 3.
Paso 7: Fin
Ejercicio: Ordenar los pasos para pescar:
___ El pez se traga el anzuelo.
___ Enrollar el sedal.
___ Tirar el sedal al agua.
___ Llevar el pescado a casa.
___ Quitar el Anzuelo de la boca del pescado.
___ Poner carnada al anzuelo.
___ Sacar el pescado del agua.
DIAGRAMAS ESTRUCTURADOS (NASSI-SCHNEIDERMAN)
El diagrama estructurado N-S tambin conocido como diagrama de chapin es como un
diagrama de flujo en el que se omiten las flechas de unin y las cajas son contiguas. Las
acciones sucesivas se pueden escribir en cajas sucesivas y como en los diagramas de flujo,
se pueden escribir diferentes acciones en una caja. Un algoritmo se represente en la
siguiente forma:
Inicio
Leer
Nombre, Hrs, Precio
Inicio
Calcular
Accion1
Salario=Hrs*Precio
Accion1
Calcular

Imp=Salario*0.15
Fin
Calcular
Neto=Salario+Imp
Escribir
Nombre, Imp, Sneto
Fin

Elaborado por: Mximo Obregn R.

Pg. 7/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

LENGUAJES DE PROGRAMACION
Los lenguajes de programacin, son como los idiomas de comunicacin para los seres
humanos: ingles, espaol, japons, etc, con el cual podemos dar instrucciones a otro ser
humano. Los lenguajes de programacin son idiomas de comunicacin con el que, el ser
humano puede dar instrucciones a un computador. Estos lenguajes han evolucionado, por
las nuevas tecnologas de la informacin que se dispone en estos tiempos.
Dentro de los ms reconocidos tenemos a:
Lenguaje Origen del Nombre

Ao

Notas/Comentarios

FORTRAN

TRANslation
FORmula
1957
(Traduccin de Frmulas)

Primer compilador creado por John Backus


en 1957. Lenguaje compilado de alto nivel.
Precursor de mltiples conceptos, tales
como variables, sentencias condicionales y
funciones compiladas separadamente.

LISP

LISt Processing (Procesamiento


1958
de Listas)

Creado por John McCarthy. Lenguaje


interpretado de procesamiento de listas
orientado a la realizacin de aplicaciones en
el mbito de la Inteligencia Artificial.

ALGOL

ALGOrithmic Language (Lenguaje


1960
algortmico)

Primer
lenguaje
estructurado,
usado
principalmente para resolver problemas
matemticos. Desarrollado por Alan Perlis,
John Backus y Peter Naur.

COBOL

Business-Oriented
COmmon
Language (Lenguaje orientado a 1960
tareas sencillas)

Creado por Grace Murray Hooper para


Univac. Crea el concepto de tipo de dato.

APL

Programming
Language
A
1961
(Lenguaje de programacin A)

Lenguaje interpretado que usa un gran


conjunto de smbolo especiales y una
sintaxis compleja.

PL/1

Programming Language One

Complejo
lenguaje
de
programacin.
Compilado, estructurado y capaz de manejar
errores y multitarea, usado en entornos
acadmicos y de desarrollo.

BASIC

Beginners All-Purpose Symbolic


Instruction Code (Cdigo de
1965
instruccin simblica multifuncional
para principiantes)

Popular lenguaje
frecuentemente
principiantes.

PASCAL

Blaise PASCAL, matemtico e


inventor de la Mquina Analtica, 1971
primer concepto de ordenador.

Lenguaje estructurado compilado basado en


ALGOL, al cual aade tipos de datos y
simplifica su sintaxis. Creado por el profesor
suizo de Ciencias de la Computacin,
Niklaus Wirth.

Lenguaje posterior al lenguaje B


1972
de los Laboratorios Bell

Popular lenguaje estructurado y compilado,


muy portable.

ADA

Augusta
ADA
Lovelace)

JAVA

Lenguaje
de
programacin
orientado a objetos desarrollado 1995
por la empresa Sun Microsystems

Derivado del PASCAL, usado principalmente


para fines militares.
Similar al C++, con marcadas caractersticas
de seguridad y transportabilidad la cual
define una mquina virtual independiente de
la plataforma donde se ejecuta

Byron

Elaborado por: Mximo Obregn R.

1964

(Lady

1979

de alto nivel, usado


por
programadores

Pg. 8/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

1950

COMPUTACION I

1970

1960

1980

PL/I(66)

1990
Eiffel (86)
Ada(95)

Ada(83)

Cobol(58)
Pascal(70)

Java(96)
Algol(60)
C(72)

C++(89)

Fortran(54)
Simula(67)

Smalltalk(80)

Basic(66)

Elaborado por: Mximo Obregn R.

Pg. 9/52

PHP(95)

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Definicin formal de Lenguaje de programacin:


1.- Un lenguaje de programacin es un sistema notacional para describir computaciones de
una forma legible tanto para la mquina como para el ser humano.
2.- Un lenguaje de programacin es un lenguaje que puede ser utilizado para controlar el
comportamiento de una mquina, particularmente una computadora. Consiste en un
conjunto de reglas sintcticas y semnticas que definen su estructura y el significado de sus
elementos, respectivamente.
3.- Un lenguaje de programacin permite a un programador especificar de manera precisa:
sobre qu datos una computadora debe operar, cmo deben ser estos almacenados y
transmitidos y qu acciones debe tomar bajo una variada gama de circunstancias. Todo
esto, a travs de un lenguaje que intenta estar relativamente prximo al lenguaje humano o
natural, tal como sucede con el lenguaje Lxico.
Clasificacin de los lenguajes de programacin
Los lenguajes de programacin se determinan segn el nivel de abstraccin, Segn la
forma de ejecucin y Segn el paradigma de programacin que poseen cada uno de ellos y
esos pueden ser:
Segn el nivel de abstraccin
Lenguajes de bajo nivel: Son los que se acercan al funcionamiento de una computadora.
El lenguaje de ms bajo nivel es, por excelencia, el cdigo mquina. A ste le sigue el
lenguaje ensamblador, ya que al programar en ensamblador se trabajan con los registros de
memoria de la computadora de forma directa.
Lenguajes de medio nivel: Hay lenguajes de programacin que son considerados por
algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener
ciertas caractersticas que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo
tiempo, ciertas cualidades que lo hacen un lenguaje ms cercano al humano y, por tanto, de
alto nivel.
Lenguajes de alto nivel: Los lenguajes de alto nivel son normalmente fciles de aprender
porque estn formados por elementos de lenguajes naturales, como el ingls. En BASIC, el
lenguaje de alto nivel ms conocido, los comandos como "IF CONTADOR = 10 THEN
STOP" pueden utilizarse para pedir a la computadora que pare si CONTADOR es igual a
10. Por desgracia para muchas personas esta forma de trabajar es un poco frustrante, dado
que a pesar de que las computadoras parecen comprender un lenguaje natural, lo hacen en
realidad de una forma rgida y sistemtica.
Segn la forma de ejecucin
Lenguajes compilados: Traduciendo este programa al programa equivalente escrito en
lenguaje de mquina. A ese proceso se lo llama compilar.
Lenguajes interpretados: Mediante un programa que va adaptando las instrucciones
conforme son encontradas, a este proceso se lo llama interpretar.
Segn el paradigma de programacin
Lenguajes imperativos, Lenguajes declarativos, Funcionales Lgicos ,Lenguajes
orientados a objetos.
En la Programacin Orientada a Objetos (POO u OOP segn siglas en ingls) se definen
los programas en trminos de "clases de objetos", objetos que son entidades que combinan
estado (es decir, datos) comportamiento (esto es, procedimientos o mtodos) e identidad
(propiedad del objeto que lo diferencia del resto.

Elaborado por: Mximo Obregn R.

Pg. 10/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

PROBLEMAS PROPUESTOS
Problema 1. Implemente el algoritmo usando un diagrama de flujo y pseudocdigo para
mostrar los n primeros nmeros capica.
Problema 2. Implemente el algoritmo usando un diagrama de flujo y Pseudocdigo para
mostrar si un nmero es primo o no.
Problema 3. Implemente el algoritmo usando un diagrama de flujo y Pseudocdigo para
mostrar los n primeros nmeros primos
Problema 4. Implemente el algoritmo usando un diagrama de flujo y Pseudocdigo para
mostrar el mayor y el menor de 4 nmeros.
Problema 5. Implemente el algoritmo usando un diagrama de flujo y Pseudocdigo para
mostrar el segundo mayor de n nmeros.
Problema 6. Implemente el algoritmo usando un diagrama de flujo y Pseudocdigo
para mostrar el tercer mayor de n nmeros.
Problema 7. Implemente el algoritmo usando un diagrama de flujo y pseudocdigo
para mostrar la posicin relativa entre dos circunferencias:
tangentes: que sean tangentes interiormente o exteriormente
exteriores: que no estn separadas
interior: que uno este dentro de otro.
Problema 8. Implemente el algoritmo usando un diagrama de flujo y pseudocdigo
para mostrar las races de una funcin cuadrtica que tiene los coeficientes a, b, c. El
algoritmo deber mostrar las races reales o imaginaras segn sea el caso.

Elaborado por: Mximo Obregn R.

Pg. 11/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

LENGUAJE C++
En 1967 Martin Richards cre un lenguaje de programacin BCPL, para escribir sistemas
operativos y compiladores y Ken Thompson cre el lenguaje B basndose en el BCPL.
Con B, Thompson escribi las primeras versiones de UNIX en los laboratorios Bell
durante 1970. Estos 2 lenguajes muy rsticos y dejaban muchas tareas al programador.
En 1972 Denis Ritchie escribe un lenguaje basado en BCPL y B con varias mejoras que
contribuyen a su posterior popularidad; lo llam C. La eficiencia del C en trminos de
ejecucin y administracin de recursos lo hizo el preferido de las empresas de software que
diseaban sistemas operativos y compiladores. Una de sus principales caractersticas es su
independencia del hardware, lo cual permita inicialmente correr programas C en cualquier
plataforma con mnimas modificaciones. Pero las empresas de software comenzaron a
disear versiones de C particulares que le quitaban portabilidad a los programas. Por eso,
en el 1983 el ANSI cre un comit tcnico para su standarizacin. La versin aprobada
junto a la ISO vi la luz en 1990 y se lo conoce como ANSI C.
En 1980 Bjarne Stroustrup en los Laboratorios Bell, comenz a experimentar con
versiones mejoradas de C (C con clases) con la nica finalidad de escribir programas de
simulacin orientada a eventos.
El nombre de C++ fue idea de Rick Masciatti haciendo uso del operador postincremento
del lenguaje y sugera que era el lenguaje que le segua a C. Este compilador fue creciendo
con renovadas caractersticas que lo hacen muy original, manteniendo la compatibilidad
con su antecesor C. C++ incorpora clases y funciones virtuales basndose en SIMULA67,
tipos genricos y expresiones de ADA, la posibilidad de declarar variables en cualquier
lugar de ALGOL68, as como otras caractersticas que no existan antes: herencia mltiple,
espacios en nombres, funciones virtuales puras, etc. Alex Stepanov y Adrew Koenig
idearon la biblioteca STL, la cual le da a C++ una potencia nica entre los lenguajes de
alto nivel.
Debido a la enorme difusin de C++, y a las diferentes versiones que fueron apareciendo,
las organizaciones ANSI e ISO se reunieron en 1990 para definir el Standard de este
lenguaje, el cual fue aprobado en 1998.
Hoy da, C++ posee una notable insercin en el mundo de las computadoras y es un de los
lenguajes clsicos de programacin: tanto sistemas operativos y compiladores, como
aplicaciones.
PARTES DE UN PROGRAMA EN C++:
Un programa escrito en C++ est conformado por pequeos mdulos de cdigo llamados
funciones.
El mdulo principal o programa principal est conformado por la funcin que
denominamos main( ) las instrucciones que conforman sta se encierran entre { }.
Sobre la parte superior de la funcin main() y dentro de la funcin se pueden declarar los
siguientes objetos que pueden manipular un programa.
1. Directivas para Incluir archivos, #include
2. Directivas para incluir macros y constantes #define
3. Declaracin de Prototipos de funciones
4. Declaracin de Variables globales
5. Declaracin de tipos de datos.
6. Dentro del main() se encuentran las declaraciones de variables y las instrucciones que
definen procesos que debe realizar la computadora.
7. Por fuera del main() y despus de la llave } que cierra el main aparecen las declaracin
de las funciones.

Elaborado por: Mximo Obregn R.

Pg. 12/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Para ello tenemos el siguiente ejemplo de programa en c++, en el cual calculamos la


conversin de una coordenada en el espacio de esfrica a cartesiana.
//Primer ejemplo de programa
//Se ingresa las coordenadas esfricas de un punto en el espacio
//Se muestra la conversin a coordenadas cartesianas
#include<iostream.h>
#include<conio.h>
#include<math.h>
# define sen sin(gamma)
void main()
{float x,y,z,r,theta,gamma;
cout<<"PROGRAMA DE TRANSFORMACION DE COORDENADAS"<<endl;
cout<<"\tIngrese r=";cin>>r;
cout<<"\tIngrese ngulo theta(en sexagesimal)=";cin>>theta;
cout<<"\tIngrese ngulo gamma(en sexagesimal)=";cin>>gamma;
theta=theta*M_PI/180;
gamma=gamma*M_PI/180;
x=r*sen*cos(theta);
y=r*sen*sin(theta);
z=r*cos(gamma);
cout<<"La conversin a coordenadas cartesianas es:\n";
cout<<"\t("<<x<<","<<y<<","<<z<<")"<<endl;
getch();
}
COMENTARIOS
Los comentarios pueden ser usado de 2 maneras:
1) // al iniciar una lnea
2) /* ..

*/
Los comentarios son muy usados para documentar el programa, como tambin realizar
pruebas de secciones de cdigo anulndolo o activndolo. Todo lo que esta como
comentario no ser considerado en la compilacin del programa.
DIRECTIVA INCLUDE (Archivos con extensin h):
Los archivos con extensin h (Ejemplo: stdio.h, conio.h etc ) se llaman archivos de
cabecera, contienen informacin tcnica que requiere el compilador para la buena
operacin de las funciones que usan nuestros programas.
Nuestro programa est usando directivas para incluir archivos son:
#include <stdio.h>
#include <conio.h>
#include <math.h>
Los archivos con extensin h viene con el compilador. Pero tambin podemos crear
archivos de este tipo propios.
DIRECTIVA #define: (Definicin de Macros)
La directiva #define se utiliza para definir un identificador y una cadena que ser sustituida
por cada vez que el identificador se utilice en el programa. Al identificador se le denomina
nombre de la macro y al proceso de reemplazamiento, sustitucin de macro.
Elaborado por: Mximo Obregn R.

Pg. 13/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Nuestro programa est usando directivas para incluir (macro) constantes.


# define sen sin(gamma)
Esta lnea significa que se ha creado una macro llamado sen, cuando se compile el
programa sen ser reemplazado por sin(gamma)
Otros ejemplos son:
#define mensaje El sistema no tiene Solucin
Otro tipo de macro podra ser:
#define CIERTO
1
#define FALSO
0
Una vez definido una macro se puede usar el nombre de ella como parte de la definicin de
otra, ejemplo:
#define UNO 1
#define DOS UNO + UNO
#define TRES UNO + DOS
DECLARACIN DE VARIABLES:
Antes del main() o despus de l se deben definir las variables, ejemplo:
float a, b, x;
Las variables que se declaran dentro del main() se dice que son variables locales,
las que se declaran fuera se dicen globales, cuando veamos el concepto de funcin
ampliaremos la diferencia entre estos tipos de variables.
La siguiente tabla muestra los distintos tipos de dato que podemos usar en C para declarar
variable en un programa en C.
Tipo de datos para 16 bits
Tipo
# bits
Rango
unsigned char
8
0 ... 255
char
8
-128 ... 127
enum
16
-32,768 ... 32,767
unsigned int
16
0 ... 65,535
short int
16
-32,768 ... 32,767
int
16
-32,768 ... 32,767
unsigned long
32
0 ... 4,294,967,295
long
32
-2,147,483,648 ... 2,147,483,647
float
32
3.4 *10-38 ... 3.4 *1038 (7-digit precision)
double
64
1.7 * 10-308 ... 1.7 ^*10308 (15-digit precision)
long double
80
3.4*10-4932 ... 1.1*104932 (18-digit precision)
Tipo de datos para 32 bits
Tipo
# bits
Rango
unsigned char
8
0 ... 255
char
8
-128 ... 127
short int
16
-32,768 ... 32,767
unsigned int
32
0 ... 4,294,967,295
int
32
-2,147,483,648 ... 2,147,483,647
unsigned long
32
0 ... 4,294,967,295
enum
32
-2,147,483,648 ... 2,147,483,647
long
32
-2,147,483,648 ... 2,147,483,647
float
32
3.4 * 10-38 ... 1.7* 1038 (7-digit) precision)
double
64
1.7* 10-308 ... 3.4* 10308 (15-digit precision)
long double
80
3.4* 10-4932 ... 1.1* 104932 (18-digit precision)

Elaborado por: Mximo Obregn R.

Pg. 14/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

FUNCIONES DE ENTRADA Y SALIDA


La cadena de formato consiste de una secuencia de caracteres simples, secuencias de
escape y/o especificadores de formato, todos ellos delimitados por " (comillas dobles)
Secuencia de Escape
Carcter de Salida
\a
Sonar alerta
\b
Retroceso
\f
Salto de Pgina
\n
Salto de Lnea
\t
Tabulador Horizontal
\v
Tabulador Vertical
\r
Retorno de Carro
\
Doble Comillas
\
Comilla Simple
\\
Barra Invertida
\?
Signo de Interrogacin
\DDD
Cdigo Octal
\xHHH
Cdigo Hexadecimal de un carcter
La biblioteca estndar de E/S para C, descrita por el archivo de cabecera stdio.h est
disponible en C++. Sin embargo, C++ introduce sus propios archivos de cabecera; por
ejemplo, iostream.h, fstream.h y strstream.h, que implementan su coleccin particular en
funciones de E/S: cin, cout
En C++ los flujos stdin, stdout son: cin, cout. Estos dos flujos se abren automticamente
cuando comienza la ejecucin de programas, y se convierte en la interfaz entre el programa
y el usuario. El flujo cin esta asociado con el teclado del terminal. El flujo cout se asocia
con el monitor de vdeo.
Los operadores >> y <<
La entrada y salida en C++ ha sido significativamente realzada y perfeccionada por la
biblioteca de operadores de flujo >> ("get from" o extraccin ) y << ("put on" o insercin).
Cada operador est sobrecargado propiedad de C++ que delega en el compilador la
responsabilidad de determinar que operador lgico o funcin nombrada debe ejecutarse
basndose en los tipos de datos de las variables asociadas. Cada uno de los operadores <<
y >> puede manipular todos los tipos de datos estndar, clases incluidas.
Los siguientes dos ejemplos muestran de manera rpida la mayor facilidad de manejo de
E/S (entrada y salida)
Utilizando printf del C estndar: printf("Un entero %d, un real %f", a,b);
Ahora equivalente en C++: cout <<"Un entero" <<a<<",un real"<<b;
Utilizando scanf del C estndar: scanf("%d%f%c",&entero,&real,&caracter);
ahora en C++: cin >> entero >>real>>caracter;
Observe como el operador de extraccin, realiza la entrada de informacin. No se necesito
preceder las variables de entrada con el operador de direccin &.
En C++ el operador de extraccin se encarga de calcular la direccin, de almacenamiento
de la variable, los requisitos de almacenamiento y el formato.
Salida Formateada en C++
Podemos ver el operador de salida, <<, como un medio rpido y tipo borrador, para la
salida de muchos tipos comunes de informacin. Sin embargo cuando se necesita ms
precisin, C++ la proporciona con la funcin form. La funcin form tiene dos propiedades
que permiten su uso flexible en el alto nivel .

Elaborado por: Mximo Obregn R.

Pg. 15/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Primero pueden escribir una lista de argumentos de longitud arbitraria.


Segundo, la impresin est controlada por formatos simples de la misma forma que printf
en stdio.h
Ejemplos :
cout << form("\n a=%7.2f ",a);
cout<< form("\n\t\t Usando el - y la E se escribe a como \t=%+-9.2E",a);
Pero esto no es necesario para la versin 3.1 y posteriores
En C++ se pueden seguir utilizando las mismas sentencias para mostrar informacin por
pantalla o pedirla mediante teclado. Pero a estas antiguas se aaden 2 nuevas de la misma
potencia y mayor facilidad de uso. La cabecera que utilizan estas dos sentencias es
iostream.h.

Mostrar por pantalla:


cout << expresin;
Pedir por teclado:
cin >> variable; La variable puede ser de cualquier tipo.
EJEMPLO:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
void main()
{
int i,j;
double d;
clrscr();
i=10;
j=15;
cout <<"Introducir valor: ";
cin>>d;
cout << "Estos son los valores: ";
cout << i << " "<< j << " "<< d;
getch();
}
INDICADORES DE FORMATO: Tres funciones miembro (width, precision y fill) que
fijan formato de anchura, precisin y carcter de relleno. Es necesario fijar la anchura,
precisin y carcter de relleno antes de cada sentencia de escritura.
ANCHURA:
cout.width(ancho);
DECIMALES: cout.precision(n digitos);
RELLENO:
cout.fill('carcter');

EJEMPLO:
#include<iostream.h>
#include<conio.h>

Elaborado por: Mximo Obregn R.

Pg. 16/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

main()
{ double numero=123.1234567;
cout<< "hola" <<"\n";
cout.width(15);
cout<< "hola" <<"\n";
cout.width(15);
cout.fill('*');
cout<< "hola"<<"\n";
cout<<numero <<"\n";
cout.precision(4);
cout<<numero <<"\n";
cout.precision(10);
cout<<numero;
getch();
}
MODIFICADORES DE LA CLASE IOS: Estos modificadores son pertenecientes a la
clase ios. Cuando se activan su valor se mantiene, es decir hay que desactivarlos para
volver al formato de salida original.

Fijar indicador:
cout.setf(ios::identificador|ios::identificador2);
Anular identificador:
cout.unsetf(ios::identificador|ios::identificador2);
IDENTIFICADOR
oct
hex
scientific
showpoint
showpos
left
skipws
uppercase

DESCRIPCIN
Devuelve un entero en octal.
Devuelve un entero en hexadecimal.
Devuelve un nmero en formato cientfico.
Muestra 6 decimales aunque no sea necesario
Muestra el signo + en los valores positivos
Ajusta la salida a la izquierda.
Omite los espacios a la izquierda de la salida.
Muestra el texto en maysculas.

EJEMPLO:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void main()
{ float num=200.0;
int num1=200;
cout<<num <<"\n";
cout.setf(ios::showpos|ios::showpoint);
cout<<num <<"\n";
cout.setf(ios::scientific);
cout<<num <<"\n";
cout.unsetf(ios::scientific|ios::showpoint|ios::showpos);
Elaborado por: Mximo Obregn R.

Pg. 17/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

cout<<num <<"\n";
cout.setf(ios::hex);
cout<<num1 <<"\n";
getch();
}
OPERACIN DE ASIGNACIN:
Es la operacin mediante la cual se le asigna un valor determinado a una variable en
memoria.
SINTAXIS:
<Identificador>=<expresin>
Estamos indicando a la computadora que evale la expresin y la almacene en la variable
que se identifica por el identificador. una expresin puede ser un valor de constante, o
frmula matemtica.
Ejemplos:
Horas=30;
salario=5000; caracter='C';
salario=salario + 1000;
NUNCA se escribe la expresin a la izquierda del operador de asignacin:
salario * 2 = sal_ to tal

OPERADORES ARITMETICOS
OPERADOR OPERACIN QUE REALIZA
+
Sumar
Restar
*
Multiplicar
/
Dividir
%
Calcular el Residuo de divisin entera
++
Incremento
-Restar
El operador % calcula el residuo que queda al dividir dos nmeros enteros, el siguiente
programa muestra lo que realiza ese operador :
int a=3,b=2 ;
cout<<a/b;// Residuo de dividir a y b
getch();

Elaborado por: Mximo Obregn R.

Pg. 18/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

OTROS OPERADORES DE ASIGNACIN


En C existen los siguientes operadores de asignacin :+=, *=, =, /= y %=, donde la sintaxis
cuando se quiere utilizar uno de esos operadores es :
<identificador><operador de asignacin><expresin>
Veamos algunos ejemplos del uso de esos operadores :
EXPRESIN
a=a+2
b=b+(i+1)
z=z/10
j= j%(j-2)
El identificador es una variable.

EXPRESIN
EQUIVALENTE
a+=2 ;
b+=i+5 ;
z/=10 ;
j%=(j-2)

JERARQUA DE LOS OPERADORES ARITMTICOS :


Cuando la computadora evala una expresin aritmtica sigue los siguientes criterios para
obtener el resultado.
1.
En una operacin aritmtica que incluya varios operadores aritmticos, los
operadores ++,-- tienen la mxima prioridad, le siguen en prioridad *, /, %.
2.
En una expresin aritmtica compuesta, las operaciones que estn asociadas con los
operadores +, - se ejecutan despus de haberse ejecutado todos los operadores aritmticos
enunciados en la primera regla.
3 . Si en una expresin existen varios operadores aritmticos que tengan la misma
prioridad, estos se resuelven de izquierda a derecha
Ejemplo:
b b 2 4ac
x=
2a
La expresin queda bien escrita si se usan los parntesis as:
X = (-b + sqrt(b * b - 4*a*c)) / (2 * a);
CONVERSlN DE TIPO DE DATOS:
Se dice que una expresin de asignacin involucra operaciones de modo mixto cuando
involucra variables de distinto tipo. Cuando C y C++, evalan una expresin que involucra
variables de distinto tipo realiza conversin automtica de un tipo de dato a otro,
Que implicaciones tiene eso ? Es bueno tener presente que los datos de diferente tipo son
almacenados de modo diferente en memoria.
Ejemplo:
Si en un programa en C tenemos que a y b son variables de tipo float y c es de tipo int, las
siguientes expresiones:
a=5.0 ; b=2.0 ; c=a/b ;
Almacenaran en c el valor 2 pues la divisin da 2.5 pero al convertirlo a entero lo trunca
Ejemplo:
resul_float=valor_float*valor_int,
La operacin anterior es de tipo mixto, cuando se va a realizar la multiplicacin el valor de
la variable valor int se convierte a nmero float y luego se hace la multiplicacin. El
proceso se realiza as: la computadora lee el valor almacenado en la variable y es
convertido a float para la realizacin de la multiplicacin pero sin cambiar el valor en
memoria, cuando se realiza la multiplicacin el resultado es float. Existe una jerarqua de

Elaborado por: Mximo Obregn R.

Pg. 19/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

conversin en la que el dato de prioridad ms baja es convertido temporalmente al tipo de


prioridad ms alta para realizar clculos. La siguiente tabla muestra la jerarqua de
conversiones desde la prioridad ms alta hasta la ms baja:
double
float
long
int
short
Cuando un tipo es convertido a otro tipo que tiene ms dgitos significativos, el valor del
nmero y su precisin quedan inalterados.
Ejemplo: Supongamos que tenemos el siguiente programa:
valorl_int=3 ; valor2_float=4 ;
valor_float=7.0 ;
resul_float=valor_float + valorl_int/valor2_float;
La computadora al dividir valorl_int/valor2_float dicha operacin es de tipo mixta por
tanto el 3 se convierte a nmero float y la divisin da 0. 75 que al sumarle 7 da 7.75.
INSTRUCCIONES DE CONTROL y CICLOS REPETITIVOS
FLUJO DE CONTROL:
Se llama flujo de control de un programa al orden en que se ejecutan las instrucciones que
lo conforman.
El flujo de control de los programas, es lineal, esto significa que la computadora ejecuta
una a una las instrucciones que se le indican, sin alterar el orden en que se escriben.
EXPRESION LGICA:
Una expresin lgica en C es una sentencia que al ser evaluada, la computadora da un
valor 0 si es falsa y un valor distinto de cero si es verdadera.
OPERADORES DE RELACIN:
Los siguientes operadores los utilizaremos para construir expresiones lgicas y establecen
relaciones que pueden ser falsas o verdaderas.
OPERADOR
SIGNIFICADO
>=
Mayor o igual que
<=
Menor o igual que
==
Igual que
!=
Diferente
<
Menor que
>
Mayor que
Ejemplo:
A+B>=C*2;
X= ='S';
X<>S;
La expresin: z= a+b>=c*2;
Compara el valor de la suma de a y b con el doble de c, si es menor almacena en z el valor
0 si es mayor o igual almacena un valor distinto de cero.
OPERADORES LGICOS:
OPERADORES
&&
||
!

Elaborado por: Mximo Obregn R.

SIGNIFICADO
Y
O
No

Pg. 20/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Ejemplos: Si tenemos la expresin :


!(5>3) al evaluarla el resultado que da es 0.
La expresin: z=!(5>3);
Almacena 0 en la variable z
La expresin: z=!(a+b>=c*2) Almacena 1 en la variable z si el resultado de comparar a+b
con el doble de c es menor, puesto que la proposicin es falsa, al negarla da verdadera
PRIORIDAD DE OPERADORES:
Teniendo los operadores ya definidos, debemos definir la prioridad nuevamente as:
CATEGORA DEL
OPERADOR
Operadores Monarios
Multiplicacin divisin y
residuo
Suma y sustraccin
aritmtica
Operadores de relacin
Operadores de igualdad
y
o
Operadores de asignacin

OPERADORES
-,++,--,!, sizeof(tipo)
*, /, %

ASOCIATIVA
Derecha a Izquierda
Izquierda a Derecha

+, -

Izquierda a derecha

<, <=, >, >=


= = , !=
&&
||
=, +=, - =, *=, /=, %=

Izquierda a derecha
Izquierda a derecha
Izquierda a derecha
Izquierda a derecha
Izquierda a derecha

Las expresiones entre parntesis se evalan primero.


Los operadores de asignacin tiene menor prioridad que todos los otros operadores. Por
tanto las operaciones monarios, aritmticos, de relacin, de igualdad y lgicos se realizan
antes que las de asignacin.
INSTRUCCIN if (expresin lgica) else:
La instruccin si evala la expresin lgica, si sta es verdadera, ejecuta la instruccin
definida en <accin A>, si es falsa se ejecuta la instruccin inmediata al else definida en
<accin B>, despus de eso ejecuta la instruccin siguiente a la <accin B> y las que le
siguen
if (expresin lgica)
<Accin A>;
else
<Accin B>;

(E.L.)

Sentencias 2

Si

Expresin lgica

Accin A

Sentencias 1
No

Accin B

Elaborado por: Mximo Obregn R.

Pg. 21/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

EJEMPLO: Escriba un programa en lenguaje C que le permita a un estudiante calcular la


nota definitiva de tres notas, que tienen el mismo valor porcentual. El programa debe
imprimir la nota definitiva y un mensaje adecuado que diga Aprob el curso', o
'Desaprob el curso'.
#include <iostream.h>
#include <conio.h>
#define gano " Aprob el curso "
#define perdio " Desaprob el curso "
main()
{
double nota1, nota2, nota3;
double definitiva;
cout<<"Escriba la primera nota";
cin>>nota1;
cout<<"Escriba la segunda nota"; cin>>nota2;
cout<<"Escriba la tercera nota";
cin>>nota3;
definitiva=(nota1+nota2+nota3)/3;
if (definitiva>=10)
cout<<"Su nota es "<<definitiva<<gano;
else
cout<<"Su nota es "<<definitiva<<perdio;
getch();
}
SENTENCIA COMPUESTA:
Cuando un programador, necesita que la computadora ejecute ms de una instruccin en el
momento de que la expresin lgica sea verdadera o sea falsa, lo indica encerrando entre
llaves { } las instrucciones que siguen al then o al else.
EJEMPLO: Escriba un programa que lea tres nmeros reales a, b, c. Una vez ledos, el
programa debe calcular la solucin a la ecuacin:

A*X

+B*X +C = 0

y debe escribir las soluciones reales si existen y las soluciones complejas.


#include <iostream.h>
#include <conio.h>
#include <math.h>
#define imagin 'i'
void main(void)
{
double
a,b,c,
discri, preal,
x1, x2, pimag;
clrscr() ;
cout<<"Escribe los coeficientes ?";
cin >>a>>b>>c;
discri=pow(b,2)-4*a*c;
if (discri>=0)
{
x1=(-b+sqrt(discri))/(2*a);
x2=(-b-sqrt(discri))/(2*a);
cout<<"x1="<<x1;
cout<<"x2="<<x2;
Elaborado por: Mximo Obregn R.

Pg. 22/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

}
{
preal=-b/(2*a); pimag=sqrt(abs(discri))/(2*a);
cout<<"\n x1="<<preal<<imagin<<pimag;
cout<<"\n x1="<<preal<<imagin<<-pimag;
}
getch();
else

}
IF ANIDADOS :
Tendremos situaciones lgicas en las cuales despus de hacernos una pregunta se nos hace
necesario hacer una nueva pregunta, en esos caso tenemos entonces que despus del then
y/o else es necesario volver a tener una sentencia if then else decimos entonces que
anidamos if.
EJEMPLO:Se requiere un programa que lea A y permita evaluar la funcin
5 * x + x + 1
x>3

x+2
y = x + 5
3 <= x <= 9
3
3
x >= 9
x + 7* x
#include <iostream.h>
#include <math.h>
main()
{
double a,y;
cout<<Entre un numero real ";
cin>>a;
if (a<3)
y=5*a + sqrt(++a);
else
if ((a>=3)&&(a<=9))
y=a+5-(a+2)/3;
else
y=exp(3*log(a))+7*a;
cout<<"y="<<y;
getch();
}
EJEMPLO: Uso de modificadores para el formateo del texto de salida
/******************************************************************\
* Fecha: lunes 03 de marzo del 2006
*
* Elaborado por: Mximo Obregn Ramos
*
* web del grupo:
*
* http://es.groups.yahoo.com/group/curso_computacion1
*
* Ejemplo: mostrar la capacidad de precisin de la pc
*
* se sugiere revisar en la ayuda de borland "data type"
*
* y tambin ios que contiene varios manipuladores
*
\******************************************************************/
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#include<math.h>

Elaborado por: Mximo Obregn R.

Pg. 23/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

void main()
{
float x,cx;
double cy,y;
long double cz,z;
//errores de precision
cout.precision(80);
cout.flags(ios::fixed);
x=(1.0/3.0);
cout<<"
11111111112222222222"<<endl;
cout<<"
12345678901234567890123456789"<<endl;
cout<<"cx de maquina="<<cx<<endl;
cx=x; cout<<" x=1/3 ="<<cx<<endl;
cx=x*2; cout<<" cx=x*2 ="<<cx<<endl;
cx=x*3; cout<<" cx=x*3 ="<<cx<<endl;
cx=1-x*3;cout<<" cx=1-x*3="<<cx<<endl;
if (cx==0) cout<<"
cx es cero\n";
else cout<<"
cx no es cero\n";
y=(1.0/3.0);
cy=y; cout<<" y=1/3 = "<<cy<<endl;
cy=y*3; cout<<" cy=y*3 ="<<cy<<endl;
cy=1-y*3;cout<<" cy=1-y*3="<<cy<<endl;
if (cy==0) cout<<"
cy es cero\n";
else cout<<"
cy no es cero\n";
z=(1.0/3.0);
cz=z; cout<<"
z=1/3 ="<<cz<<endl;
cz=z*3; cout<<"
cz=z*3 ="<<cz<<endl;
cz=1-z*3;cout<<"
cz=1-z*3="<<cz<<endl;
if (cz==0) cout<<"
cz es cero\n";
else cout<<"
cz no es cero\n";
x=(pow(2,1.0/3));
cx=x;
cout<<"
x=2^(1/3) ="<<cx<<endl;
cx=2-pow(x,3); cout<<" cx=2-x^3 ="<<cx<<endl;
if (cx==0) cout<<"
cz es 0\n";
else cout<<"
cz no es 0\n";
z=(pow(2,1.0/3));
cz=z;
cout<<"
z=2^(1/3) ="<<cz<<endl;
cz=pow(z,3); cout<<"
cz=z^3 ="<<cz<<endl;
if (cz==2) cout<<"
cz es 2\n";
else cout<<"
cz no es 2\n";
//formateando los nmeros
float a,b,c;
a=b=c=0.1234567890123456789;
cout.precision(2);
cout<<a<<endl;

Elaborado por: Mximo Obregn R.

Pg. 24/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

cout.precision(80);
cout<<b<<endl;
a=1.2;
b=12;
c=1234;
cout<<setprecision(2)<<a<<endl;
cout<<setprecision(2)<<b<<endl;
cout<<setprecision(2)<<c<<endl;
cout.flags(ios::right|ios::fixed);
cout.width(20);
cout<<
setprecision(2)<<a<<endl;
cout<<setw(20)<<setprecision(2)<<b<<endl;
cout<<setw(20)<<setprecision(2)<<c<<endl;
// cout<<setiosflags(ios::scientific)<<a<<endl;
getch();
}
INSTRUCCIN while
La instruccin while hace que la computadora repita la ejecucin de las instrucciones
mientras la condicin es verdadera.
En el lenguaje C esa instruccin tiene la siguiente sintaxis:

while (expresin lgica )


{
Sentencias a
Repetir
}

(E.L.)

Sentencias

F
Dentro de las instrucciones a repetir debe haber al menos una instruccin que haga que la
condicin sea falsa, de lo contrario no saldr del ciclo.
EJEMPLO: Escribir un programa que lea un nmero entero n, luego de lo cual la
computadora debe escribir todos y cada uno de los nmeros entre 1 y n luego debe escribir
cuanto vale la suma de esos nmeros.
#include <iostream.h>
#include <conio.h>
void main()
{
float n, numero, suma
;
gotoxy(10,10);
cout<<"\n Escriba numero hasta donde desea que cuente ?";cin>>n;
numero=1;
suma=0;
while (numero<=n)
{
suma += numero;
cout<<numero;
numero += 1;
}
gotoxy(10,12);cout<<"La suma="<<suma;
getch();
}

Elaborado por: Mximo Obregn R.

Pg. 25/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

EJEMPLO: Escriba un programa que lea un nmero entero n y luego calcule y escriba los
n primeros trminos de la serie 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89.........
#include<iostream.h>
#include<conio.h>
void main()
{
double n, t, af, ai, an, suma;
cout<<"Escriba el nmero de trminos a crear";
cin>>n;
af=0; ai=1; an=0; t=1; suma=0;
while (t<=n)
{
cout<<an<<",\t";
suma+=an; af = ai;
ai= an;
an =af + an; t+=1;
}
cout<<"\n\n\ala suma vale"<< suma;
getch();
}
INSTRUCCIN switch:
Esta instruccin permite verificar si una variable de tipo char o int tiene un valor
determinado.
switch (variable)
{
case constante1: instrucciones1;
break;
case constante2: instrucciones2;
break;
........
case constanten: instrucciones3;
break;
default :
Instrucciones por defecto;
}
La instruccin switch compara el valor de la variable con la constante1, si son iguales
ejecuta las instrucciones1 y llega al break, y ejecuta luego las instrucciones siguientes a la
llave }.
Si no son iguales compara el valor de la variable con el valor de la constante2, sino son
iguales compara con el de la constante3, y as sucesivamente.
Si no existe ninguna constante igual al valor de la variable ejecuta el default, si este existe,
sino continua con la ejecucin de las instrucciones despus de la llave }.
El break en cada caso es opcional, sino existe se ejecutan las instrucciones siguientes hasta
encontrar un break.
EJEMPLO: Lee un numero en arbigo y mostrar en letras;
#include<iostream.h>
#include<conio.h>
main()
{
int n;
cout<<Ingrese un numero menor a 5:; cin>>n;
switch (n)
{
case 1: cout<<UNO; break;
case 2: cout<<DOS; break;

Elaborado por: Mximo Obregn R.

Pg. 26/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

case 3: cout<<TRES; break;


case 4: cout<<CUATRO; break;
default : cout<<FUERA DE RANGO;break;
}
getch();
}
INSTRUCCIN do / while (expresion lgica):
La instruccin do/while la utilizan los programadores para indicarle al computador que
debe ejecutar una o varias instrucciones mientras que una condicin definida en la
expresin lgica sea verdadera, a diferencia del while, la condicin se evala despus de
ejecutar las instrucciones a repetir al menos una vez.
do
{

Sentencias a
Repetir

Sentencias

}while(expresin lgica);
(E.L.)

F
EJEMPLO: Escriba un programa que lea un nmero entero n y luego calcule y escriba los
n primeros trminos de la serie 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89.........
Este programa es el mismo que vimos en las pginas del while, observe como se puede
realizar lo anterior usando el do/while.
#include<iostream.h>
#include<conio.h>
void main()
{
double n, t, af, ai, an, suma;
cout<<"Escriba el numero de termino a crear";cin>>n;
af=0; ai=1; an=0; t=1;
suma=0;
do
{
cout<<an<<",\t";
suma=suma + an;
af = ai;
ai= an;
an=af + an;
t=t+1;
}while (t<=n);
cout<<"\n\n\ala suma vale"<< suma;
getch();
}
EJEMPLO: Escriba un programa que presente un men con tres opciones: La opcin 1
Sumar, 2 Restar, 3 Salir. Si el usuario presiona la opcin 1, la computadora le pregunta por
dos nmeros enteros y por el valor del resultado de la suma y le dice si el resultado es
correcto o no. Si el nmero presionado es el 2, la computadora le pregunta por dos
nmeros enteros y por el valor de la diferencia y le dice si el resultado es correcto o no.

Elaborado por: Mximo Obregn R.

Pg. 27/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Si es 3 termina con la ejecucin del programa.


#include <iostream.h>
#include <conio.h>
void main()
{
char opcion;
float a,b,respuesta;
do{
clrscr();
gotoxy(10,10);
cout<<"Las opciones son:"; gotoxy(10,12); cout<<"1-Sumar dos numeros";
gotoxy(10,13); cout<<"2-Restar dos numeros";
gotoxy(10,14); cout<<"3-Terminar el proceso";
opcion=getch();
switch (opcion){
case '1':clrscr();gotoxy(10,12);
cout<<"Escriba un numero "; cin>>a;
gotoxy(10,13);
cout<<"Escriba el otro sumando ";
cin>>b;
gotoxy(10,14);
cout<<"Cuanto suman "<<a<<"+"<<b; cin>>respuesta;
if (respuesta==(a+b))
{
gotoxy(10,16); cout<<"Respuesta correcta ";
}
else
{
gotoxy(10,16);
cout<<"La respuesta no es "<<respuesta<<" la res correcta es "<<a+b;
}
gotoxy(10,17);cout<<"Termine presione cualquier tecla";
getch();
break;
case '2':clrscr(); gotoxy(10,12);
cout<<"Escriba un numero "; cin>>a;
gotoxy(10,13); cout<<"Escriba el sustraendo ";
cin>>b; gotoxy(10,14);
cout<<"Cual es la diferencia entre "<<a<<"-"<<b; cin>>respuesta;
if (respuesta==(a-b))
{
gotoxy(10,16); cout<<"Respuesta correcta ";
}
else
{
gotoxy(10,16);
cout<<"La respuesta no es "<<respuesta<<" la res correcta es "<<a-b;
}
gotoxy(10,17); cout<<"Termine presione cualquier tecla";
getch(); break;
case '3':clrscr(); gotoxy(10,10);cout<<"Termine";
break; default :
gotoxy(10,17);

Elaborado por: Mximo Obregn R.

Pg. 28/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

cout<<"Presione solo 1,2 o 3";


}
}while (opcion!='3');
}
LA INSTRUCCIN for:

La utilizan los programadores para indicarle al computador


que ejecute un conjunto finito de instrucciones mientras una
condicin dada se cumpla.
La sintaxis de la forma general de la sentencia for es:

Sentencias
Inicializacin

Condicin

for (inicializacin; condicin; incremento)


sentencia_a_ejecutar;

El bucle for permite muchas variaciones, pero existen tres


partes principales:
V
1.La inicializacin: Normalmente es una sentencia de
Sentencias
asignacin que se utiliza para la inicializar una variable de
control del bucle.
2.La condicin: Es una expresin lgica que determina
cuando finaliza el bucle.
Sentencias
3.El incremento: Como cambia la variable de control cada
vez que se repite el bucle.
Las tres secciones se separan por ; (punto y coma) el bucle se
repite hasta que la condicin sea falsa.
EJEMPLO: Escriba un programa que calcule el factorial de un numero entero n.
#include <iostream.h>
#include <conio.h>
main ( )
{
float factorial = 1, n, factor;
cout<< "Entre un numero al cual le quiere calcular el factorial"; cin>> n;
for (factor = n; factor; factor--)
factorial*=factor;
cout<<n<<"!="<< factorial;
}
EL OPERADOR COMA.
La coma en "C" tiene como funcin encadenar varias expresiones. Esencialmente, la coma
produce una secuencia de operaciones. Cuando se usa en la parte derecha de una sentencia
de asignacin, el valor asignado es el valor de la ltima expresin de la lista separada por
coma.
EJEMPLO:
y =100;
/* y toma el valor de 100*/
x =( y = y-50,100/y);
/* y vale 50 y 100/50 es 2*/
//El resultado final para x es 2.
Se puede pensar en el operador coma, teniendo el mismo significado que la palabra en
espaol normal "haz esto y esto y esto".

Elaborado por: Mximo Obregn R.

Pg. 29/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

VARIACIN DEL CICLO for:


Utilizando el operador coma se puede hacer que el ciclo for tenga dos o mas variables de
control del bucle.
EJEMPLO:Escribe un programa que lea un numero entero n, el programa debe encontrar
cuanto suman los n primeros nmeros pares e impares.
#include <iostream.h>
#include <conio.h>
main ( )
{
int n, par, sum,imp, sump, sumi, numeros;
sum=sump=sumi = 0;
cout<<"Cual es el valor de n";
cin>>n;
for(numeros = 1, par=2, imp=1; numeros<= n; ++numeros, par+= 2, imp+= 2)
{ cout<<"\n\t\t impar "<<imp<<" par "<<par;
sump+=par;
sumi+=imp;
}
cout<<" \n\t S impares=\a"<<sumi<<" S pares=\a"<<sump;
getch();
}
INSTRUCCIN break
Se puede usar para forzar la terminacin inmediata de un bucle, saltando la evaluacin de
la condicin normal del ciclo.
Cuando se encuentra la instruccin break dentro de un bucle finaliza inmediatamente, y la
ejecucin continua con la instrucciones que siguen al ciclo.
INSTRUCCIN continue.
La sentencia continue, fuerza una nueva iteracin del bucle y salta cualquier cdigo que
exista entre medios.
do
{
cout<<"Entre un numero igual a 100";
cin>>x;
if ( x<0) continue;
cout<< x;
} while (x!=100);

El ciclo anterior repite la lectura mientras x sea negativo. Para los bucles while y do-while,
una sentencia continue hace que: el control del programa no ejecute la prueba del
condicional y continue el proceso de iteracin. En el bucle for se ejecuta la parte del
incremento del bucle, seguida de la prueba condicional y finalmente hace que el bucle
continue.
EJEMPLO: Escriba un programa que lea un nmero entero n y determine si n es primo o
no. Recuerde que un nmero es primo si no existen nmeros en el intervalo entre 2 y n/2
que dividan a n.
La variable es se hace 1 al
#include <iostream.h>
empezar el ciclo, y se pone
#include <conio.h>
cero si en algn momento
void main()
algn divisor divide a n.
{
int n, divisor,es;
Solo al finalizar el proceso se
cout<<"Escriba el numero que va analizar?";
cheque si es es uno.
cin>>n;

Elaborado por: Mximo Obregn R.

Pg. 30/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

divisor=2; es=1;
while (divisor<=n/2)
{
if(n % divisor==0)
{
cout<<"\n"<<n<<" no es primo";
es=0;
break;
}
else
divisor+=1;
}
if (es)
cout<<"\n"<<n<<" es primo";
getch();

COMPUTACION I

En C este if es
equivalente a escribir:
if (es==1)

}
La instruccin break hace que el ciclo termine en el momento en que se encuentra algn
divisor de n. Cuando se termina el ciclo la computadora revisar si la variable tiene
almacenado un 1, si eso es verdad el nmero es primo.
EJEMPLO: Escriba un programa que lea un rango de la recta x [a,b] y el numero de
particiones, para evaluar la integral, Longitud y derivada de la funcin sin(x), usando
aproximaciones en cada particin.
/**********************************************************************
* Fecha: mircoles 10 de noviembre del 2005
*
* Elaborado por: Mximo Obregn Ramos
*
* web del grupo:
*
* http://es.groups.yahoo.com/group/curso_computacion1
*
* Ejemplo: Aplicacin de las sentencias de seleccin y control
*
*
en las funciones matemticas, derivadas, integrales, etc.
*
***********************************************************************/
#include <iostream.h>//para cout,cin
#include <math.h> //para funciones matematicas
#include <conio.h> //para el clrscr()
#include <iomanip.h> //para setw()
main()
{
float a,b,s,dx,y,x,xs,ys,dy,yp,L;
int n,i;
clrscr();
cout<<"Ingrese xo=";cin>>a;
cout<<"Ingrese xf=";cin>>b;
cout<<"Ingrese numero de particiones n=";cin>>n;
dx=(b-a)/n;
s=0;i=1;L=0;
cout.setf(ios::showpoint);//forzar decimales
cout.fill('~');//caracter de relleno
cout.precision(3);//numero de decimales+1
cout<<"I(a-x)==> Integral de xo a x"<<endl;
cout<<"L(a-x)==> Longitud de xo a x"<<endl;
cout<<"y'(x)==> Derivada en x"<<endl<<endl;
cout<<" x y(x) I(a-x) L(a-x) y'(x)"<<endl;
cout<<"========================================"<<endl;

Elaborado por: Mximo Obregn R.

Pg. 31/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

while(i<=n)
{x=a+dx*i;
y=sin(x);
xs=a+dx*(i+1);
ys=sin(xs);
dy=ys-y;
L=L+sqrt(dy*dy+dx*dx);
s=s+y*dx;
yp=dy/dx;
cout<<setw(8)<<x<<setw(8)<<y<<setw(8)<<s<<setw(8)<<L<<setw(8)<<yp<<endl;
i=i+1;
if ((i%20)==0)
{cout<<"Presione una tecla para continuar....."<<endl;
getch();
cout<<" x y(x) I(a-x) L(a-x) y'(x)"<<endl;
cout<<"========================================"<<endl;
}
}
getch();
}

EJEMPLO: Escriba un programa que lea varios n nmeros, y muestre el mayor y el


menor.
/**********************************************************************
* Fecha: lunes 23 de abril del 2007
*
* Desarrollado por: Mximo Obregn Ramos
*
* web del grupo:
*
* http://es.groups.yahoo.com/group/curso_computacion1
*
* Ejemplo: Aplicacin de las sentencias de seleccin y control
*
*
Halla el mayor y menor de varios nmeros
*
***********************************************************************/
#include<iostream.h>
#include<conio.h>
void main()
{int dato,menor,mayor,cont=1,n;
cout<<"Ingrese cantidad de nmeros:";cin>>n;
while(cont<=n)
{ cout<<" Ingrese nmero"<<cont<<":";cin>>dato;
if (cont==1)
mayor=menor=dato;
else
{
if(dato<menor) menor=dato;
if(dato>mayor) mayor=dato;
}
cont++;
}
cout<<"El menor es "<<menor<<endl;
cout<<"El mayor es "<<mayor;
getch();
}

Elaborado por: Mximo Obregn R.

Pg. 32/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

FUNCIONES
Declaracin y Definicin.
Las funciones son un conjunto de instrucciones que realizan una tarea especfica. En
general toman unos valores de entrada, llamados parmetros y proporcionan un valor de
salida o valor de retorno; aunque tanto unos como el otro pueden no existir.
Tal vez sorprenda que las introduzca tan pronto, pero como son una herramienta muy
valiosa, y se usan en todos los programas C++, creo que debemos tener, al menos, una
primera nocin de su uso.
Al igual que con las variables, las funciones pueden declararse y definirse.
Una declaracin es simplemente una presentacin, una definicin contiene las
instrucciones con las que realizar su trabajo la funcin.
En general, la definicin de una funcin se compone de las siguientes secciones, aunque
pueden complicarse en ciertos casos:
Opcionalmente, una palabra que especifique el tipo de almacenamiento, puede ser
"extern" o "static". Si no se especifica es "extern". Por ahora mencionamos que las
funciones declaradas como extern estn disponibles para todo el programa, las
funciones static pueden no estarlo.
El tipo del valor de retorno, que puede ser "void", si no necesitamos valor de retorno.
Si no se establece, por defecto ser "int". Aunque en general se considera de mal gusto
omitir el tipo de valor de retorno.
Modificadores opcionales. Tienen un uso muy especfico, de momento no entraremos
en este particular, lo veremos en captulos posteriores.
El nombre de la funcin. Es costumbre, muy til y muy recomendable, poner nombres
que indiquen, lo ms claramente posible, qu es lo que hace la funcin, y que permitan
interpretar qu hace el programa con slo leerlo. Cuando se precisen varias palabras
para conseguir este efecto existen varias reglas aplicables de uso comn. Una consiste
en separar cada palabra con un "_", la otra, que yo prefiero, consiste en escribir la
primera letra de cada palabra en mayscula y el resto en minsculas. Por ejemplo, si
hacemos una funcin que busque el nmero de telfono de una persona en una base de
datos, podramos llamarla "busca_telefono" o "BuscaTelefono".
Una lista de declaraciones de parmetros entre parntesis. Los parmetros de una
funcin son los valores de entrada (y en ocasiones tambin de salida). Para la funcin
se comportan exactamente igual que variables, y de hecho cada parmetro se declara
igual que una variable. Una lista de parmetros es un conjunto de declaraciones de
parmetros separados con comas. Puede tratarse de una lista vaca. En C es preferible
usar la forma "func(void)" para listas de parmetros vacas. En C++ este procedimiento
se considera obsoleto, se usa simplemente "func()"..
Un cuerpo de funcin que representa el cdigo que ser ejecutado cuando se llame a la
funcin. El cuerpo de la funcin se encierra entre llaves "{}" Una funcin muy especial
es la funcin "main". Se trata de la funcin de entrada, y debe existir siempre, ser la
que tome el control cuando se ejecute un programa en C.
Los programas Windows usan la funcin WinMain() como funcin de entrada.
Existen reglas para el uso de los valores de retorno y de los parmetros de la funcin
"main", pero de momento la usaremos como "int main()" o "int main(void)", con un entero
como valor de retorno y sin parmetros de entrada. El valor de retorno indicar si el
programa ha terminado sin novedad ni errores retornando cero, cualquier otro valor de
retorno indicar un cdigo de error.

Elaborado por: Mximo Obregn R.

Pg. 33/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Prototipos de funciones
En C++ es obligatorio usar prototipos. Un prototipo es una declaracin de una funcin.
Consiste en una definicin de la funcin sin cuerpo y terminado con un ";".
La estructura de un prototipo es:

<tipo> func(<lista de declaracin de parmetros>);


Por ejemplo:
int Mayor(int a, int b);
Sirve para indicar al compilador los tipos de retorno y los de los parmetros de una
funcin, de modo que compruebe si son del tipo correcto cada vez que se use esta funcin
dentro del programa, o para hacer las conversiones de tipo cuando sea necesario. Los
nombres de los parmetros son opcionales, y se incluyen como documentacin y ayuda en
la interpretacin y comprensin del programa. El ejemplo de prototipo anterior sera
igualmente vlido y se podra poner como:
int Mayor(int,int);
Esto slo indica que en algn lugar del programa se definir una funcin "Mayor" que
admite dos parmetros de tipo "int" y que devolver un valor de tipo "int". No es necesario
escribir nombres para los parmetros, ya que el prototipo no los usa. En otro lugar del
programa habr una definicin completa de la funcin.
Normalmente, las funciones se declaran como prototipos dentro del programa, o se
incluyen estos prototipos desde un fichero externo, (usando la directiva "#include") ya lo
hemos dicho ms arriba, pero las funciones son "extern" por defecto. Esto quiere decir que
son accesibles desde cualquier punto del programa, aunque se encuentren en otros ficheros
fuente del mismo programa. En contraposicin las funciones declaradas "static" slo son
accesibles dentro del fichero fuente donde se definen.
La definicin de la funcin se hace ms adelante o ms abajo, segn se mire. Lo habitual
es hacerlo despus de la funcin "main".
Estructura de un programa C/C++:
La estructura de un programa en C o C++ quedara as:
[directivas del pre-procesador: includes y defines]
[declaracin de variables globales]
[prototipos de funciones]
funcin main
[desarrollo de funciones]

Una definicin de la funcin "Mayor" podra ser la siguiente:


int Mayor(int a, int b)
{ if(a > b) return a; else return b; }
Los programas complejos se escriben normalmente usando varios ficheros fuente.
Estos ficheros se compilan separadamente y se enlazan juntos. Esto es una gran ventaja
durante el desarrollo y depuracin de grandes programas, ya que las modificaciones en un
fichero fuente slo nos obligarn a compilar ese fichero fuente, y no el resto, con el
consiguiente ahorro de tiempo.
La definicin de las funciones puede hacerse dentro de los ficheros fuente o enlazarse
desde libreras precompiladas. La diferencia entre una declaracin y una definicin es que
la definicin posee un cuerpo de funcin.

Elaborado por: Mximo Obregn R.

Pg. 34/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

En C++ es obligatorio el uso funciones prototipo, y aunque en C no lo es, resulta altamente


recomendable.
Parmetros por valor y por referencia.
Dediquemos algo ms de tiempo a las funciones.
Hasta ahora siempre hemos declarado los parmetros de nuestras funciones del mismo
modo. Sin embargo, ste no es el nico modo que existe para pasar parmetros.
La forma en que hemos declarado y pasado los parmetros de las funciones hasta ahora es
la que normalmente se conoce como "por valor". Esto quiere decir que cuando el control
pasa a la funcin, los valores de los parmetros en la llamada se copian a "variables"
locales de la funcin, estas "variables" son de hecho los propios parmetros.
Lo veremos mucho mejor con un ejemplo:
#include <iostream.h>
int funcion(int n, int m);
int main()
{ int a, b;
a = 10;
b = 20;
cout << "a,b ->" << a << ", " << b << endl;
cout << "funcion(a,b) ->" << funcion(a, b) << endl;
cout << "a,b ->" << a << ", " << b << endl;
cout << "funcion(10,20) ->" << funcion(10, 20) << endl;
return 0;
}
int funcion(int n, int m)
{ n = n + 5; m = m - 5;
return n+m;
}

Bien, qu es lo que pasa en este ejemplo?.


Empezamos haciendo a = 10 y b = 20, despus llamamos a la funcin "funcin" con las
variables a y b como parmetros.
Dentro de "funcin" los parmetros se llaman n y m, y cambiamos sus valores, sin
embargo al retornar a "main", a y b conservan sus valores originales. Por qu?.
La respuesta es que lo que pasamos no son las variables a y b, sino que copiamos sus
valores a las variables n y m.
Piensa en lo que pasa cuando llamamos a la funcin con parmetros constantes, en el
ejemplo, la segunda llamada a "funcin". Los valores de los parmetros no pueden cambiar
al retornar de "funcin", ya que son constantes.
Referencias a variables:
Las referencias sirven para definir "alias" o nombres alternativos para una misma variable.
Para ello se usa el operador de referencia (&).
Sintaxis:
<tipo> &<alias> = <variable de referencia> <tipo> &<alias>

La primera forma es la que se usa para declarar variables de referencia, la asignacin es


obligatoria, no pueden definirse referencias indeterminadas.
La segunda forma es la que se usa para definir parmetros por referencia en funciones.

Elaborado por: Mximo Obregn R.

Pg. 35/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Ejemplo:
int main()
{ int a;
int &r = a;
a = 10;
cout << r << endl;
return 0;
}
En este ejemplo las variables a y r se refieren al mismo objeto, cualquier cambio en una de
ellas se produce en ambas. Para todos los efectos, son la misma variable.
Pasando parmetros por referencia:
Si queremos que los cambios realizados en los parmetros dentro de la funcin se
conserven al retornar de la llamada, deberemos pasarlos por referencia. Esto se hace
declarando los parmetros de la funcin como referencias a variables.
Ejemplo:
#include <iostream.h>
int funcion(int &n, int &m);
int main()
{ int a, b;
a = 10;
b = 20;
cout << "a,b ->" << a << ", " << b << endl;
cout << "funcion(a,b) ->" << funcion(a, b) << endl;
cout << "a,b ->" << a << ", " << b << endl;
/* cout << "funcion(10,20) ->" << funcion(10, 20) << endl; es ilegal pasar constantes
como parmetros cuando estos son referencias */
return 0; }

int funcion(int &n, int &m)


{ n = n + 5;
m = m - 5;
return n+m; }
En este caso, las variables "a" y "b" tendrn valores distintos despus de llamar a la
funcin. Cualquier cambio que realicemos en los parmetros dentro de la funcin, se har
tambin en las variables referenciadas. Esto quiere decir que no podremos llamar a la
funcin con parmetros constantes.
Punteros como parmetros de funciones
Cuando pasamos como parmetro por valor de una funcin un puntero pasa lo mismo que
con las variables. Dentro de la funcin trabajamos con una copia del puntero. Sin embargo,
el objeto apuntado por el puntero s ser el mismo, los cambios que hagamos en los objetos
apuntados por el puntero se conservarn al abandonar la funcin, pero no ser as con los
cambios que hagamos al propio puntero.
Ejemplo:
#include <iostream.h>
void funcion(int *q);
int main()
{ int a;
int *p;

Elaborado por: Mximo Obregn R.

Pg. 36/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

a = 100;
p = &a; // Llamamos a funcin con un puntero funcion(p)
cout << "Variable a: " << a << endl;
cout << "Variable *p: " << *p << endl;
// Llamada a funcin con la direccin de "a" (constante)
funcion(&a);
cout << "Variable a: " << a << endl; cout << "Variable *p: " << *p << endl;
return 0;
}
void funcion(int *q)
{ // Cambiamos el valor de la variable apuntada por
// el puntero
*q += 50;
q++;
}
Con este tipo de parmetro para funcin pasamos el puntero por valor. Y cmo haramos
para pasar un puntero por referencia?:
void funcion(int* &q);
El operador de referencia siempre se pone junto al nombre de la variable.
Parmetros con valores por defecto
Algunas veces nos puede interesar que ciertos parmetros que necesita una funcin no sea
necesario proporcionarlos siempre. Esto suele suceder cuando esos parmetros casi
siempre se usan con un mismo valor. En C++, cuando declaramos una funcin podemos
decidir que algunos sus parmetros sean opcionales. En ese caso tendremos que asignarles
valores por defecto.
Cuando se llama a la funcin incluyendo valores para los parmetros opcionales funcionar
como cualquiera de las funciones que hemos usado hasta ahora, pero si se omiten todos o
algunos de estos parmetros la funcin trabajar con los valores por defecto que hemos
definido.
Por ejemplo:
#include <iostream.h>
void funcion(int a = 1);
int main()
{ funcion(19);
funcion();
}
void funcion(int a)
{ cout << a << endl;
}
La primera llamada a "funcion" dar como salida 19, que es el parmetro que le damos
explcitamente. La segunda llamada dar como salida 1, que es el valor por defecto.
Sin embargo este mtodo tiene algunas limitaciones:
Slo los ltimos argumentos de las funciones pueden tener valores por defecto.
De estos, slo los ltimos argumentos pueden ser omitidos en una llamada.
Si se declaran prototipos de las funciones, los valores por defecto deben
especificarse en ellos.
Por ejemplo:
Elaborado por: Mximo Obregn R.

Pg. 37/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

void funcion1(int a, int b=0, int c= 1);// Legal


void funcion2(int a=1, int b, int c); // Ilegal
Los argumentos por defecto empiezan a asignarse empezando por el ltimo.
int funcion1(int a, int b=0, int c=1); ...
funcion1(12, 10); // Legal, el valor para "c" ser 1
funcion1(12); // Legal, los valores para "b" y "c" sern 0 y 1
funcion1(); // Ilegal, el valor para "a" es obligatorio
Funciones con nmero de argumentos variable
Tambin es posible crear funciones con un nmero indeterminado de argumentos, para ello
la declararemos los argumentos conocidos del modo tradicional, de este tipo debe existir al
menos uno, y los desconocidos se sustituyen por tres puntos (...), del siguiente modo:
int funcion2(int a, float b, ...);
Los parmetros se pasan usando la pila, (esto es siempre as con todos los parmetros, pero
normalmente no tendremos que prestar atencin a este hecho). Adems es el programador
el responsable de decidir el tipo de cada argumento, lo cual limita bastante el uso de esta
forma de pasar parmetros.
Para hacer ms fcil la vida de los programadores, se incluyen algunas macros en el fichero
de cabecera "stdarg.h", estas macros permiten manejar "fcilmente" las listas de
argumentos desconocidos.
Tipos: En el fichero de cabecera "stdarg.h" de define un tipo: va_list Ser necesario
declarar una variable de este tipo para tener acceso a la lista de parmetros.
Macros: Tambin se definen tres macros: va_start, va_arg y va_end.
void va_start(va_list ap, ultimo);
Ajusta el valor de "ap" para que apunte al primer parmetro de la lista. <ultimo> es el
identificador del ltimo parmetro fijo antes de comenzar la lista.
tipo va_arg(va_list ap, tipo);
Devuelve el siguiente valor de la lista de parmetros, "ap" debe ser la misma variable que
se actualiz previamente con "va_start", "tipo" es el tipo del parmetro que se tomar de la
lista.
void va_end(va_list va);
Permite a la funcin retornar normalmente, restaurando el estado de la pila, esto es
necesario porque algunas de las macros anteriores pueden modificarla, haciendo que el
programa termine anormalmente.
Uso de las macros para leer la lista de parmetros:
<tipo>funcion(<tipo> <id1> [, <tipo> <id2>...], ...)
{
va_list ar; // Declarar una variable para manejar la lista
// <idn> debe ser el nombre del ltimo parmetro antes de ...
va_start(ar, <idn>);
<tipo> <arg>; // <arg> es una variable para recoger un parmetro
// <tipo> debe ser el mismo que es de <arg>
while((<arg> = va_arg(ar, <tipo>)) != 0) {
// Manejar <arg>
}
va_end(ar); // Normalizar la pila
}

Hay que usar un sistema que permita determinar cul es el ltimo valor de la lista de
parmetros.
Una forma es que el ltimo valor de la lista de parmetros en la llamada a la funcin sea un
0, (o ms en general, un valor conocido).
Tambin puede hacerse que uno de los parmetros conocidos sea la cuenta de los
parmetros desconocidos.
Elaborado por: Mximo Obregn R.

Pg. 38/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Adems es necesario que el programador conozca el tipo de cada parmetro, para as poder
leerlos adecuadamente, lo normal es que todos los parmetros sean del mismo tipo, o que
se use un mecanismo como la de "printf", donde analizando el primer parmetro se pueden
deducir el tipo de todos los dems. Este ltimo sistema tambin sirve para saber el nmero
de parmetros.
Ejemplos:
#include <iostream.h>
#include <stdarg.h>
void funcion(int a, ...);
int main() {
funcion(1, "cadena 1", 0);
funcion(1, "cadena 1", "cadena 2", "cadena 3", 0);
funcion(1, 0);
return 0;
}
void funcion(int a, ...) {
va_list p;
va_start(p, a);
char *arg;
while ((arg = va_arg(p, char*))) {
cout << arg << " ";
}
va_end(p);
cout << endl;
}

Otro Ejemplo, este usando un sistema anlogo al de "printf":


#include <iostream.h>
#include <string.h>
#include <stdarg.h>
void funcion(char *formato, ...);
int main()
{
funcion("ciic", "Hola", 12, 34, "Adios");
funcion("ccci", "Uno", "Dos", "Tres", 4);
funcion("i", 1);
return 0;
}
void funcion(char *formato, ...)
{
va_list p;
char *szarg;
int iarg;
int i;
va_start(p, formato);
/* analizamos la cadena de formato para saber el nmero y tipo de
los parmetros*/
for(i = 0; i < strlen(formato); i++)
{
switch(formato[i])
{
case 'c': /* Cadena de caracteres */
szarg = va_arg(p, char*);
cout << szarg << " ";
break;
case 'i': /* Entero */
iarg = va_arg(p, int);
cout << iarg << " ";
break;
}
}
va_end(p);
cout << endl;
}

Argumentos de main.

Elaborado por: Mximo Obregn R.

Pg. 39/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Muy a menudo necesitamos especificar valores u opciones a nuestros programas cuando


los ejecutamos desde la lnea de comandos.
Por ejemplo, si hacemos un programa que copie ficheros, del tipo del "copy" de MSDOS,
necesitaremos especificar el nombre del archivo de origen y el de destino.
Hasta ahora siempre hemos usado la funcin "main" sin parmetros, sin embargo, como
veremos ahora, se pueden pasar argumentos a nuestros programas a travs de los
parmetros de la funcin main.
Para tener acceso a los argumentos de la lnea de comandos hay que declararlos en la
funcin "main", la manera de hacerlo puede ser una de las siguientes:
int main(int argc, char *argv[]);
int main(int argc, char **argv);
Que como sabemos son equivalentes.
El primer parmetro, "argc", es el nmero de argumentos que se han especificado en la
lnea de comandos. El segundo, "argv", es un array de cadenas que contiene los
argumentos especificados en la lnea de comandos.
Por ejemplo, si nuestro programa se llama "programa", y lo ejecutamos con la siguiente
lnea de comandos: programa arg1 arg2 arg3 arg4 argc valdr 5, ya que el nombre del
programa tambin se cuenta como un argumento.
argv[] contendr la siguiente lista: "C:\programasc\programa", "arg1", "arg2", "arg3" y
"arg4".
Ejemplo:
#include <iostream.h>
int main(int argc, char **argv)
{
for(int i = 0; i < argc; i++)
cout << argv[i] << " ";
cout << endl;
}

Funciones inline
Cuando escribimos el nombre de una funcin dentro de un programa decimos que
"llamamos" a esa funcin. Esto quiere decir que lo que hace el programa es "saltar" a la
funcin, ejecutarla y retornar al punto en que fue llamada.
Esto es cierto para las funciones que hemos usado hasta ahora, pero hay un tipo especial de
funciones que trabajan de otro modo. En lugar de existir una sola copia de la funcin
dentro del cdigo, cuando se declara una funcin como "inline" lo que se hace es insertar
su cdigo en el lugar en que se realiza la llamada, en lugar de invocar a la funcin.
Sintaxis:
inline <tipo> <nombre_de_funcion>([<tipo> <identificador>[,<tipo> <identificador>,...]);

Esto tiene la ventaja de que la ejecucin es ms rpida, pero por contra, el programa
generado es ms grande. Se debe evitar el uso de funciones "inline", sobre todo cuando
stas son de gran tamao, aunque con funciones pequeas puede resultar prctico. Su uso
es frecuente cuando las funciones tienen cdigo en ensamblador, ya que en estos casos la
optimizacin es mucho mayor.
En algunos casos, si la funcin es demasiado larga, el compilador puede decidir no insertar
la funcin, sino simplemente llamarla. El uso de "inline" no es por lo tanto una obligacin
para el compilador, sino simplemente una recomendacin.
Aparentemente, una funcin "inline" se comportar como cualquier otra funcin.
Nota: "inline" es exclusivo de C++, y no est disponible en C.
Ejemplo:
#include <iostream.h>
inline int mayor(int a, int b)

Elaborado por: Mximo Obregn R.

Pg. 40/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

{
if(a > b) return a;
else return b;
}
int main()
{
cout << "El mayor de 12,32 es " << mayor(12,32) << endl;
cout << "El mayor de 6,21 es " << mayor(6,21) << endl;
cout << "El mayor de 14,34 es " << mayor(14,34) << endl;
return 0;
}

Sobrecarga
Anteriormente hemos visto operadores que tienen varios usos, como por ejemplo *, &, <<
o >>. Esto es lo que se conoce en C++ como sobrecarga de operadores. Con las funciones
existe un mecanismo anlogo, de hecho, en C++, los operadores no son sino un tipo
especial de funciones, aunque eso s, algo peculiares.
As que en C++ podemos definir varias funciones con el mismo nombre, con la nica
condicin de que el nmero y/o el tipo de los parmetros sean distintos. El compilador
decide cual de las versiones de la funcin usar despus de analizar el nmero y el tipo de
los parmetros. Si ninguna de las funciones se adapta a los parmetros indicados, se
aplicarn las reglas implcitas de conversin de tipos.
Las ventajas son ms evidentes cuando debemos hacer las mismas operaciones con objetos
de diferentes tipos o con distinto nmero de objetos. Hasta ahora habamos usado macros
para esto, pero no siempre es posible usarlas, y adems las macros tienen la desventaja de
que se expanden siempre, y son difciles de disear para funciones complejas. Sin embargo
las funciones sern ejecutadas mediante llamadas, y por lo tanto slo habr una copia de
cada una.
Nota: Esta propiedad slo existe en C++, no en C.
Ejemplo:
#include <iostream.h>
int mayor(int a, int b);
char mayor(char a, char b);
double mayor(double a, double b);
int main()
{
cout << mayor('a', 'f') << endl;
cout << mayor(15, 35) << endl;
cout << mayor(10.254, 12.452) << endl;
return 0;
}
int mayor(int a, int b)
{
if(a > b) return a; else return b;
}
char mayor(char a, char b)
{
if(a > b) return a; else return b;
}
double mayor(double a, double b)
{
if(a > b) return a; else return b;
}

Otro ejemplo:
#include <iostream.h>
int mayor(int a, int b);
int mayor(int a, int b, int c);
int mayor(int a, int b, int c, int d);
int main()
{
cout << mayor(10, 4) << endl;
cout << mayor(15, 35, 23) << endl;

Elaborado por: Mximo Obregn R.

Pg. 41/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

cout << mayor(10, 12, 12, 18) << endl;


return 0;
}
int mayor(int a, int b)
{
if(a > b) return a; else return b;
}
int mayor(int a, int b, int c)
{
return mayor(mayor(a, b), c);
}
int mayor(int a, int b, int c, int d)
{
return mayor(mayor(a, b), mayor(c, d));
}

El primer ejemplo ilustra el uso de sobrecarga de funciones para operar con objetos de
distinto tipo. El segundo muestra cmo se puede sobrecargar una funcin para operar con
distinto nmero de objetos. Por supuesto, el segundo ejemplo se puede resolver tambin
con parmetros por defecto.
Ejercicio: Implementar este segundo ejemplo usando parmetros por defecto. Para que sea
ms fcil, hacerlo slo para parmetros con valores positivos, y si te sientes valiente, hazlo
tambin para cualquier tipo de valor.
Recursividad
Se dice que una funcin es recursiva cuando se define en funcin de si misma. No todas la
funciones pueden llamarse a si mismas, deben estar diseadas especialmente para que sean
recursivas, de otro modo podran conducir a bucles infinitos, o a que el programa termine
inadecuadamente.
C++ permite la recursividad. Cuando se llama a una funcin, se crea un nuevo juego de
variables locales, de este modo, si la funcin hace una llamada a si misma, se guardan sus
variables y parmetros en la pila, y la nueva instancia de la funcin trabajar con su propia
copia de las variables locales, cuando esta segunda instancia de la funcin retorna,
recupera las variables y los parmetros de la pila y continua la ejecucin en el punto en que
haba sido llamada.
Por ejemplo: Funcin recursiva para calcular el factorial de un nmero entero. El factorial
se simboliza como n!, se lee como "n factorial", y la definicin es:
n! = n * (n-1) * (n-2) * ... * 1
No se puede calcular el factorial de nmeros negativos, y el factorial de cero es 1, de modo
que una funcin bien hecha para clculo de factoriales debera incluir un control para esos
casos:
/* Funcin recursiva para clculo de factoriales */
int factorial(int n)
{
if(n < 0) return 0;
else if(n > 1) return n*factorial(n-1); /* Recursividad */
return 1; /* Condicin de terminacin, n == 1 */
}

Veamos paso a paso, lo que pasa cuando se ejecuta esta funcin, por ejemplo: factorial(4):
1 Instancia
n=4
n>1
salida <- 4 * factorial(3) (Guarda el valor de n = 4)
2 Instancia
n>1
salida <- 3*factorial(2) (Guarda el valor de n = 3)

Elaborado por: Mximo Obregn R.

Pg. 42/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

3 Instancia
n>1
salida <- 2*factorial(1) (Guarda el valor de n = 2)
4 Instancia
n == 1 -> retorna 1
3 Instancia
(recupera n=2 de la pila) retorna 1*2=2
2 instancia
(recupera n=3 de la pila) retorna 2*3=6
1 instancia
(recupera n=4 de la pila) retorna 6*4=24
Valor de retorno -> 24
La funcin factorial es un buen ejemplo para demostrar cmo se hace una funcin
recursiva, sin embargo la recursividad no es un buen modo de resolver esta funcin, que
sera ms sencilla y rpida con un bucle "for". La recursividad consume muchos recursos
de memoria y tiempo de ejecucin, y se debe aplicar a funciones que realmente le saquen
partido.

Elaborado por: Mximo Obregn R.

Pg. 43/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

ARREGLOS
Son variables en memoria que pueden almacenar ms de un dato del mismo tipo. Estas
variables tienen una caracterstica y es que nos referimos a los elementos, almacenados en
los vectores o matrices, utilizando un nombre y nmeros enteros que indican la posicin de
la celda en el vector o la matriz.
En C++ podemos tener vectores que almacenen datos de tipo: carcter, enteros, reales,
punteros y estructuras.
Propiedades:
1. Los datos individuales se llaman elementos.
2. Todos los elementos tienen que pertenecer al mismo tipo de dato.
3. Todos los datos son almacenados en celdas contiguas en la memoria de la computadora,
y el subndice del primer dato es el cero.
4. El nombre del array es una Cte. que representa la direccin en memoria que ocupa el
primer elemento del vector.
DECLARACIN DE UN VECTOR O ARREGLO UNIDIMENSIONAL
Para declarar un vector siga la siguiente estructura:
tipo_de_dato nombre[ tamao ]

Donde el tamao es un nmero entero que indica cuantas posiciones tiene el vector.
Ejemplo:
nombre
float nombre[4];
0
1
2
3
int

datos[3];

Observe en la declaracin anterior el nmero entero n entre corchetes indica cuantas


posiciones tiene el vector en memoria.
Las celdas en memoria se numeran desde 0 hasta n-1.
El vector nombre puede almacenar nmeros de tipo float, el vector datos puede almacenar
3 nmeros enteros.
INICIALIZACIN DE ARREGLOS:
C permite darle valores a las celdas de un vector de la siguiente manera:
1. Por omisin, cuando son creados. El estndar ANSI de C especifica que siempre que
declaremos un vector (arreglo), este se inicializa con ceros.
2. Explcitamente, al declarar el vector suministrando datos iniciales constantes.
3. Durante la ejecucin del programa.
En los siguientes renglones les vamos a mostrar como realizar dichas acciones.
Sintaxis:
tipo nombre_del_arreglo[tamao]={ lista de valores }
Inicializacin Explcita:
Significa que en el momento de declarar el vector, se especifican los valores as:
int
numero[3]={1,2,3};
numero
1 2 3
float
horas[ 4 ]={1.2,13.89,23.5,45.8};
horas
1.2
13.89
23.5 45.8
0
1
2
3
Elaborado por: Mximo Obregn R.

Pg. 44/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Inicializacin en tiempo de ejecucin: Significa que la computadora ejecuta un ciclo


while o for y con la instruccin cin el programa almacena los valores en las variables.
Ejemplos:
El siguiente ciclo muestra como se pueden almacenar datos en un vector de n posiciones,
usando la instruccin cin:
for (i=0;i<n;++i)
{
Note el ciclo va
gotoxy(10,15);
desde i=0 hasta n-1
cout<<"Entre a["<<i<<"]=";
cin>>a[i];
}
EJEMPLO:
Escribir un programa que lea un nmero entero n y la computadora lea y almacene n
componentes reales en dos vectores a y b. Luego debe calcular el producto escalar entre a y
b y escribir el resultado.
#include<iostream.h>
#include<conio.h>
void main()
{
double a[20],b[20];
double
prodescalar;
int
i,n;
do{
//Este do while no permite que se usen mas de 20 celdas
gotoxy(10,12);clreol;gotoxy(10,10);
cout<<"Cuantas celdas tienen los vectores";
cin>>n;
if (n>20){
gotoxy(10,12);
cout<<"El vector no puede declararse con mas de 20";
}
}while (n>20);

for (i=0;i<n;++i)
{
gotoxy(10,15);
cout<<"Entre a["<<i<<"]=";
cin>>a[i];
gotoxy(10,16);
cout<<"Entre b["<<i<<"]=";
cin>>b[i];
}
prodescalar=0;
for (i=0;i<n;++i)
{
prodescalar+=b[i]*a[i];
};
for (i=0;i<n;++i)
{
cout<<"\t"<<a[i];
}
cout<<"\n";
for (i=0;i<n;++i)

Elaborado por: Mximo Obregn R.

Aqui se calcula el
producto escalar
Aqui se escribe el
Vector a

Pg. 45/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

{
cout<<"\t"<<b[i];
}
cout<<"\n\t Termine presione cualquier tecla, El producto escalar="<<prodescalar;
getch();
}
ARREGLOS BIDIMENSIONALES:
El lenguaje C y C++ permite declarar arreglos de forma matricial. Para declararlos siga la
siguiente sintaxis:
tipo_de_dato nombre_arreglo[numero_filas][numero_col];
EJEMPLO
float
a[3][3];
a
0
1
2
0 34 45 3
1 35 67 45
2 12 34 56
Donde la matriz a tiene 3 filas y tres columnas en la memoria de la computadora.
INICIALIZACIN DE ARREGLOS MATRICIAL:
C permite darle valores a las celdas de una matriz de la siguiente manera:
1. Por omisin, cuando son creados. El estndar ANSI de C especifica que siempre que
declaremos una matriz, esta se inicializa con ceros.
2. Explcitamente, al declarar la matriz suministrando datos iniciales constantes.
3. Durante la ejecucin del programa.
Sintaxis:
tipo nombre_del_arreglo[tamao][tamao2]={ lista de valores }

Inicializacin Explcita:
Significa que en el momento de declarar la matriz, se especifican los valores as:
int
numero[3][3]={
{1,2,3},
{4,15,6}
{7,8,19} };
numero
1 2 3
4 15 6
7 8 19
Inicializacin en tiempo de ejecucin:
Significa que la computadora ejecuta un ciclo while o for y con la instruccin scanf o cin el
programa almacena los valores en las variables.
Ejemplos:
El siguiente ciclo muestra como se pueden almacenar datos en una matriz de m filas y n
columnas, usando la instruccin cin:
for(i=0;i<n;++i)
for(j=0;j<m;++j)
{
gotoxy(10,13);
cout<<"Escriba a["<<i<<","<<j<<"]";
cin>>a[i][j];
}
Elaborado por: Mximo Obregn R.

Pg. 46/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

El ciclo anidado anterior entra los datos a una matriz, por filas.
Ejemplo: El siguiente ciclo muestra como se pueden almacenar datos en una matriz de m
filas y n columnas, usando la instruccin cin:
for(j=0; j<m ;++i)
for(i=0;i<n;++j)
{
gotoxy(10,13);
cout<<"Escriba a["<<i<<","<<j<<"]";
cin>>a[i][j];
}
El ciclo anidado anterior entra los datos a una matriz, por columnas.
ESCRIBIR UNA MATRIZ:
Para escribir en la pantalla la computador los datos de una matriz que se encuentra
en la memoria, siga las siguientes instrucciones:

for(i=0;i<m;++i)
{
for(j=0;j<r;++j)
{
cout<<"\t"<<a[i][j];}
cout<<"\n";
}
cout<<"\n";

Para cada i, se escriben


todos los elementos de la
fila, pues j varia.
Cada que se termina de
recorrer todos los j hay
que cambiar de fila.

EJEMPLO:
Escriba un programa que lea dos nmeros enteros m y n, la computadora entonces
permite entrar m*n elementos a una matriz A y a una matriz B, luego de ello obtiene una
matriz C, que es la suma de A y B.
#include<iostream.h>
#include<conio.h>
void main()
{
int i,j,m,n;
float a[10][10],b[10][10],c[10][10];
clrscr();
gotoxy(10,10);
cout<<"Cuantas filas tienen las matrices?"; cin>>n;
gotoxy(10,12);
cout<<"Cuantas columnas tienen las matrices?";cin>>m;
for(i=0;i<n;++i)
for(j=0;j<m;++j)
{
gotoxy(10,13);
cout<<"Escriba a["<<i<<","<<j<<"]";
cin>>a[i][j];
gotoxy(10,14);
cout<<"Escriba b["<<i<<","<<j<<"]";
cin>>b[i][j];
}
/* Proceso de la suma de las matrices */
for(i=0;i<n;++i)
for(j=0;j<m;j++)
c[i][j]=a[i][j]+b[i][j];

Elaborado por: Mximo Obregn R.

Pg. 47/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

for (i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cout<<"\t"<<c[i][j];}
cout<<"\n";
}
getch();
}/* Fin del Programa */
EJEMPLO:
Escriba un programa que lea tres nmeros enteros m, r y n, la computadora
entonces permite entrar m*r elementos a una matriz A y r*n elementos a una matriz B,
luego de ello obtiene una matriz C, que es la multiplicacin entre A y B.

cij =

ik

k =1

Con:

* Bk j

i = 1L m

j = 1... n
Para desarrollar dicho producto se realiza el siguiente ciclo anidado:
for(i=0;i<m;++i)
Se garantiza que cada
{
for(j=0;j<n;++j)
celda C[i][j]=0 al iniciar
{
c[ i ][ j ]=0;
el clculo de los
for(k=0;k<r;++k)
a[i][k]*b[k][j]
c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ];
}
}
El siguiente es el cdigo del programa que encuentra el producto de las dos matrices.
#include<iostream.h>
#include<conio.h>
void main(void)
{
int i,j,m,n,r,k;
float a[10][10],b[10][10],c[10][10];
clrscr(); gotoxy(10,10);
cout<<"Cuantas filas tiene la matriz A?"; cin>>m;
gotoxy(10,12); cout<<"Cuantas columnas tiene la matriz A?";
cin>>r; gotoxy(10,14);
cout<<"Cu ntas columnas tiene la matriz B?"; cin>>n;
for(i=0;i<m;++i)
{
for(j=0;j<r;++j)
{
gotoxy(10,16); clreol();
cout<<"Escriba el A["<<i<<","<<j<<"]"; cin>>a[i][j];
}
}
for(i=0;i<r;++i)
{
for(j=0;j<n;++j)
{
gotoxy(10,18); clreol();
cout<<"Escriba B["<<i<<","<<j<<"]"; cin>>b[i][j];
}
}
for(i=0;i<m;++i)
{
for(j=0;j<n;++j)
{
c[i][j]=0;

Elaborado por: Mximo Obregn R.

Pg. 48/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

for(k=0;k<r;++k)
c[i][j]+=a[i][k]*b[k][j];
}
}
for(i=0;i<m;++i)
{
for(j=0;j<r;++j)
{
cout<<"\t"<<a[i][j];}
cout<<"\n";
}
cout<<"\n";
for(i=0;i<r;++i)
{
for(j=0;j<n;++j)
{
cout<<"\t"<<b[i][j];}
cout<<"\n";
}
cout<<"\n";
for(i=0;i<m;++i)
{
for(j=0;j<n;++j)
cout<<"\t"<<c[i][j];
cout<<"\n";
}
cout<<"\n";
getch();
}
Ejemplo:
Escriba un programa en lenguaje C que lea los nmeros enteros m y n, luego
permite entrar m*n elementos en una matriz A.
Luego la computadora encuentra un vector B que almacena el mximo elemento de
cada columna de la matriz.
La estrategia consiste en suponer inicialmente que el mximo de cada columna es el
primer elemento de la columna es decir el a[0][ j ]:
for(j=0;j<n;++j)
Para cada columna (para cada j),
{
m=a[0][j];
suponemos que el mximo es el primer
for(i=0;i<n;++i)
elemento de ella
{
if(m<a[i][j])
{
m=a[i][j];
Comparamos cada elemento a[i][j] de la
}
columna j con todos el mximo (m)
}
b[j]=m;
Almacenamos el mximo de
}
cada columna j, en la celda j
del vector
#include<conio.h>
#include<iostream.h>
void main(void)
{
float a[10][10],b[10];
int m,n,j,i;
clrscr();
cout<<"\t\nEscriba la dimensin de la matriz";

Elaborado por: Mximo Obregn R.

Pg. 49/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

cin>>n;
for(j=0;j<n;++j)
b[j]=0;
for(i=0;i<n;++i)
for(j=0;j<n;++j)
{
cout<<"\n\nEscriba el A["<<i<<","<<j<<"]";
cin>>a[i][j];
}
for(j=0;j<n;++j)
{
m=a[0][j];
for(i=0;i<n;++i)
{
if(m<a[i][j])
{
m=a[i][j];
}
}
b[j]=m;
}
for(j=0;j<n;++j)
cout<<"\t"<<b[j];
getch();
}

CADENAS
Para almacenar en la memoria de un computador, una cadena de caracteres, es necesario en
el lenguaje C, declarar un arreglo (vector) de caracteres.
Cuando la computadora almacena una cadena de caracteres, guarda despus del ltimo
carcter, el carcter nulo; que se especifica \0. Por est razn para declarar arrays de
caracteres es necesario que el nmero de posiciones que se declaren sea de uno ms que la
cadena ms larga que pueda contener.
Esto significa que, si se desea almacenar una frase como: Nacional es campen
necesitamos declarar un vector as:
char frase [20];
En memoria la variable frase almacena el dato as:
N a c i o n a l
e s
c a m p e n '\0'
Las variables de tipo char se pueden inicializar de la siguiente manera:
En el momento de declararlos:
char nombre de array [tamao] = "cadena";
char nombre del array[tamao] = {lista de caracteres }
Ejemplo:
char agua_estado3[8]="Liquido";
de esta manera se aade automticamente el caracter nulo al final de la cadena.
Ejemplo:
char frase [20] = "Nacional es campen";

Cuando se enumeran los elementos se debe


declarar el elemento de fin de cadena.

char frase [20] = { 'N','a','c','i','o','n','a','l',' ' ,'e','s',' ','c','a','m','p','e','','n','\0' };


Despus de la Declaracin de la variable:
Por medio de una asignacin de cada uno de los caracteres:
Elaborado por: Mximo Obregn R.

Pg. 50/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Si declaramos los siguientes vectores de caracteres:


char
agua_estado1[4];
char
agua_estado2[7];
Podemos inicializar la variable agua_estado1[4] as:
agua_estado1[0] = 'g';
agua_estado1[1]= 'a';
agua_estado1[2]= 's';
agua_estado1[3]= '\0';
Por medio de una instruccin de Lectura:
Se puede utilizar la funcin cin, pero no podr digitar espacios en blanco pues la
instruccin cin no los lee.
Para poder entrar datos que contenga espacios en blanco utilice la funcin
cin.get(nombre_vector,longitud);
Donde nombre_vector es la variable donde se va almacenar lo que se digita,
lngitud es un nmero entero que indica cuantos elementos se van almacenar.
FUNCIONES PARA EL MANEJO DE CADENAS.
Funcin strcpy() pertenece a <string.h> copia la cadena apuntada por s2 en la apuntada
por s1.
sintaxis:
char *strcpy (char *s1, const char *s2);
Ejemplo:
Suponga que se declara una variable as:
char frase[ 5];
Variable en memoria

frase
Despus de la ejecucin de strcpy(frase,"Mio");
La variable en memoria es:
M i o '\0'
En el lenguaje C est prohibido cosas como:
frase="Mio";
Funcin strcat() : pertenece a <string.h> Une la cadena apuntada por s2 en la apuntada
por s1.
sintaxis:
char *strcat ( char *s1, const char *s2);
jemplo:
Suponga que declara las siguientes dos variables:
char frase[25]="La casa", frase2[10]=" es mia";
Despus de ejecutar la instruccin strcat(frase,frase2); en la memoria dla
computadora la variable frase se puede ver as:
frase
L a
C a S a
e s
M i a \0
Funcin strlen(): Devuelve la longitud de una cadena.
sintaxis:
int strlen ( const char *s1);
Funcin strcmp ( const char *s1, const char *s2)
Compara s1 y s2. Devuelve cero si las dos cadenas son iguales, mayor que cero si la
cadena apuntada por s1 es mayor que s2 y menor que cero si la cadena apuntada por s1 es
menor que la apuntada por s2.
Elaborado por: Mximo Obregn R.

Pg. 51/52

UNIVERSIDAD NACIONAL DE INGENIERIA-FIM

COMPUTACION I

Ejercicio: Escriba un programa que lea una palabras. Luego el programa debe invertir la
palabra as obtenida e imprimir la palabra que se obtiene al revs.
Ejemplo:
Si la palabra es logroes debe imprimir: seorgol.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
void main(void)
{
char frase[50],inversa[50];
double longitud,i;
clrscr();
cout<<"\t\nEscriba la palabra que desea invertir ";
cin.get(frase,49);
longitud=strlen(frase);
for(i=0;i<strlen(frase);++i)
{
longitud=longitud-1;
inversa[i]=frase[longitud];
}
inversa[strlen(frase)]='\0';
cout<<"\n\n\tLa inversa de "<<frase<<" es "<<inversa;
cout<<"\t\n\nTermin";
getch();
}
Ejercicio: Escriba un programa que lea dos cadenas de caracteres y determine cual cadena
es mayor que la otra, el programa debe imprimir la longitud de la cadena mayor.
Ejercicio: Escriba este programa y analice que hace, use para ello la ejecucin paso a
paso, y observe el estado de las variables, mientras ejecuta el programa.
# include <stdio.h>
# include <conio.h>
# define tamlinea 100
void main ()
{
char c, lnea [tamlinea];
int i;
printf ( \n hola ! Como te llamas ? );
for ( i=0; ( c= getchar()) != \n; ++i)
lnea [i] = c ;
lnea [i] = \0 ;
printf ( \n gusto en conocerte );
for ( i=0; lnea [i] != \0 ; ++i)
putchar ( lnea [i]);
printf ( \n Sabes que tu nombre deletreado al revs es );
while ( i!=0)
putchar ( lnea [--i] );
printf ( \n\n Que tengas muchas felicidades ! \n\n\a );
getch ();
}

Elaborado por: Mximo Obregn R.

Pg. 52/52

You might also like