domingo, 25 de noviembre de 2007

INTRODUCCION A LOS ALGORITMOS

Este trabajo consiste en dar a conocer un reporte generalde lo que vino a ser el curso de algoritmos en la especialidad de ingenieria de sistemas. Se especifica todos los temas tratados hasta la sesion 10.

El desarrollo de algoritmos es un tema fundamental en el diseño de programas o soluciones. Por lo cual, el alumno debe tener buenas bases que le sirvan para poder crear de manera fácil y rápida sus programas.

La siguiente documentación pueden servir de apoyo a tutores o profesores, en su labor cotidiana de enseñanza y al estudiante, facilitarle el desarrollo de su capacidad analítica y creadora, para de esta manera mejorar su destreza en la elaboración de algoritmos que sirven como base para la codificación de los diferentes programas que tendrá que desarrollar a lo largo de su carrera.

Contenido

Los posteriores artículos mostrarán el desarrollo del tema de algoritmo a manera de curso. Existen una serie de documentación adicional para refuerzo conceptual, dado parte importante en el proceso del tema en cuestión.
La Esencia de la Lógica de Programación (Omar Iván Trejos Buriticá)
Curso Aprende a Programar

¿QUÉ ES ALGORITMO?

La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX.

Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solución a un problema específico.

¿TIPOS DE ALGORITMOS…?

Existen dos tipos y son llamados así por su naturaleza:


Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras.
Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso.

Lenguajes Algorítmicos

Un Lenguaje algorítmico es una serie de símbolos y reglas que se utilizan para describir de manera explícita un proceso.

Tipos de Lenguajes Algorítmicos


Gráficos: Es la representación gráfica de las operaciones que realiza un algoritmo (diagrama de flujo).





No Gráficos: Representa en forma descriptiva las operaciones que debe realizar un algoritmo (pseudocodigo).

INICIO
Edad: Entero
ESCRIBA “cual es tu edad?”
Lea Edad
SI Edad >=18 entonces
ESCRIBA “Eres mayor de Edad”
FINSI
ESCRIBA “fin del algoritmo”
FIN

DESARROLLO DEL CURSO: SESION 1

ALGORITMOS
Profesor: Ing José A Espinal
CONCEPTOS PREVIOS IMPORTANTES
LENGUAJE
Conjunto de símbolos que sirven para transmitir un mensaje.


LA COMUNICACIÓN
Proceso que requiere una serie de reglas para transmitir el mensaje y existen 4 elementos importantes: Emisor, Receptor, Medio de comunicación y mensaje.

Es una maquina electrónica digital capaz de procesar datos a partir de un grupo de instrucciones denominado


Es un conjunto de símbolos utilizados para expresar: un valor numérico,

Es la transformación de los elementos procesados.

Los datos de entrada se convierten en información significativa.

Una computadora necesita:


Dirige y controla el proceso de información realizado por la computadora.
En el se encuentra:
La Unidad Aritmética Lógica (ALU)
La Unidad de Control

Estos dispositivos permiten al usuario comunicarse con la computadora. Algunos dispositivos típicos de E/S son el teclado, la impresora, monitor, etc.

La información procesada por la UCP se almacena normalmente en la memoria central

Usados para almacenar grandes cantidades de información.
Lenguaje de Programación
Es un conjunto de símbolos, caracteres y reglas (programas) que permiten a las personas comunicarse con la computadora.

CLASES DE LENGUAJE DE PROGRAMACION
1. LENGUAJE DE MAQUINA
2. LENGUAJE DE BAJO NIVEL (ENSAMBLADOR)
3. LENGUAJE DE ALTO NIVEL
(APLICATIVOS)
Clasificación
1.- Lenguajes de Máquina
Instrucciones que son entendidas directamente por el computador.


HISTORIA DE LOS ALGORITMOS
La palabra algoritmo proviene del nombre del matemático llamado Muhammad ibn Musa al-Jwarizmi que vivió entre los siglos VIII y IX. Su trabajo consistió en preservar y difundir el conocimiento de la antigua Grecia y de la India. Sus libros eran de fácil comprensión, de ahí que su principal logro no fuera el de crear nuevos teoremas o corrientes de pensamiento, sino el de simplificar la matemática a punto tal que pudieran ser comprendidas y aplicadas por un mayor número de personas. También estudió la manera de reducir las operaciones que formaban el cálculo. Es por esto que aun no siendo el creador del primer algoritmo, el concepto lleva aunque no su nombre, sí su pseudónimo.
DEFINICIÓN DE ALGORITMO

Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solución a un problema específico.

Un algoritmo puede definir una secuencia finita de instrucciones cada una de las cuales tiene un significado claro y puede ser efectuada con una cantidad finita de esfuerzo en una longitud de tiempo también finito.

Estructura Básica de un Algoritmo:
inicio
datos de entrada (operaciones básicas)
procesamiento de los datos
datos de salida
fin

DISEÑO DE LENGUAJES ALGORITMICOS
Grafica: Diagramas de Flujo, N-S
Narrativa: Pseudo Código
Código: Programa
DIAGRAMA DE FLUJO
Un Diagrama de flujo es la representación detallada en forma gráfica de un algoritmo
SIMBOLOGIA PARA DIAGRAMAS DE FLUJO (ISO: INTERNATIONAL ORGANIZATION FOR STANDARDIZATION-ANSI:AMERICAN NATIONAL STANDARS INSTITUTE)



PSEUDOCÓDIGO
Es la representación narrativa de los pasos que debe seguir un algoritmo para dar solución a un problema determinado. El pseudocódigo utiliza palabras que indican el proceso a realizar.
VENTAJAS DE USAR PSEUDOCÓGIGOS
Ocupa menos espacio en una hoja de papel.
Permite representar en forma fácil operaciones repetitivas complejas.
Es muy fácil pasar de pseudo código a un programa en algún lenguaje de programación.
Si se siguen las reglas se puede observar claramente los niveles que tiene cada operación.

SESION 2

ALGORITMOS Sesión Nº 2
Profesor: Ing José A Espinal

Las Computadoras nacieron para resolver problemas numéricos en cálculos científicos y matemáticos. Sin embargo, el paso de los años ha cambiado las aplicaciones y hoy día las computadoras no sólo se utilizan en cálculos numéricos, sino para procesar todo tipo de datos en la organización.
HISTORIA DEL COMPUTADOR


EVOLUCION DE LOS MICROPROCESADORES
HISTORIA DE LOS LENGUAJES DE PROGRAMACION

COBOL (1960)
FORTRAN IV (1961)
BASIC (1964)
LOGO (1967)
PASCAL (1971)
C (1972) - PLATAFORMA DE UNIX,SOLARIS
ADA (1979)
C++ (1980)  PLATAFORMA DE LINUX, MacOS
JAVA (1995)
C# (2000) - presentado por MICROSOFT
ESTRUCTURA DE UN SISTEMA DE COMPUTO
UN SISTEMA DE COMPUTO ES UN CONJUNTO DE ELEMENTOS FISICOS Y ELECTRONICOS (HARDWARE), LOS CUALES FUNCIONAN ORDENADAMENTE BAJO EL CONTROL DE PROGRAMAS (SOFTWARE); AMBOS COMPONENTES SE COMPORTAN COMO UN TODO ES POSIBLE ESTABLECER CONTACTO CON ELLOS GRACIAS AL USUARIO O PERSONA QUE MANEJA EL SISTEMA.
ELEMENTOS DE UN SISTEMA DE COMPUTO
ESTRUCTURA DEL C.P.U
ELEMENTOS BASICOS DE UN PROGRAMA
LOS ELEMENTOS BASICOS CONSTITUTIVOS DE UN PROGRAMA O ALGORITMO SON:
PALABRAS RESERVADAS (INICIO,FIN, SI-ENTONCES,…ETC.)
IDENTIFICADORES (NOMBRES DE VARIABLES, PROCEDIMIENTOS, FUNCIONES,..ETC)
CARACTERES ESPECIALES (COMA, APOSTROFO,ETC)
CONSTANTES
VARIABLES
EXPRESIONES
INSTRUCCIONES
OTROS ELEMENTOS DEL PROGRAMA
BUCLES
CONTADORES
ACUMULADORES
INTERRUPTORES
ESTRUCTURAS
1. SECUENCIALES
2. SELECTIVAS
3. REPETITIVAS
ETAPAS EN LA CONSTRUCCION DE UN PROGRAMA
DEFINICION DE COMPILADOR
UN COMPILADOR ES UN PROGRAMA QUE TRADUCE UN PROGRAMA EN LENGUAJE DE ALTO NIVEL, TAL COMO C / C++ /JAVA , ETC EN UN PROGRAMA DE UN LENGUAJE MAS SENCILLO QUE LA COMPUTADORA PUEDE COMPRENDER.
PARTES DEL COMPILADOR
ESCANER
Conocido también como analizador léxico, es el componente que clasifica cada instrucción y los somete a un diccionario nos dice si hay expresiones escritas incorrectamente.

PARSER
TAMBIÉN CONOCIDO COMO ANALIZADOR SINTÁCTICO, ES EL COMPONENTE QUE VERIFICA EL ORDEN ADECUADO DE LAS INSTRUCCIONES DE UN PROGRAMA, NOS AVISA SI HAY ALGUNA INCOHERENCIA EN LA SECUENCIA DE LAS INSTRUCCIONES.

SINTETIZADOR
ES EL MODULO QUE GENERA EL CODIGO BINARIO (0011101001) QUE SERA EJECUTADO POR EL ORDENADOR O COMPUTADORA

PROGRAMA OBJETO (.OBJ)
ES EL PROGRAMA TRADUCIDO POR EL COMPILADOR INTERPRETE (NECESITA DEL PROGRAMA DE ALTO NIVEL) A LENGUAJE DE BAJO NIVEL.

TIPO DE DATOS
DATOS NUMERICOS
ENTEROS (SU CONTENIDO SERA UN NUMERO ENTERO)
315 1024 -200 1450 -1537
REALES (SU CONTENIDO SERA UN NUMERO REAL)
9.8 1.41 3.14 156.4 -13.5

DATOS ALFANUMERICOS
CARÁCTER (SU CONTENIDO SERA UN CARÁCTER ALFANUMERICO)
‘A’ ‘C’ ‘&’ ‘%’ ‘9’

CADENA (SU CONTENIDO SERA UN CONJUNTO DE CARACTERES)
“PQR” “&&&” “LIMA” “VALLEJO” “PERU”
Operadores Aritméticos
Son aquéllos que permiten la realización de cálculos aritméticos. Utilizan operándos numéricos y proporcionan resultados numéricos.

Operadores div y mod
El símbolo / se utiliza para la división real, y el operador div representa la división entera.
Operadores Relacionales
Permiten realizar comparaciones de valores de tipo numérico o carácter. Estos operadores sirven para expresar las condiciones en los algoritmos. Proporcionan resultados lógicos.
Operadores Lógicos
Son aquéllos que permiten la combinación de condiciones para formar una sola expresión lógica.
Proporcionan resultados lógicos.

Constantes y variables



Es aquélla en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. La estructura secuencial tiene una entrada y una salida. Su representación gráfica es la siguiente:

Pseudocodigo de una Estructura Secuencial
Inicio
:
:
acciones
:
:
fin
Ejemplo:
Calcular el salario de un trabajador, conociendo el número de horas trabajadas, el precio de la hora de trabajo y considerando unos descuentos fijos al sueldo por concepto de impuestos del 20%.


LENGUAJE C

C es un lenguaje de programación de propósito general que ofrece economía sintáctica, control de flujo y estructuras sencillas y un buen conjunto de operadores. Es un lenguaje potente, con un campo de aplicación ilimitado y sobre todo, se aprende rápidamente. Este lenguaje ha sido estrechamente ligado al sistema operativo UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje no está ligado a ningún sistema operativo ni a ninguna máquina concreta. Se le suele llamar lenguaje de programación de sistemas debido a su utilidad para escribir compiladores y sistemas operativos, aunque de igual forma se pueden desarrollar cualquier tipo de aplicación.
La base del C proviene del BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en 1970 para el primer sistema UNIX. Estos son lenguajes sin tipos, al contrario que el C que proporciona varios tipos de datos. El primer compilador de C fue escrito por Dennis Ritchie.

1.- CARACTERISTICAS DEL LENGUAJE C
El lenguaje C se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan del código fuente para funcionar (Por ejem: Basic). Los compilados convierten el código fuente en un fichero objeto y éste en un ejecutable. Este es el caso del lenguaje C.
Podemos decir que el lenguaje C es un lenguaje de nivel medio, ya que combina elementos de lenguaje de alto nivel con la funcionalidad del lenguaje ensamblador. Es un lenguaje estructurado, ya que permite crear procedimientos en bloques dentro de otros procedimientos. Hay que destacar que el C es un lenguaje portable, ya que permite utilizar el mismo código en diferentes equipos y sistemas informáticos: el lenguaje es independiente de la arquitectura de cualquier máquina en particular.

2.- ESTRUCTURA DE UN PROGRAMA EN C

2.1.- Estructura
Todo programa en C consta de una o más funciones, una de las cuales se llama main. Todo programa en C debe contener al menos la función main(), desde la cual es posible llamar a otras funciones.
Cada función se designa con una cabecera, compuesta por el nombre de la misma y la lista de argumentos (si los hubiese), la declaración de las variables a utilizar y la secuencia de sentencias a ejecutar.
Ejemplo:

directivas
constantes
declaraciones de funciones
declaraciones de variables globales
main( )
{
declaración de variables locales
cuerpo de la función principal
}
funcion_1( )
{
declaración de variables locales
cuerpo de la función_1
}

2.2.- Comentarios
A la hora de programar es conveniente añadir comentarios para poder saber que es lo que hace cada parte del código. Los comentarios facilitan el trabajo a otros programadores que puedan utilizar nuestro archivo fuente.
Para poner comentarios en un programa escrito en C usamos los símbolos /* y */ o el símbolo //. Los comentarios no son tomados en cuenta por el compilador.
/* Este es un comentario */ o // Este es un comentario
/* Un comentario también puedeestar escrito en varias líneas */ o // Un comentario también puede// estar escrito en varias líneas


2.3.- Identificadores
representan los objetos de un programa (variables, constantes y funciones). Está formado por una secuencia de letras y dígitos, aunque también acepta el caracter de subrayado ( _ ). Así mismo, no acepta los acentos ni la ñ/Ñ.
El primer caracter de un identificador no puede ser un número, es decir que debe ser una letra o el símbolo de subrayado( _ ).
El C diferencia un identificador escrito en mayúscula con otro en minúscula. así num, Num y nuM son distintos identificadores.
Ejemplos:

Válidos No válidos
_num 1num
var1 número2
fecha_nac año_nac


2.4.- Palabras clave
Existen una serie de indicadores reservados, con una finalidad determinada, que no podemos utilizar como identificadores.
A continuación vemos algunas de estas palabras clave:

char int float double if
else do while for switch
short long extern static default
continue break register sizeof typedef


3.- TIPOS DE DATOS
3.1.- Tipos
Básicamente existe cuatro tipos de datos, de los cuales se puede definir otros tipos de datos

TIPO Tamaño Rango de valores
char 1 byte -128 a 127
int 2 bytes -32768 a 32767
float 4 bytes 3'4 E-38 a 3'4 E+38
double 8 bytes 1'7 E-308 a 1'7 E+308

3.2.- Calificadores de tipo
Los calificadores de tipo tienen la misión de modificar el rango de valores de un determinado tipo de variable. Estos calificadores son cuatro:
· Signed: Le indica a la variable que va a llevar signo.
tamaño rango de valores
signed char 1 byte -128 a 127
signed int 2 bytes -32768 a 32767

· Unsigned: Le indica a la variable que no va a llevar signo (valor absoluto).
tamaño rango de valores
unsigned char 1 byte 0 a 255
unsigned int 2 bytes 0 a 65535

· Short: Rango de valores en formato corto (limitado).
tamaño rango de valores
short char 1 byte -128 a 127
short int 2 bytes -32768 a 32767

· Long: Rango de valores en formato largo (ampliado).
tamaño rango de valores
long int 4 bytes -2.147.483.648 a 2.147.483.647
long double 10 bytes -3'36 E-4932 a 1'18 E+4932

3.3.- Las variables
Son objetos de un programa cuyo contenido podrá ser modificado a lo largo del programa. Una variable sólo puede pertenecer a un tipo de dato. Para poder utilizar una variable, primero tiene que ser declarada:



Es posible inicializar y declarar más de una variable del mismo tipo en la misma sentencia:

,,,

Ejemplo:

float val;
int num1, num2, num3;


3.4.- Constantes
Al contrario que las variables, las constantes mantienen su valor a lo largo de todo el programa. Para indicar al compilador que se trata de una constante, usaremos la directiva #define:

#define

Observa que no se indica el punto y coma de final de sentencia ni tampoco el tipo de dato.

#define pi 3.1416
#define max 580

3.6.- Secuencias de escape
Ciertos caracteres no representados gráficamente se pueden representar mediante lo que se conoce como secuencia de escape. A continuación vemos una tabla de las más significativas:

\n salto de línea
\b retroceso
\t tabulación horizontal
\v tabulación vertical
\\ contrabarra
\f salto de página
\' apóstrofe
\" comillas dobles
\0 fin de una cadena de caracteres

NOTA: el comando endl, también realiza salto de línea

3.7.- Inclusión de ficheros
En la programación en C es posible utilizar funciones que no estén incluidas en el propio programa. Para ello utilizamos la directiva #include, que nos permite añadir librerías o funciones que se encuentran en otros ficheros a nuestro programa.
#include
#include


4.- OPERADORES ARITMETICOS Y DE ASIGNACION
Permiten realizar operaciones matemáticas en lenguaje C.
4.1.- Operadores aritméticos
Existen dos tipos de operadores aritméticos:
Los binarios:
+ Suma
- Resta
* Multiplicación
/ División
% Módulo (resto)
y los unarios:
++ Incremento (suma 1)
-- Decremento (resta 1)
- Cambio de signo
Su sintaxis es:
binarios:

unarios:


4.2.- Operadores de asignación
La mayoría de los operadores aritméticos binarios tienen su correspondiente operador de asignación:
= Asignación simple
+= Suma
-= Resta
*= Multiplicación
/= División
%= Módulo (resto)

Con estos operadores se pueden escribir, de forma más breve, expresiones del tipo:
n=n+3 se puede escribir n+=3
k=k*(x-2) lo podemos sustituir por k*=x-2

4.3.- Jerarquía de los operadores
Es importante tener en cuenta la precedencia de los operadores a la hora de trabajar con ellos:
( ) Mayor precedencia
++, --
*, /, %
+, - Menor precendencia

5.- OPERADORES RELACIONALES
Utilizados para comparar el contenido de dos variables. En C existen seis operadores relacionales básicos:
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
== Igual que
!= Distinto que

El resultado que devuelven estos operadores es 1 para Verdadero y 0 para Falso. Si hay más de un operador se evalúan de izquierda a derecha. Además los operadores == y != están por debajo del resto en cuanto al orden de precedencia.

6.- OPERADORES LOGICOS
Los operadores lógicos básicos son tres:
&& AND
|| OR
! NOT (El valor contrario)

Estos operadores actúan sobre expresiones lógicas. Permiten unir expresiones lógicas simples formando otras más complejas.

Operandos And Or
VVFF VFVF VFFF VVVF

V = Verdadero F = Falso

7.- FUNCIONES DE SALIDA - cout
C++ no tiene operaciones de entrada/salida como parte del lenguaje en sí, sino que define la librería iostream.h para añadir estas funciones. La salida por pantalla se hace a través de cout, por ejemplo "Hello, mundo":

#include
main()
{
cout << "Hello, mundo";
}

El operador <<, llamado operador de inserción, le dice al sistema que imprima la variable que le sigue, pero deja que el sistema decida cómo imprimir los datos. No le hemos indicado el tipo de la variable que queremos imprimir, es el sistema el que determina el tipo de la variable, y lo imprime adecuadamente. Tampoco hemos formateado la salida. De nuevo es el sistema el que determina el número de cifras, el de espacios en blanco ...
Se pueden utilizar los caracteres de escape de C. Por ejemplo, en el programa anterior podemos añadir un retorno de carro:

#include
main()
{
cout << "Hello\n";
cout << "mundo";
}

cout saca por pantalla cualquier tipo de dato estándar que existe en C++, bien sea un carácter, un número o movimientos especiales del cursor, como \n en el ejemplo anterior.

8. – FUNCIONES DE ENTRADA - cin
cin es el comando complementario de cout. Lee lo que se introduce desde el teclado, y en este sentido es también una caja negra, pues no sabemos cómo lo hace. La sintaxis es similar a la de cout:

#include
main()
{
int numero;
cout << "Introduce un número:";
cin >> numero;
}
El operador >>, llamado operador de extracción, es obviamente el opuesto de <<: toma los datos de cin y los asigna a la variable, en nuestro ejemplo numero. Ya que numero es un entero, cin convertirá la entrada en un entero, si es posible; si la entrada es "hola", por ejemplo, no debemos esperar que sea convertido a un entero.

9.- ESTRUCTURA DE CONTROL SECUENCIAL
Llamadas así porque cuando se ejecutan sus ordenes y tareas, estas se realizan en secuencia: una tras otra, no dependiendo de ninguna condición que haga variar su secuencia.


10.- ESTRUCTURA DE CONTROL SELECTIVO
Este tipo de sentencias permiten variar el flujo del programa en base a unas determinadas condiciones. Existen varias estructuras diferentes:

10.1.- Estructura IF...ELSE
Sintaxis:
if (condición es verdad)
acción1;
else
acción2;

Si se cumple la condición ejecutará la sentencia1, sinó ejecutará la sentencia2. En cualquier caso, el programa continuará a partir de la sentencia2.

Otro formato:
if (condición1 es verdad)
acción1;
else if (condición2 es verdad)
acción2;
else if (condición3 es verdad)
acción3;
else
acción4;

Con este formato el flujo del programa únicamente entra en una de las condiciones. Si una de ellas se cumple, se ejecuta la sentencia correspondiente y salta hasta el final de la estructura para continuar con el programa. Existe la posibilidad de utilizar llaves para ejecutar más de una sentencia dentro de la misma condición.

10.2.- Estructura SWITCH
Esta estructura se suele utilizar en los menús, de manera que según la opción seleccionada se ejecuten una serie de sentencias. Su sintaxis es:


switch (variable)
{
case variable1: acción1; break;
case variable2: acción2; break;
.
.
.
case variableN: acciónN; break;
default: acciónX;
}

Cada case puede incluir una o más sentencias sin necesidad de ir entre llaves, ya que se ejecutan todas hasta que se encuentra la sentencia BREAK. La variable evaluada sólo puede ser de tipo entero o caracter. default ejecutará las sentencias que incluya, en caso de que la opción escogida no exista.

10.2.1.- Sentencia BREAK
Esta sentencia se utiliza para terminar la ejecución de un bucle o salir de una sentencia SWITCH.

11.- ESTRUCTURA DE CONTROL REPETITIVO
Los bucles son estructuras que permiten ejecutar partes del código de forma repetida mientras se cumpla una condición. Esta condición puede ser simple o compuesta de otras condiciones unidas por operadores lógicos.

11.1.- Sentencia WHILE
Su sintaxis es:
while (condición sea verdad)
{
sentencias;
}

Con esta sentencia se controla la condición antes de entrar en el bucle. Si ésta no se cumple, el programa no entrará en el bucle. Naturalmente, si en el interior del bucle hay más de una sentencia, éstas deberán ir entre llaves para que se ejecuten como un bloque.

11.2.- Sentencia DO...WHILE
Su sintaxis es:
do
{
sentencias;
}
while (condición sea verdad);

Con esta sentencia se controla la condición al final del bucle. Si ésta se cumple, el programa vuelve a ejecutar las sentencias del bucle. La única diferencia entre las sentencias while y do...while es que con la segunda el cuerpo del bucle se ejecutará por lo menos una vez.

11.3.- Sentencia FOR
Su sintaxis es:
for (inicialización; condición; incremento)
{
sentencias;
}

La inicialización indica una variable (variable de control) que condiciona la repetición del bucle. Si hay más, van separadas por comas:
for (a=1,b=100;a!=b;a++,b- -){

El flujo del bucle FOR transcurre de la siguiente forma:


inicialización condición si se cumple, ejecuta el bucle incremento

Si no se cumple, sale del bucle y continúa el programa

FUNCIONES MAS USADAS

FUNCIONES DE ENTRADA/SALIDA

· #include
cout cout<< “cadena de caracteres”<cin cin>> variables;
· #include
printf printf (“formato”, lista de datos);
scanf scanf (“formato”, lista de direcciones de variables);
puts puts(“cadena”);
gets gets(cadena);
· #include
getch a = getch();
putch putch(caracter);

FUNCIONES DEL SISTEMA #include

System(“CLS”)
System(“PAUSE”);
return 0;

FUNCIONES MATEMATICAS #include

· TRIGONOMETRICAS
acos(x) devuelve el arco del coseno de x
asin(x) devuelve el arco del seno de x
atan(x) devuelve el arco tangente de x
cos(x) devuelve el coseno de x en radianes
sin(x) devuelve el seno de x en radianes
tan(x) devuelve la tangente de x en radianes
cosh(x) devuelve el coseno hiperbólico de x
sinh(x) devuelve el seno hiperbólico de x
tanh(x) devuelve la tangente hiperbólica de x
hypot(x,y) devuelve la longitud de la hipotenusa de un triángulo donde
x e y son los catetos
· ALGEBRAICAS
exp(n) devuelve e (2,7182818) elevado a la n.
pow(b,n) devuelve b elevado a la n
log(n) devuelve el logaritmo natural de x
logio(x) devuelve el algoritmo decimal de x
sqrt(x) devuelve la raíz cuadrada de x
ceil(x) devuelve el menor entero de los enteros mayores a x
floor(x) devuelve el mayor entero de los enteros menores a x
abs(x) devuelve el valor absoluto de x
labs(x) igual al anterior pero x está dado en entero longint
fabs(x) igual al anterior pero x está dado en double
modf(n&x) devuelve la parte fraccionaria de n y la parte entera la
guarda en x.
rand( ) devuelve un entero en el rango comprendido entre 0 y 32767
(stdio.h)
srand(exp) produce la generación aleatoria del número.
randomize( ) utiliza el reloj del computador para generar el número
aleatorio (time.h, stdlib.h)
random(n) devuelve un número entero aleatorio dentro del rango de 0 a
n-1. (stdlib.h)

FUNCIONES NUMERICAS #include

setw(n) determina un ancho n del dato numérico
setprecision(n) determina n cantidad de decimales


FUNCIONES DE CADENA #include

· PARA COPIAR
strcat(c1,c2) concatena y copia c2 en c1
strncat(c1,c2) concatena y copia los n primeros caracteres de c2 en c1.
strcpy(c1,c2) copia el contenido de c2 en c1.
strncpy(c1,c2,n) copia el contenido de los n primeros caracteres de c2 en
c1.
strdup(c1, c2) proporciona un duplicado de c2.

· PARA BUSCAR CARACTERES EN UNA CADENA
strchr(c,ch) devuelve los caracteres de la cadena desde donde
encontró por primera vez el carácter ch.
strrchr(c,ch) devuelve los caracteres de la cadena desde donde
encontró por última vez el carácter ch.
strpbrk(c1,c2) devuelve los caracteres de c1 desde donde encontró el
primer carácter de c2.
strspn(c1,c2) devuelve el número de caracteres comunes de c1 y c2.
strcspn(c1,c2) devuelve el número de caracteres que están en c1 y no en
c2 hasta el primer carácter común.
strstr(c1,c2) devuelve los caracteres desde donde encontró c2 en caso
que no sea una subcadena devuelve el puntero nulo.

· PARA COMPARAR
strcmp(c1,c2) devuelve un número luego de efectuar la comparación
entre c1 y c2.
strncmp(c1,c2,n) igual al anterior pero hace la comparación de los n
primeros caracteres. (0 si son iguales, >0 si c1>c2, >0
si c1>c2)

· OTRAS
strlen(c) devuelve la longitud sin contar el delimitador nulo.
strlwr(c) devuelve la cadena en minúscula excepto la ñ.
strupr(c) devuelve la cadena en mayúscula excepto la ñ.
strnset(c,ch,n) coloca ch en los primeros n caracteres de c.
strrev(c) invierte la cadena, el único carácter que respeta es el
delimitador nulo.
memset(d,c,n) fija los primeros n caracteres de la cadena d con el
carácter c.

FUNCIONES DE CARACTER #include

tolower(ch) devuelve el carácter en minúscula o el mismo si no es
carácter.
toupper(ch) devuelve el carácter en mayúscula o el mismo si no es
carácter.

FUNCIONES PARA CONVERSION DE DATOS #include

atof(c) convierte la cadena c a una cantidad en doble precisión.
atoi(c) convierte la cadena c en un entero.
atol(c) convierte la cadena c en un entero largo.

SESION 3

ALGORITMOS Sesión Nº 3
Profesor: Ing José A Espinal

EVOLUCION DE LOS LENGUAJES DE PROGRAMACION

COBOL (1960)
FORTRAN IV (1961)
BASIC (1964)
LOGO (1967)
PASCAL (1971)
C (1972) - PLATAFORMA DE UNIX,SOLARIS
ADA (1979)
C++ (1980)  PLATAFORMA DE LINUX, MacOS
JAVA (1995)
C# (2000) - presentado por MICROSOFT

ALGORITMO DE DIJKSTRA

SENTENCIAS DE PROGRAMACION
SELECTIVA
IF (SI)
ELSE (SINO)
SWITH (SEGÚN SEA)
REPETITIVA
FOR (DESDE)
WHILE (MIENTRAS)
DO WHILE (HACER MIENTRAS)
BIFURCACION
BREAK (ROMPER)
RETURN (VOLVER)
ESTRUCTURA DE DATOS
Son los datos relacionados entre si que interactúan con los algoritmos de programación.
TIPOS DE ESTRUCTURA DE DATOS
FIJOS :
SE DEFINEN PRIMERO Y NO VARIAN LA CAPACIDAD DE MEMORIA
ENTERO, REAL, CARÁCTER, CADENA
DINAMICO:
LINEALES: PILAS, COLAS, LISTAS ENLAZADAS
NO LINEALES: ARBOLES Y GRAFOS
LENGUAJE C
C es un lenguaje de programación de propósito general que ofrece economía sintáctica, control de flujo y estructuras sencillas y un buen conjunto de operadores. Es un lenguaje potente, con un campo de aplicación ilimitado y sobre todo, se aprende rápidamente. Este lenguaje ha sido estrechamente ligado al sistema operativo UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje no está ligado a ningún sistema operativo ni a ninguna máquina concreta. Se le suele llamar lenguaje de programación de sistemas debido a su utilidad para escribir compiladores y sistemas operativos, aunque de igual forma se pueden desarrollar cualquier tipo de aplicación.
La base del C proviene del BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en 1970 para el primer sistema UNIX. Estos son lenguajes sin tipos, al contrario que el C que proporciona varios tipos de datos. El primer compilador de C fue escrito por Dennis Ritchie.
CARACTERISTICAS DEL LENGUAJE C
El lenguaje C se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan del código fuente para funcionar (Por ejem: Basic). Los compilados convierten el código fuente en un fichero objeto y éste en un ejecutable. Este es el caso del lenguaje C.
Podemos decir que el lenguaje C es un lenguaje de nivel medio, ya que combina elementos de lenguaje de alto nivel con la funcionalidad del lenguaje ensamblador. Es un lenguaje estructurado, ya que permite crear procedimientos en bloques dentro de otros procedimientos. Hay que destacar que el C es un lenguaje portable, ya que permite utilizar el mismo código en diferentes equipos y sistemas informáticos: el lenguaje es independiente de la arquitectura de cualquier máquina en particular.

ESTRUCTURA DE UN PROGRAMA EN C
Todo programa en C consta de una o más funciones, una de las cuales se llama main. Todo programa en C debe contener al menos la función main(), desde la cual es posible llamar a otras funciones.
Cada función se designa con una cabecera, compuesta por el nombre de la misma y la lista de argumentos (si los hubiese), la declaración de las variables a utilizar y la secuencia de sentencias a ejecutar.
Ejemplo:
directivas
constantes
declaraciones de funciones
declaraciones de variables globales
main( )
{
declaración de variables locales
cuerpo de la función principal
}
funcion_1( )
{
declaración de variables locales
cuerpo de la función_1
}
Comentarios
A la hora de programar es conveniente añadir comentarios para poder saber que es lo que hace cada parte del código. Los comentarios facilitan el trabajo a otros programadores que puedan utilizar nuestro archivo fuente.
Para poner comentarios en un programa escrito en C usamos los símbolos /* y */ o el símbolo //. Los comentarios no son tomados en cuenta por el compilador.
Ejemplo:
/* Un comentario también puede
estar escrito en varias líneas */
O
// Un comentario también puede
// estar escrito en varias líneas
TIPOS DE DATOS
Tipos
Básicamente existe cuatro tipos de datos, de los cuales se puede definir otros tipos de datos
TIPO Tamaño Rango de valores
char 1 byte -128 a 127
int 2 bytes -32768 a 32767
float 4 bytes 3'4 E-38 a 3'4 E+38
double 8 bytes 1'7 E-308 a 1'7 E+308
Calificadores de tipo
Los calificadores de tipo tienen la misión de modificar el rango de valores de un determinado tipo de variable. Estos calificadores son cuatro:
Signed: Le indica a la variable que va a llevar signo.
tamaño rango de valores
signed char 1 byte -128 a 127
signed int 2 bytes -32768 a 32767
Unsigned: Le indica a la variable que no va a llevar signo (valor absoluto).
tamaño rango de valores
unsigned char 1 byte 0 a 255
unsigned int 2 bytes 0 a 65535
Short: Rango de valores en formato corto (limitado).
tamaño rango de valores
short char 1 byte -128 a 127
short int 2 bytes -32768 a 32767
Long: Rango de valores en formato largo (ampliado).
tamaño rango de valores
long int 4 bytes -2.147.483.648 a 2.147.483.647
long double 10 bytes -3'36 E-4932 a 1'18 E+4932
Archivos de Cabecera
En la programación en C es posible utilizar funciones que no estén incluidas en el propio programa. Para ello utilizamos la directiva #include, que nos permite añadir librerías o funciones que se encuentran en otros ficheros a nuestro programa.
#include
#include
#include
#include
#include


FUNCIONES DE ENTRADA/SALIDA
#include
cout cout<< “cadena de caracteres”<cin cin>> variables;
#include
printf printf (“formato”, lista de datos);
scanf scanf (“formato”, lista de direcciones de variables);
puts puts(“cadena”);
gets gets(cadena);
#include
getch a = getch();
putch putch(caracter);
FUNCIONES DEL SISTEMA
#include
System(“CLS”)
System(“PAUSE”);
return 0;

FUNCIONES MATEMATICAS #include
TRIGONOMETRICAS
acos(x) devuelve el arco del coseno de x
asin(x) devuelve el arco del seno de x
atan(x) devuelve el arco tangente de x
cos(x) devuelve el coseno de x en radianes
sin(x) devuelve el seno de x en radianes
tan(x) devuelve la tangente de x en radianes
cosh(x) devuelve el coseno hiperbólico de x
sinh(x) devuelve el seno hiperbólico de x
tanh(x) devuelve la tangente hiperbólica de x
hypot(x,y) devuelve la longitud de la hipotenusa de un triángulo donde x e y son los catetos
ALGEBRAICAS
exp(n) devuelve e (2,7182818) elevado a la n.
pow(b,n) devuelve b elevado a la n
log(n) devuelve el logaritmo natural de x
logio(x) devuelve el algoritmo decimal de x
sqrt(x) devuelve la raíz cuadrada de x
ceil(x) devuelve el menor entero de los enteros mayores a x
floor(x) devuelve el mayor entero de los enteros menores a x
abs(x) devuelve el valor absoluto de x
labs(x) igual al anterior pero x está dado en entero longint
fabs(x) igual al anterior pero x está dado en double
modf(n&x) devuelve la parte fraccionaria de n y la parte entera la guarda en x.
rand( ) devuelve un entero en el rango comprendido entre 0 y 32767
srand(exp) produce la generación aleatoria del número.
randomize( ) utiliza el reloj del computador para generar el número aleatorio (time.h, stdlib.h)
random(n) devuelve un número entero aleatorio dentro del rango de 0 an-1. (stdlib.h)

FUNCIONES NUMERICAS  #include
setw(n) determina un ancho n del dato numérico
setprecision(n) determina n cantidad de decimales

FUNCIONES DE CADENA #include
PARA COPIAR
strcat(c1,c2) concatena y copia c2 en c1
strncat(c1,c2) concatena y copia los n primeros caracteres de c2 en c1.
strcpy(c1,c2) copia el contenido de c2 en c1.
strncpy(c1,c2,n) copia el contenido de los n primeros caracteres de c2 en c1.
strdup(c1, c2) proporciona un duplicado de c2.

PARA BUSCAR CARACTERES EN UNA CADENA
strchr(c,ch) devuelve los caracteres de la cadena desde donde encontró por primera vez el carácter ch.
strrchr(c,ch) devuelve los caracteres de la cadena desde donde encontró por última vez el carácter ch.
strpbrk(c1,c2) devuelve los caracteres de c1 desde donde encontró el primer carácter de c2.
strspn(c1,c2) devuelve el número de caracteres comunes de c1 y c2.
strcspn(c1,c2) devuelve el número de caracteres que están en c1 y no en c2 hasta el primer carácter común.
strstr(c1,c2) devuelve los caracteres desde donde encontró c2 en caso que no sea una subcadena devuelve el puntero nulo.
PARA COMPARAR
strcmp(c1,c2) devuelve un número luego de efectuar la comparación entre c1 y c2.
strncmp(c1,c2,n) igual al anterior pero hace la comparación de los n primeros caracteres. (0 si son iguales, >0 si c1>c2, >0 si c1>c2)

OTRAS
strlen(c) devuelve la longitud sin contar el delimitador nulo.
strlwr(c) devuelve la cadena en minúscula excepto la ñ.
strupr(c) devuelve la cadena en mayúscula excepto la ñ.
strnset(c,ch,n) coloca ch en los primeros n caracteres de c.
strrev(c) invierte la cadena, el único carácter que respeta es el delimitador nulo.
memset(d,c,n) fija los primeros n caracteres de la cadena d con el carácter c.
FUNCIONES DE CARACTER  #include
tolower(ch) devuelve el carácter en minúscula o el mismo si no es carácter.
toupper(ch) devuelve el carácter en mayúscula o el mismo si no es carácter.
FUNCIONES PARA CONVERSION DE DATOS  #include
atof(c) convierte la cadena c a una cantidad en doble precisión.
atoi(c) convierte la cadena c en un entero.
atol(c) convierte la cadena c en un entero largo.
OPERADORES ARITMETICOS Y DE ASIGNACION
Permiten realizar operaciones matemáticas en lenguaje C.
Operadores aritméticos
Existen dos tipos de operadores aritméticos:
Los binarios:
+ Suma
- Resta
* Multiplicación
/ División
% Módulo (resto)
y los unarios:
++ Incremento (suma 1)
-- Decremento (resta 1)
- Cambio de signo
Operadores de asignación
La mayoría de los operadores aritméticos binarios tienen su correspondiente operador de asignación:
= Asignación simple
+= Suma
-= Resta
*= Multiplicación
/= División
%= Módulo (resto)
Con estos operadores se pueden escribir, de forma más breve, expresiones del tipo:
n=n+3 se puede escribir n+=3
k=k*(x-2) lo podemos sustituir por k*=x-2
Jerarquía de los operadores
Es importante tener en cuenta la precedencia de los operadores a la hora de trabajar con ellos:
( ) Mayor precedencia
++, --
*, /, %
+, - Menor precendencia
OPERADORES RELACIONALES
Utilizados para comparar el contenido de dos variables. En C existen seis operadores relacionales básicos:
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
== Igual que
!= Distinto que
El resultado que devuelven estos operadores es 1 para Verdadero y 0 para Falso. Si hay más de un operador se evalúan de izquierda a derecha. Además los operadores == y != están por debajo del resto en cuanto al orden de precedencia.
OPERADORES LOGICOS
Los operadores lógicos básicos son tres:
&& AND
|| OR
! NOT (El valor contrario)
Estos operadores actúan sobre expresiones lógicas. Permiten unir expresiones lógicas simples formando otras más complejas.
V = Verdadero F = Falso

SESION 4

ALGORITMOS Sesión Nº 4
Profesor: Ing José A Espinal

ESTRUCTURAS SELECTIVAS
Este tipo de sentencias permiten variar el flujo del programa en base a unas determinadas condiciones. Existen varias estructuras diferentes:
Estructura IF...ELSE
Sintaxis:
if (condición es verdad)
acción1;
else
acción2;


EJEMPLO: Hallar el algoritmo que ordene de forma ascendente dos numeros a,b

SESION 5

ALGORITMOS-SESION Nº 5
PROFESOR: Ing José A. Espinal Teves
ESTRUCTURAS SELECTIVAS DE ALTERNATIVA MÚLTIPLE
C++ le permite anidar enunciados if-else para crear una forma de alternativa múltiple, que le proporciona gran poder y flexibilidad a sus aplicaciones.
SINTAXIS:
If (Condicion 1)
{
Else if (condicion 2)
accion 1
Else if (condicion 3)
accion 2
Else if (condicion n)
accion n
Else
{
Accion x
}


Ejemplo 2:Haga un algoritmo para que, dados dos números enteros a, b y una clave, realice la operación aritmética indicada por medio de la clave a los números dados. Por ejemplo, si los datos son: 8 4 +, el algoritmo debe calcular la suma de 8 + 4. Las claves válidas son: + - * /.

#include // para cin y cout
void main( )
{ char op; int ok = 0;float x, y, z;
cout << "Introduzca operando1, operador y operando2: ";
cin >> x >> op >> y;
if (op == '+')
z = x + y;
else if (op == '-')
z = x - y;
else if (op == '*')
z = x * y;
else if (op == '/' && y != 0)
z = x / y;
else
{
cout<<"el operador no existe"< ok = 1;
}
if (ok!=1)
cout<<"la "<}

SINTAXIS: SWITCH
switch( Variable )
{ case ‘N1’:
Accion 1;
break;
case ‘N2’:
Accion 2;
break;
case ‘Nn ’:
Accion n;
break;
default:
Accion x;
}


Ejemplo 1:
Haga un algoritmo para que, dados dos números enteros a, b y una clave, realice la operación aritmética indicada por medio de la clave a los números dados. Por ejemplo, si los datos son: 8 4 +, el algoritmo debe calcular la suma de 8 + 4. Las claves válidas son: + - * /.

Ejemplo 2:
Construir un algoritmo que al ingresar una fecha, valide si la fecha ingresada es correcta. Considerar dd / mm / aa

SESION 6

ESTRUCTURA REPETITIVA

ITERACION : CICLO
ESTRUCTURAS DE CONTROL REPETITIVO
WHILE
DO…WHILE
FOR( inicialización; condición; incremento)
SENTENCIA: WHILE
SINTAXIS:

WHILE (CONDICION)
{
SENTENCIAS;
}
SENTENCIA WHILE
Con esta sentencia se controla la condición antes de entrar en el bucle. Si ésta no se cumple, el programa no entrará en el bucle. Naturalmente, si en el interior del bucle hay más de una sentencia, éstas deberán ir entre llaves para que se ejecuten como un bloque.
EJEMPLO: SENTENCIA WHILE
CONSTRUYA UN ALGORITMO QUE CALCULE E IMPRIMA LOS 20 PRIMEROS NUMEROS DE LA SERIE DE FIBONACCI.
0,1,1,2,3,5,8,13,21,34,…..
EJEMPLO: SENTENCIA WHILE
#include
void main()
{ long int a=0, b=1,i=3;
long int t, tmp;
cout<<"Fibonacci 1: "< cout<<"Fibonacci 2: "< while(i<=20)
{ t=a+b;
cout<<"Fibonacci "< tmp=a;
a=b;
b=t;
i++;
}
}
EJEMPLO: SENTENCIA WHILE
SENTENCIA: DO…WHILE
SINTAXIS:

DO
{
SENTENCIAS;
}
WHILE (CONDICION)
SENTENCIA: DO…WHILE
Con esta sentencia se controla la condición al final del bucle. Si ésta se cumple, el programa vuelve a ejecutar las sentencias del bucle. La única diferencia entre las sentencias while y do...while es que con la segunda el cuerpo del bucle se ejecutará por lo menos una vez.
EJEMPLO: DO…WHILE
ALGORITMO QUE CUENTA DEL 0 AL 10
INT X
DO
{
COUT< X=X+1;
}
WHILE (X<=10)
SENTENCIA: FOR
SINTAXIS:

FOR (inicialización; condición; incremento)
{
sentencias;
}
SENTENCIA: FOR
EJEMPLO: SENTENCIA FOR
HACER EL ALGORITMO QUE CALCULE EL FACTORIAL DE UN NUMERO N.

Si N=5
FACTORIAL DE 5 ES= 1*2*3*4*5=120
EJEMPLO: SENTENCIA FOR
#include
void main()
{ int n;
cout<<"Ingresar n= ";cin>>n;
if(n>=0)
{ int i, fac=1;
for (i=1;i<=n;i++)
{ fac=fac*i;
}
cout<<"El Factorial es: "< }else
{ cout<<"Error..."< }
}
EJEMPLO: SENTENCIA FOR