Consultas, desarrollo de programas y petición de presupuestos:

jueves, 12 de julio de 2012

Define, Bucle For y función Qsort

Diferencias entre mi programa del examen I y el resuelto por el profesor:
1º Diferencia: Tiene parejas de ficheros:
Las funciones hay que declararlas (.h) y el (.c) las definiciones, es para tenerlo más organizado.

La direrencia esta en que  las cabeceras que estan entre "<" y ">"  estan en directorios predefinidos (/usr/include).
Y las que estan entre comillas (") , la busca en nuestro diretorio de trabajo (donde este el archivo loquesea.c)

#include <stdio.h>, la buscaria por ejemlo en /usr/include

#include “main.h”, la busca en el mismo directorio donde ha sido incluido (en donde esta el archivo loquesea.c, ya que en ese esta incluida en esa)

2º Constantes:
Nos vamos al archivo main.h:
En la linea 2 dice:
#define TAMANO 10
defino una constante que se llama TAMANO, que vale 10
Nota:
     La Ñ no vale..
     Todas las constantes se ponen en MAYUSCULAS, por convenio, para no confundirla con las varialbes que se escriben en minusculas.

En la linea 5 dice:
void mostrarTabla(int [TAMANO]); // equivalente a void mostrarTabla(int *);

En la linea 14 dice:
int compararAsc(const void *, const void *);
Me admite cualquier tipo de dato “const void” (int, float, carácter, tabla,)

//--------------------------------------------------------------------------------------------------------------------------//
Nos vamos al main.c:
Linea 46:
case 0:
break
default:
Printf(“Opcion no valida)

No me interesa que haga nada con 0, el resto pondriamos “opcion no valida”

En la descripcion de la funcion: linea 56:
int * = int tabla[TAMANO]

Linea 59: bucle for...,
Si es muy largo el bucle mientras, se suelo olvidar c++, (la condicion de salida)...

Bucle MIENTRAS
Bucle For
C=0
while (c<tamano){
….

c++;
}
For (c=0;c<tamañno;c++){
…..
….
….
….
}
Orden de ejecucion del For:
1) c=0
2) c<tamaño
3) codigo
4) c++

Linea 60: Formatos de presentación de numeros
printf(“%7d”,tabla[c]);
el %7d, presenta un formato de 7 cifras, si no tiene cifras lo rellena con espacio.
%07d, presenta un formato de 7 cifras, si no tiene cifras lo rellena con 0

Linea 82-84: relleno la tabla con el valor maximo

Linea 90: // Busca la posición correcta para insertar el número en la tabla
while(tabla[pos] < num && (pos < (TAMANO-1)) {
pos++;
}

Linea 137: ordenarAsc, uso del método qsort

funcion qsort: necesita 4 argumentos:
1º la tabla que tiene que ordenar,
2º la cantidad de elementos que tiene esa tabla.
3º Cuantos bytes ocupa cada elemento: sizeof(int)
4º la funcion de comparacion que voy a usar: &compararAsc, (que siempre debe de devolver negativo, cero , positivo)
le estoy indicando que es un puntero a la funcion de ordenacion compararAsc

Linea 140: defino la funcion compararAsc
int compararAsc(const void *n1, const void *n2) {
return (*(int *)n1 - *(int *)n2);
}
Un tipo de dato cualquiera que es un puntero y que le llamo n1

Explicacion:
n1 =4
n2=3
n1-n2=1
resultado positivo
Una resta determina si un numero es mayor que otro basandose en si devuelve negativo, positivo o cero.

La forma de apañarme que esta resta sea con valores enteros es: (int *)
*(int *)n1

Para el caso de ordenar Descendiente:

// Ordena la tabla de forma descendente usando qsort (Opción 5)
void ordenarDesc(int *tabla) {
qsort(tabla, TAMANO, sizeof(int), &compararDesc);
}
int compararDesc(const void *n1, const void *n2) {
return (*(int *)n2 - *(int *)n1);
}

Funcion cargarAleatoria:
void cargarAleatorio(int *tabla) {
int c = 0;
// Inicializa secuencia de numeros aleatorios
srand(time(NULL));
for(c = 0; c < TAMANO; c++) {
tabla[c] = 1+(int) (100.0*rand()/(RAND_MAX+1.0));
}
}

Los numeros tienen que ser float.

No hay comentarios:

Publicar un comentario en la entrada