Skip to content

Instantly share code, notes, and snippets.

@tembleking
Created March 11, 2014 11:57
Show Gist options
  • Save tembleking/9484260 to your computer and use it in GitHub Desktop.
Save tembleking/9484260 to your computer and use it in GitHub Desktop.
Examen de funciones en C [28/01/2014]
#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