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.