• Jueves 2 de Abril de 2026, 21:12

Mostrar Mensajes

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


Mensajes - SkullFlower

Páginas: [1]
1
C/C++ / Re: Matriz con apuntadores
« en: Miércoles 13 de Abril de 2011, 03:47 »
Hola,

Creo que gcc incluye por default stdlib.h, así que por eso no la puse.

Otra cosa, en la linea 19:

Código: C
  1. rellenar_matriz((int*)m);
  2.  

cual es la diferencia de pasar solo (int*)m en vez de m?

Gracias por la ayuda  ^_^

2
C/C++ / Matriz con apuntadores
« en: Martes 12 de Abril de 2011, 03:04 »
Hola, quisiera ver si me podían ayudar con este código:

Código: C
  1. #include<stdio.h>
  2. #include<time.h>
  3. void matriz(int (*m)[]);
  4. int main(){
  5.     int m[3][3];
  6.     int i, j;
  7.     srand(time(NULL));
  8.     matriz(m);
  9.     for(i=0;i<3;i++){
  10.         for(j=0;j<3;j++){
  11.             printf("%d ", m[i][j]);
  12.         }
  13.         printf("n");
  14.     }
  15.     return 0;
  16. }
  17. void matriz(int (*m)[]){
  18.     int i, j;
  19.     for(i=0;i<3;i++){
  20.         for(j=0;j<3;j++){
  21.             (*m+i)[j]=rand()%10;
  22.         }
  23.     }
  24. }
  25.  

Lo que quiero hacer es asignarle a la matriz M valores con rand del 0 al 9 pero usando punteros pero esto es lo que me sale:

Output:
Citar
bash-3.1$ gcc matrix.c
bash-3.1$ ./a.out
4 9 7
0 0 134513424
0 134518552 -1078581720

3
C/C++ / Re: PROLEMA CON EJERCICIO
« en: Lunes 13 de Diciembre de 2010, 20:13 »
Tienes varios errores de sintaxis y variables no declaradas en ese código.

podrías poner el código entre las etiquetas
Código: C
  1.  

así seria más fácil de leer.

4
C/C++ / Re: Problema en un ejercicio
« en: Lunes 13 de Diciembre de 2010, 19:59 »
porque los arreglos empiezan en el elemento 0, osea que si tienes un arreglo de 3 elementos

va a ser 0, 1, 2.

así que tu problema esta en el for donde muestras el arreglo al revés.

puedes revisar este mensaje acá en este otro thread nada mas la parte a, es el mismo ejercicio:

viewtopic.php?f=18&t=44885#p160017

saludos

5
C/C++ / Re: PROLEMA CON EJERCICIO
« en: Lunes 13 de Diciembre de 2010, 18:58 »
Código: C
  1. scanf("%.2f", &matriz[i][j]);
  2.  

Quitale el .2 en %.2f

y no tienes definido un arreglo llamado matriz en esa función, solo tienes 2 arreglos pero ninguno se llama matriz.

6
C/C++ / Re: PROLEMA CON EJERCICIO
« en: Lunes 13 de Diciembre de 2010, 18:40 »
Mira en la función transpuesta tienes estas lineas:

Código: C
  1. scanf("%.2f", &matriz[i][j]);
  2.  
Código: C
  1. printf(" %.2f ", matriz[i][j]);
  2.  

pero matriz no esta definida, solo tienes matrizA y matrizB definidas

en el switch en el case 3 tienes esto:

Código: C
  1. printf("El determinante de la matriz 1 es: %dn", determinante(matriz1);
  2. printf("El determinante de la matriz 2 es: %dn", determinante(matriz2);
  3.  

faltaría agregarle otro paréntesis ) a cada linea:

Código: C
  1. printf("El determinante de la matriz 1 es: %dn", determinante(matriz1));
  2. printf("El determinante de la matriz 2 es: %dn", determinante(matriz2));
  3.  

en donde tienes esto:

Código: C
  1. sum1 = matriz[0][0]*matriz[1][1]*matriz[2][2];
  2. sum2 = matriz[0][1]*matriz[1][2]*matriz[2][0];
  3. sum3 = matriz[0][2]*matriz[1][0]*matriz[2][1]:
  4. res1 = matriz[2][0]*matriz[1][1]*matriz[0][2];
  5. res2 = matriz[1][0]*matriz[0][1]*matriz[2][2];
  6. res3 = matriz[0][0]*matriz[1][2]*matriz[2][1];
  7.  

en la linea 3 tienes dos puntos en vez de punto y coma al final.

y en esta otra linea:

Código: C
  1. int determinante(float matriz[][]){
  2.  

te falta poner ORD entre los corchetes.

Intenta corrigiendo eso a ver si ya funciona.

7
C/C++ / Re: PROLEMA CON EJERCICIO
« en: Lunes 13 de Diciembre de 2010, 16:37 »
Creo que te entendí mal xD

a)
Pues tendrías que declarar un arreglo de 10 elementos:

Código: C
  1. int vector[10];
  2.  

después tienes que leer los números, eso lo puedes hacer con un ciclo for:

Código: C
  1. for(i=0;i<10;i++){
  2.     scanf("%d", &vector[i]);
  3. }
  4.  

y ya para mostrarlo al revés como ya sabes que el vector es de 10 elementos pues utilizas un ciclo for empezando del 9 y que termine en 0:

Código: C
  1. for(i=9;i>=0;i--){
  2.     printf("%d ", vector[i]);
  3. }
  4.  

b)

pues declaras primero los arreglos:

Código: C
  1. int A[3][4];
  2. int B[4][3];
  3.  

y utilizas 2 ciclos for para leer los datos que se le asignaran a la matriz A:
en la linea 3 va leyendo los numeros y como la transpuesta de una matriz mxn es una matriz nxm en la linea 4 cambio de lugar las variables i y j.
Código: C
  1. for(i=0; i<3; i++){
  2.     for(j=0; j<4; j++){
  3.         scanf("%d", &A[i][j]);
  4.         B[j][i]=A[i][j];
  5.     }
  6. }
  7.  

y ya por ultimo para imprimirla solo es cuestión de utilizar otros 2 ciclos for como en la parte anterior, solo que en vez de leer los datos los vas a mostrar.

Saludos.

8
C/C++ / Re: Contar Bisiestos
« en: Lunes 13 de Diciembre de 2010, 15:40 »
haha tienes razón en lo de la a, bueno ya lo corregí.  :D

9
C/C++ / Re: PROLEMA CON EJERCICIO
« en: Lunes 13 de Diciembre de 2010, 15:05 »
Podrías usar 3 switches de la siguiente forma:

Código: C
  1. #include<stdio.h>
  2. int main(){
  3.     char letra;
  4.     int opcion;
  5.     scanf("%d", &opcion);//lee un numero para ver a cual de los 2 menus entrar
  6.     switch(opcion){
  7.         case 1:
  8.             scanf("%c", &letra);
  9.             switch(letra){
  10.                 case 'a':
  11.                 //Aqui pones lo que hace la opcion a
  12.                 break;
  13.                 case 'b':
  14.                 //aqui pones lo que hace la opcion b
  15.                 break;
  16.             }
  17.         case 2:
  18.             scanf("%c", &letra);
  19.             switch(letra){
  20.                 case 'a':
  21.                 //aqui pones lo que hace la opcion a
  22.                 break;
  23.                 case 'b':
  24.                 //opcion b
  25.                 break;
  26.                 case 'c':
  27.                 //opcion c
  28.                 break;
  29.             }
  30.     }
  31.     return 0;
  32. }
  33.  

10
C/C++ / Re: Contar Bisiestos
« en: Lunes 13 de Diciembre de 2010, 12:02 »
Hola,

Mira tu error esta aquí:

Código: C
  1. for ( int i=1600; i<=(a-1);i++) {
  2. if ((((a%4) == 0&& ((a%100)!= 0)) || (a%400)==0)) {
  3.  

a es el anio que pide el programa pero ahí en el ciclo for siempre va a ser el mismo por ejemplo si pones 1700, siempre sera 1700 no va a avanzar de 1 en 1 desde 1600 hasta 1700, que es lo que quieres.

Así que tendrías que cambiar a en el if por i así ira avanzando de 1 en 1 hasta el anio que puso el usuario.

Y la condición que tienes en el if creo que también esta mal:

Cito de Wikipedia:
Citar
La regla para los años bisiestos según el calendario gregoriano es:

    Un año es bisiesto si es divisible por 4, excepto el último de cada siglo (aquel divisible por 100), salvo que este último sea divisible por 400.

Es decir los años que sean divisibles por 4 serán bisiestos; aunque no serán bisiestos si son divisibles entre 100 (como los años 1700, 1800, 1900 y 2100) a no ser que sean divisibles por 400 (como los años 1600, 2000 ó 2400)

Código: C
  1. if(a%4==0||(i%100==0&&i%400==0))
  2.  

Aquí te dejo el código corregido, por cierto, le quite el (a-1) que tenias en el ciclo for.

Código: C
  1. #include<stdio.h>
  2. int main () {
  3.     int a;
  4.     int bisis;
  5.     bisis=0;
  6.     printf ("dime un anio ");
  7.     scanf ("%d",&a);
  8.     printf ("Anios %d",a);
  9.     for ( int i=1600; i<=a;i++) {
  10.         if (i%4==0||(i%100==0&&i%400==0))) {
  11.             bisis++;
  12.         }
  13.     }
  14.     printf ("n Los bisiestos son %d",bisis);
  15.     return 0;
  16. }
  17.  

Saludos.

11
C/C++ / Re: Promedio y mayor menor
« en: Sábado 11 de Diciembre de 2010, 15:38 »
Creo que no se puede comparar un int con un char.

aquí te pongo el código que yo hice (es en C):

Código: C
  1. #include<stdio.h>
  2. int main(){
  3.     int i, size, menor, mayor;
  4.     float prom;
  5.     int j=0;
  6.     int cont = 0;
  7.     int suma = 0;
  8.     printf("Introduzca el tamanio del arreglo: ");
  9.     scanf("%d", &size);
  10.     int array[size];
  11.     do{
  12.         printf("Ingrese un numero: ");
  13.         scanf("%d", &i);
  14.         array[cont] = i;
  15.         if(i%2==0){
  16.             suma+=i;
  17.             j++;
  18.         }
  19.         cont++;
  20.     }while(cont<size);
  21.     prom = suma/j;
  22.     menor = mayor = array[0];
  23.     for(j=0;j<size;j++){
  24.         if(mayor<array[j]){
  25.             mayor = array[j];
  26.         }
  27.         if(menor>array[j]){
  28.             menor = array[j];
  29.         }
  30.     }
  31.     printf("El promedio es: %fn", prom);
  32.     printf("El mayor es: %dn", mayor);
  33.     printf("El menor es: %dn", menor);
  34.     return 0;
  35. }
  36.  

Esto es lo que me sale de resultado:

Citar
Introduzca el tamanio del arreglo: 5
Ingrese un numero: 4512
Ingrese un numero: 124
Ingrese un numero: 634
Ingrese un numero: 123
Ingrese un numero: 763
El promedio es: 1756.000000
El mayor es: 4512
El menor es: 123

Eso es lo que necesitabas?

12
C/C++ / Re: duda con un switch
« en: Domingo 3 de Octubre de 2010, 00:45 »
Bueno ya cambie el codigo:

que les parece?  :o

Código: C
  1. #include<stdio.h>
  2. int main(){
  3.         int op;
  4.         char buffer[5];
  5.         printf("1. n2. n3. n"
  6.         "Seleccione una opcion: ");
  7.         fgets(buffer, sizeof(buffer), stdin);
  8.         sscanf(buffer, "%d", &op);
  9.         while(op>3 || op<1){
  10.                 printf("Opcion invalida, seleccione otra opcion: ");
  11.                 fgets(buffer, sizeof(buffer), stdin);
  12.                 sscanf(buffer, "%d", &op);
  13.         }
  14.         switch(op){
  15.                 case 1:
  16.                         printf("1n");
  17.                         break;
  18.                 case 2:
  19.                         printf("2n");
  20.                         break;
  21.                 case 3:
  22.                         printf("3n");
  23.                         break;
  24.         }
  25.         getchar();
  26.         return 0;
  27. }
  28.  

13
C/C++ / duda con un switch
« en: Viernes 1 de Octubre de 2010, 03:17 »
Hola,

bueno estoy usando un switch pero por ejemplo al poner un numero diferente al 1, 2 o 3 como el 5 u otro numero que no este dentro de las opciones, sale el mensaje ese de "opción no valida" y luego llama a main para que se empiece la ejecución del programa de nuevo para que elija una opción de las que se le muestran pero si ponen varias veces 5 u otro numero y después seleccionan una opción de las que se muestran requiere de que presione varias veces enter para que termine la ejecución del programa  :wacko:

por que pasa eso?
y otra cosa, es correcto eso que estoy haciendo en default? eso de llamar a main xD

Código: C
  1. #include<stdio.h>
  2. int main(){
  3.     int op;
  4.     char buffer[3];
  5.     printf("1. n2. n3. n"
  6.     "Seleccione una opcion: ");
  7.     fgets(buffer, sizeof(buffer), stdin);
  8.     sscanf(buffer, "%d", &op);
  9.     switch(op){
  10.         case 1:
  11.             printf("1n");
  12.             break;
  13.         case 2:
  14.             printf("2n");
  15.             break;
  16.         case 3:
  17.             printf("3n");
  18.             break;
  19.         default:
  20.             printf("Opcion no validan");
  21.             main();
  22.     }
  23.     getchar();
  24.     return 0;
  25. }
  26.  

14
C/C++ / Re: Como hago esto soy novato en C
« en: Sábado 24 de Julio de 2010, 01:27 »
Hola,

bueno según lo que te entendí es que quieres que se guarde la cadena al revés en otra?

sí es así entonces esto fue lo que hice yo (a ver si te sirve):

Código: C
  1. #include<stdio.h>
  2. int main(){
  3.     char s1[] = "MJRASP";
  4.     int i,j;
  5.     char s2[sizeof(s1)];
  6.     j = sizeof(s1)-2;
  7.     i = 0;
  8.     for(j;j>=0;j--, i++){
  9.         s2[i]=s1[j];
  10.         if(j==0){
  11.             s2[i+1]='';
  12.         }
  13.     }
  14.     printf("%sn", s2);
  15.     return 0;
  16. }
  17.  

15
C/C++ / Re: Project Euler (problema 10)
« en: Miércoles 21 de Julio de 2010, 02:21 »
bueno ya lo corregí el problema era ese que dices que estaba usando int, así que use un long long.

y con respecto a lo que mencionas sobre el arreglo, no me da ningún problema así que lo deje como lo tenia.

bueno aquí dejo el código corregido para que lo use el que quiera:

Código: C
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main(){
  4.     int lim = 2000000;
  5.     int i, j;
  6.     int sieve[lim];
  7.     long long sum;
  8.     sum = 0;
  9.     for(i=1;i<=lim;i++){
  10.         sieve[i]=1;
  11.         if(i<2){
  12.             sieve[i]=0;
  13.         }
  14.     }
  15.     for(i=4;i<=lim;i+=2){
  16.         sieve[i]=0;
  17.     }
  18.     for(i=3;i<=sqrt(lim);i+=2){
  19.         if(sieve[i]){
  20.             for(j=i*2;j<=lim;j+=i){
  21.                 sieve[j]=0;
  22.             }
  23.         }
  24.     }
  25.     for(i=1;i<=lim;i++){
  26.         if(sieve[i]){
  27.             sum+=i;
  28.         }
  29.     }
  30.     printf("%lldn", sum);
  31.     return 0;
  32. }
  33.  

gracias por la ayuda czealt.  :beer:

16
C/C++ / Project Euler (problema 10)
« en: Martes 20 de Julio de 2010, 04:29 »
Bueno, estoy intentando resolver algunos problemas de la pagina projecteuler y ya llegue al 10 pero por alguna razón no me sale.

el problema dice así:

Citar
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.

el código que tengo hasta ahorita es este:

Código: C
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main(){
  4.     int lim = 2000000;
  5.     int i, j;
  6.     int sieve[lim];
  7.     int sum;
  8.     sum = 0;
  9.     for(i=1;i<=lim;i++){
  10.         sieve[i]=1;
  11.         if(i<2){
  12.             sieve[i]=0;
  13.         }
  14.     }
  15.     for(i=4;i<=lim;i+=2){
  16.         sieve[i]=0;
  17.     }
  18.     for(i=3;i<=sqrt(lim);i+=2){
  19.         if(sieve[i]){
  20.             for(j=i*2;j<=lim;j+=i){
  21.                 sieve[j]=0;
  22.             }
  23.         }
  24.     }
  25.     for(i=1;i<=lim;i++){
  26.         if(sieve[i]){
  27.             sum+=i;
  28.         }
  29.     }
  30.     printf("%dn", sum);
  31.     return 0;
  32. }
  33.  

el resultado que me da es: 1179908154

pero yo se que ese no es el resultado correcto, el resultado correcto es: 142913828922

asi que no se que este haciendo mal  :wacko:

17
C/C++ / Problema con numeros primos
« en: Miércoles 31 de Marzo de 2010, 09:45 »
Hola,

Quiero hacer un programa que imprima la suma de todos los números primos menores a 2,000,000 pero cuando ejecuto el código me da un numero negativo o algo así.  :wacko:

Ya lo probé con números mas pequeños, por ejemplo que haga la suma de los números primos menores a 10,000 y si me da bien el resultado pero supongo que me da error en el de 2,000,000 por que debería de usar long o algo parecido pero lo use y de todos modos me salia un numero negativo, asi que mi duda es:

como puedo hacer para que me de el resultado bien?

este es el codigo que tengo:

Código: C
  1. #include<stdio.h>
  2. int Primos(int x);
  3. int main(){
  4.     int x, y, z;
  5.     y = 0;
  6.     x = 2000000;
  7.     for(x; x>=2; x--){
  8.         if(Primos(x)){
  9.             y += x;
  10.         }
  11.     }
  12.     printf("%dn", y);
  13.     return 0;
  14. }
  15. int Primos(int x){
  16.     int y;
  17.     int cont = 0;
  18.     for(y=1;y<=x; y++){
  19.         if(x%y==0){
  20.             cont++;
  21.         }
  22.     }
  23.     if(cont==2){
  24.         return 1;
  25.     }
  26.     return 0;
  27. }
  28.  

este es mi código usando long, pero pues nunca lo había usado así que puede que tenga algo mal y por eso no me de bien el resultado:

Código: C
  1. #include<stdio.h>
  2. int Primos(unsigned long int x);
  3. int main(){
  4.     unsigned long int x, y, z;
  5.     y = 0;
  6.     x = 2000000;
  7.     for(x; x>=2; x--){
  8.         if(Primos(x)){
  9.             y += x;
  10.         }
  11.     }
  12.     printf("%dn", y);
  13.     return 0;
  14. }
  15. int Primos(unsigned long int x){
  16.     unsigned long int y;
  17.     unsigned long int cont = 0;
  18.     for(y=1;y<=x; y++){
  19.         if(x%y==0){
  20.             cont++;
  21.         }
  22.     }
  23.     if(cont==2){
  24.         return 1;
  25.     }
  26.     return 0;
  27. }
  28.  

18
C/C++ / Re: Matriz de aleatorios sin repetir
« en: Sábado 27 de Febrero de 2010, 05:37 »
mira yo hice esto, no se si te sirva

Código: C
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. int main(){
  5.     int A[4][4];
  6.     int B[4][4];
  7.     srand(time(NULL));
  8.     int i, j, x;
  9.     printf("introduce el limite para numeros aleatorios: ");
  10.     scanf("%d", &x);
  11.     for(i = 0; i < 4; i++){
  12.         for(j = 0; j < 4; j++){
  13.             A[i][j]=rand()%x;
  14.             B[i][j]=rand()%x;
  15.         }
  16.     }
  17.     for(i = 0; i < 4; i++){
  18.         for(j = 0; j < 4; j++){
  19.             printf("%dt", A[i][j]);
  20.         }
  21.         printf("n");
  22.     }
  23.     printf("nn");
  24.     for(i = 0; i < 4; i++){
  25.         for(j = 0; j < 4; j++){
  26.             printf("%dt", B[i][j]);
  27.         }
  28.         printf("n");
  29.     }
  30.     while(getchar()!='n');
  31.     getchar();
  32.     return 0;
  33. }
  34.  

y tambien hice esto modificando algo tu codigo:

Código: C
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. void mostrarMatriz(int M[][5]);
  6. void genera_al(int M[][5], int n);
  7.  
  8. int main(){
  9.     srand(time(NULL));
  10.     int M[5][5], lim, N[5][5];
  11.     printf("introduce el limite para numeros aleatorios: ");
  12.     scanf("%d",&lim);
  13.     genera_al(M, lim);
  14.     mostrarMatriz(M);
  15.     printf("nahora sin repetirn");
  16.     genera_al(N, lim);
  17.     mostrarMatriz(N);
  18.     while(getchar()!='n');
  19.     getchar();
  20.     return 0;
  21. }
  22.  
  23. void genera_al(int M[][5], int n){
  24.     int j, i;
  25.     for(i=0;i<5;i++){
  26.         for(j=0;j<5;j++){
  27.             M[i][j]=rand()%n+1;
  28.         }
  29.     }
  30. }
  31.  
  32. void mostrarMatriz(int M[][5]){
  33.     int i, j;
  34.     for(i=0;i<4;i++){
  35.         for(j=0;j<4;j++){
  36.             printf("t%d",M[i][j]);
  37.         }
  38.     printf("n");
  39.     }
  40. }
  41.  

19
C/C++ / Re: Numeros perfectos
« en: Sábado 23 de Enero de 2010, 21:08 »
Gracias por el consejo, ya modifique el codigo pero otra cosa.

Como hacer lo mismo pero para cuando alguien introduzca una letra o un simbolo?

20
C/C++ / Re: Problema de novato
« en: Sábado 23 de Enero de 2010, 07:39 »
pon esto antes de return 0

Código: C
  1. while(getchar()!='n');
  2.  

va a hacer una pausa hasta que presiones enter y luego se cerrara solo el programa.

21
C/C++ / Re: Problema de novato
« en: Sábado 23 de Enero de 2010, 07:00 »
Hola,

estaba viendo tu codigo y estos son los errores que encontre:

en las lineas donde pones /n para hacer el salto de renglon debe ser asi n
con la otra diagonal invertida o no se como se llame xD

en la parte de :

res = val1 + val2;

te falto poner el punto y coma al final.

y en vez de %i debe ser %d aunque lo compile con %i y si se pudo, la verdad no se por que a ver si alguien puede decir por que lol

pero creo que lo correcto deberia ser %d.

Código: C
  1. #include <stdio.h>
  2.  
  3. int main()
  4.  
  5. {
  6.     int val1, val2, res;
  7.  
  8.     printf("Ingrese el primer valor: n");
  9.     scanf("%d",&val1);
  10.     printf("Ingrese el segundo valor: n");
  11.     scanf("%d",&val2);
  12.  
  13.     res = val1 + val2;
  14.  
  15.     printf("La suma de %d y %d es: %dn",val1, val2, res);
  16.  
  17.     return 0;
  18. }
  19.  

22
C/C++ / Re: Numeros perfectos
« en: Viernes 22 de Enero de 2010, 21:52 »
mira ya hice el programa de los numeros primos modificando unas cuantas cosas del que pusiste para numeros perfectos  :P

Código: C
  1. #include<stdio.h>
  2. int primo(int Y_);
  3. main(){
  4.     int X;
  5.     int Y;
  6.     int Z = 0;
  7.     printf("Cuantos numeros primos desea calcular: ");
  8.     scanf("%d", &X);
  9.     for(Y = 1; Z != X; Y++){
  10.         if(primo(Y)){
  11.             printf("[%d] ", Y);
  12.             Z++;
  13.         }
  14.     }
  15.     while(getchar()!='n');
  16.     getchar();
  17.     return 0;
  18. }
  19. int primo(int Y_){
  20.     int X_;
  21.     int suma = 0;
  22.     for(X_ = 1; X_ <= Y_; X_++){
  23.         if(Y_ % X_ == 0){
  24.             suma++;
  25.         }
  26.     }
  27.     if(suma == 2){
  28.         return 1;
  29.     }
  30.     return 0;
  31. }
  32.  

y pues ya seria todo, Gracias por la ayuda  ^_^

23
C/C++ / Re: Numeros perfectos
« en: Viernes 22 de Enero de 2010, 02:40 »
Hola de nuevo.

Tratare de ya no usar las mismas variables para la proxima.

Batallo mucho haciendo ese tipo de programas y aveces mejor no los hago y ahora tengo que hacer un programa parecido pero con numeros primos.

si batallo mucho haciendo este tipo de programas significa que no sere buen programador? XD

otra cosa:

Código: C
  1. if(N%2==0 && es_perfecto(N))
  2.  

esa parte no la entendi muy bien, me la podrias explicar?

y por ultimo:

Usando tu codigo puse que calculara 5 numeros y los primeros los muestra y ya despues se queda asi y no muestra el quinto, segun wikipedia el numero que sigue es el 33550336. Sera que el programa todavia no llega a ese numero?(ya lleva como 10 ~ 15 min ejecutado).

24
C/C++ / Re: Numeros perfectos
« en: Miércoles 20 de Enero de 2010, 23:56 »
hola gracias por responder  :D

estaba viendo el codigo que pusiste y en la funcion:

Código: C
  1. int es_perfecto (int N)
  2. {
  3.     int suma = 0;
  4.     int i;
  5.  
  6.     for(i=1; i<=(N/2); i++)
  7.        if(N%i==0)
  8.      suma += i;
  9.  
  10.     if(suma==N)
  11.       return 1;
  12.  
  13.     return 0; /* el "else" no hace falta */
  14. }
  15.  

veo que no pones las llaves en los ifs ni en el for, es lo mismo si las pongo o no?

otra cosa:

Citar
Lo primero que veo es que tu procedimiento utiliza las variables "y", "x". Esto es muy peligroso a la hora de usarlas porque el mínimo descuido supone que el programa se ejecute de forma no deseada.

por que dices eso?

25
C/C++ / Numeros perfectos
« en: Miércoles 20 de Enero de 2010, 04:02 »
Hola,

quiero hacer un programa que le introduzcan cuantos numeros perfectos quiere que el programa saque por ejemplo si pones un 1 pues va a imprimir solo el primer numero perfecto y si pones 2 pues los primeros 2 numeros perfectos y asi sucesivamente.

Mi problema es que por ejemplo si pongo que calcule 1 saca el primer numero perfecto y sigue sacando los que siguen, tambien pasa lo mismo si pongo que calule 2 y con cualquier otro numero.

este es el codigo que tengo hasta ahorita:

Código: C
  1. #include<stdio.h>
  2. void perfecto(int x);
  3. int main(){
  4.     int y, x;
  5.     printf("Introduzca cuantos numeros perfectos quiere: ");
  6.     scanf("%d", &x);
  7.     while(x >= 1){
  8.         for(y = 1; ;y++){
  9.             perfecto(y);
  10.             x--;
  11.         }
  12.     }
  13.     return 0;
  14. }
  15.  
  16. void perfecto(int x){
  17.     int sum = 0, y;
  18.     for(y = 1; y < x/2+1; y++){
  19.         if(x % y == 0){
  20.             sum += y;
  21.         }
  22.     }
  23.     if(sum == x){
  24.         printf("%dn", x);
  25.     }
  26. }
  27.  

Páginas: [1]