Que significa esto??
si c es igual o mayor que 0 y c es menor o igual que 9 contar ??
if (c>='0' && c <='9')
++ndigit[c-'0']
#include <stdio.h>
main ()
{
int ndigit[10];
int i;
for (i=0;i<=10;i++)
ndigit[i]=0;
while ((c=getchar())!=EOF)
{
if (c>='0' && c <='9') {
++ndigit[c-'0']
}
printf ('Digitos='');
for (i=0;i<10;++i)
printf (''%d'',ndigit[i]);
}
}
La verdad....si no contamos que el mini programa que has puesto tiene fallos por todos lados, que, seguramente ni has probado para que sirve, contestaré que significa "por encima" lo siguiente, no sin antes decirte....currate un poco mas las cosas, enserio:
if (c>='0' && c <='9') //Basico, vamos, si c está entre 0 y 9, ambos inclusive
++ndigit[c-'0'] ; //A ndigit[c] (Por que el -0 es una inutilidad total) se le suma uno al valor que tenía
Pero vamos, que si no entiendes estas cosas tan básicas, deberías mirarte antes mejor los principios de C
Bye-nee
Así a simple vista parece que cuenta la cantidad de veces que aparece un dígito del 0 a 9...
¿se nota que me aburro mucho hoy? xD
arrascate el ganso si te aburrìs papaaà, yo estoy acà para preguntar algo que no entendì!!
Cita de: Worvastif (c>='0' && c <='9') //Basico, vamos, si c está entre 0 y 9, ambos inclusive
++ndigit[c-'0'] ; //A ndigit[c] (Por que el -0 es una inutilidad total) se le suma uno al valor que tenía
Esto no es correcto. No restas 0, restas '0', que son cosas distintas. Por un lado 0 sí que es el cero de toda la vida, pero por otro '0' es el código del carácter cero que, en ASCII, es 48. Así que sí es importante y necesario para que el programa funcione bien.
La idea es que cuando escribes algo getchar() te devuelve el código de los caracteres que escribes. Por ejemplo, si escribes "A" te devuelve 65. Entonces, la primera comprobación es
if (c>='0' && c <='9')
que es algo así como si lo que has escrito está entre los códigos del cero y del nueve (ambos inclusive). Luego ++ndigit[c-'0'] hace dos cosas. La primera es restarle el código del cero con el c-'0'. Como los códigos de los caracteres de los números son consecutivos, obtenemos el valor del número.
Si escribiste "0" entonces el código es 48 (c=48) y entonces c-'0'=48-48=0
Si escribiste "1" entonces el código es 49 (c=49) y entonces c-'0'=49-48=1
Si escribiste "2" entonces el código es 50 (c=50) y entonces c-'0'=50-48=2
Si escribiste "3" entonces el código es 51 (c=51) y entonces c-'0'=51-48=3
etc.
Una vez que el programa ha calculado c-'0', accede a esa posición del array ndigit mediante ndigit[c-'0']. El ++ delante indica que lo incremente en uno, por lo que ++ndigit[c-'0'] significa "incrementa en uno el valor de ndigit en la posición c-'0' ".
Espero que te ayude la explicación.
[0, 9]
Cita de: gdlCita de: Worvastif (c>='0' && c <='9') //Basico, vamos, si c está entre 0 y 9, ambos inclusive
++ndigit[c-'0'] ; //A ndigit[c] (Por que el -0 es una inutilidad total) se le suma uno al valor que tenía
Esto no es correcto. No restas 0, restas '0', que son cosas distintas. Por un lado 0 sí que es el cero de toda la vida, pero por otro '0' es el código del carácter cero que, en ASCII, es 48. Así que sí es importante y necesario para que el programa funcione bien.
La idea es que cuando escribes algo getchar() te devuelve el código de los caracteres que escribes. Por ejemplo, si escribes "A" te devuelve 65. Entonces, la primera comprobación es
if (c>='0' && c <='9')
que es algo así como si lo que has escrito está entre los códigos del cero y del nueve (ambos inclusive). Luego ++ndigit[c-'0'] hace dos cosas. La primera es restarle el código del cero con el c-'0'. Como los códigos de los caracteres de los números son consecutivos, obtenemos el valor del número.
Si escribiste "0" entonces el código es 48 (c=48) y entonces c-'0'=48-48=0
Si escribiste "1" entonces el código es 49 (c=49) y entonces c-'0'=49-48=1
Si escribiste "2" entonces el código es 50 (c=50) y entonces c-'0'=50-48=2
Si escribiste "3" entonces el código es 51 (c=51) y entonces c-'0'=51-48=3
etc.
Una vez que el programa ha calculado c-'0', accede a esa posición del array ndigit mediante ndigit[c-'0']. El ++ delante indica que lo incremente en uno, por lo que ++ndigit[c-'0'] significa "incrementa en uno el valor de ndigit en la posición c-'0' ".
Espero que te ayude la explicación.
otro richard stallman 2 son unos genios estos tipos
Entonces sigo con funciones
Cita de: gdlCita de: Worvastif (c>='0' && c <='9') //Basico, vamos, si c está entre 0 y 9, ambos inclusive
++ndigit[c-'0'] ; //A ndigit[c] (Por que el -0 es una inutilidad total) se le suma uno al valor que tenía
Esto no es correcto. No restas 0, restas '0', que son cosas distintas. Por un lado 0 sí que es el cero de toda la vida, pero por otro '0' es el código del carácter cero que, en ASCII, es 48. Así que sí es importante y necesario para que el programa funcione bien.
La idea es que cuando escribes algo getchar() te devuelve el código de los caracteres que escribes. Por ejemplo, si escribes "A" te devuelve 65. Entonces, la primera comprobación es
if (c>='0' && c <='9')
que es algo así como si lo que has escrito está entre los códigos del cero y del nueve (ambos inclusive). Luego ++ndigit[c-'0'] hace dos cosas. La primera es restarle el código del cero con el c-'0'. Como los códigos de los caracteres de los números son consecutivos, obtenemos el valor del número.
Si escribiste "0" entonces el código es 48 (c=48) y entonces c-'0'=48-48=0
Si escribiste "1" entonces el código es 49 (c=49) y entonces c-'0'=49-48=1
Si escribiste "2" entonces el código es 50 (c=50) y entonces c-'0'=50-48=2
Si escribiste "3" entonces el código es 51 (c=51) y entonces c-'0'=51-48=3
etc.
Una vez que el programa ha calculado c-'0', accede a esa posición del array ndigit mediante ndigit[c-'0']. El ++ delante indica que lo incremente en uno, por lo que ++ndigit[c-'0'] significa "incrementa en uno el valor de ndigit en la posición c-'0' ".
Espero que te ayude la explicación.
Nunca te acostarás sin saber algo nuevo, gracias por ampliar un poquito mas mis horizontes :)
Bye-nee
De nada, Worvast. Es que el C es muy jodido. (Algún forero decía que el C/C++ es como tu mujer, que nunca la llegas a conocer del todo...)
Y si alguien quiere flipar de verdad que busque programación ofuscada en google :twisted:
Os dejo un ejemplo de un hola mundo (sacado de http://mundogeek.net/archivos/2008/02/27/hola-mundo-ofuscados/):
#include<stdio.h>
main(){
int x=0,y[14],*z=&y;*(z++)=0×48;*(z++)=y[x++]+0×1D;
*(z++)=y[x++]+0×07;*(z++)=y[x++]+0×00;*(z++)=y[x++]+0×03;
*(z++)=y[x++]-0×43;*(z++)=y[x++]-0×0C;*(z++)=y[x++]+0×57;
*(z++)=y[x++]-0×08;*(z++)=y[x++]+0×03;*(z++)=y[x++]-0×06;
*(z++)=y[x++]-0×08;*(z++)=y[x++]-0×43;*(z++)=y[x]-0×21;
x=*(--z);while(y[x]!=NULL)putchar(y[x++]);
}
Si es que hay gente que se aburre mucho :lol: