/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Valores minimo y maximo de cada uno de los tipos(lenguaje C)

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
NOB2014



Registrado: 25 Mar 2014
Mensajes: 3
Ubicación: Argentina - Santa Fé - Arequito

MensajePublicado: 25/03/2014 6:38 am
Título: Valores minimo y maximo de cada uno de los tipos(lenguaje C)

Hola a todos.
Les dejo lo que tengo hecho para ver si pueden ayudarme a completar el código, tengo unos cuantos errores que muestro a continuación y que por más que busco en el manual con el que estoy estudiando y la web no logro corregir, les confieso además que si no tuviera errores hubiera posteado igual para que me digan si los datos obtenido son los correctos.-



Código:
/* Programa que muestra Valores mínimo y máximo de cada uno de los tipos(en esta máquina)*/

#include <stdio.h>
#include <limits.h>
#include <float.h>

int main(void){
   char a;
   short int b;
   int c;
   long int d;   
   unsigned char e;
   unsigned short int f;
   unsigned int g;
   unsigned long int h;
   float i;
   double j;
   long double k;

   printf("\n\n\t Longitud de cada uno de los tipos basicos");

   printf("\n\n La longitud de \"char\" es igual a ................: %2ld byts", sizeof(a));   
   printf("\n La longitud de \"short int\" es igual a ...........: %2ld bytes", sizeof(b));   
   printf("\n La longitud de \"int\" es igual a .................: %2ld bytes", sizeof(c));   
   printf("\n La longitud de \"long int\" es igual a ............: %2ld bytes", sizeof(d));   
   printf("\n La longitud de \"unsigned char\" es igual a .......: %2ld bytes", sizeof(e));   
   printf("\n La longitud de \"unsigned short\" es igual a ......: %2ld bytes", sizeof(f));   
   printf("\n La longitud de \"unsigned int\" es igual a ........: %2ld bytes", sizeof(g));   
   printf("\n La longitud de \"unsigned long int\" es igual a ...: %2ld bytes", sizeof(h));   
   printf("\n La longitud de \"float\" es igual a ...............: %2ld bytes", sizeof(i));   
   printf("\n La longitud de \"double\" es igual a ..............: %2ld bytes", sizeof(j));   
   printf("\n La longitud de \"long double\" es igual a .........: %2ld bytes", sizeof(k));   

   printf("\n\n     Valores minimo y maximo de cada uno de los tipos");

   printf("\n\n Minimo y maximo de \"char\" .......................: %d  %d", CHAR_MIN, CHAR_MAX);   
   printf("\n Minimo y maximo de \"short int\" ..................: %d  %d", SHRT_MIN, SHRT_MAX);   
   printf("\n Minimo y maximo de \"int\" ........................: %d  %d", INT_MIN, INT_MAX);   
   printf("\n Minimo y maximo de \"long int\" ...................: %ld  %ld", LONG_MIN, LONG_MAX);   
   printf("\n Maximo de \"unsigned char\" .......................: %u", UCHAR_MAX);   
   printf("\n Maximo de \"unsigned short int\" ..................: %u", USHRT_MAX);   
   printf("\n Maximo de \"unsigned int\" ........................: %u", UINT_MAX);   
   printf("\n Maximo de \"unsigned long int\" ...................: %lu", ULONG_MAX);   
   printf("\n Minimo y maximo de \"float\" ......................: %g  %g", FLT_MIN, FLT_MAX);   
   printf("\n Minimo y maximo de \"double\" .....................: %h  %h", DBL_MIN, DBL_MAX);   
   printf("\n Minimo y maximo de \"long double\" ................: %L  %L", LDBL_MIN, LDBL_MAX);   
   
   printf("\n\n");
   return 0;
}


Un gran saludo.
Daniel
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7517
Ubicación: Mexico

MensajePublicado: 25/03/2014 7:29 am
Título:

Los dos errores en el programa se encuentran en las dos ultimas llamada a printf:
Código:
printf("\n Minimo y maximo de \"double\" .....................: %h  %h", DBL_MIN, DBL_MAX);   
printf("\n Minimo y maximo de \"long double\" ................: %L  %L", LDBL_MIN, LDBL_MAX);

Lo correcto para imprimir un valor de tipo double es utilizar "%e", "%f" o "%g", para el tipo long double debes utilizar "%Le", "%Lf" o "%Lg" y ya que vas a imprimir los máximos y mínimos es mejor utilizar "%e" y "%Le" para que estos se impriman en notación científica (lo mas corto posible).

Otro detalle en el programa es imprimir el resultado del operador sizeof (tipo size_t, algún tipo sin signo) utilizando "%d" ya que este es para el tipo signed int. Dependiendo del compilador se puede utilizar:

A) "%zu" para imprimirlo (requiere como mínimo soporte del estándar C99).
B) conversión explicita al tipo "unsigned long" e imprimirlo como tal utilizando "%lu" (solo necesario si se compila según el estándar C90).

Ya por ultimo no es necesario calcular el tamaño de los tipo enteros con signo y sin el ya que son los mismos (por ejemplo signed int y unsigned int tienen el mismo tamaño).

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
NOB2014



Registrado: 25 Mar 2014
Mensajes: 3
Ubicación: Argentina - Santa Fé - Arequito

MensajePublicado: 25/03/2014 10:29 am
Título:

Hola rir3760.
De acuerdo, todo se corrigió, muchas gracias.

Cita:
Otro detalle en el programa es imprimir el resultado del operador sizeof (tipo size_t, algún tipo sin signo) utilizando "%d" ya que este es para el tipo signed int. Dependiendo del compilador se puede utilizar:

Para entender un poco hice el siguiente programita pero no entiendo los resultados, en el otro yoel_alejandro trató de explicármelo pero nada.-

Código:
#include <stdio.h>
#include <limits.h>

int main(void){
   unsigned a = sizeof(unsigned) * CHAR_BIT;
   size_t b;
   size_t c;
   
   printf("\n\n unsigned a = sizeof(unsigned) * CHAR_BIT;");
   printf("\n size_t b;");
   printf("\n size_t c;");

   printf("\n\n a=%d bits --- b=%ld --- c=%ld", a, b, c);
   
   return 0;
}

Saludos.
Daniel
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7517
Ubicación: Mexico

MensajePublicado: 26/03/2014 5:51 am
Título:

El problema es mezclar dos temas. Por partes.

Uno es obtener el numero de bytes por tipo e imprimir este en la salida estándar. Para lo primero se debe utilizar el operador sizeof y ya que su resultado es de tipo size_t si se quiere almacenar ese valor se debe utilizar una variable del mismo tipo:
Código:
/* Obtenemos y almacenamos el numero de bytes que componen el tipo int */
size_t num_bytes_int = sizeof(int);


Como imprimirlo depende del modo de compilación, en C90 se debe convertir explícitamente al tipo unsigned long y utilizar "%lu" en la llamada a printf:
Código:
size_t num_bytes_int = sizeof(int);

printf("%lu\n", (unsigned long) num_bytes_int);


En C99 y C11 basta con utilizar el especificador "%zu" en la llamada a printf:
Código:
size_t num_bytes_int = sizeof(int);
   
printf("%zu\n", num_bytes_int);


----

El otro es imprimir los valores máximos y mínimos de algún tipo. Aquí lo que debes hacer es declarar una variable del tipo correspondiente o bien utilizar directamente la macro. En la llamada a printf utilizas el especificador que corresponda. Por ejemplo:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>

int main(void)
{
   int int_max = INT_MAX;
   long long_max = LONG_MAX;
   double dbl_max = DBL_MAX;
   
   printf(" INT_MAX == %d\n", int_max);
   printf("LONG_MAX == %ld\n", long_max);
   printf(" DBL_MAX == %e\n", dbl_max);
   
   printf(" INT_MIN == %d\n", INT_MIN);
   printf("LONG_MIN == %ld\n", LONG_MIN);
   printf(" DBL_MIN == %e\n", DBL_MIN);
   
   return EXIT_SUCCESS;
}


----

Ya por ultimo si no tienes una referencia de calidad deberías conseguir una, mientras eso sucede puedes utilizar las paginas (en ingles y archivadas) de P. J. Plauger:
C90
C99

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
NOB2014



Registrado: 25 Mar 2014
Mensajes: 3
Ubicación: Argentina - Santa Fé - Arequito

MensajePublicado: 26/03/2014 9:18 am
Título:

Hola.
Ahota si me queda todo más claro.-

Saludos y gracias.
Daniel
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com