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

#181
Hola

Cita de: Valkyr en 16 Agosto 2011, 19:02 PM
en C que yo sepa si se pueden pasar los parámetros por referencia

En C no se pueden pasar parámetros por referencia como en C++ utilizando &, para hacerlo hay que pasar un puntero y modificar el valor al que apunta, pongo un ejemplo con este ejercicio


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

/*
* Función que calcula el descuento y el subtotal de un producto a partir de su precio unitario y la cantidad introducida
* Devuelve 1 si existe el producto, 0 en caso contrario
*/
int listado(char palabra[], float, int, float*, float*);

int main()
{
    int cant;
    float precio, *desc, *subtotal;
    char palabra[6];

    desc = (float*)malloc(sizeof(float));
    subtotal = (float*)malloc(sizeof(float));

    printf("Ingrese nombre del producto:");
    fgets(palabra, 6, stdin);
    printf("Ingrese precio unitario:");
    scanf("%f", &precio);
    printf("Ingrese cantidad necesitada:");
    scanf("%d", &cant);

    if(listado(palabra, precio, cant, desc, subtotal) == 1)
        printf("| Producto: %s \t\n| Cantidad: %d \t\n| P.unitario: %0.2f \t\n| Descuento: %0.2f \t\n| Subtotal: %0.2f \t\n", palabra, cant, precio, *desc, *subtotal);
    else
        printf("ERROR");

    free(desc);
    free(subtotal);

    return 0;
}


/*
* Función que calcula el descuento y el subtotal de un producto a partir de su precio unitario y la cantidad introducida
* Devuelve 1 si existe el producto, 0 en caso contrario
*/
int listado(char pala[6], float precio, int cant, float *desc, float *subtotal)
{
    if((strcmp(pala, "prod1")==0) || (strcmp(pala, "prod2")==0))
        {
        *desc = (precio*cant*10)/100;
        *subtotal = ((precio*cant)-(*desc));
        return 1;
        }
    else
        if(strcmp(pala, "prod3")==0)
            {
            *desc = 0;
            *subtotal = precio*cant;
            return 1;
            }
        else
            return 0;
    }


Saludos
#182
Hola

Sí es normal que compile, pero el compilador te lanza unos warnings avisándote

Saludos
#183
Hola Alien-Z

cin y cout son de C++, que se encuentran en <iostream> (no existe en C), pero printf y scanf se encuentran en <stdio.h> de C o <cstdio> de C++, por lo tanto para que tu código funcione debes incluirla o sustutuir printf por cout y scanf por cin. Otra cosa, no te acostumbres a utilizar system("pause"), procura que tu código sea estándar, léete esto que te vendrá muy bien.

Otra cosa que quería decirte es que me gusta que estructures el código con las líneas en blanco y las indentaciones, así es mucho más legible, aunque te vas hacia la derecha jajajaja.

En cuanto al código no puedo probarlo ahora mismo asíque no puedo ayudarte con eso.

Saludos



EDITO: estoy viendo que utilizas scanf("%d",&base), scanf("%d",&altura)..... cuando base y altura son de tipo float. Deberías utilizar scanf("%f",&base);
#184
Hola

Además de que estás reservando el tamaño de un puntero

Saludos
#185
num=1+rand()%(11-1);     ==>      num=1+rand()%10;   :silbar: :silbar:
#186
Hola

El srand se utiliza para la generación de números aleatorios, y después rand calcula el número aleatorio. Yo lo utilizo para que el turno al principio sea aleatorio y después lo utilizo para que la máquina reste los objetos aleatoriamente, claro que como dijo antes KaL3o no tiene en cuenta el número de objetos restantes para poder ganar.

Saludos
#187
Muy bueno KaL3o, así se ve mucho más claro

Saludos bro


EDITO:

acabo de darme cuenta de un pequeño "fallo" en mi código
habría que poner:
Código (cpp) [Seleccionar]

cout<<i%10<<" ";

para que si filas vale más de 9 que concuerde con los demás números, tú que crees??

Saludos
#188
Cita de: KaL3o en 22 Julio 2011, 12:55 PM
satu brother creo que no consideraste que la maquina siempre debe ganar

Es cierto, no me fijé en eso

Cita de: KaL3o en 22 Julio 2011, 12:55 PM
Y tampoco pusiste restricción a que el usuario solo puede descontar de 1 a 3 objetos
Esto ya está corregido

Gracias por la corrección

Saludos
#189
OK, te entendí mal jeje

Saludos
#190
Hola

Aquí lo tienes

Código (cpp) [Seleccionar]

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
   int turno, resta, num;

   srand(time(NULL));
   turno = rand() % 2;

   do
       {
       cout << "Introduce el numero de objetos: ";
       cin >> num;
       }
   while(num <= 0);

   while(num > 0)
       {
       cout << endl << "Quedan " << num << " objetos";

       if(turno)
           {
            do
                {
               cout << endl << endl << "Cuantos objetos quieres retirar? [1][2][3]: ";
               cin >> resta;
                }
            while(resta < 1  || resta > 3);
           num -= resta;
           turno = 0;
           }
       else
           {
           resta = rand() % 3 + 1;
           cout << endl << endl << "La maquina retira " << resta << " objetos" << endl;
           num -= resta;
           turno = 1;
           }
       }
   if(turno)
       cout << endl << endl << "ENHORABUENA. Has ganado :)" << endl << endl;
   else
       cout << endl << endl << "Has perdido :(" << endl << endl;

   cout << endl << "Pulse Enter para salir...";
   while(cin.get() != '\n');
   cin.get();
   return 0;
}


Saludos