“Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito...

41
1 “Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en solamente dos semanas, y fue escrito para aquellos que no pueden asistir a las ayudantías, o cuyo profesor y/o ayudante no se explica lo suficiente. Primer Parcial 1. Algoritmos lineales. 2. Lazos y Estructuras de control. Condiciones Banderas. Contadores. Acumuladores. 3. Problemas de convergencia. 4. Introducción al lenguaje C++. 5. Arreglos Unidimensionales. 1. Algoritmos lineales. Los algoritmos lineales son aquellos que no utlizan ningún tipo de condiciones (lazos o bifurcaciones) durante su desarrollo, sino que son simplemente una secuencia de pasos lógicos y estructurados a seguir, con ingresos, asignaciones y salidas. Ej:

Transcript of “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito...

Page 1: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

1

“Fundamentos de Computación”

El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en solamente dos semanas, y fue escrito para aquellos que no pueden asistir a las ayudantías, o cuyo profesor y/o ayudante no se explica lo suficiente.

Primer Parcial

1. Algoritmos lineales.2. Lazos y Estructuras de control.

Condiciones Banderas. Contadores. Acumuladores.

3. Problemas de convergencia.4. Introducción al lenguaje C++.5. Arreglos Unidimensionales.

1. Algoritmos lineales.

Los algoritmos lineales son aquellos que no utlizan ningún tipo de condiciones (lazos o bifurcaciones) durante su desarrollo, sino que son simplemente una secuencia de pasos lógicos y estructurados a seguir, con ingresos, asignaciones y salidas.

Ej:Realice el ingreso del lado de un cuadrado y muestre su perímetro y su área.

InicioLado

Perímetro Lado*4Area Lado*Lado

Perímetro

Area

Page 2: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

2

Fin

Ej:Realice el ingreso del radio de un círculo y muestre su perímetro y su área.

InicioRadio

Perímetro 2*3.14159*RadioArea 3.14159*Radio*Radio

Perímetro

AreaFin

Puede observarse en los ejemplos que no existen condiciones, es decir que los pasos a seguir son rígidos; pero sí se mantiene la idea básica y principal de un algoritmo (resolver un problema usando pasos lógicos).

Page 3: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

3

2. Lazos, Bifurcaciones y Estructuras de control.

Inicialmente deberíamos considerar un lazo como su nombre lo dice, esto es un parte del algoritmo que se repetirá tantas veces como lo indique una determinada condición.

Condiciones

Una condición es una comparación entre dos valores, mediante los operadores lógicos, la cual puede ser verdadera o falsa. Recuérdese que la mayoría de las Estructuras de Control en el Lenguaje C se ejecutarán cuando esta condición sea Verdadera.

Lo importante de los lazos es la condición de salida que éste presenta, para lo cual vamos a considerar los siguientes:

Estructura de Control Si-Entonces Estructura de Control Si-Entonces-Sino Estructura de Control En caso de. Lazo Mientras-Repita. Lazo Hacer – Mientras. Lazo Para

a. Estructura de Cotrol Si-Entonces

Es la estructura de control más simple de todas, ya que se basa en una condición que si es verdadera ejecutará un conjunto de instrucciones, y si es falsa no hará nada. Tiene la siguiente forma:

Si (Condición) entoncesInstrucción 1Instrucción 2...Instrucción n

Fin-Si

Page 4: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

4

Ej:Inicio

A,BSi ( A <= B ) entonces

X AY B

Fin_SiFin

b. Estructura de Cotrol Si-Entonces-Sino

Se basa en una condición que si es verdadera ejecutará un conjunto de instrucciones, y si es falsa ejecutará otro grupo de condiciones. Tiene la siguiente forma:

Si (Condición) entoncesInstrucción 1aInstrucción 2a...Instrucción na

SinoInstrucción 1bInstrucción 2b...Instrucción nb

Fin_Si

Ej:Inicio

A,BSi ( A <= B ) entonces

X AY B

SinoX BY A

Fin_SiFin

Page 5: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

5

c. Lazo Mientras - Repita

Este lazo tiene la siguiente forma:

Mientras <Condición> RepitaInstrucción 1Instrucción 2...Instrucción n

Fin_Mientras

Su condición ha sido puesta al inicio de la Estructura de control, por lo que puede sucede que no se ejecute ninguna instrucción.Ej:

Inicio

A,B,CMientras ( A < B ) Repita

A A + CFin_ Mientras

Fin

Puede observarse en el ejemplo que aunque el algoritmo no tiene ningún enunciado, es evidente que se continuará agregando el valor de C a la variable A mientras sea menor que B.

d. Lazo Hacer – Mientras

Este lazo tiene la siguiente forma:

HacerInstrucción 1Instrucción 2...Instrucción n

Mientras <Condición> Repita

Puede observarse que la condición en este lazo se encuentra al final, por lo que al menos se realizarán una vez las instrucciones que se encuentran dentro de esta estructura de control.

Page 6: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

6

Ej:Inicio

Hacer

NMientras ( N < 0 )

NFin

Este ejemplo muestra el uso del lazo, en el cual se realizará el ingreso de un valor N mientras este sea menor que cero, es decir hasta que sea positivo.

Page 7: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

7

e. Lazo Para

Este lazo utiliza una variable a la que se le asigna un valor inicial y mientras no se cumpla un número determinado de iteraciones se realizarán las instrucciones que se encuentran dentro del mismo, dándose un incremento constante a la variable. Su forma es:

Para Variable Valor_inical, Valor_Final, IncrementoInstrucción 1Instrucción 2...Instrucción n

Fin_Para

Ej:Inicio

NPara I 1, N, 1

A A*2Fin_Para

Fin

Para este ejemplo es evidente que se ingresa un valor de N, y se utiliza una variable I que toma valores desde 1 hasta N con incrementos de 1, éste hace las veces de un contador.

Page 8: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

8

Banderas

Las banderas pertenecen a las variables booleanas, es decir que toman valores de cero o uno para indicar los valores de verdadero o falso respectivamente.

Se las utiliza para cuantificar en las búsquedas, y pueden ser de tipo existencial ( ) o total ( ).

Cuando las banderas son de tipo existencial se inicializan con cero ( 0 ), indicando que no se ha encontrado nada; más adelante una condición cambiará este valor por un uno ( 1 ) si se encuentra lo que se busca. Mientras que los contadores Totales se inicializan con uno ( 1 ), indicando que todos los elementos cumplen la búsqueda; pero si alguno no cumpliera la condición, la bandera cambiaría su valor a cero ( 0 ) indicando que un elemento no cumplió.

Ej:Hallar el valor de verdad de la Expresión:

A = {1, 2, 3, 4, ..., n}P = xA/ “K es múltiplo de x”K Z+

InicioP 1 //Inicializamos la bandera TotalHacer //validamos el ingreso de K y n como positivos

K,nMientras (K<0 v n<1)Para I 1,n,1

Si (K mod x 0) Entonces P=0 //cambiamos el valor de la bandera

Fin_SiFin_Para // con la condición negadaSi (P=1) Entonces

“Verdadero” //Mostramos según el valor de la Sino //bandera

“Falso”Fin_Si

Fin

Page 9: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

9

Contadores

Los contadores son un tipo de variable que como su nombre lo indica tienen la función única de incrementarse de acuerdo a una cuenta.

Acumuladores

Los acumuladores son un tipo de variable que como su nombre lo indica van incrementando su valor de acuerdo a una cantidad por la que es sumada o multiplicada. Existen dos tipos de contadores:

Los acumuladores de Suma, que son inicializados con cero ( 0 ) y los acumuladores de multiplicación que son inicializdos con uno ( 1 ).

A continuación se explicará un tipo de problemas en que se utilizarán los lazos y estructuras de control, así como los contadores y acumuladores.

Page 10: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

10

3. Problemas de Convergencia.

Estos problemas son los más comunes y son muy buenos para el desarrollo de la imaginación del estudiante para que él decida cuando utilizar un contador, una bandera o un acumulador. Utilizan repetidas iteraciones que terminarán con una condición previamente determinada, y lo hacen para hallar una respuesta.

Ej:Se desea determinar el valor de n para el cual la Serie:

Se aproxima al verdadero valor de ex con una diferencia de alo mucho 10-4, luego de ingresar un valor cualquiera para x.

Inicio

XS 0 //acumulador de sumaN 0 //contadorMientras ( | S - ex | > 0.0001 ) Repita

A 1 //acumulador de multiplicación para Xn

Para I 1, N, 1A A*X

Fin_ParaB 1 //acumulador de multiplicación para N!Para I 1, N, 1

B B*IFin_ParaS S + A / BN N + 1

Fin_MientrasN

Fin

Page 11: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

11

Hay que destacar que en este algoritmo S se comporta como un acumulador de suma, por eso lo inicializamos con el valor de cero ( 0 ), mientras que N hace las veces de contador, por lo que también se inicializa con cero ( 0 ). El problema es básicamente el ingreso de un X y luego mostrar N; pero para esto hay que hallarlo.

Entonces entraremos en un lazo Mientras_Repita, que se detendrá al comienzo del mismo, en el momento en que la condición sea Falsa.

Dentro del lazo se untilizan dos algoritmos conocidos que son la potencia y el factorial, ambos vistos anteriormente. Y se lo hace así porque cada término de la suma tendrá la forma XN/N!. Luego se acumulará este cociente a la suma S.

Page 12: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

12

4. Introducción al Lenguaje C/C++

El lenguaje C es uno de los lenguajes, que a pesar de ser primitivo y de tercera generación, se lo sigue utilizando y enseñando, ya que en él están basados muchos de ls grandes programas y software del mercado. Además, es el mejor lenguaje para la programación estructurada y la orientada a objetos.

Al hablar de C++, se pensará en el mismo lenguaje, y con muy pocas variaciones en este curso, es por eso que no se hará diferencia del mismo.

Debe conocerse los tipos de datos permitidos y los más utilizados del lenguaje C/C++, por lo que los enumero a continuación.

Tipos de Datos

Tipo de Dato

Representa

Int Entero-32768 a 32767

Long Enteros largos-2.147’483.648 a 2.147’483.647

Float Reales-3.4x10-38 a 3.4x1038

Double Reales de doble precisión1.7 x(10-308 a 1.7 *x10+308

long double Reales de Cuátruple precisión3.4 x10-4932 a 1.1x104932

Char CaracteresUtilizan el Código ASCII0 a 255

Debe conocerse algunas de las librerías más importantes del lenguaje, que se declararán al comienzo de cada programa con la palabra reservada #include y la librería entre comillas dobles o entre menor y mayor que. Las librerías más importantes para nuestros fines, junto con las funciones que debemos conocer son:

Page 13: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

13

Stdio.h

main( ); Es la funciñon principal del programa, y es donde se desarrollará el mismo.Puede tener cualquier tipo y contener o no contener parámetros. Parámetros es lo que va entre los paréntesis.

printf(“%_”, Variable); Se utiliza para mostrar en pantalla, entre comillas va el %_, donde el _ será cualquiera de estos:

d – enteros (int) f – reales (float) c – caracteres (char) s – cadenas de caracteres ó

arreglo de char. ld - enteros largos (long). lf . reales de doble precisión

(double).Existen otros más pero por ahora no son importantes.

La variable, será la que se muestre su valor.Ej: printf(“Mi edad es %d”, Edad”);

scanf(“%_”, &Variable); Se utiliza para leer una variable por teclado. Utiliza el mismo formato que printf; pero antes de la variable se coloca el símbolo & que significa “asígnelo en la dirección de”.

Page 14: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

14

Conio.h

clrscr(); Borra la pantalla

char getch(); Pide un caracter por teclado, y lo retorna, pudiendo asignarse a una variable o no.Ej: char op; op=getch();

void gets(char cad[ ]) Se usa para pedir una cadena de caracteres por teclado.

void textbackground(int color); Cambia el color del fondo de la pantalla.La lista de colores la coloco en la siguiente tabla.

void textcolor(int color); Cambia el color del texto a escribirse.

cprintf(“%_”,Variable) Igual a printf; pero con color actual de texto.

void window(int x1,int y1,int x2,int y2); Crea una ventana en las coordenadas dadas como parámetros.

Page 15: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

15

Lista de Colores

Número ConstanteDefinida

Color Fondo Texto

0 BLACK Negro Sí Sí

1 BLUE Azul Sí Sí

2 GREEN Verde Sí Sí

3 CYAN Cian Sí Sí

4 RED Rojo Sí Sí

5 MAGENTA Morado Sí Sí

6 BROWN Café Sí Sí

7 LIGHTGRAY Gris Sí Sí

8 DARKGRAY Plomo No Sí

9 LIGHTBLUE Azul Claro

No Sí

10 LIGHTGREEN Verde Claro

No Sí

11 LIGHTCYAN Celeste No Sí

12 LIGHTRED Rosado No Sí

13 LIGHTMAGENTA Violeta No Sí

14 YELLOW Amarillo No Sí

15 WHITE Blanco No Sí

128 BLINK BLINK No Sí

Page 16: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

16

Math.h

double pow(double x,double y); Halla la potencia de Xy, donde X y Y son dos números reales.Ej: double a=Pow(2,4);Entonces a toma una valor de 16.

double sqrt(double x); Halla la raíz cuadrada de x.

double exp(double x); Halla el valor de ex.

double log(double x); Halla el logaritmo natural de x.

double log10(double x); Halla el logaritmo en base 10 de x.

int abs(int x); Halla el valor absoluto del entero x.

double fabs(double x); Halla el valor absoluto del real x.

Page 17: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

17

Ahora que ya conocemos un poco de las librerías y funciones, podemos tambiñen conocer un poco sobre las palabras reservadas en los lazos.

ALGORITMOS LENGUAJE C/C++Si (Condición) entonces

Instrucción 1Instrucción 2...Instrucción n

Fin-Si

if (Condición) {Instrucción 1Instrucción 2...Instrucción n

}

Si (Condición) entoncesInstrucción 1aInstrucción 2a...Instrucción na

SinoInstrucción 1bInstrucción 2b...Instrucción nb

Fin_Si

if (Condición) {Instrucción 1aInstrucción 2a...Instrucción na

}else {

Instrucción 1bInstrucción 2b...Instrucción nb

}

HacerInstrucción 1Instrucción 2...Instrucción n

Mientras <Condición>

do {Instrucción 1Instrucción 2...Instrucción n

while( <Condición>);

Mientras <Condición> RepitaInstrucción 1Instrucción 2...Instrucción n

Fin_Mientras

while( <Condición>) { Instrucción 1Instrucción 2...Instrucción n

}

Page 18: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

18

ALGORITMOS LENGUAJE C/C++Para Variable VI,Vf,Inc

Instrucción 1Instrucción 2...Instrucción n

Fin_Para

For( Var=VI,condición , Var+=Inc){Instrucción 1Instrucción 2...Instrucción n

}

A todas estaas estructuras de control se les debe añadir el selector switch-case, el cual utiliza el siguiente formato.

La palabra reservada del selector es switch, y los posibles valores que toma el selector están precedidos por la palabra case, y cada instrucción termina con el operador break, el cual corta un proceso.

switch(var) {case val 1 : hacer1; break;case val 2 : hacer2; break;

...case val n : hacer2; break;default: hacer_otro; break;

}

En este selector, la variable var puede tomar los valores val1, val2, ó val3, con los que realizaría hacer1, hacer2, ó hacer3 respectivamente, donde los hacer son procesos. Además esta debe terminar cada case con la palabra reservada break. Y si no se seleccionare ninguno de los valores val se escogerá la opción default.

Este selector es muy útil cuando se trabaja con menúes de varias opciones.

Page 19: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

19

5. Arreglos Unidimencionales (Vectores).

Hasta ahora, todas las variables utilizadas han sido simplemente de un valor; pero, podría utilizarse un tipo de variable diferente, que pueda almacenar n datos, todos del mismo tipo.

Bueno, esto sería útil si en nuestro algoritmo necesitaremos almacenar los valores y luego realizar distitas operaciones con todos o con algunos de ellos, para luego presentar algunos resultados.

Debe definírselo como los demás datos; pero con un corchete que contenga la dimensión del mismo.

Tipo_dato Nombre[Dimensión];

Ej:

int A[20];float X[10];char Y[11]; //Luego tendremos un capítulo sólo para los tipo char

Además debe saberse que los arreglos utilizan tantas posiciones como se disponga en la definición; pero en el lenguaje C++ que utilizaremos se cuentan desde la posición cero ( 0 ). Por ahora digamos que van desde uno ( 1 ) para efectos de mejor comprensión.

Ej:Supóngase que desea almacenarse 20 valores enteros, para sumarles uno a los negativos y restarles uno a los positivos, y luego mostrar los valores que sean mayores al promedio del grupo.

Solución:Si utilizaramos variables comunes para almacenarlos, sería muy complicado ingresar cada valor, y más aún si hubiese que validarlos, luego, sería algo larguísimo y tedioso sumarle uno o restarle uno a cada valor según corresponda, y luego hallar el promedio será una tragedia, ya que habría que sumar todas las variables y dividirlas para n=20.

Page 20: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

20

Al utilizar arreglos, el algoritmo se resume en utilizar 4 lazos para y un acumulador para hallar el promedio sin ningún problema.

InicioPara I 1,20,1 Repita //Para ingresar los 20 valores

AI

Fin_ParaPara I 1,20,1 Repita //Para sumar o restar 1

Si (AI mod 2 = 0) entoncesAI AI+1

SinoAI AI-1

Fin_SiFin_ParaS 0 //Para acumular u hallar el promedioPara I 1,20,1 Repita //Para sumar o restar 1

SS+ AI

Fin_ParaS = S / 20Para I 1,20,1 Repita //Para mostrarSi (AI > S) entonces

AIFin_Para

FIN

Page 21: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

21

Segundo Parcial

1. Arreglos Bidimencionales (Matrices).2. Procedimientos y Funciones.3. Caracteres

Arreglos de… Punteros a… Librería < string.h >

4. Recursiones5. Estructuras

Paso por valor y paso por referencia Punteros a…

6. Archivos de texto Directos Con estructuras.

7. Recursiones

1. Arreglos Bidimencionales (Matrices).

Al igual que los arreglos unidimencionales, debe tomarse a consderación que el tipo de datos que se almacenará en todas las posiciones será el mismo, así como debe diferenciarse entre la posición y el contenido, sólo que ahora la posición depende de dos coordenadas a las que generalmente haremos referencia con los índices (i,j). Entonces lo que tendremos es un A[ i ][ j ] donde i = 0,…,n y j = 0,…,m. El resto es lo mismo.Para aclarar las cosas, veamoslo de la siguiente manera:

tipo_dato nombre_arreglo [dimensión 1][dimensión 2];

Donde el tipo_dato es cualquier tipo válido de datos en lenguaje C así como entero (int), entero largo (long), etc.

El nombre del arreglo es un nombre cualquiera que sea diferente de las palabras reservadas por el lenguaje, o previamente definidas en las unidades o por sted mismo. Además debe comenzar con una letra mayúscula o minúscula, o el underscore ( _ ), y los caracteres contenidos por el nombre no serán especiales, sino los mencionados y los números.

Page 22: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

22

Las dimensiones del arreglo serán números enteros, y debe considerarse al igual que en los arreglos unidimensionales que si la dimensión es n, el arreglo tendrá posiciones desde 0 hasta n-1.

Ej:int A[ 10 ][ 10 ];Esta es una matriz cuadrada de dimensión 10x10, cuyo tipo de dato

es entero.

float X[ 5 ][ 2 ];Este es un arreglo de 5x2, cuyo tipo de datos es real o punto flotante.

Entonces si deseamos hacer referencia al contenido de la matriz A en una posición determinada hablaremos de A [ i ] [ j ].

2. Procedimientos y FuncionesCuando utilizamos el lenguaje C/C++, cada función está descrita por las siguientes características:

tipo_dato nombre_función ( parámetro 1, parámetro 2,…,parámetro n) {Instrucción 1;Instrucción 2;. . . . . Instrucción n;

}

Donde el tipo_dato puede ser entero, flotante, caracter, estructura de datos, puntero, o tipo void. Si es tipo void también se le llama procedimiento.

El nombre de la función deberá ser un nombre válido.

Los parámetros debenser declarados como tipo_dato nombre, lo que se verá más adelante en detalle.

Las instrucciones llevarán al final un punto-coma ( ; ), indiacando el fin de una instrucción. Todas las instrucciones irán entre llaves { }.

Page 23: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

23

Ej:int factorial (int x) {int f=1,i; for (i=1;i<=x;i++) { f*=i; //Es lo mismo que f=f*i; }//for return f;}//Fin

Esta función es la famosa función del factorial, la cual recibirá un entero x como parámetro y retornará un entero que será el resultado de la operación factorial.

Ej:void saludo (int m) { if (m==1) cout<< “Hola gente”; //se compara utilizando == else cout<< “Adios”;}//Fin

Esta función recibe por parámetro un entero m, que si es 1 mostrará un mensaje, y sino mostrará otro mensaje diferente; pero lo más importante es saber la diferencia entre mostrar y retornar, ya que las funciones tipo void,también llamadas procedimientos, no retornan ningún tipo de valor.

Page 24: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

24

3. Números Aleatorios

Bueno, posiblemente sea necesario explicar que es un número aleatorio, ya que no todos han tomado algún curso de estadística o de probabilidad.

Para no alargar el asunto, cuando decimos que un valor es alaeatorio, podemos entenderlo como un valor al azar entre un grupo de valores que conocemos. Como si lanzásemos una moneda al aire, entonces no sabemos si caerá mostrando la cara o el sello, pero sí sabemos que será uno de los dos.

De igual manera, como tener en una funda negra un grupo de n papelitos enumerados desde el 0 hasta n-1. Si deseamos tomar un papelito, simplemente metemos la mano en la funda y tomamos cualquiera, sin saber cual es, pero conociendo el grupo de valores al que perenece.

Entonces podemos resumir las funciones de números aleatorios en solamente cuatro funciones que se encuentran en la librería “stdlib.h” y que son:

randomize(); Esta función genera una semilla aleatoria, para poder tomar luego los valores.Es como tomar la fundita de los n papelitos y revolverlos, o como hacer girar en un bingo la rueda de valores.

int rand(); Esta función retorna un número aleatorio entre 0 y RAND_MAX que es el valor más alto que posee el lenguaje C/C++ en la generación de números aleatorios. El período de repetición es de 232.

int random(unsigned int n); Esta función genera un número aleatorio x entre 0 y n-1.

void srand(unsigned int n); Setea la semilla aleatoria como un valor n

Ej:

Page 25: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

25

Una que genere un número aleatrorio menor que n y muestre un mensaje indicando si el número generado fue par o impar.

void par_impar(int n) {int k; randomize(); k=random(n); if (k%2==0) cout<<”El número es par”;//El % es equivalente a mod. else cout<<”El número es impar”;}

Ej:

Una que genere un número aleatrorio real en el intervalo [0,1], y que retorne el número multiplicado por 100.

float par_impar(int n) {float k; randomize(); k=(float)rand()/RAND_MAX; return k*100;}

Debe observarse que el resultado de esta función será un número aleatorio real en el intervalo [0, 100].

Page 26: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

26

4. Cadenas de Caracteres

Cuando hablamos de caracteres en lenguaje C/C++, en realidad estamos hablando de la representación de un código llamado ASCII, donde a cada carácter le corresponde un valor o símbolo de este código.

Luego, si hablamos de cadenas de caracteres, se trata de una forma de representar texto en el lenguaje C/C++, ya que con una varable de tipo carácter podemos almacenar solamente una letra o símbolo del código ASCII, mientras que con una cadena de caracteres, podemos almacenar toda una palabra, o una frase.

Existen tres partes importantes en el estuio de las cadenas de caracteres que son: Las cadenas de caracteres como arreglos unidimensionales de

caracteres. La librería “string.h”. Las cadenas de caracteres como punteros de tipo carácter.

El último tópico no es parte de este curso, pero vale dar luego unas cuantas indicaciones de esta parte.

Las cadenas de caracteres como arreglos unidimensionales de caracteres.Representar las cadenas de caracteres como arreglos unidimensionales de caracteres es la forma más sencilla de manipular las cadenas de caracteres. Lo único que debe considerarse es que toda cadena de caracteres termina o debe terminar en el código NULL, que significa que allí termina la cadena de caracteres, Este NULL se encuentra en alunas librerías del lenguaje C/C++, entre ellas “stdio.h.”, y “stdlib.h”, y se lo representa con un ‘\0’. Ade,ás es por eso que siempre debe dejarse un poco más de espacio que el que se utilizará.

Ej:Si se quiere almacenar en una cadena de caracteres la palabra PROGRAMA, se necesitará al menos nueve posiciones en un arreglo, y no solamente ocho, ya que e código NULL también debe almacenarse en la cadena de caracteres.

Palabra: P R O G R A M A ‘\0’Posiciones: 0 1 2 3 4 5 6 7 8

Page 27: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

27

La Librería “string.h”

Esta librería contiene alugunas funciones básicas y necesarias para el trabajo con las cadenas de caracteres. Por lo pronto conozcamos seis de ellas, que no son exactamente como las propondré, pero para el mejor entendimiento de las mismas, vamos a suponer que así es por ahora.

int strlen(cadena); Quiere decir longitod de la cadena. Esta función retorna la longitud de una cadena de caracteres, o la posición donde se encuentra el código NULL. En realidad el tipo size_t es un entero.

int srcmp(cadena cad1 cadena ,cad2);

Quiere decir compara las cadenas. Esta función toma por parámetros dos cadenas de caracteres, y las compara lexicográficamente o mediante el orden del diccionario. Retornará, un número:<0 si cad1 < cad2=0 si cad1 = cad2>0 si cad1 > cad2

cadena strset(cadena cad,char x): Esta función toma por parámetros una cadena de caracteres y un caracer, y le asigna a cada una de las posiciones de la cadena dicho carácter.

cadena strcpy(cadena cad1, cadena cad2);

Esta función copia el contenido de la cadena 2 en la cadena 1.Ya que no se puede asignar una cadena a otra de esta manera: cad1=cad2.

cadena strcat(cadena cad1,caena cad2);

Esta función concatena en la cadena 1, lo que hay en la cadena 1 mas lo que hay en la cadena 2.Ya que para sumar palabras no se puede utilizar: cad1+=cad2.

Page 28: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

28

Pues bien, estas funciones son importantes, pero no son todo lo que existe para el manejo de los caracteres, ya que existen otras de igual importancia, pero para utilizarlas debemos también hacer uso de la fnción mencionada strcpy, para asignar su resultado.

cadena strrev(cadena cad); Permite invertir la cadena cad y la retorna.Ej: strcpy(cad,strrev(“amor”);

Puesto que se ha detallado ciertas funciones propias del lenguaje C/C++, sería importante realizar un programa pequeño que involucre algunas de ellas.

Ej:Escriba un programa en lenguaje C/C++, que pida el ingreso de una cadena de caracteres de longitud máxima n; n<25. Luego, verifique si esta cadena de caracteres es un palíndrome. Un palíndrome es aquella palabra que se lee igual desde la izquierda a la derecha que desde la derecha hacia la izquierda.

Page 29: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

29

Otro detalle que quisiera resaltar acerca de los caracteres, es que por el hecho de poseer un código ASCII, pueden sumarse de la misma manera que los números enteros; pero únicamente en el rango de 0 a 255.

Es por eso que podremos decir que:

int x;x = ‘a’ + ‘b’;

Nótese que a x se le asigna la suma de ‘a’ con ‘b’, que son dos letras del alfabeto, y que esta variable es entera.

Lo que en realidad sucede es que a la variable x se le está asignando la suma del código ASCII de ‘a’ que es 93, con el de ‘b’ que es 94. Por lo que x tendrá un valor de 187.

También podemos hacer lo siguiente:

char c;c=’a’;c+=1; //Es equivalente a c++ o a c=c+1;

Ahora, nótese que el valor inicial de la variable c de tipo char es ‘a’; pero luego se le suma el valor numérico de 1. Por lo que ahora la variable ha tomado el valor de la letra ‘b’.

Page 30: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

30

Ej:Escriba una función que tome una cadena de caracteres y un entero k y muestre la cadena disfrazada, de la siguiente manera:Cada carácter alfabético, será remplazado por el carácter que se encontrará k posiciones a la derecha de la misma. Es decir que si k=2 entonces ‘A’’C’; B’D’; …; Z’B’.

Page 31: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

31

5. Recursiones

Ahora que entendemos lo que son las cadenas de caracteres, veamos un poco de lo anterior; pero de una manera que puede parecer más difícil; pero en realidad es muy fácil; ya que sólo debemos utilizar la definición.

Una función es recursiva, cuando en el desarrollo de ella, se llama a sí misma. Además esta función tiene al menos un punto de llamado; y tiene un punto de parada.

Ej:long factorial (int n) {

if (n==0) return 1; //Punto de parada.return n*factorial (n-1); //Punto de autollamado.

}

Ej:long potencia (int x, int n) {

if (n==0) return 1;return x*potencia(x,n-1);

}

Estos son los ejemplos clásicos de la recursión, aunque tambiién debe examinarse algunas suceciones que se generan a partir de uno o más términos anteriores.

Page 32: “Fundamentos de Computación”€¦  · Web view“Fundamentos de Computación” El Propósito de este manual es el aprendizaje de la materia de fundamentos de computación en

32