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

#21
¿Este codigo esta bien? Funcionar, funciona como debe, pero me refiero, a la identacion, al prototipo de las funciones y a las variables globales.
¿Las variables globales estan bien colocadas? ¿Alguna deberia ser estatica y la declare como global? Aun tengo un poco de dudas con respecto a eso.


#include <stdio.h>

void pantallacomprarmanzanas(void);
void pantalla1(void);
void pantallacomprarmanzanas(void); // prototipo de funciones //

int monedas = 50;
int cantidadmanzanas = 5;
int preociomanzanas = 2; // variable que se utilizaran en toda la fucnion //
int cant_eleccion;
enum Accion {COMPRAR, VENDER};
enum Accion manzanas;

int main(void){

   while (8 != 5){ /* con esto quiero que el programa no termine nunca */
       pantalla1();
       switch(manzanas) {

           case COMPRAR:
               cantidadmanzanas = cantidadmanzanas + cant_eleccion;
               monedas = monedas - cant_eleccion * preociomanzanas;
               break;

           case VENDER:
               cantidadmanzanas = cantidadmanzanas - cant_eleccion;
               monedas = monedas + cant_eleccion * preociomanzanas;
               break;
       }
   }
}


void inventario(void){
   printf("1 - Manz anas = %d \n",cantidadmanzanas);
   int eleccion;
   scanf("%d", &eleccion);
   if (eleccion == 1){pantallacomprarmanzanas();}
}

void pantalla1(void){
   system("cls");
   printf("Monedas: %d \n",monedas);
   inventario();
}

void pantallacomprarmanzanas(void){
   printf("Que desea hacer con las manzanaz?\n");
   int eleccion;
   printf("1 - Comprar\n");
   printf("2 - Vender\n");
   scanf("%d", &eleccion);
   if (eleccion == 1){manzanas = COMPRAR; printf("¿Que cantidad desea comprar?"); scanf("%d",&cant_eleccion); }
   else
   if (eleccion == 2){manzanas = VENDER; printf("¿Que cantidad desea vender?"); scanf("%d",&cant_eleccion); }
}


(Se podria hacer mucho mas facil con arrays, pero aun no he llegado a ese capitulo del libro)
#22
Cita de: engel lex en 11 Diciembre 2016, 20:50 PM
no se que compilador usas... pero te está dejando pasar muchos errores, las funciones no tienen tipo (main debe ser siempre int), sumar creo que debería ser void según lo que quieras hacer... te está permitiendo compilar sin prototipos y llamar a la función...
Ya llegue al capitulo de funciones y prototipo, y me encontre con algo interesante:

¿A esto te referias? ¿Deberia actualizar el compilador? Es raro que sea vieja, lo descargue hace poco

MOD:Imagen adaptada a lo permitido (Por 3ra vez). Lee las reglas. El tamaño máximo es de 800x600.
#23
Estoy teniendo un problema con el lenguaje, algo, que no entiendo bien, el siguiente código, no para nunca:


#include <stdio.h>

int main() {

   float y;

   for (y= 0.1; y != 1.0 ; y = y + 0.1){

       printf( "%f \n", y );

   }

   return 0;
}


Ademas, los float que muestra cuando compilo tienen demaciados decimales, los cuales no se limitan a 0.1 , 0.2 , 0.3 sino por ejemplo 273.708489.

Siento que hay algo detras de todo esto, que no estoy comprendiendo.

Para observar mejor donde estaba el problema, le coloque esta linea:

if (y > 1)
       {
           break;
       }


Me di cuenta, que "y" toma el valor 1, el cual se muestra como "1.0000000".

Probe con limitar los numeros que se muestran despues de la coma, pero aun asi, no funciono.
#24
Mi primer objetivo en la programacion es crear un sistema de manejo de archivos, a que me refiero con esto. Un programa en el cual, yo le pueda asignar a imagenes distintas categorias por ejemplo "Personas", "Frutas", "Tecnologia". Luego yo poder seleccionar las cualidades de la foto que quiero, y por ejemplo, si selecciono "Tecnologia" y "frutas" me muestre las fotos que cumplen esas dos cualidades

Entonces mi pregunta es si debo de aprender C o "vbscript".

O tal vez se pueda realizar con los dos. Por lo que vi con vbscript es mas facil crear la interfaz
#25
Cita de: fafafa01 en 14 Diciembre 2016, 20:03 PM
Buenas, estoy leyendo el libro "El lenguaje de programación C" de Brian Kernighan y en la pagina 80 del capitulo 4 (funciones y la estructura del programa) hay un código donde declara el prototipo de la función atof (previamente echa) dentro del bloque main, porque hace esto y no la declara antes de entrar al bloque main ¿tiene alguna ventaja?

según el libro declara atof explicitamente en la rutina que la llama.

¿Que tal es ese libro? Yo estoy usando "cómo programar en c c++ deitel". Tengo la misma duda con respecto a los prototipos.
#26
Cita de: jessec01 en 14 Diciembre 2016, 07:21 AM
Se llama prototipo.
http://nereida.deioc.ull.es/~pcgull/ihiu01/cdrom/c/contenido/node10.html
aqui encuentra material de ayuda.

También  tiene que tener en cuenta, que es muy importante que es le especifique todo lo que desea que haga tu programa a la computadora.

Es por eso el uso de los prototipo que no es mas que una inicializacion de una funcion para que el compilador sepa de que tipo es ej: int float char void. o la cantidad de parametro.

Recomiendo que te empiece acostumbra a trabajar de esa forma para concepto mas avanzado de suma importancia.

Creo que lo he entendido, muchas gracias! Ademas, voy a tomar la pagina que pasaste para seguir aprendiendo.

El error del programa que pase, no es eso, por lo que veo, el error esta en la lineal 24 con el " (nombre[j] == 1) ?  sum = nombre[j] + j" ya que el  " int nombre[48];" lo defini en la funcion crear cartas, no en el imprimir. Mi pregunta es ¿Como podria solucionar eso? Si le pongo el "int nombre[48];" se me descontrola todo, lo cual es logico.


Logre terminar el programa ^^, basicamente es para el denominado juego llamado el "chinchon", o la "conga". Que cartas te pueden tocar.
#include <stdio.h>

int main(){

int nombre[4][12];
double valores[1];
int i;

for (i = 0  ; i < 12 ;   i++) /* se le asigna a las 48 cartas el estado "1", significa que existen */
    {
        nombre[0][i] = 1;
        nombre[1][i] = 1;
        nombre[2][i] = 1;
        nombre[3][i] = 1;
    }

int j;
int sum;

for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
        {
            (nombre[0][j] == 1) ? sum = nombre[0][j] + j, printf("%d de espada \t", sum) : printf("\t \t \t");

            (nombre[1][j] == 1) ? sum = nombre[1][j] + j, printf("%d de oro \t", sum) : printf("\t \t \t");

            (nombre[2][j] == 1) ? sum = nombre[2][j] + j, printf("%d de basto \t", sum) : printf("\t \t \t");

            (nombre[3][j] == 1) ? sum = nombre[3][j] + j , printf("%d de copa \n", sum) : printf("\t \t \t");

        }
       
int k,g;

    do {  /* elegir que cartas no estan disponibles */
    printf("introduzca el palo");
    scanf("%d",&k);
    printf("introduzca el numero");
    scanf("%d",&g);
    nombre[k][g] = 0;

    for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
            {
                (nombre[0][j] == 1) ? sum = nombre[0][j] + j, printf("%d de espada \t", sum) : printf("\t \t");

                (nombre[1][j] == 1) ? sum = nombre[1][j] + j, printf("%d de oro \t", sum) : printf("\t \t");

                (nombre[2][j] == 1) ? sum = nombre[2][j] + j, printf("%d de basto \t", sum) : printf("\t \t");

                (nombre[3][j] == 1) ? sum = nombre[3][j] + j , printf("%d de copa \n", sum) : printf("\t \t");

            }
} while (k != EOF);

return 0;
}

#27
Casualmente, justo habia tratado eso, y lo cambie por 48, en realidad, yo puse 47 contando el 0. Pense que arrancaba desde 0, entonces dije {0,1,2, ... ,47} Enseguida que me percate que eran 48 contando el 0, lo arregle ^^. Gracias por estar siempre. (Me di cuenta, porque le faltaba imprimir el 12 de copa jaja)

Solo para chequear, la identacion ahora esta bien?



#include <stdio.h>

int main(){
   
int nombre[48];
double valores[1];
int i;

for (i = 0  ; i < 48 ;   i++) /* se le asigna a las 48 cartas el estado "1", significa que existen */
   {
       nombre[i] = 1;
   }

int j;
int sum;

for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
       {
           (nombre[j] == 1) ?  sum = nombre[j] + j, printf("%d de espada \t", sum) : printf("\t \t \t");

           (nombre[j+12] == 1) ? sum = nombre[j] + j, printf("%d de oro \t", sum) : printf("\t \t \t");

           (nombre[j+24] == 1) ? sum = nombre[j] + j, printf("%d de basto \t", sum) : printf("\t \t \t");

           (nombre[j+36] == 1) ? sum = nombre[j] + j , printf("%d de copa \n", sum) : printf("\t \t \t");

       }
       
return 0;
}




Estoy dudando si no va todo con una identacion mas por el "main"

El codigo anterior, funciona a la perfección. El problema viene ahora, que quiero reorganizarlo en 2 funciones, una que crea las cartas (Asigna a los 48 lugares un 1) y otra, que imprime las cartas existentes:



#include <stdio.h>

void crearcartas(void){

    int nombre[48];
    double valores[1];
    int i;

    for (i = 0  ; i < 48 ;   i++) /* se le asigna a las 48 cartas el estado "1", significa que existen */
        {
            nombre[i] = 1;
        }
    return 0;
}

void imprimircartas(void){

    int j;
    int sum;
    for (j = 0  ; j != 12 ;   j++) /* imprime las cartas existentes */
        {

            (nombre[j] == 1) ?  sum = nombre[j] + j, printf("%d de espada \t", sum) : printf("\t \t \t");

            (nombre[j+12] == 1) ? sum = nombre[j] + j, printf("%d de oro \t", sum) : printf("\t \t \t");

            (nombre[j+24] == 1) ? sum = nombre[j] + j, printf("%d de basto \t", sum) : printf("\t \t \t");

            (nombre[j+36] == 1) ? sum = nombre[j] + j , printf("%d de copa \n", sum) : printf("\t \t \t");
        }
return 0;
}


int main(){

crearcartas();
imprimircartas();

return 0;
}



#28
Este codigo me funciona:
#include <stdio.h>

main(){
int nombre[47];
double valores[1];
int i;
int h = 1;

for (i = 0  ; i < 48 ;   i++)
{
    nombre[i] = h;
    printf("%d",nombre[i]);
}

return 0;
    }




Pero sin embargo, este sigue infinitamente:

    #include <stdio.h>

main(){
int nombre[47];
double valores[1];
int i;

for (i = 0  ; i < 48 ;   i++)
{
    nombre[i] = 1;
    printf("%d",nombre[i]);
}

return 0;
    }


No entiendo muy bien la diferencia.
#29
Programación C/C++ / Re: arreglos en c
13 Diciembre 2016, 04:07 AM
Cita de: engel lex en 13 Diciembre 2016, 02:21 AM
no estoy seguro que intentaste plantear XD
Pense que "1" "2" ... "5" era una manera de distinguir los vertices, osea, 5 vertices, cuantos triangulos puedo formar, pero era la medida de los lados xD


al final esto fue lo que hice.

#include<stdio.h>
#include<math.h>
int main (void)
{
int ARRE[12]={2,3,4,5,9,12,15,16,17,20,22,50};
int i,j,n;
for(i=0;i<=12;i++)
{
for(j=i+1;j<=12;j++)
{
for(n=j+1;n<=12;n++){

if((ARRE[i]+ARRE[j])>ARRE[n]&&(abs(ARRE[i]-ARRE[j])<ARRE[n]))
printf("%d , %d , %d \n\t",ARRE[i],ARRE[j],ARRE[n]);
}

}
printf("\n");
}
printf("\n");
}





CoAdm: No hagas doble post
#30
Programación C/C++ / Re: arreglos en c
13 Diciembre 2016, 02:14 AM
Si lo que estas enumerando son nombres de elementos, y no la medida de los lados, podes usar los principios de básicos de conteo. Mas precisamente combinatorio.
Tenes 5 elementos, y queres ordenarlos de a 3, por la regla del producto eso es 5*4*3, para que quede mas facil, lo completo, dividiendo entre 2*1 y multiplicando por 2*1, eso nos deja 5*4*3*2*1/2*1 que es lo mismo que 5!/2!, pero que sucede, esto te toma {1,2,3} como diferente al {2,1,3} entonces, lo solucionamos, de cuantas maneras se pueden reordenar esto, pues 3!, entonces nos queda
5!/2!*3! lo que es igual a 10.
Espero haber entendido bien lo que planteabas, entonces el problema pasa a ser, programar la combinatoria.

Edito: Volvi a leer y vi que habias puesto que era la medida de los lados, entonces, mi razonamiento no es correcto.