Define, Bucle For y función Qsort
Para tenerlos siempre a mano y compartirlo con la comunidad
He trasladado los apuntes, ahora se encuentran en esta direccion: enlace
Indice del curso:
Descargas
Enlaces
Videos
Foro
Frases Célebres Que Se Escuchan En Clase
Sobre mi...
Presentación
Sistemas: Decimal, Binario y Hexadecimal
Particiones..
Pseudocodigo
Como almacenar datos: Variables
Empezamos: Primeros pasos en Pseudocódigo
Pseudocódigo: Operadores y Comparaciones
Bucles
Bucles: Prácticas y Ejercicios (I)
Bucles: Prácticas y Ejercicios (II)
Bucles: Prácticas y Ejercicios (III): Reloj y S/N
Menus y Calculadora
Menus y Calculadora (II): En Caso,Procedimientos y Funciones
Menus y Calculadora (III): Ejemplos de uso de funciones
Numeros aleatorios
Tablas o Matrices o Arrays (I)
Tablas o Matrices o Arrays (II)
Gnu/Linux
Instalación de gnu/linux
Primeros pasos: Acceso a la Terminal
Comando de ayuda: man y sus secciones
Editor de texto de terminal: Nano
Comando: ls
Organización de directorios en gnu/linux
Manipulación de Directorios: cd/mkdir/rmdir/tree
Permisos (I)
Comandos para manipular archivos
Comandos de redes (1) en gnu/linux
Compartir disco de red de forma segura (gnu/linux)
Comando Linux: time,head,tail, TUBERIAS, more,less, wc
pwd, find y grep
Permisos, y copias de seguridad (comprimir y descomprimir)
Superar las limitaciones del los servicios de permisos básicos de gnu/linux.
Enlaces duros y blandos del sistema gnu/linux
Programas Shell
Alias y Variables del Sistema. Uso del PATH
Comodines en gnu/linux o de expansión.
Redireccionamiento:
comandos sort y cut
Sistemas de procesos en gnu/linux y multitarea en terminales.
Comandos de tiempo: date y cron
SISTEMAS DE PROCESOS
Repaso de las variables de entorno.
Variables de Usuarios en Bash
Sistema de archivos y montaje de memorias usb
NFS: Protocolo de red sistema de archivos de red.
Lenguaje C estructurado
Instalacion de C y su IDE codelite
Instalando plugins en Codelite
Codelite: versiones más recientes
Tablas de Equivalencias entre Pseudolenguaje y C
Prácticas de C (I)
Prácticas de C: Bucles (I)
Poner comentarios en nuestros programas
Codelite: Depurador
Prácticas de C: Bucles (II)
Problema: Números Primos
Tablas: Secuencias de Números (I)
Tablas: Secuencias de numeros (II) Ordenar
Numeros Aleatorios en C
Funciones y Procedimientos
Define, Bucle For y función Qsort
Tipos de formatos para prinft() y scanf()
Funciones que forman parte de la librería de C <stdio.h> :
Manejo de ficheros (I)
Ficheros (II) y tipos de datos definidos por el usuario
Funciones para manejar cadenas en C (I)
Conversiones de Texto <> Numeros
Analisis de argumentos
Problemas: Analisis de argumentos
Problemas: crear un comando similar al cat y buscar una palabra dentro del archivo.
Soluciones profe del Cat: Flujos de Información, malloc y free
Ver la eficacia de nuestro programa...
Truco: Comando indent
Analisis de argumentos 2: << ( desplazamiento binario) y enmascaramiento binario
Configurar Codelite y Geany para pasar los ejecutables a /home/usuario/bin
Geany: indentación del código fuente
Mostrar en pantalla el contenido de una variable de entorno o de sistema (HOME, PWD, etc) en C
C: trabajar con directorios
Colores en la Consola (I)
Colores en la Consola (II) y movimiento del cursor
Instalación del ncurses y conio.h modificada
librerias en C (I)
librerias en C (II): Como se crean y se usan
make y makefile
Estructurar los programas en C con módulos.
funciones de C para usar comandos del sistema
listas enlazadas dobles: aplicación en Menus
Script en Bash: Introducción
If en bash
Gestion de multiples argumentos en Scripts: For
Parametros, Expresiones, Test en Shell
Let / Case / ejemplos de script
Ejercicios de Script (I)
Examenes
Examen I
examen1 solucion en pseudocodigo
examen1 solucion en c
La solución del profe...
Comentarios sobre la corrección del examen I
Examen 2
examen 2: solución del alumno
examen 2: solución del profe
Examen 3
examen 3: solución del alumno
examen 3: solución del alumno (2º variante): Con uso de estructuras y switch case
examen 3: solución del profe
Examen 4: calculadora no interactiva
solucion 4 alumno
Examen 5: crear comando lsl
examen 5: solucion alumno (usando colores)
examen 5 solucion compi. Antonio
Examen 6: Gestión de trareas y notificarlas
solucion 6: alumno
Examen 7: Crear el comando "mata"
Solucion 7: alumno
solucion 7: alumno antonio
Programa Final
Solución con Menus Graficos
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
C=0
while (c<tamano){
….
…
c++;
}
Bucle For
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.