|
|
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
« 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: rellenar_matriz((int*)m);
cual es la diferencia de pasar solo (int*)m en vez de m? Gracias por la ayuda
2
« en: Martes 12 de Abril de 2011, 03:04 »
Hola, quisiera ver si me podían ayudar con este código: #include<stdio.h> #include<time.h> void matriz(int (*m)[]); int main(){ int m[3][3]; int i, j; matriz(m); for(i=0;i<3;i++){ for(j=0;j<3;j++){ } } return 0; } void matriz(int (*m)[]){ int i, j; for(i=0;i<3;i++){ for(j=0;j<3;j++){ } } }
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: bash-3.1$ gcc matrix.c bash-3.1$ ./a.out 4 9 7 0 0 134513424 0 134518552 -1078581720
3
« 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 así seria más fácil de leer.
4
« 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#p160017saludos
5
« en: Lunes 13 de Diciembre de 2010, 18:58 »
scanf("%.2f", &matriz [i ][j ]);
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
« en: Lunes 13 de Diciembre de 2010, 18:40 »
Mira en la función transpuesta tienes estas lineas: scanf("%.2f", &matriz [i ][j ]);
printf(" %.2f ", matriz [i ][j ]);
pero matriz no esta definida, solo tienes matrizA y matrizB definidas en el switch en el case 3 tienes esto: printf("El determinante de la matriz 1 es: %dn", determinante (matriz1 ); printf("El determinante de la matriz 2 es: %dn", determinante (matriz2 );
faltaría agregarle otro paréntesis ) a cada linea: printf("El determinante de la matriz 1 es: %dn", determinante (matriz1 )); printf("El determinante de la matriz 2 es: %dn", determinante (matriz2 ));
en donde tienes esto: sum1 = matriz[0][0]*matriz[1][1]*matriz[2][2]; sum2 = matriz[0][1]*matriz[1][2]*matriz[2][0]; sum3 = matriz[0][2]*matriz[1][0]*matriz[2][1]: res1 = matriz[2][0]*matriz[1][1]*matriz[0][2]; res2 = matriz[1][0]*matriz[0][1]*matriz[2][2]; res3 = matriz[0][0]*matriz[1][2]*matriz[2][1];
en la linea 3 tienes dos puntos en vez de punto y coma al final. y en esta otra linea: int determinante(float matriz[][]){
te falta poner ORD entre los corchetes. Intenta corrigiendo eso a ver si ya funciona.
7
« 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: después tienes que leer los números, eso lo puedes hacer con un ciclo for: 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: b) pues declaras primero los arreglos: 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. for(i=0; i<3; i++){ for(j=0; j<4; j++){ B[j][i]=A[i][j]; } }
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
« en: Lunes 13 de Diciembre de 2010, 15:40 »
haha tienes razón en lo de la a, bueno ya lo corregí.
9
« en: Lunes 13 de Diciembre de 2010, 15:05 »
Podrías usar 3 switches de la siguiente forma: #include<stdio.h> int main(){ char letra; int opcion; scanf("%d", &opcion );//lee un numero para ver a cual de los 2 menus entrar switch(opcion){ case 1: switch(letra){ case 'a': //Aqui pones lo que hace la opcion a break; case 'b': //aqui pones lo que hace la opcion b break; } case 2: switch(letra){ case 'a': //aqui pones lo que hace la opcion a break; case 'b': //opcion b break; case 'c': //opcion c break; } } return 0; }
10
« en: Lunes 13 de Diciembre de 2010, 12:02 »
Hola, Mira tu error esta aquí: for ( int i=1600; i<=(a-1);i++) { if ((((a%4) == 0&& ((a%100)!= 0)) || (a%400)==0)) {
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: 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) if(a%4==0||(i%100==0&&i%400==0))
Aquí te dejo el código corregido, por cierto, le quite el (a-1) que tenias en el ciclo for. #include<stdio.h> int main () { int a; int bisis; bisis=0; for ( int i=1600; i<=a;i++) { if (i%4==0||(i%100==0&&i%400==0))) { bisis++; } } printf ("n Los bisiestos son %d",bisis ); return 0; }
Saludos.
11
« 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): #include<stdio.h> int main(){ int i, size, menor, mayor; float prom; int j=0; int cont = 0; int suma = 0; printf("Introduzca el tamanio del arreglo: "); int array[size]; do{ printf("Ingrese un numero: "); array[cont] = i; if(i%2==0){ suma+=i; j++; } cont++; }while(cont<size); prom = suma/j; menor = mayor = array[0]; for(j=0;j<size;j++){ if(mayor<array[j]){ mayor = array[j]; } if(menor>array[j]){ menor = array[j]; } } printf("El promedio es: %fn", prom ); printf("El mayor es: %dn", mayor ); printf("El menor es: %dn", menor ); return 0; }
Esto es lo que me sale de resultado: 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
« en: Domingo 3 de Octubre de 2010, 00:45 »
Bueno ya cambie el codigo: que les parece? #include<stdio.h> int main(){ int op; char buffer[5]; "Seleccione una opcion: "); fgets(buffer , sizeof(buffer ), stdin ); while(op>3 || op<1){ printf("Opcion invalida, seleccione otra opcion: "); fgets(buffer , sizeof(buffer ), stdin ); } switch(op){ case 1: break; case 2: break; case 3: break; } return 0; }
13
« 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 por que pasa eso? y otra cosa, es correcto eso que estoy haciendo en default? eso de llamar a main xD #include<stdio.h> int main(){ int op; char buffer[3]; "Seleccione una opcion: "); fgets(buffer , sizeof(buffer ), stdin ); switch(op){ case 1: break; case 2: break; case 3: break; default: main(); } return 0; }
14
« 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): #include<stdio.h> int main(){ char s1[] = "MJRASP"; int i,j; char s2[sizeof(s1)]; j = sizeof(s1)-2; i = 0; for(j;j>=0;j--, i++){ s2[i]=s1[j]; if(j==0){ s2[i+1]=' '; } } return 0; }
15
« 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: #include<stdio.h> #include<math.h> int main(){ int lim = 2000000; int i, j; int sieve[lim]; long long sum; sum = 0; for(i=1;i<=lim;i++){ sieve[i]=1; if(i<2){ sieve[i]=0; } } for(i=4;i<=lim;i+=2){ sieve[i]=0; } for(i =3;i <=sqrt(lim );i +=2){ if(sieve[i]){ for(j=i*2;j<=lim;j+=i){ sieve[j]=0; } } } for(i=1;i<=lim;i++){ if(sieve[i]){ sum+=i; } } return 0; }
gracias por la ayuda czealt.
16
« 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í: 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: #include<stdio.h> #include<math.h> int main(){ int lim = 2000000; int i, j; int sieve[lim]; int sum; sum = 0; for(i=1;i<=lim;i++){ sieve[i]=1; if(i<2){ sieve[i]=0; } } for(i=4;i<=lim;i+=2){ sieve[i]=0; } for(i =3;i <=sqrt(lim );i +=2){ if(sieve[i]){ for(j=i*2;j<=lim;j+=i){ sieve[j]=0; } } } for(i=1;i<=lim;i++){ if(sieve[i]){ sum+=i; } } return 0; }
el resultado que me da es: 1179908154pero yo se que ese no es el resultado correcto, el resultado correcto es: 142913828922asi que no se que este haciendo mal
17
« 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í. 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: #include<stdio.h> int Primos(int x); int main(){ int x, y, z; y = 0; x = 2000000; for(x; x>=2; x--){ if(Primos(x)){ y += x; } } return 0; } int Primos(int x){ int y; int cont = 0; for(y=1;y<=x; y++){ if(x%y==0){ cont++; } } if(cont==2){ return 1; } return 0; }
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: #include<stdio.h> int Primos(unsigned long int x); int main(){ unsigned long int x, y, z; y = 0; x = 2000000; for(x; x>=2; x--){ if(Primos(x)){ y += x; } } return 0; } int Primos(unsigned long int x){ unsigned long int y; unsigned long int cont = 0; for(y=1;y<=x; y++){ if(x%y==0){ cont++; } } if(cont==2){ return 1; } return 0; }
18
« en: Sábado 27 de Febrero de 2010, 05:37 »
mira yo hice esto, no se si te sirva #include<stdio.h> #include<stdlib.h> #include<time.h> int main(){ int A[4][4]; int B[4][4]; int i, j, x; printf("introduce el limite para numeros aleatorios: "); for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ } } for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ } } for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ } } return 0; }
y tambien hice esto modificando algo tu codigo: #include<stdio.h> #include<stdlib.h> #include<time.h> void mostrarMatriz(int M[][5]); void genera_al(int M[][5], int n); int main(){ int M[5][5], lim, N[5][5]; printf("introduce el limite para numeros aleatorios: "); genera_al(M, lim); mostrarMatriz(M); printf("nahora sin repetirn"); genera_al(N, lim); mostrarMatriz(N); return 0; } void genera_al(int M[][5], int n){ int j, i; for(i=0;i<5;i++){ for(j=0;j<5;j++){ } } } void mostrarMatriz(int M[][5]){ int i, j; for(i=0;i<4;i++){ for(j=0;j<4;j++){ } } }
19
« 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
« en: Sábado 23 de Enero de 2010, 07:39 »
pon esto antes de return 0 va a hacer una pausa hasta que presiones enter y luego se cerrara solo el programa.
21
« 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. #include <stdio.h> int main() { int val1, val2, res; printf("Ingrese el primer valor: n"); printf("Ingrese el segundo valor: n"); res = val1 + val2; printf("La suma de %d y %d es: %dn",val1 , val2 , res ); return 0; }
22
« 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 #include<stdio.h> int primo(int Y_); main(){ int X; int Y; int Z = 0; printf("Cuantos numeros primos desea calcular: "); for(Y = 1; Z != X; Y++){ if(primo(Y)){ Z++; } } return 0; } int primo(int Y_){ int X_; int suma = 0; for(X_ = 1; X_ <= Y_; X_++){ if(Y_ % X_ == 0){ suma++; } } if(suma == 2){ return 1; } return 0; }
y pues ya seria todo, Gracias por la ayuda
23
« 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: if(N%2==0 && es_perfecto(N))
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
« en: Miércoles 20 de Enero de 2010, 23:56 »
hola gracias por responder estaba viendo el codigo que pusiste y en la funcion: int es_perfecto (int N) { int suma = 0; int i; for(i=1; i<=(N/2); i++) if(N%i==0) suma += i; if(suma==N) return 1; return 0; /* el "else" no hace falta */ }
veo que no pones las llaves en los ifs ni en el for, es lo mismo si las pongo o no? otra cosa: 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
« 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: #include<stdio.h> void perfecto(int x); int main(){ int y, x; printf("Introduzca cuantos numeros perfectos quiere: "); while(x >= 1){ for(y = 1; ;y++){ perfecto(y); x--; } } return 0; } void perfecto(int x){ int sum = 0, y; for(y = 1; y < x/2+1; y++){ if(x % y == 0){ sum += y; } } if(sum == x){ } }
Páginas: [1]
|
|
|