que significa y como se llama printf("%4d",1); en c++

Iniciado por minari02, 24 Diciembre 2013, 03:35 AM

0 Miembros y 2 Visitantes están viendo este tema.

minari02

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:

#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.




minari02

#1
puede cambiar esto printf("%4d",1); por esto 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.

leosansan

#2
Cita de: minari02 en 24 Diciembre 2013, 03:42 AM
puede cambiar esto printf("%4d",1); por esto 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

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 (cpp) [Seleccionar]

#include <stdio.h>

int main()
{
    int n,i,j;
    printf("Introduce el numero por favor: ");
    fflush (stdout);
    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);
            fflush (stdout);
        }
    }
    return 0;
}


Tr hablarçia de fflush pero creo que es pronto

Felices Navidades y Próspero Año Nuevo.
Saluditos! ..... !!!!


minari02

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:

leosansan

Cita de: minari02 en 24 Diciembre 2013, 16:55 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! ..... !!!!


minari02

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 (cpp) [Seleccionar]
fflush(stdout) es para limpiar el buffer que deja la función
Código (cpp) [Seleccionar]
printf verdad? osea que limpia la memoria que dejo la función es algo asi? como se usa exactamente?

leosansan

Cita de: 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 (cpp) [Seleccionar]
fflush(stdout) es para limpiar el buffer que deja la función
Código (cpp) [Seleccionar]
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! ..... !!!!



minari02

Hola, al fin he entendido, lamento haberte molestado tanto   ;) jajaja 

tu me has dado este codigo:

Código (cpp) [Seleccionar]
    #include <stdio.h>

    int main()
    {
       int n,i,j;
       printf("Introduce el numero por favor: ");
       fflush (stdout);
       scanf("%d",&n);
       printf("%4d",1);//desjar una memoria reservada para introducir un numero de cuatro digitos y empezar a contar de 1//
       for (i = 2;i <= n;i++){//empezar desde 2 hasta que i sea menor o igual que "n" (numero introducido) incrementar 1//
           j = 2;
           while (j <= i && i % j != 0)//mientras j sea 2 y sea menor que o igual a i que t no sera 2 por
                                      //el incremento y que el resto de la divicion de entre "i" y "j" sea diferente a 0//
               j++; //hacer incremento en j;
           if (i == j){//si "i" es igual a "j" imprimir j.
               printf("%4d",j);
               fflush (stdout);
           }
       }
       return 0;
    }


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 (cpp) [Seleccionar]
#include <iostream>
using namespace std;
int main()

{

int a,b,c;
cout<<"introduce un numero: "<<endl;
cin>>a;
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
                     //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
c = 2;
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
c++;//hacer un incremento
if(b==c){//si b es igual a c entonces imprimir c.
cout<<"   "<<c;//he dejado esto para que haya un espacio y que los numeros no esten todos pegados.
}
}
return 0;
}


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 fflush(stdout) lo que esta entre parentesis puede cambiar, en que casos?

cuando se usa la función 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.

leosansan

#8
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 (cpp) [Seleccionar]

#include <iostream>
using namespace std;
int main(){
   int a,b,c;
   cout<<"introduce un numero: "<<endl;
   cin>>a;
   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
       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
       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
           c++;//hacer un incremento
       if(b==c){//si b es igual a c entonces imprimir c.
           cout<<"   "<<c;//he dejado esto para que haya un espacio y que los numeros no esten todos pegados.
       }
   }
   return 0;
}


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

Felices Navidades y Próspero Año Nuevo.

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





minari02

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 (cpp) [Seleccionar]
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: