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 - jvm1994

#11
En que lenguaje estaríamos trabajando? C o C++?
#12
Programación C/C++ / Re: ejercicio en c++
9 Diciembre 2016, 01:07 AM
A ver, la manera en la que utilizas los IFs, podrías buscar una manera más optima.. así no se consumen tantos recursos. (Se lo considera una buena práctica).

Además podrías separar el código en "Funciones", también llamadas módulos de programa, de esta manera podrías modificar el código sólo modificando un sector, reutilizar código e incluso transformar un problema en pequeñas tareas.

Utilizar estructuras de datos y almacenar datos relevantes para los informes del programa... con diversos campos, llamar a tus entidades y aplicarles propiedades.

Es decir por ejemplo el vendedor Alvaro dispone de los campos.
1. Nombre
2. Monto de dinero obtenido.
3. Porcentaje de comision.

Sería más organizado.

Ahora tal como te mencioné, esto podrías hacerse utilizando un ArrayList... sería mucho más optimo, práctico, sobretodo cuando los programas toman dimensiones mayores.

De esa forma podrías hacerlo "de otra manera", pero mi duda es, te surge algún problema? O simplemente querías saber si hay "otra manera de hacerlo" ??
#13
Programación C/C++ / Re: ejercicio en c++
8 Diciembre 2016, 17:38 PM
Asumo que ya debes estar manejando:
1. Estructura de datos.

2. Switch.

3. Estructuras repetitivas.

4. Condicionales.

5. Algo de aritmetica básica como calcular un porcentaje.

6. Mínimamente una idea de como buscar una referencia en función de una coincidencia.

Vas a tener que compartir algo de tu código, en el foro fomentamos al desarrollo de nuevos programadores, por lo que no hacemos tareas.

Ahora si tu pregunta es que hacer?

En un principio comenzaría planteando las entidades necesarias como estructuras de datos:


typedef struct{
float gananciaGranja;
int librasTotalesVendidas;
}eGranja;

typedef struct{
char nombre[50];
float gananciaVendedor;
}eVendedor;

// Esto es un ejemplo, yo lo haría completamente distinto
// Pero cuando me quiera dar cuenta te voy a terminar codeando todo el proyecto
// Y no es la idea.


Una vez que tengas las entidades planteadas deberías pensar en el funcionamiento de tu programa... todo esto en función de las necesidades que plantea el granjero.

Das de alta tus tres vendedores.

eVendedor elias;
eVendedor albaro;
eVendedor rosa;


Ahora vas a tener que hacer un menú que muestre las opciones posibles.


char seguir = 's'
int opcion;

while(seguir != 's')
{
   //imprimir opcion uno - Vender producto.
   // imprimir opcion dos - Ver montos facturados. (Imprimir granja.ganancia)
   // salir (Cambiar la variable seguir a 'n';

   // Aca deberías pedir con CIN la opcion.

  switch(opcion)
  {
   case 1: // En caso de que la opcion sea uno.
   break;
   case 2: // En caso de que la opcion sea dos.
   break;
   case 3: // Salir.. la opcion seria tres.
   seguir = 'n';
   exit(1);
  }


Ahora en funcion de la opcion deberían pasar ciertas cosas.. por ejemplo en la opcion 1 deberías poner el algoritmo de VENTA.

Ejemplo de algoritmo de venta:

1. Pedir el nombre del vendedor...
Comparar con un if si el nombre es el de alguno de nuestros 3 vendedores, si no lo es tira error y sale del flujo.
- En caso de que sea, hay que dejarlo almacenado por que lo vamos a usar.

2. Preguntar la cantidad de libras que se desean vender.
Luego con esto vamos a evaluar si es menor a 25, si es mayor a 25 o si es mayor a 35.

3. Calcular el monto total y a ese monto aplicarle los descuentos necesarios (Para esto utilizamos un if que evalue la cantidad de libras compradas, de esta manera sabremos que descuento aplicarle)

Además se deberá calcular:

- Sobre el monto que se obtiene luego del descuento, el monto que de dinero que obtendrá la granja y el monto que obtendrá el vendedor.

Entonces acceder a el campo de la entidad granja y Sumarle el monto obtenido (Debe tener descontada la comision del vendedor)

Y además utilizando uno que otro IF anidado encontrar con el nombre cual de las tres estructuras es la que corresponde al vendedor, una vez encontrada acceder al campo correspondiente y SUMARLE el monto que ganó el vendedor con esa venta.

Además algo que olvidé al principio, vas a tener que inicializar los campos de ganancias en 0 (Siendo que la memoria contiene valores basura.. y te va a devolver cualquier número).

Intenté explicarte como hacerlo sin recurrir a otros recursos, hoy existen prácticas mucho más simples, con decirte que eso se puede hacer en unos pocos pasos.. pero bueno, todos tenemos que pasar por eso, a usar la cabeza.
#14
A ver veamos... vos tenes un puntero p1 y en ese puntero das de alta un usuario.. y después con un while recorres el puntero?? El puntero es uno sólo, sí cada vez que vos das de alta un usuario lo das de alta asignando un nuevo espacio en memoria a ese puntero con malloc, perdes la referencia a la direccion de memoria anterior.. es decir después cuando lo busques no vas a saber donde buscarlo, por que no existe un puntero que apunte allí.

Lo más recomendable sería trabajar con un array de entidades.. es decir, tenes la estructura alumnos y declaras una variable de la siguiente manera.


#define CANTIDAD_ALUMNOS 10

alumnos activos[CANTIDAD_ALUMNOS];
// De esta manera vas a tener espacio en memoria para 10 alumnos.

///Entonces podrías recorrerlo de la siguente manera

for(i=0; i <= CANTIDAD_ALUMNOS; i++)
{
printf("Alumno: %s"), activos[i].nombre;
}

// Lo que deberías tener en cuenta es que en este caso
// Te va a imprimir tus 10 espacios en memoria
// Por lo que deberías agregar a tu estructura un FLAG
// Que indique si el alumno está activo o no
// Y A la hora de hacer el alta, cuando das el alta al alumno
// Le pones el flag en 1

// Entonces imprimis así


for(i=0; i <= CANTIDAD_ALUMNOS; i++)
{
   if(activos[i].flagEstado == 1)
   {
   printf("Alumno: %s"), activos[i].nombre;
   }
}



Ahora deberías dar información, que querés que haga tu programa, cómo?, utilizando alguna técnica en particular???

Sí lo que querés es trabajar con punteros podés hacer algo similar utilizando
un array de punteros.

Ahí ya es preferible recurrir a el método de ArrayList.. algo que tiene más una orientación a paradigma de objetos, yo tengo desarrolladas por mí unas excelentes librerías de array list en C, que muy probablemente te ayuden a solucionar esto en unos simples minutos, además están bien documentadas.
#15
Para cuando es esto? Cuando tenes que entregarlo?
#16
Jajaj yo ando estudiando, mañana rindo dos finales juntos, sino revisaba el código.
La verdad es que leí rápido y conteste jajaj, me resultó más efectivo hacer ese mini video y subirlo que ponerme a testear el code, lo siento.
#17
Juan hay un algoritmo que es la version "Play House Disney" es mucho más simple y creo que te podría ser de ayuda, te grabé un video, luego de verlo te indico el último paso por que se cortó.

https://sendvid.com/bh8kvbdo

Una vez realizado este algoritmo

Se toman todos los restos y el último cociente desde abajo hacia arriba.

ATENCION: Agarras el último cociente, que es uno (Es el unico que vale 1)
Y después comenzas a agarrar los restos, desde abajo hacia arriba.

Te quedaría 1111

Nota con / podés obtener el cociente
Con % podes obtener el residuo

Ese algoritmo es bastante más facil de aplicar en un programa.

Link útil: http://diagramas-de-flujo.blogspot.com.ar/2013/01/Determinar-cociente-residuo-division-C.html
#18
Veo en el código estructuras mal anidadas.

A tal punto de que logré ver algo así.


do{
        switch:
       {
       --
       --
       --
       }
       default:
       --
       --
     }



void printTablero(int **matriz, int filas, int columnas)
{
    int i, j;

    for (i=0; i<columnas; i++)
        printf("%4d", i);
    printf("\n ");

    for (i=0; i< filas; i++)
    {
        printf("|");
        for (j=0; j<columnas; j++)
        {
            switch (matriz[i][j])
            {
                caso 1://*Letra que le toca a cada jugador en este caso la letra X le toca al jugador 1*//
                    printf(" X ");
                    break;
                caso 2://*Letra que le toca a cada jugador en este caso la letra O le toca al jugador 2*//
                    printf(" O ");
                    break;   
}

Y ni hablemos de las tabulaciones, odio responder para hacer una crítica, es muy importante entender que un código se escribe una vez y se puede llegar a leer miles y miles de veces, por lo que si estas interesada en ser buena programadora, sería interesante que aprendas a respetar los standares de estilo que tiene C.

Es importante comentar, respetar tabulaciones y anidar correctamente.
#19
Veamos voy a explicarte que es lo que deberías hacer y además voy a darte un ejemplo para que entiendas el concepto.

A una función se le puede pasar como argumento un "valor" o una "referencia".

Cuando hablamos de valor nos referimos a el valor que almacena un elemento en sí, por ejemplo si tenes una funcion suma pasar algo por valor sería así.



// Seguir estos pasos:
// 1. Ver el prototipo de suma para entender que recibe
// 2. Ver el desarrollo para ver como funciona
// 3. Ver el main para entender el ejemplo de pasaje por valor.
//

int suma(int a, int b); // Prototipo de la funcion suma.

int main()
{
// Declaramos dos enteros.
int edad = 5;
int altura = 7;
int resultado;

resultado = suma(edad, altura);
// Pasamos el VALOR DE EDAD y EL VALOR DE ALTURA.
// Esto es un pasaje por valor.

return 0;
}

// Desarrollo de la funcion suma
int suma(int a, int b)
{
int suma;
suma = a + b;

return suma; // retorno el resultado de la suma.
}


Viendo el pasaje por valor, que es el más común, ahora  podrías entender el pasaje por referencia.

Todas las variables poseen un espacio en memoria y un arreglo no es la excepción, un arreglo son un grupo de elementos del mismo tipo bajo el mismo nombre, almacenados en memoria en posiciones contiguas, siendo que dispones de un arreglo de 5 elementos vas a necesitar pasarle a tu función ese arreglo, siendo que ese arreglo esta constituido por cinco elementos será necesario que le pases "LA DIRECCION DE MEMORIA DEL ARREGLO" (Esto es pasaje por referencia) y además, como C no tiene manera de saber que tamaño mide el arreglo, deberas pasarle el tamaño del mismo (En este caso la cantidad de elementos) Así luego cuando llegue la hora de buscar dentro de la función vas a saber cuanto recorrer  sin pasarte y desbordar el arreglo. (Leer partes de memorias que no pertenecen al arreglo, excederse de la cant. de elementos almacenados)



// Arrays paralelos (Se llama paralelo cuando utilizas el SUB INDICE para que estos se //pertenezcan.

char nombres[20][50];
int telefonos[20];

// Prototipo de la función buscar telefono.
int buscarTelefono(char *punteroA_Nombres, int cantidadElementos);

// En tu caso le vas a pasar nombres y 20.
// Tene en cuenta que en un arreglo cuando se emplea "SOLO EL NOMBRE DE EL ARREGLO"
// Automaticamente se recurre a la dirección de memoria inicial del mismo
int main()
{
int idTelefono;
idTelefono = buscarTelefono(nombre, 20);
// Pasamos el puntero de nombre y la cantidad de nombres.

cout<<"Telefono encontrado: "<<telefonos[idTelefono]<<endl;
// De esta manera mostrará el telefono encontrado.


return 0;
}

// En caso de error retornará -1.. en caso de encontrar algo retornará el INDICE DEL ELEMENTO
int buscarTelefono(char *punteroA_Nombres, int cantidadElementos)
{
int posicionArreglo = -1;
char busca[50];
if(punteroA_Nombres != NULL && cantidadElementos > 0) // Validamos que la direccion exista.
{ // Y que el indice sea positivo.

int i;
int posicionArreglo;
cout << "\t Busqueda por nombre: \n\n";
cout<<endl<<endl<<"digite nombre a buscar";
fflush(stdin);
cin.getline(busca,50);

for(i=0; i <= cantidadElementos; i++)
{
    if(strcmp(punteroA_Nombres[i], busca) == 0) // Obtenemos coincidencia
    {
        posicionArreglo = i; // Encontramos la posicion del arreglo.
        break; // Salimos del for.
    }

}

return posicionArreglo;
}


Espero que te sirva, ya no logré ver el pasaje de argumento a tus funciones, por lo que no entiendo como es que podías usar STRCMP para buscar coincidencias.

#20
Cita de: MCKSys Argentina en  6 Diciembre 2016, 18:20 PM
Revisaste los temas que están fijos en este subforo? Porque contienen mucha información...

Saludos!

Hola MCKSys, sí, estoy en eso.. encuentro mucho material útil en este foro, creo que voy a estar por acá durante un buen tiempo.

Ahora mismo tengo en un bloc de notas todos los links que me interesan.

Muchas gracias