You are on page 1of 4

FUNDAMENTOS DE PROGRAMACION SOLUCION DEL EXAMEN DE SEGUNDA EVALUACION II TERMINO 2012 2013

TEMA 1 (25 ptos)


void stringNcopy(char *dest ,char *source, int n) { char *pDest, *pSource; pDest = dest; pSource = source; //Caso base if(*(pSource+n) == '\0') //Pregunto si a la posicion que voy, ya es el fin de cadena { *pDest = '\0'; return; } //Caso recursivo else { //Adelanto a source en la posicion de n, es decir al indice donde empiezo a copiar *pDest = *(pSource + n); //Incremento n, para en el siguiente llamado apuntar al siguiente caracter return stringNcopy(pDest+1, pSource, n+1); } }

TEMA 2 (30 ptos) Literal ( a ) ( 5 ptos )


int calcularNota(int n1, int n2, int n3) { if(n1 > n3 && n2 > n3) return n1 + n2; else if(n2 > n1 && n3 > n1) return n2 + n3; else return n1 + n3; }

Literal ( b ) ( 25 ptos )
void procesarNota(FILE *notas, FILE *aprobados, FILE *reprobados) { //Variables a almacenar la informacion leida de "notas" int n1, n2, n3, nota; //La variable nota almacena la nota total que obtuvo el estudiante char matricula[10]="", nombres_completo[25]=""; //Mientras existan datos en "notas.dat" while(!feof(notas)) { fscanf(notas,"%[^|]|%[^|]|%d|%d|%d",matricula, nombres_completo, &n1, &n2, &n3); nota = calcularNota(n1,n2,n3); if( nota >= 120) //Si el estudiante aprobo agrego al archivo "aprobados.dat" fprintf(aprobados,"%s|%s|%d|AP\n",matricula, nombres_completo, nota); else //Si el estudiante reprobo agrego al archivo "reprobados.dat" fprintf(reprobados,"%s|%s|%d|RP\n",matricula, nombres_completo, nota); } fclose(aprobados); fclose(reprobados); }

Resuelto por: Vctor Steven Rodrguez Cabrera

TEMA 3 (5 ptos)

int a=0, b=5, *p, *q; p = &a; q = malloc(sizeof(int)*5); while(a<b) { *(q+a) = 2 * (a+1); *p+=1; } b = *p + *q;

Respuesta: p a b

5
q 2 4 6 8 10

TEMA 4 (40 ptos) Literal ( a ) ( 10 ptos ) void imprimirTablero(int tablero[M][N]) { int i, j; for(i=0; i<M; i++) { for(j=0; j<N; j++) { if(tablero[i][j] == -1) printf("[ X ]\t"); else if(tablero[i][j] == -2) printf("[ 0 ]\t"); else printf("[ ]\t"); } printf("\n"); } } Literal ( b ) ( 12 ptos ) int descubrirMina(int tablero[M][N], int x, int y) { /*Valores: Casillas descubiertas -> Mina encontrada -> Casilla vacia Casillas ocultas -> Mina -> Sin mina

//Casilla descubierta y mina explotada -1 (X) //Casilla descubierta y no hay mina -2 (O) //En caso que la mina no ha sido descubierta

(-1) (-2) (1) (0)

*/ //Pregunto si es una casilla ya descubierta if(tablero[x][y] == -1 || tablero[x][y] == -2) return -1; else if(tablero[x][y] == 1) //Es una casilla con mina { tablero[x][y] = -1; //Marco como mina explotada o encontrada return 1; } else //Es una casilla vacia { tablero[x][y] = -2; return 0; } }

Resuelto por: Vctor Steven Rodrguez Cabrera

Literal ( c ) ( 6 ptos )

int llenarTablero(int tablero[M][N]) { int valor, minas=0, i, j; for(i=0; i<M; i++) { for(j=0; j<N; j++) { valor = rand()%2; if(valor == 1) //Si sale una mina minas++; //Incremento la cantidad de minas tablero[i][j] = valor; //Asigno el valor obtenido (Mina=1, Vacio=0) } } return minas; }

Resuelto por: Vctor Steven Rodrguez Cabrera

Literal ( d ) ( 12 ptos )

//LIBRERIAS #include <stdio.h> #include <stdlib.h> #include <time.h> //CONSTANTES #define M 4 #define N 4 //PROTOTIPOS DE FUNCIONES Y PROCEDIMIENTOS void imprimirTablero(int tablero[M][N]); int descubrirMina(int tablero[M][N], int x, int y); int llenarTablero(int tablero[M][N]); void main() { /* minas: mantiene la cantidad de minas presente en el tablero casillas_vacias: mantiene la cantiad de casillas disponibles */ int tablero[M][N], minas, casillas_vacias, puntaje=0, x, y, m; srand(time(NULL)); minas = llenarTablero(tablero); casillas_vacias = M*N - minas; //Total de celdas - minas while(minas>0 || casillas_vacias>0) { do{ system("cls"); printf("Puntaje: %d\n\n", puntaje); printf("Minas por descubir: %d\n\n", minas); imprimirTablero(tablero); printf("\n\nEscriba las coordenadas x,y: "); scanf("%d,%d",&x,&y); }while(x<0 || x>=M || y<0 || y>=N); m = descubrirMina(tablero, x, y); if(m == 0) //Si es una casilla vacia { puntaje+=2; casillas_vacias--; } else if(m == 1) //Si es una mina { puntaje--; minas--; } } }

Resuelto por: Vctor Steven Rodrguez Cabrera

You might also like