miércoles, 8 de junio de 2011

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();
}

No hay comentarios:

Publicar un comentario