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

jueves, 12 de julio de 2012

examen1 solucion en c

#include <stdio.h>
#include <time.h> // para el time() // esto es para el tema del numero aleatorio
#include <stdlib.h> // para el srand()  // esto es para el tema del numero aleatorio
#include <limits.h> // esto es para usar INT_MAX

int pedirnumero(char *,int); // declarar la funcion de pedir numero con el texto que queramos

void escribe_menu(int *);
int leeropcionmenu();
void cargatabla10elementos(int *);
void cargartabla10elementosordenadosmenoramayor(int *);
void rotarlatablaunaposicionizquierda(int *);
void rotarlatablaunaposicionderecha(int *);
void ordenarlatabladescendentemente(int *);
void ordenarlatablaascendente(int *);
void rellenarlatablaconnumerosaleatorios(int *);



int main(int argc, char **argv)
{
    int opcion=1;
    int tabla[10];
    int contador=0;
    srand(time(NULL));  // reiniciar rand con la variable tiempo
    // Pongo todos los numeros de la tabla a cero
    while (contador<10) {
        tabla[contador]=0;
        contador++;
    }


    escribe_menu(tabla);

    while (opcion!=0) {
        //presentacion del menu
        opcion=leeropcionmenu();
        switch(opcion) {
        case 1:
            cargatabla10elementos(tabla);
            escribe_menu(tabla);
            break;
        case 2:
            cargartabla10elementosordenadosmenoramayor(tabla);
            escribe_menu(tabla);
            break;
        case 3:
            rotarlatablaunaposicionizquierda(tabla);
            escribe_menu(tabla);
            break;
        case 4:
            rotarlatablaunaposicionderecha(tabla);
            escribe_menu(tabla);
            break;
        case 5:
            ordenarlatabladescendentemente(tabla);
            escribe_menu(tabla);
            break;
        case 6:
            ordenarlatablaascendente(tabla);
            escribe_menu(tabla);
            break;
        case 7:
            rellenarlatablaconnumerosaleatorios(tabla);
            escribe_menu(tabla);
            break;
        case 0:
            opcion=0;
            break;
        }

        //escribetabla(tabla);

    }

    printf("Fin del programa");
    return 0;
}


//-------------------------------------
// Definicion de funciones
//-------------------------------------

int pedirnumero(char *texto,int contador)
{
    int resul=0;
    printf("%s (%dº):",texto,contador+1);
    scanf("%d",&resul);
    return resul;

}


//-----------------escribir menu ---------------

void escribe_menu(int *tabla)
{
    int c=0;
    while (c<30) {
        printf("\n");
        c++;
    }

    printf("*****************************************************************\n");
    printf("* Menu:                                                         *\n");
    printf("* 1-Cargar la tabla con 10 numeros                              *\n");
    printf("* 2-Cargar la tabla con 10 numeros ordenados de menor a mayor   *\n");
    printf("* 3-Rotar la tabla una posicion a la izquierda                  *\n");
    printf("* 4-Rotar la tabla un posición a la derecha                     *\n");
    printf("* 5-Ordenar la tabla descendientemente                          *\n");
    printf("* 6-Ordenar la tabla ascendentemente                            *\n");
    printf("* 7-Rellenar la tabla con numeros aleatorios                    *\n");
    printf("* 0-Salir                                                       *\n");
    printf("*                                                               *\n");
    printf("* Tabla actual                                                  *\n");
    c=0;
    while (c<10) {
        printf("%d  ,",tabla[c]);
        c++;
    }
    printf("\n");
    printf("*                                                               *\n");
    printf("*****************************************************************\n");

}

//----------------------------------------------

int leeropcionmenu()
{
    int salir=0;
    int valor;
    valor=-1;
    while (salir==0) {

        printf("Escribe la opción:                                \r"); // borra los numeros si ha introducido algo
        printf("Escribe la opción:");
        scanf("%d",&valor);
        if ((valor>-1) && (valor<8)) {
            salir=1;
        }
    }

    return valor;

}

//-------------------------------------------------------------

void cargatabla10elementos(int *tabla)
{
    int elementos=0;
    while (elementos<10) {
        tabla[elementos]=pedirnumero("Escribe el numero",elementos);
        elementos++;
    }


}

//------------------------------------------------------
void cargartabla10elementosordenadosmenoramayor(int *tabla)
{
    int elementos=0;
    int valor=0;
    int pos=0;
    int indice=0;

    // tengo que poner cada valor de la
    //tabla al maximo, para que lo ordene correctamente
    while (elementos<10) {
        tabla[elementos]=INT_MAX;
        elementos++;
    }

    elementos=0;
    while (elementos<10) {
        // obtener el numero
        printf("Escribe el elmento %dº:",elementos+1);
        scanf("%d",&valor);

//determino la posicion
        pos=0;
        while ((tabla[pos]<valor) && (pos<9)) {
            pos++;
        }

// insertar el numero en la posicion obtenida
        indice=9;
        while (indice>pos) {
            tabla[indice]=tabla[indice-1];
            indice--;
        }
        tabla[pos]=valor;
        elementos++;
    }
}


//-------------------------------rotar la tabla una posicion izquierda
void rotarlatablaunaposicionizquierda(int *tabla)
{
    int pos=9;
    int valor=tabla[9];
    while (pos>0) {
        tabla[pos]=tabla[pos-1];
        pos--;
    }
    tabla[0]=valor;
}

//-------------------------------rotar la tabla una posicion derecha
void rotarlatablaunaposicionderecha(int *tabla)
{
    int pos=0;
    int valor=tabla[0];
    while (pos<9) {
        tabla[pos]=tabla[pos+1];
        pos++;
    }
    tabla[9]=valor;
}

//---------------------------------ordenarlatabladescendentemente(tabla
void ordenarlatabladescendentemente(int *tabla)
{
    int num=0;
    int aux=0;
    int c=0;
    while (num<10) {
        c=num+1;
        while (c<10) {
            if (tabla[num]>tabla[c]) {
            } else {
                aux=tabla[c];
                tabla[c]=tabla[num];
                tabla[num]=aux;
            }
            c++;
        }
        num++;
    }
}

//-------------------------------------------------------------
void ordenarlatablaascendente(int *tabla)
{
    int num=0;
    int aux=0;
    int c=0;
    while (num<10) {
        c=num+1;
        while (c<10) {
            if (tabla[num]<tabla[c]) {
            } else {
                aux=tabla[c];
                tabla[c]=tabla[num];
                tabla[num]=aux;
            }
            c++;
        }
        num++;
    }


}

//---------------------------------------------------------
void rellenarlatablaconnumerosaleatorios(int *tabla)
{
    int c=0;
    while (c<10) {
        tabla[c]=1+(int) ((100.0)*rand()/(RAND_MAX+1.0));
        c++;
    }
}

No hay comentarios:

Publicar un comentario