Ejercicio 5

Ejercicio 5

de Maria Ines Barone Prigue -
Número de respuestas: 4

Buenas, cómo están? 

Hice este ejercicio de manera de que el usuario pueda ingresar la cantidad de puntos para el arreglo y las coordenadas de los puntos. 

Por alguna razón no está funcionando, me aparece un cartel de que el programa dejó de funcionar, y no logro entender por qué. Parece que el problema esta en la funcion insertarPunto, ya que no fue inicializado el arreglo, pero no se como solucionarlo.

Desde ya muchas gracias, saludos!

Codigo:

#include <stdio.h>

typedef struct rep_punto
{
    int coordX, coordY;
} Punto;

typedef struct rep_colPuntos
{
    int capacidad;
    int cantidad;
    Punto *arregloPuntos;
} ColPuntos;

void insertarPunto(ColPuntos &colPtos, Punto pto)
{
    if (colPtos.cantidad < colPtos.capacidad)
    {
        int i = colPtos.cantidad;
        colPtos.cantidad++;
        colPtos.arregloPuntos[i + 1] = pto;
        while (i > 0 && (pto.coordX < colPtos.arregloPuntos[i].coordX || (pto.coordX == colPtos.arregloPuntos[i].coordX && pto.coordY < colPtos.arregloPuntos[i].coordY)))
        {
            colPtos.arregloPuntos[i + 1] = colPtos.arregloPuntos[i];
            colPtos.arregloPuntos[i] = pto;
            i--;
        }
    }
}

bool agregarPunto(int capacidad, int cantidad)
{
    if (cantidad < capacidad)
    {
        char resultado;
        printf("Desea agregar punto? (s/n)");
        scanf(" %c", &resultado);
        return resultado == 's';
    }
    else
    {
        printf("No hay capacidad para agregar mas puntos \n");
        return false;
    }
}

void leerPunto(Punto &punto)
{
    printf("Ingrese coordX:\n");
    scanf("%d", &punto.coordX);
    printf("Ingrese coordY:\n");
    scanf("%d", &punto.coordY);
}

int main()
{
    ColPuntos colPtos;
    colPtos.cantidad = 0;
    printf("Ingrese cantidad de puntos a ingresar: \n");
    scanf("%d", &colPtos.capacidad);
    bool agregar = agregarPunto(colPtos.capacidad, colPtos.cantidad);
    while (agregar)
    {
        Punto punto;
        leerPunto(punto);
        insertarPunto(colPtos, punto);
        agregar = agregarPunto(colPtos.capacidad, colPtos.cantidad);
    }
    printf("Puntos ingresados: \n");
    for (int i = 0; i < colPtos.cantidad; i++)
    {
        printf("[%d %d]", colPtos.arregloPuntos[i].coordX, colPtos.arregloPuntos[i].coordY);
    }
    return 0;
}

En respuesta a Maria Ines Barone Prigue

Re: Ejercicio 5

de Andres Jorge Quincke Leone -
Creo que tenes que reservar memoria para el arreglo usando colPtos.arregloPuntos = new Punto[colPtos.capacidad];
Probalo pero la verdad no estoy seguro, mejor que te consteste un profe jaja
En respuesta a Andres Jorge Quincke Leone

Re: Ejercicio 5

de Libertad Tansini -
Hola, si es verdad, tenés que pedir memoria para colPtos primero, algo así:

ColPuntos colPtos;
const int maxPtos = 10;
colPtos.arregloPuntos = new Punto[maxPtos];
colPtos.cantidad = 0;
colPtos.capacidad = maxPtos;

saludos
En respuesta a Libertad Tansini

Re: Ejercicio 5

de Estefany Beatriz Bica Curbelo -

Hola! Se me esta dificultando entender esta parte del ejercicio ¿La reserva de memoria es dentro de la función que nos piden hacer? Porque como yo lo veo es que al pasar colPtos por referencia, este esta ya cargado y con la reserva de memoria ya hecha.