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
Pg. 1/52
COMPUTACION I
Estructuras
Algortmicas
Secuenciales
Asignacin
Entrada
Salida
Condicionales
Simples
Mltiples
Anidadas
Cclicas
Para
Mientras que
Repita Hasta
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:
Pg. 2/52
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
Decisin
Conector
Conector
Flechas
Pg. 3/52
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
mayor<n2?
F
mayor n3
mayor<n3?
F
Mostrar mayor
Fin
Elaborado por: Mximo Obregn R.
Pg. 4/52
COMPUTACION I
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
Pg. 5/52
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
Pg. 6/52
COMPUTACION I
Imp=Salario*0.15
Fin
Calcular
Neto=Salario+Imp
Escribir
Nombre, Imp, Sneto
Fin
Pg. 7/52
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)
LISP
ALGOL
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)
APL
Programming
Language
A
1961
(Lenguaje de programacin A)
PL/1
Complejo
lenguaje
de
programacin.
Compilado, estructurado y capaz de manejar
errores y multitarea, usado en entornos
acadmicos y de desarrollo.
BASIC
Popular lenguaje
frecuentemente
principiantes.
PASCAL
ADA
Augusta
ADA
Lovelace)
JAVA
Lenguaje
de
programacin
orientado a objetos desarrollado 1995
por la empresa Sun Microsystems
Byron
1964
(Lady
1979
Pg. 8/52
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)
Pg. 9/52
PHP(95)
COMPUTACION I
Pg. 10/52
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.
Pg. 11/52
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.
Pg. 12/52
COMPUTACION I
*/
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
COMPUTACION I
Pg. 14/52
COMPUTACION I
Pg. 15/52
COMPUTACION I
EJEMPLO:
#include<iostream.h>
#include<conio.h>
Pg. 16/52
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
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();
Pg. 18/52
COMPUTACION I
EXPRESIN
EQUIVALENTE
a+=2 ;
b+=i+5 ;
z/=10 ;
j%=(j-2)
Pg. 19/52
COMPUTACION I
SIGNIFICADO
Y
O
No
Pg. 20/52
COMPUTACION I
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
(E.L.)
Sentencias 2
Si
Expresin lgica
Accin A
Sentencias 1
No
Accin B
Pg. 21/52
COMPUTACION I
A*X
+B*X +C = 0
Pg. 22/52
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>
Pg. 23/52
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;
Pg. 24/52
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:
(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();
}
Pg. 25/52
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;
Pg. 26/52
COMPUTACION I
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.
Pg. 27/52
COMPUTACION I
Pg. 28/52
COMPUTACION I
Sentencias
Inicializacin
Condicin
Pg. 29/52
COMPUTACION I
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;
Pg. 30/52
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;
Pg. 31/52
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();
}
Pg. 32/52
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.
Pg. 33/52
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:
Pg. 34/52
COMPUTACION I
Pg. 35/52
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; }
Pg. 36/52
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
COMPUTACION I
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
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;
}
Argumentos de main.
Pg. 39/52
COMPUTACION I
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)
Pg. 40/52
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;
Pg. 41/52
COMPUTACION I
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)
Pg. 42/52
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.
Pg. 43/52
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];
Pg. 44/52
COMPUTACION I
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)
Aqui se calcula el
producto escalar
Aqui se escribe el
Vector a
Pg. 45/52
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
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";
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];
Pg. 47/52
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;
Pg. 48/52
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";
Pg. 49/52
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";
Pg. 50/52
COMPUTACION I
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
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 ();
}
Pg. 52/52