Para la resolución de las prácticas, cada equipo debe iniciar un nuevo repositorio utilizando este repositorio como plantilla.
Escribir una función que dadas:
(xc, yc) de un punto que consideramos centro de una circunferencia;(xp, yp) de un punto del plano;Informe si el punto (xp, yp) está ubicado sobre la circunferencia, o dentro o fuera del círculo.
Nota: Se utilizará un enumerado Referencia que incluirá las opciones INTERNO, EXTERNO y EN_CIRCUNFERENCIA.
enum Referencia
{
INTERNO = -1, // el punto está dentro del círculo
EN_CIRCUNFERENCIA, // el punto está en la circunferencia
EXTERNO // el punto está fuera del círculo
};
enum Referencia dondeEstaElPunto(int xc, int yc, int rc, int xp, int yp);
dondeEstaElPunto(0, 0, 2, 1, 1 ); // INTERNO
dondeEstaElPunto(0, 0, 1, 1, 1 ); // EXTERNO
dondeEstaElPunto(0, 0, 1, 1, 0 ); // EN_CIRCUNFERENCIA
Necesitamos una función que reciba un valor entero n y un dígito d (entero entre 0 y 9), y confirme que dicho dígito d está (o no) entre los del número n.
bool digitoEnNumero(long n, short d);
digitoEnNumero(987, 7); // True
digitoEnNumero(987, 6); // False
Refactorizar el Ejercicio 1 para que los parámetros recibidos sean:
enum Referencia dondeEstaElPuntoBis(Punto centroC, int rc, Punto p);
donde Punto se define así:
struct Punto {
int x, y;
};
struct Punto centro = {0, 0};
struct Punto p1 = {1, 1};
struct Punto p2 = {1, 0};
dondeEstaElPuntoBis(centro, 2, p1) // INTERNO
dondeEstaElPuntoBis(centro, 1, p1) // EXTERNO
dondeEstaElPuntoBis(centro, 1, p2) // EN_CIRCUNFERENCIA
Es necesario administrar los datos de los jugadores de un equipo de futbol (nombre, edad, partidosJugados).
Se pide escribir funciones que informen:
#define TAMANO_STRING 50
#define CANT_JUGADORES 11
struct Jugador {
char nombre[TAMANO_STRING];
int edad, partidosJugados;
};
struct Jugador *jugadoresOrdenadosPorCantDePartidos(struct Jugador equipo[CANT_JUGADORES]);
struct Jugador *jugadoresOrdenadosPorEdad(struct Jugador equipo[CANT_JUGADORES]);
float promedioDePartidosJugados(struct Jugador equipo[CANT_JUGADORES], int edad);
struct Jugador equipo[CANT_JUGADORES] = {
{"Messi", 34, 800},
{"Ronaldo", 37, 900},
{"Neymar Jr.", 29, 500},
{"Mbappe", 22, 200},
{"Lewandowski", 33, 700},
{"Salah", 29, 400},
{"De Bruyne", 30, 600},
{"van Dijk", 30, 400},
{"Ramos", 35, 650},
{"Neuer", 35, 800},
{"Davies", 20, 100}
};
jugadoresOrdenadosPorCantDePartidos(equipo);
// {
// {"Ronaldo", 37, 900},
// {"Messi", 34, 800},
// {"Neuer", 35, 800},
// {"Lewandowski", 33, 700},
// {"Ramos", 35, 650},
// {"De Bruyne", 30, 600},
// {"Neymar Jr.", 29, 500},
// {"Salah", 29, 400},
// {"van Dijk", 30, 400},
// {"Mbappe", 22, 200},
// {"Davies", 20, 100}
// }
jugadoresOrdenadosPorEdad(equipo);
// {
// {"Davies", 20, 100},
// {"Mbappe", 22, 200},
// {"Neymar Jr.", 29, 500},
// {"Salah", 29, 400},
// {"De Bruyne", 30, 600},
// {"van Dijk", 30, 400},
// {"Lewandowski", 33, 700},
// {"Messi", 34, 800},
// {"Ramos", 35, 650},
// {"Neuer", 35, 800},
// {"Ronaldo", 37, 900},
// }
promedioDePartidosJugados(equipo, 35); // 725.0
Dado un archivo de texto que contiene datos de minutos trabajos por personal de una consultora de sistemas informáticos a diferentes clientes, se pide obtener los totales por cliente/año en forma de grilla como se muestra debajo.
El archivo contiene los siguientes datos: Cliente Año Mes Minutos_Trabajados. El separador de campos es un Tabulador.
A continuación se muestra un pequeño ejemplo. Si tuviera el siguiente contenido:
// Cliente Anio Mes Minutos_Trabajados
1000 2019 01 1001
1000 2019 02 50
1001 2020 02 120
1001 2021 03 96
1001 2022 01 48
...
La tabla a producir por el programa debería ser:
| Clientes / Años | 2019 | 2020 | 2021 | 2022 |
|---|---|---|---|---|
| 1000 | 1051 | |||
| 1001 | 120 | 96 | 48 |
La guía incluye un TXT con estos datos según lo especificado a procesar con el nombre TP0_EJ5.txt que contiene aprox. unas 65500 filas a procesar. Y además un archivo TP0_EJ5_esperado.txt con el contenido esperado. Además, en el archivo de pruebas se incluye una función que compara el contenido producido por el algoritmo con el esperado para ver que sean iguales.
La función a implementar tiene la siguiente firma:
#define CANT_MAX_ANIOS 100
#define CANT_MAX_CLIENTES 10000
#define ANIO_INICIO 2013
struct Cliente {
int id;
int totalesPorAnio[CANT_MAX_ANIOS];
};
void procesarArchivo(const char *nombreArchivo);
Se quiere controlar el número de habitantes de un edificio con 8 pisos y 5 departamentos (A, B, C, D y E) en cada piso. Se pide escribir funciones que informen:
#define CANT_PISOS 8
#define CANT_DEPARTAMENTOS 5
typedef struct ViviendaRep {
short piso;
char depto;
} Vivienda;
int pisoConMasHabitantes(int edificio[CANT_PISOS][CANT_DEPARTAMENTOS]);
int cantidadDeViviendasVacias(int edificio[CANT_PISOS][CANT_DEPARTAMENTOS]);
float promedioHabitantesPorVivienda(int edificio[CANT_PISOS][CANT_DEPARTAMENTOS]);
Vivienda viviendaConMasHabitantes(int edificio[CANT_PISOS][CANT_DEPARTAMENTOS]);
void cantidadDeViviendasVaciasPorPiso(int edificio[CANT_PISOS][CANT_DEPARTAMENTOS], int vaciasPorPiso[CANT_PISOS]);
void viviendasVacias(int edificio[CANT_PISOS][CANT_DEPARTAMENTOS], Vivienda viviendasVacias[CANT_PISOS * CANT_DEPARTAMENTOS]);
int edificio[CANT_PISOS][CANT_DEPARTAMENTOS] = {
{3, 5, 2, 1, 0},
{2, 4, 3, 0, 2},
{1, 0, 1, 2, 1},
{0, 1, 0, 0, 0},
{1, 3, 2, 1, 1},
{2, 2, 0, 1, 3},
{1, 0, 0, 2, 1},
{0, 0, 1, 1, 1}
};
pisoConMasHabitantes(edificio) // 2
cantidadDeViviendasVacias(edificio) // 12
cantidadDeViviendasVaciasPorPiso(edificio) // 1 => 1 2 => 1 3 => 1 4 => 4 5 => 0 6 => 1 7 => 2 8 => 2
viviendasVacias(edificio) // 1E 2D 3B 4A 4C 4D 4E 6C 7B 7C 8A 8B
promedioHabitantesPorVivienda(edificio) // 1.325
viviendaConMasHabitantes(edificio) // 1B
Los programas siguientes son presentados sin el texto común
main() {...}.
En cada uno de los siguientes casos, sin ejecutar el código, interpretar y justificar qué es lo que se imprime en la salida estándar.
int i = 4, x = 5;
for (i = 0; i < 10; i++) {
if ( i < x )
printf("%d ", i);
else
printf("%d ", i-x);
}
int array[10], i = 0;
while (i<10) {
array[i] = i * i;
i++;
}
do {
printf("%d ", array[--i]);
} while (i >= 0);
int mi_funcion(int x) {
x=x*5;
return x;
}
void main(void){
int y = 3, x = 4;
printf("La función devuelve %d\n", mi_funcion(y));
printf("La variable vale %d\n", x);
}
int *punta, *puntb;
int x = 7;
int y = 5;
punta = &x;
*punta = 3;
puntb = &y;
*puntb = x;
x = 9;
printf("%d, %d",*puntb, *punta);
int datos(int x, float y, char c)
{
printf("%d %f %c\n", x, y, c);
x = 8;
y = 4.2;
c = 'g';
return x;
}
void main(void)
{
int x = 9;
float y = 44.6;
char c = 'a';
x = datos (x, y, c);
printf("%d %f %c\n", x, y, c);
}
struct medidas{
int alto, ancho, largo;
};
void main(void){
int i;
struct medidas cajas[5];
for (i = 0; i < 5; i++) {
cajas[i].alto = 4;
cajas[i].ancho = 2 * i;
cajas[i].largo = i + 1;
}
for (i = 0; i < 5; i++) {
printf("Medidas de cajas Nº %d: %d alto, %d ancho, %d largo\n", i, cajas[i].alto, cajas[i].ancho, cajas[i].largo);
}
}