miércoles, 8 de junio de 2011

Lista Enlazada Simple Borrado

/*Realiza un programa para enlazar una lista simple, añade 1 menu que nos
permita borrar cualquier elemento de la lista sin perder infromacion.*/
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
//Definimos el nodo
struct registro{
   char nombre[40];
   struct registro *sig;    
};
//Acuñamos un nuevo tipo de dato: nodo
//Así, más adelante, en la función malloc
//podremos utilizar sizeof(nodo)
typedef struct registro nodo;
int mostrar_menu(){
    int opcion;
    system("cls");
    printf("\n********* MENU *********");
    printf("\n0. Salir del programa.");
    printf("\n1. Leer lista enlazada.");
    printf("\n2. Mostrar lista.");
    printf("\n3. Borrar un elemento.");
    printf("\n4. Insertar  un elemento.");
    printf("\nElige una de las opciones: ");
    scanf("%d",&opcion);
    return(opcion);
}
void leer_lista(nodo *inicio){
    nodo *registro;
    int cont=1;
    char seguir='s';
    registro=inicio;
    do{
       printf("\nNombre nodo %d: ",cont++);
       scanf(" %[^\n]",registro->nombre);
       printf("\nDeseas leer mas nombres (s/n)?: ");
       scanf(" %c",&seguir);
       if(seguir=='s'){
          registro->sig=(nodo *) malloc(1*sizeof(nodo));
          registro=registro->sig;
       }
       else{
          printf("\nFINAL DE LA LISTA");
          registro->sig=0;    
      }
    }while(seguir=='s');
    return;
}
void mostrar_lista(nodo *inicio){
   nodo *registro;
   int cont=1;
   registro=inicio;
   printf("\n************ LISTA ************");
   do{
    printf("\n Direccion: %X\tNombre %d: %s\tApunta a: %X",registro,cont++,registro->nombre,registro->sig);  
    registro=registro->sig;
   }while(registro!=0);
   printf("\n\nPara continuar presione cualquier tecla.");
   fflush(stdin);
   getchar();
   return;
}
nodo *borrar_nodo(nodo *inicio,char aux_nombre[]){
   nodo *registro;
   char seguir='s';
   registro=inicio;
   //En caso de que el nodo que quiero borrar
   //sea el primero
   if(strcmp(registro->nombre,aux_nombre)==0)
     inicio=registro->sig;
   else  
   //EN caso de que el nodo que quiero borrar
   //esté entre el primero y el último
   do{
        if(strcmp((registro->sig)->nombre,aux_nombre)==0){
            registro->sig=(registro->sig)->sig;
            seguir='n';
        }
        else
            registro=registro->sig;
    }while(seguir=='s' && registro!=0);
   //En caso de que el nodo que quiera borrar
   // sea el último de la fila
   return(inicio);
}
nodo *insertar_nodo(nodo *inicio,char aux_nombre[],char aux_nombre_anterior[]){
   nodo *registro,*nuevo;
   char seguir='s';
   registro=inicio;
   nuevo=(nodo *) malloc(1*sizeof(nodo));
   strcpy(nuevo->nombre,aux_nombre);
   //Supongo que insertamos en una posicion intermedia
   do{
      if(strcmp((registro->sig)->nombre,aux_nombre_anterior)==0){
            //Conectamos con el siguiente
            nuevo->sig=registro->sig;
            registro->sig=nuevo;
            seguir='n';
      }
      else
          registro=registro->sig;
   }while(seguir=='s' && registro!=0);
   return(inicio);
}
main(){
    //Reservamos memoria para el puntero
    //al primer nodo
    nodo *inicio;
    char aux_nombre[40],aux_nombre_anterior[40];
    inicio=(nodo *) malloc(1*sizeof(nodo));
    int opcion;
    do{
        opcion=mostrar_menu();
        switch(opcion){
            case 0:
                    printf("\nPrograma finalizado");
                    break;
            case 1: //Leer lista
                    leer_lista(inicio);
                    break;
            case 2: //Mostrar lista
                    mostrar_lista(inicio);
                    break;
            case 3://Eliminar nodo
                    printf("\nEscriba el nombre que desea borrar de la lista: ");
                    scanf(" %[^\n]",aux_nombre);
                    inicio=borrar_nodo(inicio,aux_nombre);
                    break;
            case 4:
                    system("cls");
                    printf("\nNombre: ");
                    scanf(" %[^\n]",aux_nombre);
                    printf("\nDelante de quien desea insertar ese nombre: ");
                    scanf(" %[^\n]",aux_nombre_anterior);
                    inicio=insertar_nodo(inicio,aux_nombre,aux_nombre_anterior);
                    break;
            default:
                 printf("\nOpcion incorrecta.");
                 getchar();    
        }
    }while(opcion!=0);
    getchar();
    getchar();
}

Lista Enlazada Doble

/*Completa el código de la función
mostrar_lista_inversa() para que reciba un
puntero al último elemento de la lista y
la muestre por pantalla desde el último al
primer elemento, es decir, en orden inverso

*/
#include<stdio.h>

/*typedef struct{
char nombre[30];
   int edad;
   registro *siguiente;      
}registro; *///ESTO ES IMPOSIBLE


struct elemento_lista{
   char nombre[30];
   int edad;
   struct elemento_lista *siguiente;
   struct elemento_lista *anterior;      
};
//Defino un nuevo tipo de dato al que llamare
//nodo
typedef struct elemento_lista nodo;
void mostrar_lista_inversa(nodo *final){

}
void mostrar_lista(nodo *principio){
     nodo *registro;
     registro=principio;
     int cont=1;
     char seguir='s';
     printf("\n****CONTENIDO DE LA LISTA DE MIS AMIGOS****");
     do{
       printf("\nAMIGO %d",cont++);
       printf("\nNombre: %s",registro->nombre);
       printf("\nEdad: %d",registro->edad);
       if(registro->siguiente!=0)
          registro=registro->siguiente;                      
       else{
          printf("\nFIN DE LA LISTA");
          seguir='n';
       }
     }while(seguir=='s');
    
     return;          
}
nodo *enlazar_lista(nodo *principio){
      int cont=1;
      char seguir='s';
      nodo *registro, *aux_anterior,*final;
      registro=principio;
      aux_anterior=0;
     do{
       printf("\n***Amigo %d***",cont++);
       printf("\nNombre: ");
       scanf(" %[^\n]",registro->nombre);
       printf("\nEdad: ");
       scanf("%d",&registro->edad);
       printf("\nDeseas tener un nuevo amigo (s/n): ");
       scanf(" %c",&seguir);
       if(seguir=='s')
           registro->siguiente=(nodo *)malloc(1*sizeof(nodo));
       else{
           final=registro;
           registro->siguiente=0;
           printf("\nLista enlazada finalizada");
       }
       registro->anterior=aux_anterior;
       aux_anterior=registro;
       registro=registro->siguiente;
     }while(seguir=='s');        
     return(final);        
}
main(){
     nodo *registro,*principio,*final;
     registro=(nodo *) malloc(1*sizeof(nodo));
     principio=registro;
     final=enlazar_lista(principio);
     mostrar_lista(principio);
     mostrar_lista_inversa(final);
     getchar();
     getchar();
}

Cartel Giratorio

Cada Intro que pulses, el mensaje cambiara:


/*Escribe el codigo de un programa para mostrar por pantalla 4 mensaje
publicitario mediante una lista enlazada simple circular
(conecta el ultimo con el primero)*/
#include<stdio.h>
#include<stdlib.h>
struct registro{
    char mensaje[150];
    struct registro *sig;
};
typedef struct registro nodo;
int mostrar_menu(){
    int opcion;
    printf("\n********** MENU **********");
    printf("\n0.Salir del Programa.");
    printf("\n1.Crear lista enlazada.");
    printf("\n2.Reproducir lista enlazada.");
    printf("\nElige una opcion: ");
    scanf("%d",&opcion);
    return(opcion);
}
void crear_lista(nodo *inicio){
    nodo *registro;
    registro=inicio;
    int cont=1;
    char seguir='s';
  
    printf("\nIntroduce los mensajes: ");
    do{
        printf("\n Mnesaje %d: ",cont++);
        scanf(" %[^\n]",registro->mensaje);
        printf("\nDeseas introducir otro mensaje(s/n)?: ");
        scanf(" %c",&seguir);
        if(seguir=='s'){
          registro->sig=(nodo *) malloc(1*sizeof(nodo));
          registro=registro->sig;
        }
        else{
          printf("\nFin de los Mensajes.");
          registro->sig=inicio;
        }
    }while(seguir=='s');
    return;
}
void mostrar_lista(nodo *inicio){
    nodo *registro;
    registro=inicio;
    char seguir='s';
    do{
       printf("\n**********");
       printf("%s",registro->mensaje);
       registro=registro->sig;
       getchar();
       system("cls");
    }while(registro->sig!=0);
  
    return;
}
main(){
    int opcion;
    nodo *inicio;
    char seguir='s';
    inicio=(nodo *) malloc(1*sizeof(nodo));
  
    do{
       opcion=mostrar_menu();
       switch(opcion){
            case 0:
                printf("\nFin del Programa.");
                break;
            case 1:
                crear_lista(inicio);
                break;
            case 2:
                mostrar_lista(inicio);
                break;
            default:
                printf("\nError.");
        }
    }while(seguir=='s');  


       getchar();
       getchar();
}

Cartel Giratorio

Cada Intro que pulses, el mensaje cambiara:


/*Escribe el codigo de un programa para mostrar por pantalla 4 mensaje
publicitario mediante una lista enlazada simple circular
(conecta el ultimo con el primero)*/
#include<stdio.h>
#include<stdlib.h>
struct registro{
    char mensaje[150];
    struct registro *sig;
};
typedef struct registro nodo;
int mostrar_menu(){
    int opcion;
    printf("\n********** MENU **********");
    printf("\n0.Salir del Programa.");
    printf("\n1.Crear lista enlazada.");
    printf("\n2.Reproducir lista enlazada.");
    printf("\nElige una opcion: ");
    scanf("%d",&opcion);
    return(opcion);
}
void crear_lista(nodo *inicio){
    nodo *registro;
    registro=inicio;
    int cont=1;
    char seguir='s';
  
    printf("\nIntroduce los mensajes: ");
    do{
        printf("\n Mnesaje %d: ",cont++);
        scanf(" %[^\n]",registro->mensaje);
        printf("\nDeseas introducir otro mensaje(s/n)?: ");
        scanf(" %c",&seguir);
        if(seguir=='s'){
          registro->sig=(nodo *) malloc(1*sizeof(nodo));
          registro=registro->sig;
        }
        else{
          printf("\nFin de los Mensajes.");
          registro->sig=inicio;
        }
    }while(seguir=='s');
    return;
}
void mostrar_lista(nodo *inicio){
    nodo *registro;
    registro=inicio;
    char seguir='s';
    do{
       printf("\n**********");
       printf("%s",registro->mensaje);
       registro=registro->sig;
       getchar();
       system("cls");
    }while(registro->sig!=0);
  
    return;
}
main(){
    int opcion;
    nodo *inicio;
    char seguir='s';
    inicio=(nodo *) malloc(1*sizeof(nodo));
  
    do{
       opcion=mostrar_menu();
       switch(opcion){
            case 0:
                printf("\nFin del Programa.");
                break;
            case 1:
                crear_lista(inicio);
                break;
            case 2:
                mostrar_lista(inicio);
                break;
            default:
                printf("\nError.");
        }
    }while(seguir=='s');  


       getchar();
       getchar();
}

Lista enlazada simple

#include<stdio.h>
/*typedef struct{
char nombre[30];
   int edad;
   registro *siguiente;      
}registro; ESTO ES IMPOSIBLE*/
struct elemento_lista{
   char nombre[30];
   int edad;
   struct elemento_lista *siguiente;      
};
//Defino un nuevo tipo de dato al que llamare
//nodo
typedef struct elemento_lista nodo;
void mostrar_lista(nodo *principio){
     nodo *registro;
     registro=principio;
     int cont=1;
     char seguir='s';
     printf("\n****CONTENIDO DE LA LISTA DE MIS AMIGOS****");
     do{
       printf("\n********************");
       printf("\nAMIGO %d",cont++);
       printf("\nNombre: %s",registro->nombre);
       printf("\nEdad: %d",registro->edad);
       if(registro->siguiente!=0)
          registro=registro->siguiente;                      
       else{
          printf("\n\nFIN DE LA LISTA");
          seguir='n';
       }
     }while(seguir=='s');
     return;          
}
main(){
     nodo *registro,*principio;
     int cont=1;
     char seguir='s';
    
     registro=(nodo *) malloc(1*sizeof(nodo));
     principio=registro;
    
     do{
       printf("\n***Amigo %d***",cont++);
       printf("\nNombre: ");
       scanf(" %[^\n]",registro->nombre);
       printf("\nEdad: ");
       scanf("%d",&registro->edad);
       printf("\nDeseas tener un nuevo amigo (s/n): ");
       scanf(" %c",&seguir);
       if(seguir=='s'){
           registro->siguiente=(nodo *)malloc(1*sizeof(nodo));
           registro=registro->siguiente;
       }
       else{
           printf("\nLista enlazada finalizada");
           registro->siguiente=0;
       }
     }while(seguir=='s');
     //enlazar_lista(principio);
     mostrar_lista(principio);
     getchar();
     getchar();
}

Ejercicio de Ficheros Resuelto

/*Queremos idear un programa que permita:
1. Generar un fichero de texto para guardar una lista de platos de un
restaurante, el numero de calorias y el precio y guardarlo en un txt
2. Recuperar los platos del fichero txt y ordenarlos por su precio de mayor a
menor guardando la lista ordenada en un fichero con formato propio que incluya
el nombre del plato y el precio mas iva*/
#include<stdio.h>
#include<stdlib.h>
typedef struct{
    char nombre[80];
    int calorias;
    float precio;      
}plato;
int mostrar_menu(){
    int opcion;
    system("cls");
    printf("\n******MENU*****");
    printf("\n0. Salir del programa.");
    printf("\n1. Introducir los platos en un fichero .txt.");
    printf("\n2. Mostrar el contenido del fichero.");
    printf("\n3. Volcar los datos del fichero .txt en un fichero .mdd ordenados.");
    printf("\n4. Mostramos el .mdd.");          
    printf("\nElige una opcion: ");
    scanf("%d",&opcion);
    return(opcion);        
}
void leer_platos(){
    FILE *fichero;
    plato plato_leido;
    char ruta[80];
    char seguir='s';
    int cont=1;
    printf("\nIntroduce la ruta: ");
    scanf(" %[^\n]",ruta);
    fichero=fopen(ruta,"w");
    do{
       printf("\nPLATO %d",cont);
       printf("\nNombre del plato: ");
       scanf(" %[^\n]",plato_leido.nombre);
       printf("\nCalorias: ");
       scanf("%d",&plato_leido.calorias);
       printf("\nPrecio: ");
       scanf("%f",&plato_leido.precio);
       fprintf(fichero,"%s\t%d\t%.2f\n",plato_leido.nombre,plato_leido.calorias,plato_leido.precio);                
       printf("\nDesearias introducir un nuevo plato (s/n): ");
       scanf(" %c",&seguir);
       cont++;                    
    }while(seguir=='s');      
    fclose(fichero);        
}
void mostrar_fichero(){
    FILE *fichero;
    plato plato_leido;
    char ruta[80];
    char seguir='s';
    int cont=1;
    printf("\nIntroduce la ruta: ");
    scanf(" %[^\n]",ruta);
    fichero=fopen(ruta,"r");
    printf("\nCONTENIDO DEL FICHERO: %s",ruta);
    printf("\nPLATO\tCalorias\tPrecio\n");
    do{
       fscanf(fichero,"%[^\t]\t%d\t%f\n",plato_leido.nombre,&plato_leido.calorias,&plato_leido.precio);                    
       printf("%s\t%d\t%.2f\n",plato_leido.nombre,plato_leido.calorias,plato_leido.precio);
    }while(feof(fichero)==0);  
    printf("\nPara continuar presiona cualquier tecla: ");
    fflush(stdin);
    getchar();  
   return;              
}
int leer_datos(FILE *fichero_origen,plato *plato_leido[]){
      int cont=0;
      do{
       plato_leido[cont]=(plato *) malloc(1*sizeof(plato));
       fscanf(fichero_origen,"%[^\t]\t%d\t%f\n",plato_leido[cont]->nombre,&plato_leido[cont]->calorias,&plato_leido[cont]->precio);                    
       //Añadimos el IVA al precio del plato
       plato_leido[cont]->nombre=(plato_leido[cont]->precio*1.18);
       cont++;
    }while(feof(fichero_origen)==0);
    return(cont);          
}
void mostrar_platos_leidos(plato *plato_leido[],int nplatos){
     int cont;
     printf("\nPLATOS LEIDOS");
     for(cont=0;cont<nplatos;cont++){
         printf("\nNombre del plato=%s",plato_leido[cont]->nombre);
         printf("\nCalorias= %d",plato_leido[cont]->calorias);
         printf("\nPrecio= %.2f",plato_leido[cont]->precio);
         printf("\n*****************************");                          
     }                                    
     getchar();
     getchar();
     return;                                    
}
void ordeno_datos(plato *plato_leido[],int nplatos){
     int veces,cont;
     plato *aux;
     for(veces=1;veces<nplatos;veces++)
       for(cont=0;cont<nplatos-1;cont++)
         if(plato_leido[cont]->precio<plato_leido[cont+1]->precio){
           aux=plato_leido[cont];
           plato_leido[cont]=plato_leido[cont+1];
           plato_leido[cont+1]=aux;
         }
     return;
}
void grabo_datos(FILE *fichero_destino,plato *plato_leido[],int nplatos){
     char ruta[80];
     int cont;
     printf("\nIntroduce la ruta en la que quieres guardar el fichero .mdd: ");
     scanf(" %[^\n]",ruta);
     fichero_destino=fopen(ruta,"w");
     if(fichero_destino==0)
       printf("\nError en la ruta.");
     else{
       for(cont=0;cont<nplatos;cont++)  
         fwrite(plato_leido[cont],sizeof(plato),1,fichero_destino);
       fclose(fichero_destino);
     }
     return;                              
}
void pasar_txt_format_ordenado(){
     char ruta[80];
     plato *plato_leido[50];
     int nplatos;
     FILE *fichero_origen,*fichero_destino;
     printf("\nIntroduce la ruta: ");
     scanf(" %[^\n]",ruta);
     fichero_origen=fopen(ruta,"r");
     nplatos=leer_datos(fichero_origen,plato_leido);
     mostrar_platos_leidos(plato_leido,nplatos);
     ordeno_datos(plato_leido,nplatos);
     printf("\nDespues de ordenar los platos: \n");
     mostrar_platos_leidos(plato_leido,nplatos);
     grabo_datos(fichero_destino,plato_leido,nplatos);
     return;                      
}
void mostrar_mdd(){
     FILE *fichero_destino;
     char ruta[80];
     plato plato_leido;
    
     printf("\nIntroduce la ruta: ");
     scanf(" %[^\n]",ruta);
     fichero_destino=fopen(ruta,"r");
    
     printf("\nCONTENIDO DEL FICHERO: %s",ruta);
     printf("\nPLATO\tCalorias\tPrecio\n");
     do{
       fscanf(fichero_destino,"%[^\t]\t%d\t%f\n",plato_leido.nombre,&plato_leido.calorias,&plato_leido.precio);                    
       printf("%s\t%d\t%.2f\n",plato_leido.nombre,plato_leido.calorias,plato_leido.precio);
     }while(feof(fichero_destino)==0);
     return;
}
main(){
      int opcion;
      do{
       opcion=mostrar_menu();
       switch(opcion){
          case 0:
               printf("\nPrograma finalizado");
               break;
          case 1:
               system("cls");
               leer_platos();
               break;  
          case 2:
               system("cls");
               mostrar_fichero();
               break;
          case 3:
               system("cls");
               pasar_txt_format_ordenado();
               break;
          case 4:
               system("cls");
               mostrar_mdd();
               break;
          default:
               printf("\nEsa opcion no existe.Presione cualquier tecla para continuar: ");
               getchar();    
       }
      }while(opcion!=0);  
}

Leer un fichero

Escribir en un Fichero



Punteros

Otra vez sin captura, mucho codigo, que no cabe en 1 foto:



/*2.    Escriba un programa en el que se rellene una matriz 4 × 4 con las
iniciales de sus nombre y apellidos al azar. Utilice reserva dinámica de memoria
 y notación de punteros.*/
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void rellena_matriz(char *matriz[]){
     int fil,col;
     //Se reserva la memoria
     for(col=0;col<4;col++)
        matriz[col]=(char *)malloc(4*sizeof(char));
     //Rellenamos la matriz
     for(fil=0;fil<4;fil++)
        for(col=0;col<4;col++){
           *(*(matriz+col)+fil)='*';
          
        }
     return;
}
void pinta_matriz(char *matriz[]){
     int fil,col;
     for(fil=0;fil<4;fil++){
        for(col=0;col<4;col++)
          printf(" %c",*(*(matriz+col)+fil));
        printf("\n");
     }
     return;    
}
void poner_iniciales(char *matriz[],char nombre[],char apellido1[],char apellido2[]){
     char iniciales[3];
     int cont,fil,col;
     iniciales[0]=nombre[0];
     iniciales[1]=apellido1[0];
     iniciales[2]=apellido2[0];
    
     for(cont=0;cont<3;cont++){
       fil=rand()%4;
       col=rand()%4;
       *(*(matriz+col)+fil)=iniciales[cont];
     }
     return;
}
main(){
       char *matriz[4],nombre[30],apellido1[30],apellido2[30];
       long tiempo;
       tiempo=time(0);
       srand(tiempo);
       rellena_matriz(matriz);
       pinta_matriz(matriz);
       printf("\nNombre: ");
       scanf(" %s",nombre);
       printf("\nApellido1: ");
       scanf(" %s",apellido1);
       printf("\nApellido2: ");
       scanf(" %s",apellido2);
       poner_iniciales(matriz,nombre,apellido1,apellido2);
       pinta_matriz(matriz);      
       getchar();
       getchar();
}





Y otro mas:





/*4.Para representar la ubicación de los alumnos en un aula se decide
declarar una matriz 4 × 4 de punteros a caracteres. Cada puntero de la matriz
apuntará al nombre de un alumno. Añada una función que reciba los nombres de dos
alumnos e intercambie sus posiciones.*/
#include<stdio.h>
#include<string.h>
#define N 3
typedef struct{
      int fila;
      int columna;   
}coordenadas;
void rellenar_clase(char *alumnos[][N]){
    int fil,col,longitud;
    char aux[40];
    for(fil=0;fil<N;fil++)
         for(col=0;col<N;col++){
            printf("\nAlumno (%d,%d): ",fil,col);
            scanf(" %[^\n]",aux);
            longitud=strlen(aux);
            alumnos[fil][col]=(char *) malloc(longitud*sizeof(char));
            strcpy(alumnos[fil][col],aux);
            printf("\nAcabo de leer: %s",alumnos[fil][col]);
        }
    return;
}
void mostrar_clase(char *alumnos[][N]){
    int fil,col;
    printf("\n****LA CLASE*********\n");
     for(fil=0;fil<N;fil++){
        for(col=0;col<N;col++)
          printf("\t%s",alumnos[fil][col]);
        printf("\n");
    }
    return;
}
void intercambiar_alumnos(char *alumnos[][N],char nombre1[],char nombre2[]){
    int fil,col;
    coordenadas posicion1,posicion2;
    char *aux_nombre;
    for(fil=0;fil<N;fil++)
         for(col=0;col<N;col++){
           if(strcmp(nombre1,alumnos[fil][col])==0){
              posicion1.fila=fil;
              posicion1.columna=col;
            }
           if(strcmp(nombre2,alumnos[fil][col])==0){
              posicion2.fila=fil;
              posicion2.columna=col;
            }
    }
    aux_nombre=alumnos[posicion1.fila][posicion1.columna];
    alumnos[posicion1.fila][posicion1.columna]=alumnos[posicion2.fila][posicion2.columna];
    alumnos[posicion2.fila][posicion2.columna]=aux_nombre;
}
main(){
       char *alumnos[N][N];
       char nombre1[40],nombre2[40];
       rellenar_clase(alumnos);
       mostrar_clase(alumnos);
       printf("\nIntroduce los nombres de los alumnos que quieres intercmabiar: ");
       printf("\nAlumno 1: ");
       scanf(" %[^\n]",nombre1);
       printf("\nAlumno 2: ");
       scanf(" %[^\n]",nombre2);
       intercambiar_alumnos(alumnos,nombre1,nombre2);
       mostrar_clase(alumnos);  
       getchar();
       getchar();
}

Metodo de Ordenacion de la Burbuja y Seleccion

Metodo Ordenacion de Seleccion:


Metodo Ordenacion de la Burbuja:

Matrices

Aqui vamos a presentar varios ejercicios de matrices:







/*Matriz que se rellena aleatoriamente con *'s*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main(){
       char matriz[10][10];
       int filas,col,cont;
       long seed;
       seed=time(0);
       srand(seed);
       //Rellenamos la matriz
       for(filas=0;filas<10;filas++)
           for(col=0;col<10;col++)
               matriz[filas][col]='O';
       //Mostramos
       for(filas=0;filas<10;filas++){
           for(col=0;col<10;col++)
              printf("%c ",matriz[filas][col]);
           printf("\n");
       }
       //Generamos las posiciones al azar para 5 *'s
       for(cont=1;cont<=5;cont++){
           do{
              filas=rand()%10;
              col=rand()%10;
           }while(matriz[filas][col]=='*');
           matriz[filas][col]='*';
       }
       printf("\nLa matriz tras sembrarla de asteriscos.\n\n");
       //Mostramos
       for(filas=0;filas<10;filas++){
           for(col=0;col<10;col++)
              printf("%c ",matriz[filas][col]);
           printf("\n");
       }
       getchar();
       getchar();
}

2º - Operaciones con Cadenas

Este ejercicio como tiene mucho codigo, hare un copypaste:





/*Al meter un texto, el programa nos permite realizar unas estadisticas simples del texto*/

#include<stdio.h>

int cuenta_vocales(char texto[]){//Funcion para contar las vocales del texto introducido
     int cont=0;
     int aux=0;
     do{//Cuenta todas las vocales que se hayan introducido
        if(toupper(texto[cont])=='A' || toupper(texto[cont])=='E' || toupper(texto[cont])=='I' || toupper(texto[cont])=='O' || toupper(texto[cont])=='U')
          aux++;
     }while(texto[++cont]!='\0');
     return(aux);
}
int cuenta_consonantes(char texto[]){//Funcion para contar las consonantes del texto introducido
     int cont=0;
     int aux=0;
     do{//Cuenta todas las consonantes que se hayan introducido
        if(toupper(texto[cont])=='B' || toupper(texto[cont])=='C' || toupper(texto[cont])=='D' || toupper(texto[cont])=='F' || toupper(texto[cont])=='G' || toupper(texto[cont])=='H' || toupper(texto[cont])=='J' || toupper(texto[cont])=='K' || toupper(texto[cont])=='L' || toupper(texto[cont])=='M' || toupper(texto[cont])=='N' || toupper(texto[cont])=='P' || toupper(texto[cont])=='Q' || toupper(texto[cont])=='R' || toupper(texto[cont])=='S' || toupper(texto[cont])=='T' || toupper(texto[cont])=='V' || toupper(texto[cont])=='W' || toupper(texto[cont])=='X' || toupper(texto[cont])=='Y' || toupper(texto[cont])=='Z')
          aux++;
     }while(texto[++cont]!='\0');
     return(aux);
}
int cuenta_palabras(char texto[]){//Funcion para contar las palabras del texto introducido
    int cont=0;
    int aux=0;
    do{//Cuenta las palabras por cada espacio que encuentra
        if(texto[cont]==' ')
            aux++;
    }while(texto[++cont]!='\0');
    aux++;
    return(aux);
}
int cuenta_frases(char texto[]){//Funcion para contar las frases del texto introducido
    int cont=0;
    int aux=0;
    do{//Cuenta todos los puntos introducidos, que significa que acaba una frase
        if(texto[cont]=='.')
            aux++;
    }while(texto[++cont]!='\0');
    return(aux);
}
main(){//Declaramos las variables que vamos a utilizar en el programa
       int opcion,cont,cont2,longitud,nvocales,nconsonantes,palabra,nfrases,npalabras;
       char texto[80],respuesta='s',respuesta2='s';
       float resultado;
           //Intorudcimos el texto, limpiamos el buffer del teclado 
           printf("\nIntorduce un texto:");
           fflush(stdin);
           scanf("%[^\n]",texto);//Con esto, leemos todos los caracteres menos el salto de linea
          
           do{//Iniciamos un bucle para poder volver al menu de opciones
              //Mostramos las diferentes opciones del programa
               printf("\n*****MENU*****");
               printf("\nOpciones: ");
               printf("\n1.Caracteres introducidos");
               printf("\n2.Palabras introducidas");
               printf("\n3.Frases introducidas");
               printf("\n4.Vocales y consonantes introducidas");
               printf("\n\nElige una opcion: ");
               scanf("%d",&opcion);
               switch(opcion){
                  case 1://Opcion uno, Caracteres introducidos
                       cont=0;
                       printf("\nCalculamos cuantos caracteres has introducido.");
                       while(texto[++cont]!='\0');//Pasamos por el texto introducido y contamos todos los caracteres
                       longitud=cont;
                       printf("\nTiene %d caracteres.",longitud);
                       break;
                      
                  case 2://Opcion dos, Palabras introducidas
                       cont=0;
                       printf("\nCalculamos cuantas palabras se han introducido.");
                       npalabras=cuenta_palabras(texto);//Funcion definida mas arriba
                       printf("\nEl texto tiene %d palabras.",npalabras);
                       break;
                      
                  case 3://Opcion tres, Frases introducidas
                       cont2=0;
                       printf("\nCalculamos cuantas frases se han introducido.");
                       nfrases=cuenta_frases(texto);//Funcion definida mas arriba            
                       printf("\nTiene %d frases.",nfrases);
                       break;
                                       
                  case 4://Opcion cuatro, Vocales y consonantes introducidas
                       cont=0;
                       printf("\nCalculamos cuantas vocales y consonantes se han introducido.");
                       nvocales=cuenta_vocales(texto);//Funcion definida mas arriba
                       printf("\nTiene %d vocales.",nvocales);
                       nconsonantes=cuenta_consonantes(texto);//Funcion definida mas arriba
                       printf("\nTiene %d consonantes.",nconsonantes);
                       break;
                      
                  default://Si el usuario entra una opcion incorrecta
                          printf("\nOpcion incorrecta");
               }//Preguntamos si queremos elegir otra opcion
               printf("\n\nDeseas introducir una nueva opcion? (s/n): ");
               scanf(" %c",&respuesta);
               system("cls");//Limpiamos la pantalla            
           }while(respuesta=='s');
       printf("\n\nGracias por usar el programa.");
       getchar();
       getchar();  
}






A mi me funciona.

Operaciones con Cadenas

En este programa lo que vamos a realizar, es poder cambiar un string (frase), como queramos.


Aqui muestro el resultado: