solucion del examen de segunda evaluacion 2012

4
Resuelto por: Víctor Steven Rodríguez Cabrera 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); }

Upload: luis-lainez

Post on 02-Jan-2016

19 views

Category:

Documents


4 download

DESCRIPTION

Prog

TRANSCRIPT

Page 1: Solucion Del Examen de Segunda Evaluacion 2012

Resuelto por: Víctor Steven Rodríguez Cabrera

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

}

Page 2: Solucion Del Examen de Segunda Evaluacion 2012

Resuelto por: Víctor Steven Rodríguez 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;

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) //Casilla descubierta y mina explotada -1 (X)

printf("[ X ]\t");

else if(tablero[i][j] == -2) //Casilla descubierta y no hay mina -2 (O)

printf("[ 0 ]\t");

else //En caso que la mina no ha sido descubierta

printf("[ ]\t");

}

printf("\n");

}

}

Literal ( b ) ( 12 ptos )

int descubrirMina(int tablero[M][N], int x, int y)

{

/*Valores:

Casillas descubiertas -> Mina encontrada (-1)

-> Casilla vacia (-2)

Casillas ocultas -> Mina (1)

-> Sin mina (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;

}

}

Respuesta:

p a b

q

2 4 6 8 10

5 7

Page 3: Solucion Del Examen de Segunda Evaluacion 2012

Resuelto por: Víctor Steven Rodríguez 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;

}

Page 4: Solucion Del Examen de Segunda Evaluacion 2012

Resuelto por: Víctor Steven Rodríguez 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--;

}

}

}