Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leosansan

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




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


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

#564
Cita de: amchacon en 24 Diciembre 2013, 10:29 AM
En realidad sería hasta la raiz del número.

El caso es si sabe donde se pone la raíz cuadrada. Y no olvidarse de incluir la librería math.h.

Cita de: amchacon en 24 Diciembre 2013, 10:29 AM

También podríamos generarnos una tabla booleana diciendo cual es primo y cual no. Usando la criba de eratostenes (mira el gif):
http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes


A mi modesto entender, ello implica calcular y guardar en arrays los sucesivos múltiplos de 2,3,5, etc para posteriormente por comparación comprobar que no está en ellos. A mí por lo menos me ha dado una pobre eficiencia, supongo que debido al cambio de calcular si un módulo es cero por el tener que rellenar arrays y posteriormente comparar. Igual tu lo tienes más optimizado.

Una pequeña mejora, además de lo de la raíz, es ir comprobando sólo los impares, ya que sabemos que los pares, excepto el 2, no son primos:


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <math.h>

int main()
{
    int n,i,j,rq;
    printf("Introduce el numero por favor: ");
    fflush (stdout);
    scanf("%d",&n);
    if (n==1){
        printf("2");
        return 1;
    }
    printf("2");
    fflush (stdout);
    for (i = 3;i <= n;i+=2){

        j = 3;
        while (j <= rq && i % j != 0)
            j++;
        if (i == j){
            printf("%4d",j);
            fflush (stdout);
        }
    }
    return 0;
}


No es el más efiiciente pero no quería cambiarle sustancialmente su código. :rolleyes: :rolleyes: :rolleyes:

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


#565

Respuesta en que_significa_y_como_se_llama_printf4d1_en_c

No dupliques los temas, ya lo habías preguntado aquí. Espera que te contesten en lugar de abrir un nuevo tema con la misma pregunta que en este  tema.
:rolleyes:

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



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

#567
Programación C/C++ / Re: Problema con el getchar
23 Diciembre 2013, 19:50 PM

La respuesta en problema_con_getchar,

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

#568
Programación C/C++ / Re: problema con getchar()
23 Diciembre 2013, 19:47 PM
Cita de: Despondency en 23 Diciembre 2013, 19:11 PM
Estaba con el mismo problema... porque la funcion fflush(stdin) no ayuda??
........................
y bueno alli puse dos veces el getchar para que jalara xD


Respecto a la funcion fflush(stdin) leete Lo que no hay que hacer en C/C++. Nivel basico.

Y respecto al uso de los dos getchar ya en un post anterior te pusieron la respuesta:

Cita de: EagleOneRaptor en 13 Abril 2009, 02:10 AM
La función getchar no te funciona, porque no se limpió el retorno de linea (ENTER) usado durante la función scanf, por lo que getchar lee ese retorno de línea, impidiendole esperar a que presiones nada.

Es decir, un getchar lee el retorno del scanf y el otro la variable "resp".

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



#569
Cita de: amchacon en 23 Diciembre 2013, 17:55 PM
Es una sintaxis de inicialización no de asignación, el operador = no está definido en los arrays por lo que no puedes "reasignarlo in the way".

De hecho eso no es un array, puesto que los arrays no se pasan a las funciones, estas pasando un puntero char* al primer elemento.
......................................................
O cargarlo desde un fichero externo.
...................................................

Creo que esa sería la solución óptima. Pero para el caso que me ocupa, al necesitar solamente en dos ocasiones la matriz original, creo que optaré por hacer una copia de la misma.

Gracias por los puntos de vista que me has aportado.
;-) ;-) ;-)

Felices Navidades y Próspero Año Nuevo.
Saluditos! ..... !!!!
#570
El tema está en que si declaro en main la matriz como está en la función todo va bien. Pero al intentar declararla sólo con sus dimensiones en main e intentar inicializarla desde la función no me sale.  :rolleyes:

Creo que como lo tengo en la función me estaré refiriendo al elemento 3,3 en lugar de a toda la matriz.

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>

void matriz_a_inicial (int a [][3]);
int main (){
   int a[3][3];
   matriz_a_inicial (a);
   return 0;
}

void matriz_a_inicial (int  a [][3]){
   a [3][3]={{1,2,3},{4,5,6},{7,8,9}};
}


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