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