Created
March 11, 2014 11:57
-
-
Save tembleking/9484260 to your computer and use it in GitHub Desktop.
Examen de funciones en C [28/01/2014]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <string.h> | |
#include <stdlib.h> | |
//! @author Federico Barcelona | |
//! @date 28/01/2014 | |
//!////////////////////////// BLOQUE 1 //////////////////////////////////// | |
//! Ejercicio 1 /////////////////////////////////////////////////////////////// | |
int multiplos(int num1, int num2) | |
{ | |
if (num1 % num2 == 0) | |
return 1; | |
else if (num2 % num1 == 0) | |
return -1; | |
else return 0; | |
} | |
//! Ejercicio 2 /////////////////////////////////////////////////////////////// | |
int dia(int hora, int min) | |
{ | |
if (hora >= 0 && hora < 7) | |
return 0; | |
else if (hora == 7) | |
{ | |
if (min >= 0 && min < 45) //! Sigue siendo de noche | |
return 0; | |
return 1; | |
} | |
else if (hora > 7 && hora < 18) | |
return 1; | |
else if (hora == 18) | |
{ | |
if (min >= 0 && min < 10) //! Sigue siendo de dia | |
return 1; | |
return 0; | |
} | |
else if (hora > 18 && hora <=23) | |
return 0; | |
} | |
//! Ejercicio 3 /////////////////////////////////////////////////////////////// | |
int letras(char* palabra1, char* palabra2) | |
{ | |
int i; | |
int num1 = 0, num2 = 0; | |
for(i = 0; i < strlen(palabra1); ++i) | |
if (palabra1[i] == 'o') | |
num1++; | |
for (i = 0; i < strlen(palabra2); ++i) | |
if (palabra2[i] == 'o') | |
num2++; | |
if (num1 > num2) | |
return 1; | |
else if (num1 < num2) | |
return -1; | |
else | |
return 0; | |
} | |
//!////////////////////////// FIN BLOQUE 1 //////////////////////////////////// | |
//!//////////////////////////////////////////////////////////////////////////// | |
//!////////////////////////// BLOQUE 2 //////////////////////////////////// | |
//! Ejercicio 8 /////////////////////////////////////////////////////////////// | |
void dateSplit(const char *fecha, int *dia, int *mes) | |
{ | |
//! Formato: dd/mm/aaaa | |
//! ^^ ^^ | |
//! Posicion 01 34 | |
char _dia[3], _mes[3]; | |
_dia[0] = fecha[0]; | |
_dia[1] = fecha[1]; | |
_dia[2] = '\0'; | |
_mes[0] = fecha[3]; | |
_mes[1] = fecha[4]; | |
_mes[2] = '\0'; | |
*dia = atoi(_dia); | |
*mes = atoi(_mes); | |
} | |
const char* estacion(const char *fecha) | |
{ | |
int dia, mes; | |
dateSplit(fecha, &dia, &mes); //! Paso por referencia | |
if (mes < 3 || (mes == 3 && dia < 21)) | |
return "Invierno"; | |
else if ((mes == 3 && dia >= 21) || mes < 6 || (mes == 6 && dia < 21)) | |
return "Primavera"; | |
else if ((mes == 6 && dia >= 21) || mes < 9 || (mes == 9 && dia < 21)) | |
return "Verano"; | |
else if ((mes == 9 && dia >= 21) || mes < 12 || (mes == 12 && dia < 21)) | |
return "Otono"; | |
else // Resto del año | |
return "Invierno"; | |
} | |
//! Ejercicio 10 ////////////////////////////////////////////////////////////// | |
const char* inversionSelectiva(const char* str, char char1, char char2) | |
{ | |
char *aux; | |
//! Reserva dinamica de memoria | |
//! Si no reservamos dinamicamente, no devolvera el valor con 'return' | |
aux = (char *) malloc(50*sizeof(char)); | |
int i, j = 0; // Contadoras | |
int posStart = 0, posFin = 0; | |
int posStartFound = 0, posFinFound = 0; | |
for (i = 0; i < strlen(str); ++i) | |
{ | |
if((str[i] == char1) && !posStartFound) | |
{ | |
posStart = i; | |
posStartFound = 1; | |
} | |
// Buscar la posicion final solo si ha encontrado ya la inicial | |
if(posStartFound && (str[i] == char2) && !posFinFound) | |
{ | |
posFin = i; | |
posFinFound = 1; | |
} | |
} | |
if (!posStartFound || !posFinFound) //! Si no ha encontrado las posiciones | |
return "NULL"; | |
for(i = posFin - 1; i > posStart; --i) | |
{ | |
*(aux + j++) = str[i]; | |
} | |
*(aux + j) = '\0'; | |
return aux; | |
} | |
//!////////////////////////// FIN BLOQUE 2 //////////////////////////////////// | |
//!//////////////////////////////////////////////////////////////////////////// | |
//!////////////////////////// BLOQUE 3 //////////////////////////////////// | |
//! Ejercicio 13 ////////////////////////////////////////////////////////////// | |
// Introducir valor con scanf("&[^\n]",cadena); | |
const char* ganador(const char* resultado) | |
{ | |
char *equipo1, *equipo2; | |
//! Reserva dinamica de memoria | |
//! Si no reservamos dinamicamente, no devolvera el valor con 'return' | |
//! (Y por esto es por lo que hicieron C++... XD) | |
equipo1 = (char *) malloc(15*sizeof(char)); | |
equipo2 = (char *) malloc(15*sizeof(char)); | |
char _goles1[5], _goles2[5]; | |
int goles1, goles2; | |
int i = 0, j = 0; // Contadoras | |
while(resultado[i] != ' ' && resultado[i] != '\0') | |
{ | |
equipo1[j++] = resultado[i++]; | |
} | |
equipo1[j] = '\0'; | |
i++; j = 0; | |
while(resultado[i] != ' ' && resultado[i] != '\0') // En caso de que los goles sean varios digitos | |
{ | |
_goles1[j++] = resultado[i++]; | |
} | |
_goles1[j] = '\0'; | |
i++; j = 0; | |
while(resultado[i] != ' ' && resultado[i] != '\0') | |
{ | |
equipo2[j++] = resultado[i++]; | |
} | |
equipo2[j] = '\0'; | |
i++; j = 0; | |
while(resultado[i] != ' ' && resultado[i] != '\0') // En caso de que los goles sean varios digitos | |
{ | |
_goles2[j++] = resultado[i++]; | |
} | |
_goles2[j] = '\0'; | |
goles1 = atoi(_goles1); // Necesitamos compararlos numericamente | |
goles2 = atoi(_goles2); | |
if (goles1 > goles2) | |
return equipo1; | |
if (goles2 > goles1) | |
return equipo2; | |
return "Empate"; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment