Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ivancea96

#1911
Un lenguaje compilado, uno interpretado, uno imperativo, uno funcional, uno orientado a objetos, uno orientado a eventos, HTML, CSS, javascript.

Esos son los que yo considero lenguajes necesarios de conocer. Ya no digo ser un experto en todos, sino como mínimo conocerlos y poder leerlos. (Esos, o combinaciones de ellos jiji)

Lo único los lenguajes funcionales, tal vez nunca los llegues a utilizar... Pero te abren la mente xD

Esto viene a que, ni C/C++ es mejor que Python ni viceversa. Cada lenguaje en su momento. ¿Nunca vas a usar Python, por ejemplo? Eso no lo sabrás hasta que no sepas las funcionalidades y comodidades de Python. Y eso, con todos los lenguajes. Evidentemente saberse todos los lenguajes es hasta absurdo, por eso 1 de cada tipo ayuda a saber qué necesitas.
#1912
Foro Libre / Re: ¿Qué look de barba tienes?
29 Agosto 2015, 03:00 AM
¿Por qué los 3 modelos que pusisteis tienen los ojos del mismo color? ¬¬ A ver si va a ser eso lo que os gusta de ellos  :xD
#1913
No, es correcto. Pon malloc(sizeof(Array)), puesto que estás reservando memoria del tamaño de Array.

Otra cosa importante: en vez de:
Persona vecPersona[];
pon:
Persona *vecPersona;
Puesto que es un puntero.

Además, tienes otros errores como, en push_back:

int newSize = (*vec)->size*2-(*vec)->size+1;

No sé qué pretendes sacar con esa ecuación. Al principio, siendo size=1, haces un realloc((*vec)->vecPersona, 0). Y ya luego, valores altos. Eso debería quedar:

int newSize = (*vec)->size+1;

En fin, he reconstruido esa función:
void push_back(Array ** vec, Persona tipito){
int newSize = (*vec)->size+1;
Persona *tmp = realloc((*vec)->vecPersona, newSize*sizeof(Persona));
if(tmp){
(*vec)->vecPersona = tmp;
(*vec)->vecPersona[(*vec)->size] = tipito;
(*vec)->size++;
}
    printf("%d-", (*vec)->size);
}


Además, inicialicé el contenido de vecPersona en getArrayInstance:
Array* getArrayInstance(){
    Array *vec;
    vec = (Array*) malloc (sizeof(Array));
vec->vecPersona = 0;
    vec->size = 0;
    return vec;
}


Y otro tema muy importante:

char *hombres[] = {"Carlos", "Pablo"};
No puedes poner un doble puntero para ser inicializado de ese modo.


Además, en push_back te recomiendo poner:

(*vec)->vecPersona[(*vec)->size].nombre = (char*) malloc((strlen(tipito.nombre)+1)*sizeof(char));
strcpy((*vec)->vecPersona[(*vec)->size].nombre, tipito.nombre);


Copiar las cadenas, no copiar los punteros, puesto que si se libera la memoria de uno de ellos, todos los demás perderán lso datos, y podrán tirar errores.

Claro que si vas a hacer un método "pop", tendrás que recordar liberarlos.

Bueno, este es el código completo, por si quieres ver qué se cambió más claramente:

Para strlen y strcpy, la librería <string.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct persona{
    char *nombre;
    int edad;
    int sexo;
}Persona;

typedef struct {
    int size;
    Persona *vecPersona;
}Array;

Array* getArrayInstance(){
    Array *vec;
    vec = (Array*) malloc (sizeof(Array));
vec->vecPersona = 0;
    vec->size = 0;
    return vec;
}

void push_back(Array ** vec, Persona tipito){
int newSize = (*vec)->size+1;
Persona *tmp = realloc((*vec)->vecPersona, newSize*sizeof(Persona));
if(tmp){
(*vec)->vecPersona = tmp;
(*vec)->vecPersona[(*vec)->size] = tipito;
(*vec)->vecPersona[(*vec)->size].nombre = (char*) malloc((strlen(tipito.nombre)+1)*sizeof(char));
strcpy((*vec)->vecPersona[(*vec)->size].nombre, tipito.nombre);
(*vec)->size++;
}
}

void mostrarPersonas(Array *vec){
    int i;
    printf("\n\n");
    for(i=0; i<vec->size; i++){
        printf("(%d) Nombre: %s - Edad: %d - Sexo: ", i, vec->vecPersona[i].nombre, vec->vecPersona[i].edad);
        if(vec->vecPersona[i].sexo == 0)
            printf("Masculino");
        else
            printf("Femenino");
        printf("\n");
    }
}

void cargarPersonas(Array **vec){
    int i, edad, random;
    int cantPersonas = rand()%30+1;
    Persona aux;
    char *hombres[] = {"Ramiro","Pedro","Federico","Jose","Antonio","Pablo","Raul","Gustavo","Gonzalo","Airton"};
    char *mujeres[] = {"Mariana","Jennifer","Luz","Roxana","Ana","Sol","Micaela","Romina","Melina","Camila"};
    for(i=0; i<cantPersonas; i++){
        edad = rand()%80+1;
        aux.edad = edad;
        if( (random = rand()%10) %2 == 0){ // hombres
            aux.nombre = hombres[random];
            aux.sexo = 0;
        }
        else{
            aux.nombre = mujeres[random];
            aux.sexo = 1;
        }

        push_back(vec, aux);
    }
}


int main()
{
    srand(time(NULL));
    Array *vecPersonas = getArrayInstance();
    cargarPersonas(&vecPersonas); // Esto no
    printf("%d", vecPersonas->size);
    mostrarPersonas(vecPersonas);

    return 0;
}
#1914
Array* getArrayInstance(){
    Array *vec;
    vec = (Array*) malloc (sizeof(Persona));
    vec->size = 0;
    return vec;
}


(Array*) malloc(sizeof(Persona));

Si vas a crear un Array, entonces tendrás que poner sizeof(Array), puesto que Array tiene un tamaño de sizeof(Persona*) + sizeof(int) = 8 bytes, mientras que Persona tiene un tamaño de 12 bytes.
#1915
Siempre tienes ciclos de formación profesional.
#1916
Código (csharp) [Seleccionar]
//Verificamos que opcion desea realizar
if(opcion == "sumar")
{
    do{
        operacion.Sumando();
        Console.WriteLine("Desea repetir el proceso (si/no)? ");
        repetir = Console.ReadLine();
    }while(repetir == "si");
}
#1917
Programación C/C++ / Re: Ayuda con hilos en C
27 Agosto 2015, 21:10 PM
Los diferentes hilos no tienen por qué ir coordinados. Si el main acaba antes que los otros threads, los otros threads se acaban al momento.
#1918
Foro Libre / Re: No entiendo la evolución.
27 Agosto 2015, 20:00 PM
Cita de: Orubatosu en 27 Agosto 2015, 19:06 PM
Otro aspecto importante, es que no podemos "perder" una característica. En todo caso puede quedar latente, pero geneticamente está ahí.

Un cambio en el ADN puede hacer que una característica se pierda :/
#1919
Foro Libre / Re: No entiendo la evolución.
27 Agosto 2015, 18:17 PM
Se fueron desarrollando en una rama evolutiva por mutaciones, y al final, llegó a ser lo que es hoy.

Los especímenes sin esas ventosas, 1 de 2: o se convirtieron en otra especie, o desaparecieron.
#1920
Programación C/C++ / Re: Ayuda con hilos en C
27 Agosto 2015, 18:14 PM
Coloca un sleep(1) en el main para ver si el thread llega a ejecutarse antes del join.