Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ejercicio usar constante para dar nombre a un valor

Estas en el tema de Ejercicio usar constante para dar nombre a un valor en el foro de C/C++ en Foros del Web. Buenas, he empezado el tema de las constantes ahora y me empieza a explicar como declararla para que tenga un valor... usa el ejemplo de ...
  #1 (permalink)  
Antiguo 21/02/2014, 13:46
 
Fecha de Ingreso: julio-2013
Ubicación: España
Mensajes: 51
Antigüedad: 10 años, 9 meses
Puntos: 0
Ejercicio usar constante para dar nombre a un valor

Buenas, he empezado el tema de las constantes ahora y me empieza a explicar como declararla para que tenga un valor... usa el ejemplo de PI. Me parecio raro que declarase la variable en el ejemplo como cuando incluyes una libreria, pero si el manual dice que es asi....
Código c:
Ver original
  1. #include <stdio.h>
  2. #include PI 3.1416
  3. int main ()
  4. {
  5.     double radio, perimetro;
  6.     radio=20;
  7.     perimetro=2*PI*radio;
  8.     printf("El perimetro es %f",perimetro);
  9.     getchar ();
  10.     return 0;
  11. }
El caso es que el pavo dice que asi sustituye pi por 3.1416 pero a mi el compilador me da error en la linea dos donde pongo la constante.

Alguien sabe si es que el manual me esta contando algo mal o es algo mio? aunque el ejemplo esta copiado tal cual.
Un saludo.
  #2 (permalink)  
Antiguo 21/02/2014, 13:54
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Ejercicio usar constante para dar nombre a un valor

Seguro seguro que el manual esta mal. Cambia #include por #define de modo que queda

Código C++:
Ver original
  1. #define PI 3.1416

Saludos
  #3 (permalink)  
Antiguo 21/02/2014, 13:54
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Ejercicio usar constante para dar nombre a un valor

#include <math.h>
  #4 (permalink)  
Antiguo 21/02/2014, 14:17
 
Fecha de Ingreso: julio-2013
Ubicación: España
Mensajes: 51
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Ejercicio usar constante para dar nombre a un valor

es un kindle y no veo opcion de copiar y pegar asi que copie mi codigo y fue metedura de pata mia, en el manual ponia define no include jeje...
respecto a la linea donde declara variables:
Código c:
Ver original
  1. double radio, perimetro;
las declara en la misma linea no? y pq a perimetro no le da un int o un float? y solo pone perimetro?
Seria lo mismo que:
Código c:
Ver original
  1. double radio;
  2. perimetro;
sigo sin saber pq a radio si le especifica el tipo de variable double pero a perimetro nada...
Si alguien pudiese explicarmelo entenderia el ejemplo completo, un saludo!!

P.D
Veo que con %f ya indica que perimetro sera una variable de tipo float pero pq no lo especifica al declarar la variable tb??
  #5 (permalink)  
Antiguo 21/02/2014, 14:20
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Ejercicio usar constante para dar nombre a un valor

Si lo declaras en una sentencia con comas se asume que perimetro tambien es double osea:

Código C++:
Ver original
  1. double radio,perimetro; // valido
  2. double radio;//Con punto y coma termina la sentencia
  3. perimetro; //error

Código C++:
Ver original
  1. tipo nombre,nombre,nombre...

Saludos
  #6 (permalink)  
Antiguo 21/02/2014, 14:53
 
Fecha de Ingreso: julio-2013
Ubicación: España
Mensajes: 51
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Ejercicio usar constante para dar nombre a un valor

Otro ejemplo confuso para ver como las constantes facilitan el codigo (ahora no pero en programas complejos si)
Nos hace un codigo tal que asi (identico esta vez)
Código c:
Ver original
  1. #include <stdio.h>
  2. #define CAJAS 4
  3. #define UNIDADES_POR_CAJA 25
  4. #define PRECIO_UNIDAD 100
  5. #define IMPUESTOS 1.16
  6. int main ()
  7. {
  8.   double precio;
  9.   precio=  (CAJAS*UNIDADES_POR_CAJA*PRECIO_UNIDAD)*(IMPUESTOS);
  10.   printf("El precio es %i",precio);
  11.   getchar();
  12.   return 0;
  13. }
NAda mas hacerlo me sorprendio que usase %i de integet cuando los impuestos llevan decimales pq es 1,16 , pense no va a funcionar y asi fue, compilo sin error pero me dio 0 de resultado, pense que tal vez con el double q pone lo solucionaria pero eso es mas espacio pero en integral o enteros... asi que probe el mismo codigo pero con %f para usar float e indicar que sera un numero con decimales, hice bien?? o estoy dando palos de ciego? pq raro veo que el del manual lo diga mal y yo bien jaja un saludo!
  #7 (permalink)  
Antiguo 21/02/2014, 15:01
 
Fecha de Ingreso: julio-2013
Ubicación: España
Mensajes: 51
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Ejercicio usar constante para dar nombre a un valor

Cita:
Iniciado por patilanz Ver Mensaje
Si lo declaras en una sentencia con comas se asume que perimetro tambien es double osea:ERFECTO GRACIAS

Código C++:
Ver original
  1. double radio,perimetro; // valido
  2. double radio;//Con punto y coma termina la sentencia
  3. perimetro; //error
Se me olvidabla que el tipo double tb sirve para numero reales sorry por el resto.
Saludos
  #8 (permalink)  
Antiguo 21/02/2014, 15:23
 
Fecha de Ingreso: julio-2013
Ubicación: España
Mensajes: 51
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Ejercicio usar constante para dar nombre a un valor

Cita:
Iniciado por CrazypiXel Ver Mensaje
Otro ejemplo confuso para ver como las constantes facilitan el codigo (ahora no pero en programas complejos si)
Nos hace un codigo tal que asi (identico esta vez)
Código c:
Ver original
  1. #include <stdio.h>
  2. #define CAJAS 4
  3. #define UNIDADES_POR_CAJA 25
  4. #define PRECIO_UNIDAD 100
  5. #define IMPUESTOS 1.16
  6. int main ()
  7. {
  8.   double precio;
  9.   precio=  (CAJAS*UNIDADES_POR_CAJA*PRECIO_UNIDAD)*(IMPUESTOS);
  10.   printf("El precio es %i",precio);
  11.   getchar();
  12.   return 0;
  13. }
NAda mas hacerlo me sorprendio que usase %i de integet cuando los impuestos llevan decimales pq es 1,16 , pense no va a funcionar y asi fue, compilo sin error pero me dio 0 de resultado, pense que tal vez con el double q pone lo solucionaria pero eso es mas espacio pero en integral o enteros... asi que probe el mismo codigo pero con %f para usar float e indicar que sera un numero con decimales, hice bien?? o estoy dando palos de ciego? pq raro veo que el del manual lo diga mal y yo bien jaja un saludo!
Con %f el resultado de la operacion me da bien... pero se supone que con double ya abarca numeros reales tb no? y mas extensos... pq no vale cvon int double?
  #9 (permalink)  
Antiguo 21/02/2014, 15:54
 
Fecha de Ingreso: julio-2013
Ubicación: España
Mensajes: 51
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Ejercicio usar constante para dar nombre a un valor

En el siguiente ejemplo que me pone sobre como declarar una constante segun otras que previamente han sido declaradas..en lo que se dçcentra que es el uso de esa constante todo bien... lo que me desconcierta es que ahora usa variables int %i cuando una de las constantes es IMPUESTOS 1.16
.. no se supone que entonces deberia usar float o double para poder alvergar numeros que no sean enteros??? estoy perdido de cuando usa int y cuando long, o float o double.... osea con el tipo de variables que usa segun cuando... la teoria me la se pero luego veo ese ejemplo osanto %i cuiado una constante es un numero real me desconcierta... funciona el programa.. tb es cierto que da un resultado sin decimales.. proble a hacer el mismo programa cambiando el tipo de variable por double y en la linea de print %f y tb fuinciona solo que aqui da decimales...
el ejemplo es este: si alguien me echase una mano con que % debo usar generalmente y que tipo de variabel o algun manual especifico de ello me hecharia una gran mano:
Código c:
Ver original
  1. #include <stdio.h>
  2. #define CAJAS 4
  3. #define UNIDADES_POR_CAJA 25
  4. #define PRECIO_POR_UNIDAD 100
  5. #define IMPUESTOS 1.16
  6. #define PRECIO_POR_CAJA UNIDADES_POR_CAJA*PRECIO_POR_UNIDAD
  7. int main ()
  8. {
  9.    int precio;
  10.    precio=(CAJAS*PRECIO_POR_CAJA)*(IMPUESTOS);
  11.    printf("El precio total es %i",precio);
  12.    getchar();
  13.    return 0;
  14. }
Modificandolo asi pensando que debo usar numeros reales sin saber que resultado dara me queda asi y tb funciona lo que me da un resultado mucho mayor en decimales que no cambian el resultado vaya para mi seria asi lo correcto no?? pq en un programa donde numero de cajas sea una variable si nos piden un numero grande o que no sea entero el precio final seria lo conveniente no?..asi en vez de 11600 me da 11600.000000 como resultado, pero mas memoria innecesea no??
Código c:
Ver original
  1. #include <stdio.h>
  2. #define CAJAS 4
  3. #define UNIDADES_POR_CAJA 25
  4. #define PRECIO_POR_UNIDAD 100
  5. #define IMPUESTOS 1.16
  6. #define PRECIO_POR_CAJA UNIDADES_POR_CAJA*PRECIO_POR_UNIDAD
  7. int main ()
  8. {
  9.    float precio;
  10.    precio=(CAJAS*PRECIO_POR_CAJA)*(IMPUESTOS);
  11.    printf("El precio total es %f",precio);
  12.    getchar();
  13.    return 0;
  14. }
  #10 (permalink)  
Antiguo 21/02/2014, 17:54
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Ejercicio usar constante para dar nombre a un valor

En la funcion printf(), cuando vayas imprimir:
int usar %d para entero con signo
float usar %f para real con signo
char usar %c para carácter
char [n] usar %s para cadena de caracteres

Función scanf() cuando vayas recibir por teclado:
int usar %d para recibir entero con signo
float usar %f para recibir real con signo
char usar %c para recibir carácter solo ejemplo: 'a'
char [n] usar %s para recibir cadena de caracteres entre comillas doble ejemplo "cadena de caracteres"


%d = decimal
%i = entero
%f = flotante (con coma)
%c = char(una sola letra entre comillas simples 'L')
%s = string (cadena de caracteres entre comillas dobles "Letra")

%2.2f eso de 2.2 es la precisión que quieres mostrar (cantidad de números antes y después de la coma)

Ejemplo:
Código C:
Ver original
  1. #include <stdio.h>
  2. #define salto printf("\n\n");
  3.  
  4. int main () {
  5.     float f = 22.00;
  6.    
  7.     printf ( " %2.1f ", f ); /*muestra 2 numeros antes del punto y 1 despues*/
  8.     salto /*salta 2 lineas*/
  9.    
  10.     printf ( " %2.2f ", f ); /*muestra 2 numeros antes del punto y 2 despues*/
  11.     salto
  12.    
  13.     printf ( " %2.10f ", f ); /*muestra 2 numeros antes del punto y 10 despues*/
  14.     salto
  15.     printf ( " %2.100f ",
  16.              f ); /*muestra 2 numeros antes del punto y 100 despues XD Eso me suena a bug pero enfin, funciona XD*/
  17.    
  18.     getchar();       
  19.     return 0;
  20. }

Que un numero no se muestre no quiere decir que no este en la memoria.
Deben saber el tamaño de numero que alberga su compilador.
Eso hay formas de averiguar.
Aqui te dice mas o menos cuantos numeros pueden guardar en cada tipo de variable y cuanto ocupa en memoria dicha variable.
http://blog.espol.edu.ec/programando...el-lenguaje-c/
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define salto printf("\n\n");
  5.  
  6. int main () {
  7.     int tam = 0;
  8.  
  9.     /*tamaño de un entero*/
  10.     tam = sizeof(int);
  11.     printf ( "Entero ocupa: %d bytes",tam);
  12.     salto
  13.    
  14.     /*char*/    
  15.     tam = sizeof(char);
  16.     printf ( "Char ocupa: %d bytes",tam);    
  17.     salto
  18.    
  19.     /*float*/
  20.     tam = sizeof(float);
  21.     printf ( "float ocupa: %d bytes",tam);
  22.     salto
  23.    
  24.     /*double*/
  25.     tam = sizeof(double);
  26.     printf ( "Double ocupa: %d bytes",tam);
  27.     salto
  28.    
  29.     getchar();       
  30.     return 0;
  31. }

El programa de arriba mira el tamaño que ocupa una variable en la memoria.
Puede cambiar de un ordenador a otro, de un ide a otro, si el ordenador es 32/64bits puede variar

Saber cuanto ocupa una var puede darte mas control sobre cuanta memoria vas a gastar.
Otra cosa...
Si vas almasenar un dato como lo es edad, puedes usar unsigned short int edad, por que nadie tiene mas de 100 años ni tampoco tiene edad negativa y eso ocupa la mitad de un int
podéis comprobar igual que hice arriba con un:
tam = sizeof(unsigned short int);
printf ( "U_SHORT_INT ocupa: %d bytes",tam);

Última edición por vangodp; 21/02/2014 a las 18:26
  #11 (permalink)  
Antiguo 21/02/2014, 18:59
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Ejercicio usar constante para dar nombre a un valor

Sobre que numero usar...
Piensa en lo que te hace falta.
Si te falta guardar un valor para representar edad. La edad no hace falta coma por lo que no es un float, mas bien te puede servir un int.

Si vas a guardar un numero para hacer cálculos con el le tienes que guardar como int %i ya que no puedes sumar un int con un char ¿no?(En realidad si se puede pero depende si lo necesitas).
Los char están representados por números de la tabla asc2.
Aun que guardes una letra 'a' como char la puedes imprimir como si de un entero se tratara %d o %i, se te va mostrar como el numero que corresponde en la tabla.
lo mismo puedes hacer al contrario.
Si imprimes uno de esos números como char %c pues te va salir la letra correspondiente al numero.
Tambien puedes imprimir un float como int o un int como float, lo que pasa es que por ejemplo si imprimes un float como int no se te muestra lo que hay despues de la coma, y si lo haces al contrario pues después de la coma sale un 0 ya que no tendría valor real, (seria como un numero completo 10.0)
Las variables las usas según la necesidad y tipo de valor.
Algunos ejemplos serian:

unsigned short int anios = 23;
Si hago un #define U_SHORT unsigned short int, U_SHORT es lo mismo que unsigned short int y puedo crear variables asi:
U_SHORT anios = 32; /*mas cómodo no?Esta var ocupa la mitad de un int*/
float euros = 100; /*Ocupa el doble que un int*/
char letra = 'c'; /*char ocupa bien poco por que una letra si no recuerdo mal se representa con un solo byte ya que son 255 valores solamente que contiene la tabla asc2*/
char cadena[100] = {"10 Euros en mi cumpleaños"} //eso es un conjunto de chars, cada char tiene 4 o mas bytes según el ordenador, si declaro cadena[100] 100x4 (el 4 puede variar).
http://zarza.usal.es/~fgarcia/doc/tuto2/II_2.htm

Pues como lo ves, usa el tipo para el dato que necesites pero de manera correcta ;)
  #12 (permalink)  
Antiguo 22/02/2014, 13:32
 
Fecha de Ingreso: julio-2013
Ubicación: España
Mensajes: 51
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Ejercicio usar constante para dar nombre a un valor

Cita:
Iniciado por vangodp Ver Mensaje
En la funcion printf(), cuando vayas imprimir:
int usar %d para entero con signo
float usar %f para real con signo
char usar %c para carácter
char [n] usar %s para cadena de caracteres

Función scanf() cuando vayas recibir por teclado:
int usar %d para recibir entero con signo
float usar %f para recibir real con signo
char usar %c para recibir carácter solo ejemplo: 'a'
char [n] usar %s para recibir cadena de caracteres entre comillas doble ejemplo "cadena de caracteres"


%d = decimal
%i = entero
%f = flotante (con coma)
%c = char(una sola letra entre comillas simples 'L')
%s = string (cadena de caracteres entre comillas dobles "Letra")

%2.2f eso de 2.2 es la precisión que quieres mostrar (cantidad de números antes y después de la coma)

Ejemplo:
Código C:
Ver original
  1. #include <stdio.h>
  2. #define salto printf("\n\n");
  3.  
  4. int main () {
  5.     float f = 22.00;
  6.    
  7.     printf ( " %2.1f ", f ); /*muestra 2 numeros antes del punto y 1 despues*/
  8.     salto /*salta 2 lineas*/
  9.    
  10.     printf ( " %2.2f ", f ); /*muestra 2 numeros antes del punto y 2 despues*/
  11.     salto
  12.    
  13.     printf ( " %2.10f ", f ); /*muestra 2 numeros antes del punto y 10 despues*/
  14.     salto
  15.     printf ( " %2.100f ",
  16.              f ); /*muestra 2 numeros antes del punto y 100 despues XD Eso me suena a bug pero enfin, funciona XD*/
  17.    
  18.     getchar();       
  19.     return 0;
  20. }

Que un numero no se muestre no quiere decir que no este en la memoria.
Deben saber el tamaño de numero que alberga su compilador.
Eso hay formas de averiguar.
Aqui te dice mas o menos cuantos numeros pueden guardar en cada tipo de variable y cuanto ocupa en memoria dicha variable.
http://blog.espol.edu.ec/programando...el-lenguaje-c/
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define salto printf("\n\n");
  5.  
  6. int main () {
  7.     int tam = 0;
  8.  
  9.     /*tamaño de un entero*/
  10.     tam = sizeof(int);
  11.     printf ( "Entero ocupa: %d bytes",tam);
  12.     salto
  13.    
  14.     /*char*/    
  15.     tam = sizeof(char);
  16.     printf ( "Char ocupa: %d bytes",tam);    
  17.     salto
  18.    
  19.     /*float*/
  20.     tam = sizeof(float);
  21.     printf ( "float ocupa: %d bytes",tam);
  22.     salto
  23.    
  24.     /*double*/
  25.     tam = sizeof(double);
  26.     printf ( "Double ocupa: %d bytes",tam);
  27.     salto
  28.    
  29.     getchar();       
  30.     return 0;
  31. }

El programa de arriba mira el tamaño que ocupa una variable en la memoria.
Puede cambiar de un ordenador a otro, de un ide a otro, si el ordenador es 32/64bits puede variar

Saber cuanto ocupa una var puede darte mas control sobre cuanta memoria vas a gastar.
Otra cosa...
Si vas almasenar un dato como lo es edad, puedes usar unsigned short int edad, por que nadie tiene mas de 100 años ni tampoco tiene edad negativa y eso ocupa la mitad de un int
podéis comprobar igual que hice arriba con un:
tam = sizeof(unsigned short int);
printf ( "U_SHORT_INT ocupa: %d bytes",tam);
Muchas gracias por el resumen sobre los tipos y saber el tamaño para ajustarse a cual usar en un print o un scanf ,m el ultimo programa lo tengo hecho como ejemplos para ver cuantos puede albergar mi ordenadoe.
Pero de mi duda el tio en el ejemplo se colo no? en el printf debia ir %f ya que al impuesto tener decimales podria haber dado un numero real no? y puso int pq sabia q el resultado era entero? Si no no entiendo el uso de %i en el ejemplo del libro
P.D ve los tipoc que hay voy viendo como debo usarlor segun tamaño numero real caracter , cadena de caracteres etc... unicamente me lio un poco con el short y long que no se si pertenecen a int o son un tipo por si mismos o si se indica long int... en fin ya me iran saliendo ejercicios q tenga q usarlos imagino y espero :D
  #13 (permalink)  
Antiguo 22/02/2014, 13:37
 
Fecha de Ingreso: julio-2013
Ubicación: España
Mensajes: 51
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Ejercicio usar constante para dar nombre a un valor

Cita:
Iniciado por vangodp Ver Mensaje
Sobre que numero usar...
Piensa en lo que te hace falta.
Si te falta guardar un valor para representar edad. La edad no hace falta coma por lo que no es un float, mas bien te puede servir un int.

Si vas a guardar un numero para hacer cálculos con el le tienes que guardar como int %i ya que no puedes sumar un int con un char ¿no?(En realidad si se puede pero depende si lo necesitas).
Los char están representados por números de la tabla asc2.
Aun que guardes una letra 'a' como char la puedes imprimir como si de un entero se tratara %d o %i, se te va mostrar como el numero que corresponde en la tabla.
lo mismo puedes hacer al contrario.
Si imprimes uno de esos números como char %c pues te va salir la letra correspondiente al numero.
Tambien puedes imprimir un float como int o un int como float, lo que pasa es que por ejemplo si imprimes un float como int no se te muestra lo que hay despues de la coma, y si lo haces al contrario pues después de la coma sale un 0 ya que no tendría valor real, (seria como un numero completo 10.0)pensaba q si declarabas int y luego le asignabas un real o se le asignaba mediante scanf.. daria erro,no en la compilacion pero si en el resultado algo como "0" y no que no mostraria la parte entera sin decimales unicamente
Las variables las usas según la necesidad y tipo de valor.
Algunos ejemplos serian:

unsigned short int anios = 23;
Si hago un #define U_SHORT unsigned short int, U_SHORT es lo mismo que unsigned short int y puedo crear variables asi:
U_SHORT anios = 32; /*mas cómodo no?Esta var ocupa la mitad de un int*/
float euros = 100; /*Ocupa el doble que un int*/
char letra = 'c'; /*char ocupa bien poco por que una letra si no recuerdo mal se representa con un solo byte ya que son 255 valores solamente que contiene la tabla asc2*/
char cadena[100] = {"10 Euros en mi cumpleaños"} //eso es un conjunto de chars, cada char tiene 4 o mas bytes según el ordenador, si declaro cadena[100] 100x4 (el 4 puede variar).
http://zarza.usal.es/~fgarcia/doc/tuto2/II_2.htm

Pues como lo ves, usa el tipo para el dato que necesites pero de manera correcta ;)
entonces signed y unsigned se puede usar tanto para int como para float dependiendo si queremois recoger numeros negativos o no... perfecto eso me tenia en duda, long y shot tb se usan en int y float(osea en ambas no?)
  #14 (permalink)  
Antiguo 22/02/2014, 15:52
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Ejercicio usar constante para dar nombre a un valor

se dice "signed a numeros con signo" ¿Que es un numero con signo? pues lo son

-100
+100
+77
-14
...
Son números negativos y positivos.
Los positivos no ves el + por que no hace falta verlo. Si no es negativo pues es positivo XD

No se cuanto números le caben a un int (eso lo buscas tu XD) pero mas o menos seria 65000 o yo que se XD

seria la mitad -32500 y la otra mitad seria +325000.
imagine una tabla asi.
-32500 ......-10000.....-5000.....-1000.......10...0.....100......1000......20000.... .32500

ese seria el rango signed (con signo)

sin signo seria:
0.....100......1000......20000.....32500.....65000

O sea puedes usar el doble por que los negativos no los vas usar.

Otra cosa: Si te cuelas metiendo un numero mayor que el que le cabe no es que te vaya tirar error.

Es que imaginas que llegas al 32500 ¿que hay aquí después del final?

pues esta el -32500 XD

si avanzas hacia allá ---> aumentas, si lo haces hacia allá <---- disminuyes.

Pero el int es como un bucle. Si te cuelas por el positivo entras al negativo y a medida que vayas incrementando en realidad el numero va disminuyendo XD

hagamos asi:

declaras un int normal:
int numero = 10000;
vaya sumando le 2000 hasta que vas a ver que va llegar una hora que va entrar en negativos y a la medida que vayas sumando le en realidad vas disminuyendo :S
¿Eso por que?
por que si sumamos vamos hacia allá ---->
cuando llegamos al final que estará mas o menos en 32000 (supuestamente :D) o yo que se va entrar en -32000
¿Recuerda la tabla?

imagino que estoy en el fin de los positivos y me cuelo.
32000..../limite/.....-32000......
Que hay para allá ----> ......-31999...31998....31997...........hasta llegar en cero y volver a iniciar otra vez en positivos y así hasta que te mueras jajaj
Pero eso es un bug por que si querías es guardar un numero mayor que esos 32000 pues vas mal XD
Si fuera unsigned al pasarte de rosca en 65000 volverías a cero por que es unsigned.
Eso es la importancia de saber cuanto puedes guardar en un int, un float, un double...
Cita:
long y shot tb se usan en int y float
Eso es una cosa que no he probado.
Pero todo va de eso si te pasas de rosca va empezar números negativos.
El limite que guarda cada variable se puede hacer un programa que te compruebe eso.
El int con signo es de -2,147,483,648 hasta 2,147,483,647.
Hagamos un esperimento

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. int main (){
  5.     system("MODE CON cols=100 lines=50"); /*Esto arregla el tamaño de la consola en colunas y lineas*/
  6.  
  7.  
  8.     int num1 = 2147480000; /*estamos casi cerca del fin que es 2,147,483,647 después empieza a achicarse el num*/
  9.     int num2 = 0;
  10.    
  11.     while ( (num1>num2) ? 1:0  ){ /*Es numero1 mayor que numero2? si es así es verdadero, si no es falso*/
  12.         num2 = num1;
  13.         num1++;
  14.         printf("%i \n", num1);
  15.     }
  16.    
  17.     printf("Te has pasado de rosca XD");
  18.    
  19.     while ( 0 ){ /*Poner a 0 si no deseas que se siga sumando para comprobar que a pesar de incrementar los números disminuyen*/
  20.         num2 = num1;
  21.         num1++;
  22.         printf("%i \n", num1);
  23.     }
  24.  
  25.     system("pause>null");
  26.     return 0;
  27. }

Cuando llegues al final(2,147,483,647) veras el limite de lo que cabe en un int.
Para ver que aun que le sigas sumando los números disminuyen pues poner el segundo bucle a numero 1 en while(0) y seguirá sumando.
pero no aumentara sino que estamos entrando por la parte negativa como si de un circulo infinito se tratara.
  #15 (permalink)  
Antiguo 22/02/2014, 16:23
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Ejercicio usar constante para dar nombre a un valor

Cita:
pensaba q si declarabas int y luego le asignabas un real o se le asignaba mediante scanf.. daria erro,no en la compilacion pero si en el resultado algo como "0" y no que no mostraria la parte entera sin decimales unicamente
Haz pruebas.
Imprime una variable de todas las formas que se te ocurra.
Asigna una a otra de otro tipo.
Aun que obtengas errores es bueno por que asi sabes que pasa si lo haces intencionalmente.
Si quieres programar en cpp, cometer errores intencionada mente es bueno.
As veces descubres cosas interesantes ;)

Recoja por scanf como float guarda lo en int, XDD haz lo que te ocurra.
Solo así aprenderás.
Sobre si el compilador te va dar errores pues lo siento pero el compilador es muy amigo pero como dice paueky XD "Estamos solos en el mundo" jaja
No creas que cpp es como windows que si la cagas te va saltar ventanitas y el sonidito ese molesto. jeje
Si tienes una tabla[10] y vas a la casilla 10 de esa tabla tabla[10]; y le metes ahi un numero ya la has cagado, por que en el indice tabla[10] va de tabla[0] a tabla[0] son 10 variables si metes algo en tabla[10] estarias metiendo como si fuera en tabla[11] por que si cuentas desde 0 el decimo no es el 10 sino el 9. Cpp es tan potente que te deja que jodas la memoria de otra variable XDD.¿POTENTE? ¡¡¡SIIII!!! XDD. Eso tiene sus usos mas adelante ya lo veras ;)

Sobre si se equivoco en el libro....Ni idea, para un valor de impuesto seguro debería usar float, pero si no veo el programa no se decirte lo.

ufffaaaaa ya ta por hoy XDD chiringuito cerrado.
Si quieres saber mas mejor me buscas por skype que ya me duele los dedos. jeje
¡Suerte!
  #16 (permalink)  
Antiguo 23/02/2014, 11:14
 
Fecha de Ingreso: julio-2013
Ubicación: España
Mensajes: 51
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Ejercicio usar constante para dar nombre a un valor

Vangodp no veas!!!! jajaja muchisimas gracias por las aclaraciones, float ocuipa el doble que un int y double iimagino que el doble que un float... al usar unsigned en vez de recoger un rango .....-....0...+...+ lo que hacemos es partir directamente de 0 y aisgnar el espacio ya sea se int o float solo a numeros positivos ok.. mas o menos todo eso he sacado en claro jaaj sobre hacer programas q te digan valores de int etc ya he hecho pruebas y si es aproximado alk numero q dijistes.
Una duda que me surge??? cppp???? no es c??? q diferencia hay? pq segun el manual es c.
Respecto al ejercicio hice lo que tu dijiste probar con printf y scanf diferentes floaqt or int a ver como funciona, como no etc... eso hice con el ejercicio del libro que aunque su resultado da numero entero asi no tiene problema... imagino que si el numero no supieramos que dara y el impuesto tiene decimales deberia usar float y %f si... en el libro:
Código c:
Ver original
  1. #include <stdio.h>
  2. #define CAJAS 4
  3. #define UNIDADES_POR_CAJA 25
  4. #define PRECIO_POR_UNIDAD 100
  5. #define IMPUESTOS 1.16
  6. #define PRECIO_POR_CAJA UNIDADES_POR_CAJA*PRECIO_POR_UNIDAD
  7. int main ()
  8. {
  9.    int precio;
  10.    precio=(CAJAS*PRECIO_POR_CAJA)*(IMPUESTOS);
  11.    printf("El precio total es %i",precio);
  12.    getchar();
  13.    return 0;
  14. }
Yo lo modifique pareciendome mas realista para su uso asi:
Código c:
Ver original
  1. #include <stdio.h>
  2. #define CAJAS 4
  3. #define UNIDADES_POR_CAJA 25
  4. #define PRECIO_POR_UNIDAD 100
  5. #define IMPUESTOS 1.16
  6. #define PRECIO_POR_CAJA UNIDADES_POR_CAJA*PRECIO_POR_UNIDAD
  7. int main ()
  8. {
  9.    float precio;
  10.    precio=(CAJAS*PRECIO_POR_CAJA)*(IMPUESTOS);
  11.    printf("El precio total es %f",precio);
  12.    getchar();
  13.    return 0;
  14. }
Tb entendi perfectamente lo del bucle sobre el tamaño de una constante si te pasas por un lado empiezas por el otro como un ciclo asi que el compilador no dara error pero te puede dar un resultado q nada tenga que ver ya que en vez de seguir hacia adelante paso al lado contrario de los negativos. un saludo y muchisimas gracias por la explicacion ha sido muy uyil.

(una didilla que se me escapa... cuando veo que declaran una variable como long distanncia; como se si se refiere a int o float? y como es la sintaxis general por ejemplo si quiero un float long unsigned.... que seria tal cual? float long unsigned distancia; ¿?no creo no? Un saludo.
  #17 (permalink)  
Antiguo 23/02/2014, 13:44
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Ejercicio usar constante para dar nombre a un valor

Se declaran así:
<signed/unsigned> <long/short> <tipo>
Ejemplo:

unsigned long int
signed long int (En este caso no te hace falta poner signed o sea que es lo mismo long int ;) )
Existe también un modificador que es el long long:

long long int
En el cabe un numero mas grande por si lo necesitas.

El DOUBLE es un FLOAT con doble precisión si un float fuera asi 00000.000000 el double seria 00000000000.000000000000 jejej
double si no me equivoco, (aclaro que nunca lo use), es una especie de float a lo bestia, le cabe mas números, es como el long del int. Le caben mas números después de el punto(mas precisión).
Se dice precisión al tener mas casas después del punto. Esto 20.99 es menos preciso que 20.9999999999999. ;)
Si vas hacer cálculo para dinero el float simple vale te vale pero si vas haces cálculos donde importa todos los números reales el double seria el mejor para almacenarlo. Dado que no soy científico nunca lo use. jeje

¿cpp es lo mismo que c? ¡NO! En absoluto.
C++ es una especie de c mejorado(con mas cosas o sea c esta en cpp), en cpp puedes usar código c pero no puedes usar código cpp en c (cpp no esta en c).
Yo como programo en cpp puedo usar c como parte o un todo de mi código, puedo mesclar o utilizar uno o el otro.
Pero si pones código cpp en un compilador de c te va dar muchos errores(no es pocible). A parte de eso también esta la diferencia que tienen. C es estructurada y cpp es objeto.
WTF!
Bueno explico XD
Estructurada:
Es lineal. El código avanza linea a linea hasta que se detiene en una función se desvía hacia la función hace lo que sea y vuelve en el mimo punto en el que había dejado.

Objetos:
Creas modelos través de porciones de códigos llamados clases.
Luego a partir de estas clases creas objetos.
El código se desvía mucho mas veces que en c.
El código es reaprovechable. esa es la idea junto a otras mas.
Me gusta bastante cpp pero es mas complicado.
No hay problema que lo aprendas, pero hay unas cuantas diferencias.
Si te sientes cómodo con c sigue con el después cuando lo domines te pasas a cpp.
Yo empece directo en cpp, digamos que aprendo ambos a la par XDD

Última edición por vangodp; 23/02/2014 a las 14:00
  #18 (permalink)  
Antiguo 23/02/2014, 15:05
 
Fecha de Ingreso: julio-2013
Ubicación: España
Mensajes: 51
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Ejercicio usar constante para dar nombre a un valor

ok muy bien explicado, tbhe visto que en algunos codigos declaran variables long sin decir int o float y luego en el 5Hi, actually i want to sell my account of diablo3 (battlenet account with diablo3 only)
have five class, male and female at level 100 each.
That's ungear, but have a lot of account bound gear for example amu, gloves trifects, bracers with allress and critic etc... top pieces, for it i leave of crafting a lot of time ago.
havee too 11 marquese gems and three ringhell.
Wait offers. Cheers
Europe realm softcoreecifican i o f.....
Respecto a lo de cpp... no sabia q era como llamaban a c++ jaja si mi idea era empezar por c y cuando tenga una base solida comenzar uno de cpp.
muuchas gracias por las exsplicaciones, un saludo.

Etiquetas: constante, ejercicio, int, nombre, usar, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:39.