solucion del examen de segunda evaluacion 2012
DESCRIPTION
ProgTRANSCRIPT
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);
}
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
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;
}
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--;
}
}
}