Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Cuadernillo Funciones

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 112

FUNCIONES

Concepto:

Una funcin es un conjunto de lneas de cdigo que realizan una tarea especfica y puede
retornar un valor. Las funciones pueden tomar parmetros que modifiquen su
funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas
simples y para implementar operaciones que son comnmente utilizadas durante un
programa y de esta manera reducir la cantidad de cdigo. Cuando una funcin es invocada
se le pasa el control a la misma, una vez que esta finaliz con su tarea el control es devuelto
al punto desde el cual la funcin fue llamada.

<Tipo> [clase:] <nombre> ([Parmetros])

Cuerpo;

Ejemplo de una funcin

Para comenzar, vamos a considerar el caso en el cual se desea crear la funcin cuadrado (),
que deber devolver el cuadrado de un nmero real (de punto flotante), es decir, cuadrado ()
aceptar nmeros de punto flotante y regresar una respuesta como nmero flotante.

Nota: aunque para la funcin que veremos el tipo de retorno coincide con el tipo de parmetro
pasado, algunas veces las cosas pueden cambiar, es decir, no es obligatorio que una funcin
reciba un parmetro de un tipo y que tenga que regresar una respuesta de dicho tipo.
// Regresar el cuadrado de un nmero

Double Cuadrado (double n)

Return n*n;

Parmetros

Normalmente, las funciones operan sobre ciertos valores pasados a las mismas ya sea como
constantes literales o como variables, aunque se pueden definir funciones que no reciban
parmetros. Existen dos formas en C++ de pasar parmetros a una funcin; por referencia o
por valor. El hecho es que si en una declaracin de funcin se declaran parmetros por
referencia, a los mismos no se les podr pasar valores literales ya que las referencias apuntan
a objetos (variables o funciones) residentes en la memoria; por otro lado, si un parmetro es
declarado para ser pasado por valor, el mismo puede pasarse como una constante literal o
como una variable. Los parmetros pasados por referencia pueden ser alterados por la funcin
que los reciba, mientras que los parmetros pasados por valor o copia no pueden ser alterados
por la funcin que los recibe, es decir, la funcin puede manipular a su antojo al parmetro,
pero ningn cambio hecho sobre este se reflejar en el parmetro original.

Parmetros por valor

La funcin cuadrado () (ver arriba) es un clsico ejemplo que muestra el paso de parmetros
por valor, en ese sentido la funcin cuadrado () recibe una copia del parmetro n. En la misma
funcin se puede observar que se realiza un clculo (n*n), sin embargo el parmetro original
no sufrir cambio alguno, esto seguir siendo cierto aun cuando dentro de la funcin hubiera
una instruccin parecida a n = n * n; o n*=n;

Parmetros por referencia

Para mostrar un ejemplo del paso de parmetros por referencia, vamos a retomar el caso de
la funcin cuadrado, salvo que en esta ocasin cambiaremos ligeramente la sintaxis para
definir la misma. Veamos:

// Regresar el cuadrado de un nmero


Double cuadrado2 (doubl &n)

n *= n;

return n;

Al poner a prueba las funciones cuadrado () y cuadrado2 () se podr verificar que la primera
de estas no cambia el valor del parmetro original, mientras que la segunda s lo hace.

Llamar a una funcin

Para llamar a la funcin cuadrado () vista anteriormente, podemos emplear:

cout << cuadrado(25);

cout << cuadrado(X);

R = cuadrado(X); // guardar en R el cuadrado de X

Funciones void

Bajo ciertas circunstancias se desear escribir funciones que no regresen valor alguno (esto
sera algo parecido a escribir procederes en Pascal) y para ello podemos declarar a la funcin
como void. La palabra reservada void es utilizada para declarar funciones sin valor de retorno
y tambin para indicar que una funcin especfica no requiere de parmetros. Por ejemplo, la
funcin pausa () que se ver en seguida, no devolver valor alguno y la misma no requiere
de parmetros.

// Esta funcin requiere de la librera iostream

Void pausa (void)

cout << "Por favor presione <Enter> HOLA...";

cin.get();

cin.ignore (255, '\n'); // rechazar caracteres introducidos antes de <Enter>


}

Notas: se debe de aclarar que el uso de la palabra void dentro de los parntesis es opcional al
momento de declarar una funcin. As, la funcin pausa () podra haberse declarado
como void pausa (), y la misma puede invocarse como: pausa ();

Funciones anidadas

A diferencia de Pascal, el lenguaje C, C++ no permite anidar funciones, sin embargo, dentro
de una funcin puede existir la llamada a una o ms funciones declaradas previamente, que
determinara en cierto punto un resultado para que sea ejecutado cuando el programador lo
desee.

Variables estticas y automticas

Dentro de una funcin, las variables y/o constantes pueden ser declaradas como: auto (por
omisin) o como static. Si una variable dentro de una funcin es declarada como esttica
significa que la misma retendr su valor entre las llamadas a la funcin. Por otro lado, las
variables automticas pierden su valor entre las llamadas. En el programa anterior puede
verse que el arreglo de caracteres (buffer [65]) se ha declarado como esttico para garantizar
que dicho buffer retenga los datos an despus de que la funcin termine. En el mismo
ejemplo, si el buffer no se declara como esttico, el contenido del mismo podra ser destruido
al salir de la funcin y los resultados obtenidos podran ser no deseados.

Parmetros constantes

Los parmetros usados por una funcin pueden declararse como constantes (const) al
momento de la declaracin de la funcin. Un parmetro que ha sido declarado como
constante significa que la funcin no podr cambiar el valor del mismo (sin importar si dicho
parmetro se recibe por valor o por referencia).

Ejemplo:

Int funcionX (const int n);

void printstr (const char *str);

Prototipo de la funcion: sirve para indicar que va a retornar la funcin, si va a retornar un


entero, un double, un char, o simplemente no retorna nada (void). Esto es obligatorio
Parametros: son los datos que le enviamos a la funcion para que con ellos posiblemente
desarrolle algo que necesitemos. Esto es opcional.

Entonces, una funcin para ingresar podra ser as:

Void ingresar ();

Donde vemos no va a retornar nada, por ello tiene void entonces la funcion hace lo que tiene
que hacer y termina, no devuelve nada.

Un ejemplo de devolucin seria en una suma de enteros, ya que se le podra enviar como dato
los dos nmeros y la funcin hara internamente la suma devolvindonos la suma de dichos
nmeros (si son todos enteros, devolvera un int. Si son enteros y flotantes devolvera un float
), as:

int suma_enteros ( int, int ); // suma nicamente enteros, devuelve un entero

Float suma_numeros (float, float); // suma enteros o flotantes, devuelve un flotante

2) La definicin de la funcion:

Como vimos la declaracin nos serva para que el compilador sepa que existe dicha funcion,
ahora la definicin nos sirve ya para desarrollar la funcin; es decir ya programar dentro de
ella para que haga lo que necesitamos. Como consecuencia de que ya est creada podemos
usarla, pero si no la hubisemos declarado y la desarrollamos (hacemos la definicin), al
compilar nos dar error y dir que esa funcin no fue declarada, que no existe.

La definicin es muy similar a la declaracin, solo que esta vez lleva un ambiente (donde
vamos a programar es decir las llaves {}), as:

void ingresar()

// Lo que deba hacer esa funcin

Tambin otra diferencia es que la declaracin lleva ; (punto y coma) al final, la definicin
ya no lo lleva.

(www.wikibooks.org, 2015)
PROGRAMA N.-1

GENERAR UNA LINEA HORIZONTAL

Anlisis

Objetivo: Generar una lnea horizontal

Datos de entrada: Numero de espacio

Datos de salida: lnea horizontal

Proceso:

Leer datos de entrada


Validar los datos de entrada
Generar la lnea horizontal
Imprimir el resultado
Restricciones: datos positivo

Diseo:

-----------------------

Codificacin:
Prueba de escritorio:

MANEJO DE FUNCIONES E IMPLEMENTACION DE LIBRERIAS

PROGRAMA N.-1

CREAR UNA FUNCION QUE GENERE UNA PANTALLA (CUADRADO DE


ASTERISCOS).

Funcin pantalla (int x1, int y1, int x2, int y2);
Anlisis

Objetivo: generar pantalla con 4 puntos

Datos de entrada: 4 puntos

Datos de salida: asteriscos

Proceso:

Leer datos de entrada


Validar los datos de entrada
Generar serie de asteriscos
Imprimir el resultado
Restricciones: datos positivos

Diseo:

Ingrese las 4 coordenadas:

X1 y1

X2 y2

******

******

Codificacin:
Prueba de escritorio:
ARREGLO

Conjunto de elementos del mismo tipo

A vector-> matriz

VECTOR

Conjunto de datos alineados en posiciones de memoria secuenciales

Las posiciones del vector siempre van desde cero.

Declaracin de vectores:

Int vec [ ], cont;

Lectura de vectores:

Do

Printf(ingrese dato posicin %d,cont);

Scanf(%d, &vec[cont ];

Cont++;
}while (i<4);

Impresin del vector:

For (cont=0; cont<n; cont++)

Prinf (\n dato [%d] =%d, cont, vec [cont]);

Pantalla
dato[ 0]=3
dato[ 1]=2
dato[ 3]=4
PROGRAMA N.-3

REALICE UN PROGRAMA QUE PERMITA ELAVORAR UN MENU QUE TENGA


EL FACTORIAL DE UN NUMERO Y EL AREA DE UN TRIANGULO

Anlisis

Objetivo: Elaborar un men que tenga el factorial de un nmero y el rea de un triangulo

Datos de entrada: Num, base, altura

Datos de salida: Resultado

Proceso

- Realizar la funcin que contiene el proceso


- Realizar la validacin
- Realizar las operaciones necesarias (base*altura)/2
- Imprimir
Restriccin Num1>0 Num2>0 DISEO

Codificacin:
Prueba de escritorio:

PROGRAMA N.-6

REALICE UN PROGRAMA QUE LEA N IMPARES EN UN VECTOR Y LOS


IMPRIMA.

Anlisis

Objetivo: leer e imprimir n impar en un vector

Datos de entrada: n impar

Datos de salida: n impar

Proceso:

Leer datos de entrada


Validar los datos de entrada
Condicionar que sean nmeros impares
imprimir el resultado
Restricciones: datos positivos

Codificacin:
Prueba de escritorio:
PROGRAMA N.-7

REALICE UN PROGRAMA QUE LEA 10 NUMEROS POR TECLADO Y SUME


SOLO LOS NUMEROS PARES.

Anlisis

Objetivo: leer 10 nmeros por teclado y sum solo los numero pares

Datos de entrada: 10 nmeros

Datos de salida: suma pares

Proceso:

Leer 10 nmeros
Validar los datos de entrada
Condicionar que sean nmeros pares
imprimir el resultado de la suma de los pares
Restricciones: datos positivos

Codificacin:
Prueba de escritorio:

PROGRAMA N.-8

REALICE UN PROGRAMA QUE LEA 10 NUMEROS DESDE LA ULTIMA


POSICION E IMPRIMA LA SUMA DE LOS DIGITOS MAYORES QUE 9.

Anlisis

Objetivo: leer 10 nmeros por teclado y a los dgitos de los nmeros mayores a 9.

Datos de entrada: 10 nmeros desde la ltima posicin

Datos de salida: suma dgitos de nmeros mayores a 9

Proceso:

Leer 10 nmeros
Imprimir desde la ltima posicin
Condicionar que sean menores a 9
Caso contrario sumar los dgitos
imprimir el resultado de los dgitos
Restricciones: datos positivos

Codificacin:
Prueba de escritorio:
DEBER

PROGRAMA N.-9

REALICE UN PROGRAMA QUE LEA 9 DIGITOS Y REALICE EL PROCESO DE


VALIDACION DE LA CEDULA.

Anlisis

Objetivo: leer 10 dgitos de la cedula y validar si la cedula es correcta

Datos de entrada: 10 dgitos

Datos de salida: validacin

Proceso:

Leer 10 dgitos
Validar los datos de entrada
Multiplicar las posiciones pares
Si la multiplicacin es mayor a 9, restar 9
Sumar las posiciones pares e impares
Realizar la suma general
Generar la siguiente decena
Restar a la decena la suma de las posiciones
Validar el nmero de cedula
Restricciones: datos positivos

Codificacin:
Prueba de escritorio:

BUSQUEDAS: ORDENAMIENTO-OPERACIONES DE VECTORES

1 2 24 56 2 86
0 1 2 3 4 5

Buscar (2)

Posicion :( 4)

Void leer_dat(int dat [ ], int tam);


Void buscar(int dat [ ], int tam, int n bus);

Main()

Int vec[10 ], bus,cant;

Do

Printf(cuantos numeros desea: );

Scanf(%d, &cant);

If(cant<0||cant>10)
printf(error);

}while(cant<0 || cant >10);

Leer_dat(vec,cant);

Printf(numero buscar);

Scanf(%d, &bus);

Buscar(vec,cant,bus);

La bsqueda es el proceso de localizar un registro (elemento) con un valor de llave particular.


La bsqueda termina exitosamente cuando se localiza el registro que contenga la llave
buscada, o termina sin xito, cuando se determina que no aparece ningn registro con esa
llave.

Normalmente un archivo secuencial se almacena en bloques, en un orden secuencial simple


de los registros. La organizacin fsica del archivo en una cinta o disco se corresponde
exactamente con la ubicacin lgica del archivo. En este caso, el procedimiento para ubicar
los nuevos registros en un archivo de pila separado, llamado archivo de registro (log file) o
archivo de transacciones. Peridicamente, se realiza una actualizacin por lotes que mezcla
el archivo de registro con el archivo maestro para producir un nuevo archivo en secuencia
correcta de claves.

Bsqueda secuencial, tambin se le conoce como bsqueda lineal. Supongamos una


coleccin de registros organizados como una lista lineal. El algoritmo bsico de bsqueda
secuencial consiste en empezar al inicio de la lista e ir a travs de cada registro hasta encontrar
la llave indicada (k), o hasta al final de la lista.
La situacin ptima es que el registro buscado sea el primero en ser examinado. El peor caso
es cuando las llaves de todos los n registros son comparados con k (lo que se busca). El caso
promedio es n/2 comparaciones.

Este mtodo de bsqueda es muy lento, pero si los datos no estn en orden es el nico mtodo
que puede emplearse para hacer las bsquedas. Si los valores de la llave no son nicos, para
encontrar todos los registros con una llave particular, se requiere buscar en toda la lista.

Ventajas de la tcnica.

Es el algoritmo ms simple de bsqueda y no requiere ningn proceso previo de la tabla, ni


ningn conocimiento sobre la distribucin de las llaves. La bsqueda secuencial es el rea
del problema donde previamente existan mejores algoritmos.

Es el mejor mtodo de bsqueda para registros desordenados y revisa nodo por nodo sin
brincar ninguno (es muy seguro)

Muestreo de acceso:

Este mtodo consiste en observar que tan frecuentemente se solicita cada registro y
ordenarlos de acuerdo a las probabilidades de acceso detectadas.

Movimiento hacia el frente:

Este esquema consiste en que la lista de registros se reorganice dinmicamente. Con este
mtodo, cada vez que bsqueda de una llave sea exitosa, el registro correspondiente se mueve
a la primera posicin de la lista y se recorren una posicin hacia abajo los que estaban antes
que l.

Transposicin:

Este es otro esquema de reorganizacin dinmica que consiste en que, cada vez que se lleve
a cabo una bsqueda exitosa, el registro correspondiente se intercambia con el anterior. Con
este procedimiento, entre ms accesos tenga el registro, ms rpidamente avanzara hacia la
primera posicin. Comparado con el mtodo de movimiento al frente, el mtodo requiere
ms tiempo de actividad para reorganizar al conjunto de registros. Una ventaja de mtodo de
transposicin es que no permite que el requerimiento aislado de un registro, cambie de
posicin todo el conjunto de registros. De hecho, un registro debe ganar poco a poco su
derecho a alcanzar el inicio de la lista.

Ordenamiento:

Una forma de reducir el nmero de comparaciones esperadas cuando hay una significativa
frecuencia de bsqueda sin xito es la de ordenar los registros en base al valor de la llave.
Esta tcnica es til cuando la lista es una lista de excepciones, tales como una lista de
decisiones, en cuyo caso la mayora de las bsquedas no tendrn xito.

Con este mtodo una bsqueda sin xito termina cuando se encuentra el primer valor de la
llave mayor que el buscado, en lugar de la final de la lista.

Desventajas de la tcnica.

Este mtodo de bsqueda es muy lento, pero si los datos no estn en orden es el nico mtodo
que puede emplearse para hacer las bsquedas. Si los valores de la llave no son nicos, para
encontrar todos los registros con una llave particular, se requiere buscar en toda la lista.

Si los registros a los que se accede con frecuencia no estn al principio del archivo, la cantidad
promedio de comparaciones aumenta notablemente dado que se requiere ms tiempo para
recuperar dichos registros.

Para las aplicaciones interactivas que incluyen peticione s o actualizaciones de registros


individuales, los archivos secuenciales ofrecen un rendimiento pobre.

Definitivamente, la bsqueda secuencial es el mtodo menos eficiente; porque se basa en


comparar el valor que se desea buscar con cada uno de los valores del archivo.

Principales Aplicaciones.

Los archivos secuenciales son tpicamente utilizados en aplicaciones de proceso de lotes Y


son ptimos para dichas aplicaciones si se procesan todos los registros. La organizacin
secuencias de archivos es la nica que es fcil de usar tanto en disco como en cinta.

Un ejemplo claro para utilizar esta tcnica de bsqueda es cuando se tiene una base de datos
no muy grande en un negocio pequeo donde los registros ms usados son llamados con
frecuencia, es aqu donde esta tcnica es fuerte, ya que se aplica a un patrn de bsqueda
pequeo, sencillo y manejable; es decir como si fuera una descripcin, es uno tras otro.

Mtodos de bsqueda

La bsqueda de un dato particular entre una coleccin de datos es una operacin que
habitualmente realizan las computadoras.

Un array, como ya sabemos, es una coleccin de datos residente en memoria principal, por
lo que es frecuente que se deba realizar dicha operacin de bsqueda sobre esta estructura.

En este apartado pasaremos a estudiar los diferentes algoritmos que se pueden implementar
adaptados a la estructura array. Algunos son ms eficientes que otros, si bien tambin suelen
ser ms complejos. En todo caso, cuando la longitud del array es pequea, las diferencias de
eficiencia pueden ser irrelevantes.

1.1 Bsqueda secuencial en un vector desordenado

La bsqueda secuencial es la ms sencilla aunque tambin es bastante ineficiente. Consiste


en recorrer el vector elemento a elemento hasta encontrar el elemento buscado.

El proceso puede terminar por dos causas distintas:

Se encuentra el dato buscado (xito)

Se alcanza el final del vector sin hallar dicho dato (fracaso)

Veamos a continuacin el algoritmo en pseudocdigo:

i <-- primero
mientras (v[i]<>valor y i<ultimo)
i <-- i + 1
finmientras
si v[i]= valor entonces
*** instrucciones correspondientes a valor encontrado
sino
*** instrucciones correspondientes a valor no encontrado
finsi

NOTA: se supone que primero es el valor de ndice en que se empieza a buscar, ultimo el
ltimo valor de ndice en que se buscar, y valor, el valor a localizar.

1.2 Bsqueda secuencial en un vector ordenado

Es una adaptacin particular del anterior algoritmo al caso en que el vector en el que se
pretende localizar el dato est previamente ordenado p. ej. Ascendentemente. La eficiencia
mejora, ya que por trmino medio, el proceso de bsqueda acaba antes.

Ahora el proceso puede terminar por tres causas distintas:

Se encuentra el dato buscado (xito)

Se supera la posicin que debera ocupar el dato buscado sin encontrarlo (fracaso)

Se alcanza el final del vector sin hallar dicho dato (fracaso)


Veamos a continuacin el algoritmo en pseudocdigo:

i <-- primero
mientras (v[i]<valor y i<ultimo)
i <-- i + 1
finmientras
si v[i]= valor entonces
*** instrucciones correspondientes a valor encontrado
sino
*** instrucciones correspondientes a valor no encontrado
finsi

NOTA: se hacen las mismas suposiciones que antes. Obsrvese que lo nico que cambia es
la condicin del bucle mientras, que pasa de <> a <

1.3 Bsqueda binaria o dicotmica (slo arrays ordenados)

Este es el mtodo ms eficiente para buscar elementos en un array ordenado.

Consiste en comparar el elemento central del array con el valor buscado. Si coinciden, el
proceso termina, de lo contrario, se pregunta si es menor o mayor, y en funcin de esta
condicin, se descartar la mitad anterior o posterior del array, volvindose a repetir el
proceso, pero ahora en un subarray la mitad de largo, y as sucesivamente hasta dar con el
valor buscado.

El tiempo mximo que se tarda en localizar un dato es logaritmo en base 2 de N siendo N el


nmero de elementos del array entre los cuales se busca.

Tambin se puede terminar el proceso con un resultado de fracaso, lo cual ocurrir cuando el
intervalo de bsqueda se haya reducido a 0.

Veamos el algoritmo en pseudocdigo:

izquierda <- primero


derecha <- ultimo
posicion <- -1
repetir
central <- (izquierda + derecha)/2
si valor = v[central] entonces
posicion<- central
sino
si valor < v[central] entonces
derecha <- central - 1
sino
izquierda <- central + 1
finsi
finsi
mientras (posicin = -1 e izquierda <= derecha)
si (izquierda > derecha) entonces
*** instrucciones correspondientes a valor no encontrado
sino
*** instrucciones correspondientes a valor encontrado
finsi

NOTA: posicin es una variable que contendr -1 (valor ficticio) mientras no se encuentre el
elemento, y cuando ste se halle, pasar a tener como valor la posicin en que se
encuentra. Por otra parte, izquierda y derecha contendrn los valores de ndice inferior y
superior entre los cuales se realiza la bsqueda. Central ser el valor de ndice intermedio
(despreciando los decimales) a esos mrgenes, que irn cambiando a medida que se descarten
subarrays.

Mtodos de ordenacin

Otra de las tareas habituales que debe realizar un ordenador con una coleccin de datos es
ordenarlos, y tambin esta operacin puede realizarse de acuerdo a diferentes algoritmos con
desigual eficiencia.

Pasaremos a estudiar algunos de los ms conocidos. Todos ellos admiten variantes del tipo:

El resultado de la ordenacin puede ser ascendente, o descendente

Se puede comenzar de principio a fin o viceversa

Desarrollaremos en lo sucesivo el caso de ordenacin ascendente y de principio a fin. Adems


supondremos que los elementos del array se hallan indizados de 0 a N-1, siendo por tanto el
tamao del vector de N elementos.

2.1 Ordenacin por intercambio (Mtodo de la burbuja)

Es el ms popular por su sencillez y facilidad para memorizarlo y adaptarlo a un gran nmero


de situaciones, pero tambin es el ms ineficiente.

Consiste en:

Se efectan N-1 pasadas por el array (suponiendo que N sea el n de elementos).


En cada pasada, se va comparando el elemento j-psimo con el siguiente, siendo stos
intercambiados si se encuentran en desorden

Al final de cada pasada, los elementos mayores van siendo llevados hasta las ltimas
posiciones

Cada pasada adems, ser ms corta que la anterior en una comparacin

El proceso concluye al terminar la pasada N-1 que consiste en una nica comparacin entre
los dos primeros elementos del array

En pseudocdigo, el algoritmo es como sigue:

para i<-1 hasta N - 1


para j<-0 hasta N - i - 1
si v[j]>v[j+1] entonces
aux<- v[j]
v[j]<- v[j+1]
v[j+1]<- aux
finsi
finpara
finpara

2.2 Mtodo de la burbuja con test (burbuja modificada)

Este mtodo incluye una mejora en cuanto a eficiencia al mtodo de la burbuja. Consiste en
incluir un flag (bandera, switch o sealizador) que indica si el array se encuentra ya ordenado
tras una pasada intermedia. De ser as, el proceso de ordenacin concluye.

En pseudocdigo tendra el siguiente aspecto:

i <- 0
repetir
ordenado <- 1
para j <- 0 hasta N - 1 - i
si v[j]>v[j+1] entonces
aux<- v[j]
v[j]<- v[j+1]
v[j+1]<- aux
ordenado <- 0
finsi
finpara
i <- i + 1
mientras (ordenado = 1 y i < N - 1)

2.3 Ordenacin por seleccin directa

Este algoritmo consiste en la repeticin de los siguientes pasos:

eleccin del mayor (o menor, si fuera descendente) de los N elementos del array

Colocacin de dicho elemento en la ltima posicin (o la primera)

Volver al paso anterior, pero con los N-1 elementos an en desorden, es decir, ignorando el
que ya se encuentra colocado en su sitio (cada pasada, por tanto, es ms corta que la anterior)

Veamos el algoritmo detallado en pseudocdigo:

para i <- 0 hasta N - 2


pos_mayor <- i
para j <- i+1 hasta N - 1
si v[j]>v[pos_mayor] entonces
pos_mayor <- j
finsi
finpara
aux <- v[pos_mayor]
v[pos_mayor]<-v[i]
v[i]<- aux
finpara

2.4 Ordenacin por insercin directa

Este mtodo consiste en insertar los elementos del array en subarrays que se encuentren ya
ordenados. El subarray ms pequeo que se presenta ordenado de manera natural es el
formado por un slo elemento. A partir de ah, en sucesivas pasadas se van aadiendo
elementos en orden con los anteriores, pasndose a subarrays ordenados cada vez mayores,
hasta completar la totalidad del array.

Veamos el pseudocdigo de este algoritmo:


para i <- 1 hasta N - 1
aux <- v[i]
j <- i - 1
sitio <- 0
mientras (sitio = 0 y j >= 0) hacer
si v[j] > aux entonces
v[j+1] <- v[j]
j <- j - 1
sino
sitio <- 1
finsi
finmientras
v[j+1] <- aux
finpara

2.5 Ordenacin QuickSort

Es el mtodo ms rpido de ordenacin conocido y utiliza tcnicas de recursividad. La idea


que sigue consiste en tomar como referente o "centinela" el elemento central del array, para
a continuacin intercambiar un elemento a su izquierda con otro a su derecha que estn en
desorden relativo, sucesivamente hasta conseguir que todos los elementos que se encuentren
en el primer subarray sean ms pequeos que los que estn en el segundo. Repitiendo este
proceso recursivamente, con las mitades de cada subarray, tendremos al final el array original
completamente ordenado.

Veamos su cdigo directamente en C, ya que debe estar estructurado en forma de funcin


para permitir la llamada recursiva:

void quicksort(int *v, int n)


{
void sort(int izq, int dcha)
{
int i, j, x, w;
i=izq;j=dcha;
x=v[(izq+dcha) / 2];
do {
while (v[i]<x) i++;
while (x < v[j]) j--;
if (i<=j)
{
w=v[i];
v[i]=v[j];
v[j]=w;
i++;
j--;
}
} while (i<=j);
if (izq<j)
sort(izq,j);
if (i<dcha)
sort(i,dcha);
}

sort(0,n - 1);
}

2.6 Mtodo de ordenacin Shell

Este mtodo se basa en la comparacin de elementos que estn separados por intervalos cuya
anchura va disminuyendo sucesivamente. Subdivide en cada pasada el array inicial en un
nmero cada vez mayor de subarrays de longitud decreciente, y realiza en cada uno de ellos
una ordenacin por insercin.

Veamos su descripcin en pseudocdigo:

intervalo <- N / 2
mientras (intervalo > 0) hacer
para i <- intervalo + 1 hasta N
aux <- v[i]
hallado <- 0
j <- i - intervalo
mientras (j>0 y hallado = 0) hacer
si aux < v[j] entonces
v[j+intervalo] <- v[j]
j <- j - intervalo
sino
hallado <- 1
finsi
finmientras
v[j+intervalo] <- aux
finpara
intervalo <- intervalo / 2
finmientras

PROGRAMA N.-10

REALICE UN PROGRAMA QUE BUSQUE LA POSICION EN LA QUE SE


INGRESO UN DATO DE UN VECTOR

Limite tope del vector

Anlisis

Objetivo: buscar la posicin que tiene un dato en un vector

Datos de entrada: n nmeros, vector y el numero a buscar

Datos de salida: vector y la posicin

Proceso:

Leer n nmeros
Ingresar los datos del vector
Imprimir el vector ingresado
Ingresar la bsqueda
Imprimir la posicin
Restricciones: la cantidad debe estar comprendido en el rango entre 1 y 10.

Diseo:

Cuantos datos desea:

Dato[0]= ..

Dato[1]= ..

Dato[2]= ..

..

Su vector es: .

Posicin: .
Codificacin:

Prueba de escritorio:
PROGRAMA N.-11

REALICE UN PROGRAMA QUE LEA UN VECTOR Y LO ORDENE DE FORMA


ASCENDENTE

Anlisis

Objetivo: Ordenar un vector

Datos de entrada: n nmeros, vector.

Datos de salida: vector ordenado

Proceso:

Leer n nmeros
Ingresar los datos del vector
Imprimir el vector ingresado
Ordenar el vector
Imprimir
Restricciones: la cantidad debe estar comprendido en el rango entre 1 y 10.

Diseo:
Cuantos datos desea:

Dato[0]= ..

Dato[1]= ..

Dato[2]= ..

..

Su vector es: .

ordenado: .

Codificacin:
Prueba de escritorio:

PROGRAMA N.-12

REALICE UN PROGRAMA QUE IMPRIMA LA CANTIDAD DE NUMEROS PARE


QUE EXISTE INCREMENTAR EN EL ARCHIVO LA FUNCION QUE ORDENE
EN FORMA DESCENDENTE SIGUIENDO EL SIGUIENTE METODO.

7 12 25 42 9 0
REALICE UN FUNCION QUE MUESTRE EL MENOR DATO DEL VECTOR

ORDENE ENCONTRANDO EL MENOR

0 7 9 12 25 42

Vec1:0 0 0 0 0 0 0

Vec2: 0 7 9 12 25 42

Anlisis

Objetivo: Leer n datos y realiza las funciones incrementadas en el programa inicial

Datos de entrada: n nmeros

Datos de salida: ordenar de forma descendente, el menor dato.

Proceso:

Leer n nmeros
Validar los datos de entrada
Llamar a la funcin ordenar
Encontrar el menor
imprimir el resultado
Restricciones: datos positivos

Codificacin:
Prueba de escritorio:
MATRICES

Array o matrices

Una array bi-dimensional es aquel en donde los componentes son accesibles por medio de
una pareja de ndices que apunten a la fila y a la columna del componente requerido. Los
arrays de este tipo son conocidos tambin con el nombre dematrices. Conceptualmente,
podemos pensar en un array bidimensional como en una lista compuesta de filas y columnas,
en donde para referirnos a una de ellas emplearemos un nmero para indicar la posicin de
fila y otro nmero para indicar la posicin de la columna del componente deseado. Por
ejemplo, consideremos el caso de la tabla o array VentaSemanaQ, la cual est pensada para
registrar las ventas de cada uno de los das de la semana por cuatro semanas, o sea, una tabla
de7 x 4 elementos. De manera conceptual podemos ver el array como se muestra a
continuacin:

array: VentaSemanaQ

COLUMNAS

+--- componente ( 0, 0 )
|
+------+------+------+------+
| dato | dato | dato | dato |
|------|------|------|------|
F | dato | dato | dato | dato |
|------|------|------|------|
I | dato | dato | dato | dato |
|------|------|------|------|
L | dato | dato | dato | dato |
|------|------|------|------|
A | dato | dato | dato | dato |
|------|------|------|------|
S | dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
+------+------+------+------+
|
+---- componente ( 6, 3 )
Si en el array VentaSemanaQ queremos que el elemento de la fila 4, columna 3 (por ejemplo)
contenga el valor de 5000 lo podemos lograr con la instruccin: VentaSemanaQ [4] [3] =
5000; y el estado del array sera:
array: VentaSemanaQ

+--- componente ( 0, 0 )
|
+------+------+------+------+
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | 5000 | <-- componente ( 4, 3 )
|------|------|------|------|
| dato | dato | dato | dato |
|------|------|------|------|
| dato | dato | dato | dato |
+------+------+------+------+
|
+---- componente (6, 3)

PROGRAMA N.-13

REALICE UN PROGRAMA QUE LEA LOS DATOS POR FILAS E IMPRIMA LA


MATRIZ ORIGINAL Y OTRA CON LOS NUMEROS PARES

Anlisis

Objetivo: leer datos en filas e imprimir la matriz y otra con los datos pares

Datos de entrada:

Datos de salida: matriz original y matriz con datos pares

Proceso:

Leer el vector
Imprimir la matriz original
Imprimir la matriz con datos pares
Restricciones: la cantidad debe estar comprendido en el rango entre 1 y 10.

Diseo:

Cuantas filas y columnas desea para su matriz


cuadrada: .

Ingresar la matriz: .

Dato: posicin[ ][ ]=..

Dato: posicin[ ][ ]=..

Dato: posicin[ ][ ]=..

**** **

**** **

****

**** ****

Codificacin:
Prueba de escritorio:
PROGRAMA N.-14

REALICE UN PROGRAMA QUE LEA LOS DATOS EN UNA MATRIZ


CUADRADA Y LOS IMPRIMA EN FORMA DE X.

Anlisis

Objetivo: leer datos en un matriz cuadrada e imprimir en forma de x

Datos de entrada: n nmeros

Datos de salida: matriz impresa en forma de x


Proceso:

Ingresar la cantidad de datos que se desea que tenga la matriz.


Leer la matriz
Imprimir la matriz en forma de x
Restricciones: la cantidad debe estar comprendido en el rango entre 1 y 10.

Diseo:

Cuantas filas y columnas desea para su matriz


cuadrada: .

Ingresar la matriz: .

Dato: posicin[ ][ ]=..

Dato: posicin[ ][ ]=..

Dato: posicin[ ][ ]=..

+ +

+ +

Codificacin:
Prueba de escritorio:
PROGRAMA N.-16

REALICE UN PROGRAMA QUE LEA DATOS EN EL SIGUIENTE FORMATO E


IMPRIMIR EL ORIGINAL

Anlisis

Objetivo: realizar la lectura de datos con formato

Datos de entrada: n nmeros

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos que se desea que tenga la matriz.


Leer la matriz
Realizar la validacin
Imprimir la matriz
Restricciones: la cantidad debe ser positiva

Diseo:
Ingrese los datos:

Posicin[0][0]: 45

Posicin[1][0]: 54

Posicin[2][0]: 67

Posicin[0][1]: 87

Posicin[1][1]: 9

Posicin[2][1]: 8

Posicin[0][2]: 1

Posicin[1][2]: 12

Posicin[2][2]: 23

Sus datos son :

45 87 1 54 9 12 67 8
23

Los datos pares son:

54 12 8

Codificacin:
Prueba de escritorio:
PROGRAMA N.-17

REALICE UN PROGRAMA QUE LEA DATOS e imprima una matriz(funciones).

Anlisis

Objetivo: realizar la lectura de datos con formato

Datos de entrada: n nmeros

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos que se desea que tenga la matriz.


Leer la matriz
Realizar la validacin
Imprimir la matriz
Restricciones: la cantidad debe ser positiva

Diseo:
Ingrese los datos:

Posicin[0][0]: 45

Posicin[1][0]: 54

Posicin[2][0]: 67

Posicin[0][1]: 87

Posicin[1][1]: 9

Posicin[2][1]: 8

Posicin[0][2]: 1

Posicin[1][2]: 12

Posicin[2][2]: 23

Codificacin:
Prueba de escritorio:
PROGRAMA N.-18

REALICE UN PROGRAMA QUE LEA PONGA CERO EN UNA MATRIZ MXN


CON FUNCIONES

Anlisis

Objetivo: realizar la lectura de datos con formato

Datos de entrada: n nmeros

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos que se desea que tenga la matriz.


Leer la matriz
Realizar la validacin
Imprimir la matriz
Restricciones: la cantidad debe ser positiva

Diseo:

Ingrese la cantidad de filas: 4 Ingrese la


cantidad columnas5:

Posicin[0][0]: 1 Posicin[0][2]:2
Posicin[0][4]: 3 Posicin[1][1]: 4
Posicin[1][3]: 5 Posicin[2][0]: 6
Posicin[2][2]: 7 Posicin[2][4]: 8
Posicin[3][1]:9 Posicin[3][4]:10

1 0 2 0 3

0 4 0 5 0

6 0 7 0 8

0 9 0 10 0

Codificacin:
Prueba de escritorio:
PROGRAMA N.-19

REALICE UN PROGRAMA QUE PERMITA LEER NXM Y SUME SUS DATOS EN


UN VECTOR E IMPRIMA LA MATRIZ Y LOS VECTORES, ADEMS CREAR
UNA FUNCIN QUE MULTIPLIQUE DOS MATRICES Y OTRA FUNCIN QUE
BUSQUE EL MENOR DE LOS DATOS DE LA COLUMNAS DE LA MATRIZ.

Anlisis

Objetivo: realizar la lectura de datos con formato

Datos de entrada: n nmeros

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos que se desea que tenga la matriz.


Leer la matriz
Realizar la validacin
Imprimir la matriz
Restricciones: la cantidad debe ser positiva

Diseo:

Ingrese la cantidad de filas: 4 Ingrese la


cantidad columnas5:

Posicin[0][0]: 1 Posicin[0][2]:2
Posicin[0][4]: 3 Posicin[1][1]: 4
Posicin[1][3]: 5 Posicin[2][0]: 6
Posicin[2][2]: 7 Posicin[2][4]: 8
Posicin[3][1]:9 Posicin[3][4]:10
Codificacin:
Prueba de escritorio:
PROGRAMA N.-20

REALICE UN PROGRAMA QUE PERMITA INGRESAR DATOS EN FORMA DE


CARACOL

Anlisis

Objetivo: realizar la lectura de datos con formato caracol

Datos de entrada: n nmeros

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos que se desea que tenga la matriz.


Leer la matriz
Realizar la validacin
Imprimir la matriz

Restricciones: la cantidad debe ser positiva

Diseo:
Ingrese las filas:3

Ingrese las columnas: 3

Mat[0][0]: 1

Mat[0][1]: 2

Mat[0][2]: 3

Mat[1][0]: 3

Mat[1][1]: 4

Mat[1][2]: 5

Mat[2][0]: 6

Mat[2][1]: 7

Mat[2][2]: 8

Codificacin:
Prueba de escritorio:
PROGRAMA N.-21

REALICE UN PROGRAMA QUE PERMITA INGRESAR LAS CALIFICACIONES


CON FORMATO

Anlisis

Objetivo: realizar la lectura de calificaciones

Datos de entrada: calificaciones

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos que se desea que tenga la matriz.


Leer la matriz
Realizar la validacin
Imprimir la matriz
Restricciones: la cantidad debe ser positiva

Diseo:
ORDEN ESTUDIANE CALIFICACIONES

1 jENNY 16

2 Ximena 18

3 Marisol 19

Codificacin:
Prueba de escritorio:

}
PROGRAMA N.-22

REALIAR UN PROGRAMA QUE SIMULE EL JUEGO DEL AHORCADO

Anlisis

Objetivo: simular el juego del ahorcado

Datos de entrada: numeros

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos


Verificar
Realizar operaciones necesarias
Imprimir resultados
Restricciones: la cantidad debe ser positiva

Diseo:

MENU

1. Administrar

2. Jugar

3. Salir

1. Ingrese la palabra: Juan 2. Ingrese una letra a Letra ya ingresada Ingrese la letra i

Codificacin:

1.-Declaracion de Librerias

2.-Declaracion de prototipos
3.-Declara el programa principal

4.-Crear la funcin ubicaxy o gotoxy

5.- Crear funcin de inicializacin de pantalla

6.-Crear la funcin para las instrucciones del juego

7.-Crear la funcin para la construccin del poste del ahorcado


8.-crear la funcin para la inicializacin del juego
9.-Validacion de las letras

10.- Evaluacin de fallos

11.- Construccin del cuerpo del ahorcado


12.- Cuerpo estructural del juego
13.- Determinacin si gano o perdi

PRUEBA DE ESCRITORIO

GANANDO:
PERDIENDO:
ESTRUCTURAS DE DATOS

Las estructuras de datos se emplean con el objetivo principal de organizar los datos
contenidos dentro de la memoria del ordenador. As, nuestra primera experiencia con
estructuras comienza desde el momento mismo en que usamos en nuestros programas
variables de tipos primitivos (char, short, int, float, etc). A la memoria del ordenador se le
puede considerar como un gran bloque compuesto por una serie de BYTES dispuestos
secuencialmente uno detrs de otro. por ejemplo, si un ordenador posee una memoria de
128MB (128 megas) entonces se le puede leer o escribir desde el BYTE 0 hasta el BYTE
128MB - 1 ( 0000000H .. 7FFFFFFH ). Sintaxis general: struct

struct [ <nombre tipo de estructura > ] { [ <tipo> <nombre-variable[, nombre-variable,


...]> ] ; [ <tipo> <nombre-variable[, nombre-variable, ...]> ] ;
... } [ <variables de estructura> ] ; Nota: recuerde que lo que se muestra entre corchetes
es opcional.

struct: Sintaxis ( variacin uno, estructura annima )

De acuerdo con la sintaxis general de la orden struct es posible crear estructuras de datos
annimas. Solamente hay que tener en cuenta que en una declaracin annima se debe definir
al menos una variable al final de la declaracin. Por ejemplo, con el siguiente fragmento de
cdigo:

struct { int a, b; } p1; se declara y define la variable estructurada p1, misma que se compone
por los miembros a y b; ambos del tipo int. Ahora bien, la sintaxis mostrada arriba no es tan
comn ni conveniente, ya que con la misma solamente se esta creando una variable
estructurada pero no un nuevo tipo. Es decir, si deseramos tener otra variable que tuviera
las mismas caractersticas que posee la variable p1, necesitaramos escribir exactamente la
misma instruccin, salvo que cambiando el nombre de la variable. Por ejemplo:

struct { int a, b; } p2; Por supuesto, en una misma lnea de instruccin podemos definir ms
de una variable. Ejemplo:

struct { int a, b; } p1, p2; Entonces, para crear nuevos tipos con struct deberemos de modificar
la sintaxis mostrada en los ejemplos anteriores.

Sintaxis: struct (variacin dos, estructura con nombre)

Observe que, la sintaxis para declarar estructuras con nombre es bastante parecida a la
sintaxis para declarar estructuras annimas; salvo que en una declaracin de estructura con
nombre se debe especificar el nombre deseado para la misma. Adems, en una declaracin
de estructura.

PROGRAMA N.-23

REALIZAR UN PROGRAMA QUE PERMITA CREAR UNA ESTRUCTURA


PERSONA

Anlisis

Objetivo: crear una estructura persona

Datos de entrada: nmeros

Datos de salida: resultados

Proceso:
Ingresar la cantidad de datos
Verificar
Realizar operaciones necesarias
Imprimir resultados
Restricciones: la cantidad debe ser positiva

Diseo:

Ingrese un dato:3

Ingrese codigo: 3

Nombre:

Apellido:

Estatura:

Codificacin:
Prueba de escritorio:
PROGRAMA N.-24

REALIZAR UN PROGRAMA QUE PERMITA CREAR UNA ESTRUCTURA


PERSONA CON VECTORES

Anlisis

Objetivo: crear una estructura persona

Datos de entrada: nmeros

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos


Verificar
Realizar operaciones necesarias
Imprimir resultados
Restricciones: la cantidad debe ser positiva

Diseo:

Ingrese un dato: 3

Ingrese cdigo: 3

Nombre:

Apellido:

Estatura:

Ingrese datos:

Ingrese cdigo:

Codificacin:
Prueba de escritorio:

PROGRAMA N.-25

REALIZAR UN PROGRAMA QUE PERMITA CREAR UNA ESTRUCTURA


CONTROL DE DATOS

Anlisis

Objetivo: crear una estructura persona

Datos de entrada: nmeros

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos


Verificar
Realizar operaciones necesarias
Imprimir resultados
Restricciones: la cantidad debe ser positiva

Diseo:
Ingrese un dato: 3

Ingrese cdigo: 3

Nombre:

Apellido:

Estatura:

Estudiante con mnima estatura:

2 Ximena Ortega 1.2

Codificacin:
Prueba de escritorio:
PROGRAMA N.-26

REALIZAR UN PROGRAMA QUE PERMITA CREAR UNA ESTRUCTURA


PERSONA

Anlisis

Objetivo: crear una estructura persona

Datos de entrada: nmeros

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos


Verificar
Realizar operaciones necesarias
Imprimir resultados
Restricciones: la cantidad debe ser positiva

Diseo:

Ingrese un dato: 3

Ingrese cdigo: 3

Nombre:

Apellido:

Estatura:

Codificacin:
Prueba de escritorio:
PROGRAMA N.-24

REALIZAR UN PROGRAMA QUE PERMITA CREAR ESTRUCTURAS PARA


CALIFICACIONES

Anlisis

Objetivo: crear estructuras para ingreso de datos de un estudiante

Datos de entrada: nmeros

Datos de salida: resultados

Proceso:

Ingresar la cantidad de datos


Verificar
Realizar operaciones necesarias
Imprimir resultados

Restricciones: la cantidad debe ser positiva

Diseo:
Ingrese un dato: 3

Ingrese cdigo: 3

Nombre:

Apellido:

Estatura:

Codificacin:
Prueba de escritorio:
BIBLIOGRAFIAS:

- Lujan, M. S. (2014). Ejercicios resueltos sobre programacion y estructuras de datos. San Vicente del
Raspeig: Publicaciones de la Universidad de Alicante
- Oviedo, R. E. M. (2005). Logica de programacion. Bogota: ECOE Ediciones.
- Marti, O. N., Ortega, M. Y., & Verdejo, L. J. A. (2004). Estructuras de datos y metodos algoritmicos:
Ejercicios resueltos. Madrid: Prentice Hall.

También podría gustarte