Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: minari02 en 24 Diciembre 2013, 03:35 am



Título: que significa y como se llama printf("%4d",1); en c++
Publicado por: minari02 en 24 Diciembre 2013, 03:35 am
Hola que tal? bueno me pues no conozco como funciona ni como se llama esto ("%4d",1); y pues me gustaria saberlo. he buscado en internet sin embargo no he hallado nada, talvez no busco bien o como sea... bueno esto lo he sacado de este codigo:

Código:
#include <stdio.h>
#include <conio.h>
void main()
{
int n,i,j;
printf("Introduce el numero por favor: ");
scanf("%d",&n);
printf("%4d",1);
for (i = 2;i <= n;i++)
{
j = 2;
while ((j <= i) && (i % j != 0))
{
j++;
}
if (i == j) printf("%4d",j);
}
getche();
}

podrían decirme como funciona esa misma parte dentro del código?

Gracias.





Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: minari02 en 24 Diciembre 2013, 03:42 am
puede cambiar esto
Código:
printf("%4d",1);
por esto
Código:
cout<<1;
obviamente inclui la libreria iostream y no hay ningun cambio en el funcionamiento sin embargo... aun asi no tengo idea para que es ese 1.


Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: leosansan en 24 Diciembre 2013, 04:22 am
puede cambiar esto
Código:
printf("%4d",1);
por esto
Código:
cout<<1;
obviamente inclui la libreria iostream y no hay ningun cambio en el funcionamiento sin embargo... aun asi no tengo idea para que es ese 1.

Antes que nada cuando postees código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.

El código es otra vez para generar números primos.

El printf("%4d",1) hace lo que dice, imprimir en un espacio de 4 a la izquierda(%4d) el número 1, mientras printf("%4d",j) hace lo propio con el número j.

Y respecto a lo de cout no sé si te estas haciendo la picha un lío, ya que cout se utiliza exclusivamente en C++, mientras printf se puede usar en C/C++, pero lo usual es que se use cout en C++ y printf en C.

Asimismo las librerías a usar se declaran diferentes en C que en C++. Por ejemplo en C podríamos tener <stdio.h> mientras en C++ sería <cstdio>. Es decir en C++ las librerías en general empiezan con <c-----> y en C son del tipo <----.h>.

Por la referencia que haces a iostream parece que programas en C++, sin embargo los códigos que has colgado son puramente C.

Otra cosa es el uso no deseable de la librería conio y su acólita función getch. Al respecto mírate el tema de Lo que no hay que hacer en C/C++. Nivel basico (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)

Además la función main es de tipo int (int main) y al final del código lleva su correspondiente return 0 para ser breves.

Otra observación es que cuando el cuerpo de un if, while, for  o similar se limite a una instrucción no hacen falta llaves.

Y por favor, acostúmbrate a indentar el código. Fíjate como de esa manera sale más claro:


Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int n,i,j;
  6.    printf("Introduce el numero por favor: ");
  7.    fflush (stdout);
  8.    scanf("%d",&n);
  9.    printf("%4d",1);
  10.    for (i = 2;i <= n;i++){
  11.        j = 2;
  12.        while (j <= i && i % j != 0)
  13.            j++;
  14.        if (i == j){
  15.            printf("%4d",j);
  16.            fflush (stdout);
  17.        }
  18.    }
  19.    return 0;
  20. }
  21.  

Tr hablarçia de fflush pero creo que es pronto

Felices Navidades y Próspero Año Nuevo.

Saluditos! ..... !!!!

(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: minari02 en 24 Diciembre 2013, 16:55 pm
mmm... muchas gracias por las recomendaciones,no sabia que habia que hacer eso antes de pegar el codigo, por cierto... ya he leído la parte de "que no hacer en C/C++ lo que pasa es que el código no es mio lo he encontrado en  otra pagina, y pues... con respecto a que las librerías de C++ inician con una c antes pues... francamente no me lo han enseñado así... sin embargo pues... supongo que hay diferentes formas de hacerlo no? jeje...

para serte franco no me ha quedado claro, te refieres a que imprime contando desde "j" cuatro números menos? por ejemplo entonces si "j" es un 10 imprimirá un 6??

por cierto la funion getch es para hacer una pausa verdad? pero... es necesario un equivalente aun?? yo no he usado eso y el programa siempre va bien. claro siempre colocando el return 0; al final.

Gracias.  :laugh:


Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: leosansan en 24 Diciembre 2013, 19:12 pm
.................................................................
para serte franco no me ha quedado claro, te refieres a que imprime contando desde "j" cuatro números menos? por ejemplo entonces si "j" es un 10 imprimirá un 6??
.............................


No, es que reserva cuatro espacios para imprimir el número j: "   6".

Felices Navidades y Próspero Año Nuevo.

Saluditos! ..... !!!!

(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: minari02 en 24 Diciembre 2013, 20:22 pm
oh!! o sea que dejara cuatro espacios entre cada numero verdad? y el uno que esta al par... significa que empezara a contar de 1 no? y ese ultimo comando que pusiste
Código
  1. fflush(stdout)
es para limpiar el buffer que deja la función
Código
  1. printf
verdad? osea que limpia la memoria que dejo la función es algo asi? como se usa exactamente?


Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: leosansan en 24 Diciembre 2013, 21:27 pm
oh!! o sea que dejara cuatro espacios entre cada numero verdad? y el uno que esta al par... significa que empezara a contar de 1 no? y ese ultimo comando que pusiste
Código
  1. fflush(stdout)
es para limpiar el buffer que deja la función
Código
  1. printf
verdad? osea que limpia la memoria que dejo la función es algo asi? como se usa exactamente?

Cuatro espacios para cada numero:    4,   12, 123,1234

El fflushh (stdout) se usa después de un print sin \n para enviar toda la información a la salida estándar, en este caso la pantalla. Generalmente se omite sin mayores problemas, pero  es un detalle de seguridad el ponerlo.



Felices Navidades y Próspero Año Nuevo.

Saluditos! ..... !!!!

(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)



Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: minari02 en 24 Diciembre 2013, 23:24 pm
Hola, al fin he entendido, lamento haberte molestado tanto   ;) jajaja 

tu me has dado este codigo:

Código
  1.    #include <stdio.h>
  2.  
  3.    int main()
  4.    {
  5.       int n,i,j;
  6.       printf("Introduce el numero por favor: ");
  7.       fflush (stdout);
  8.       scanf("%d",&n);
  9.       printf("%4d",1);//desjar una memoria reservada para introducir un numero de cuatro digitos y empezar a contar de 1//
  10.       for (i = 2;i <= n;i++){//empezar desde 2 hasta que i sea menor o igual que "n" (numero introducido) incrementar 1//
  11.           j = 2;
  12.           while (j <= i && i % j != 0)//mientras j sea 2 y sea menor que o igual a i que t no sera 2 por
  13.                                      //el incremento y que el resto de la divicion de entre "i" y "j" sea diferente a 0//
  14.               j++; //hacer incremento en j;
  15.           if (i == j){//si "i" es igual a "j" imprimir j.
  16.               printf("%4d",j);
  17.               fflush (stdout);
  18.           }
  19.       }
  20.       return 0;
  21.    }
  22.  

el concepto de % (operador modulo) es que: al dividir dos numero enteros por ejemplo 25/4=5 y  sobra 1, el resultado del que deseamos al hacer esto es ese 1 verdad?

bueno basando en tu codigo yo lo he transcrito para comprenderlo mejor y lo deje asi mira:

Código
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4.  
  5. {
  6.  
  7. int a,b,c;
  8. cout<<"introduce un numero: "<<endl;
  9. cin>>a;
  10. for(b = 2; b<=a; b++){//aqui se iniciara a contar desde el 2 como en la La criba de Eratóstenes solo que podria ser
  11.                     //asi for(b = 2; b <= 20; b++;(este seria el algritmo original lo vi ahi): http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes
  12. c = 2;
  13. while(c<=b && b % c !=0 )//mientra c=2 y sea <= que c y el resto de la divicion de b/2 sea distinto de 0
  14. c++;//hacer un incremento
  15. if(b==c){//si b es igual a c entonces imprimir c.
  16. cout<<"   "<<c;//he dejado esto para que haya un espacio y que los numeros no esten todos pegados.
  17. }
  18. }
  19. return 0;
  20. }
  21.  

basicamente al hacer b/c c=2 se dece que si se puede dividir entre 2 y el residuo no es cero es un numero primo verdad?

ha! por cierto
Código:
fflush(stdout)
lo que esta entre parentesis puede cambiar, en que casos?

cuando se usa la función
Código:
cout
tambien se usa?

El codigo funciona genial, digo... introduje el 100000 y pues en menos de 20 sec se ejecuto.

bueno dime en que hay fallas aunque dudo que haya pues solo he reescrito tu codigo jeje...  ;)

Saludo.


Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: leosansan en 25 Diciembre 2013, 03:51 am
Muy bien campeón, veo que al final ye has decantado por el C++.

Sólo un detalle, acostúmbrate a indentar  o sangrar el código para su mejor lectura y/o revisión:


Código
  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4.    int a,b,c;
  5.    cout<<"introduce un numero: "<<endl;
  6.    cin>>a;
  7.    for(b = 2; b<=a; b++){//aqui se iniciara a contar desde el 2 como en la La criba de Eratóstenes solo que podria ser
  8.        c = 2;                 //asi for(b = 2; b <= 20; b++;(este seria el algritmo original lo vi ahi): http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes
  9.        while(c<=b && b % c !=0 )//mientra c=2 y sea <= que c y el resto de la divicion de b/2 sea distinto de 0
  10.            c++;//hacer un incremento
  11.        if(b==c){//si b es igual a c entonces imprimir c.
  12.            cout<<"   "<<c;//he dejado esto para que haya un espacio y que los numeros no esten todos pegados.
  13.        }
  14.    }
  15.    return 0;
  16. }
  17.  

Pero no es la criba de Eratosrenes. Es otro método.

Felices Navidades y Próspero Año Nuevo.


¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)




Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: minari02 en 25 Diciembre 2013, 05:37 am
jajajaja... muchas gracias... eres genial, tienes mucha paciencia jajajaja  :laugh: :laugh: :laugh: :laugh: :laugh: :laugh:

oh! pensaba que si, pero bueno... no importa, sabe como seria utilizando ese metodo? al menos la parte del
Código
  1. for(b = 2; b<=a; b++)
pero luego intento... ya son las 10:37 y ps... es noche buena no... jajaj feliz navidad y gracias por despejar mis dudas y aguantar mi ignorancia jajaja  :laugh: :laugh: :laugh:

Feliz Navidad  :rolleyes:


Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: leosansan en 25 Diciembre 2013, 14:10 pm
jajajaja... muchas gracias... eres genial, tienes mucha paciencia jajajaja  :laugh: :laugh: :laugh: :laugh: :laugh: :laugh:

oh! pensaba que si, pero bueno... no importa, sabe como seria utilizando ese metodo? al menos la parte del
Código
  1. for(b = 2; b<=a; b++)
pero luego intento... ya son las 10:37 y ps... es noche buena no... jajaj feliz navidad y gracias por despejar mis dudas y aguantar mi ignorancia jajaja  :laugh: :laugh: :laugh:

Feliz Navidad  :rolleyes:

Siempre que pueda y esté en mis escasos conocimientos seguiré ayudando. La verdad es que esto del foro es como vivir la Navidad todo el año, la gente comparte sus conocimientos sin pedir nada a cambio, Es guay  ;-) ;-) ;-)

Ese bucle en concreto es para ir recorriendo rodos los números desde 2 hasta el introducido Ya el siguiente bucle se encarga de comprobar si cada uno de esos números tiene divisores o no, es decir si son primos i no.

Y lo dicho:


Felices Navidades y Próspero Año Nuevo.


¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: minari02 en 25 Diciembre 2013, 21:23 pm
lo dicho... dicho esta??  :huh:

Oye eres genial, es bueno saber que hay gente que le gusta ayudar a los demas  ;-) ;-) ;-) ;-) ;-) ;-) ;-)


Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: minari02 en 28 Diciembre 2013, 01:31 am
Hola, que tal? mira he tratado hacer  mi propia versión yo solo, la diferencia es que este muestra si es primo o no, bueno, te dejo el código dime que te parece, tiene un fallo, ya lo veras.

Código
  1.    #include <iostream>
  2.    using namespace std;
  3.    int main()
  4.  
  5.    {
  6.  
  7.    int a,b=2,c=3,d=5,e=7;
  8.    cout<<"introduce un numero: ";
  9.    cin>>a;
  10.    while(a==2 || a==3 || a==5 || a==7){
  11.    cout<<"Es primo";
  12.    break;
  13.    }
  14.    if(a%2!=0 && a%3!=0 && a%5!=0 && a%7!=0){
  15.    cout<<"Es numero primo";
  16.    }
  17.    else{
  18.     cout<<"no es primo";
  19.    }
  20.    }
  21.  
  22.  

talves tu puedes corregirlo, yo no he podido, si es posible hazlo con la una estructura al menos similar, mira esta pagina http://nosolomates.es/ayuda/ayuda/primos.htm de ahí he sacado este método.


Título: Re: que significa y como se llama printf("%4d",1); en c++
Publicado por: leosansan en 28 Diciembre 2013, 10:34 am
Hola, que tal? mira he tratado hacer  mi propia versión yo solo, la diferencia es que este muestra si es primo o no, bueno, te dejo el código dime que te parece, tiene un fallo, ya lo veras.
...........................
talves tu puedes corregirlo, yo no he podido, si es posible hazlo con la una estructura al menos similar, mira esta pagina http://nosolomates.es/ayuda/ayuda/primos.htm de ahí he sacado este método.

143 dice que es primo y no lo es ya que es 11x13.

Sólo comprueba con los múltiplos que has puesto y no con todos hasta la raíz de n. De ahí la necesidad de un for que compruebe todos los posibles divisores, como en esta otra versión para comprobar si son o no primos:


Código
  1. #include <math.h>
  2. #include <stdio.h>
  3. int main ()
  4. {
  5.   int j, num, n,rq,aux,cont=1;
  6.   printf ("Introduzca numero: ");
  7.   scanf ("%d", &num);
  8.    printf ("2  ");
  9.    for (n=3; n<=num;n+=2) {
  10.            rq=(int) sqrt (n);
  11.            aux=0;
  12.            for (j=3;j<=rq;j+=2){
  13.                if (n%j==0){
  14.                    aux++;
  15.                    break;
  16.                }
  17.            }
  18.            if (aux==0) {
  19.               printf ("%d  ",n);
  20.            }
  21.    }
  22.    return 0;
  23. }
  24.  

¡¡¡¡ Saluditos! ..... !!!!

:rolleyes: ;) ;) ;) :rolleyes: