Autor
|
Tema: [C] problemas de ejecucion con un for (nivel basico, 1ro de carrera) [?] (Leído 12,053 veces)
|
SoyelRobert
Desconectado
Mensajes: 46
|
solved
|
|
« Última modificación: 15 Noviembre 2015, 18:08 pm por SoyelRobert »
|
En línea
|
getting louder!
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
Ok ok, pero no termino de entender, que es una quiniela, no soy español así que pues Lo que no entiendo es porque estas usando una matriz muldimensional, ya que solo estas solicitando un dato que es la cantidad de partidos, el ejercicio lo exige así??? o solo tiene que presentarse a modo de tabla?? Y no entiendo tampoco los pronosticos, hablas de un partido de futbol?? es de la forma: Equipo A: Goles - Equipo B: Goles
O como va la cosa, porque francamente no entendi, además, no estas usando ninguna variable para guardar el pronostico.
|
|
|
En línea
|
|
|
|
SoyelRobert
Desconectado
Mensajes: 46
|
solved
|
|
« Última modificación: 15 Noviembre 2015, 18:08 pm por SoyelRobert »
|
En línea
|
getting louder!
|
|
|
|
SoyelRobert
Desconectado
Mensajes: 46
|
jaja muchas gracias, es posible que también pueda resolverse de la manera que tu dices, de hecho recuerdo que mi profesor comentó en clase que también se podía resolver con una "pila" pero era algo que no habíamos dado... Mi temario dado hasta la fecha abarca estructuras de control, arrays, matrices, ficheros, y subprogramación (funciones externas llamadas desde el main), por lo que, en teoría, el programa puede resolverse únicamente con eso. Lo que tu has comentado del char pronóstico y el buffer temporal no tengo ni idea de lo que es... Gracias por tu interés!
|
|
|
En línea
|
getting louder!
|
|
|
Caster
|
El problema está en la lógica del programa, si lo que quieres es que por cada partido almacene hasta 3 caracteres (1, x ó 2) deberás hacer un for para introducir esos tres datos y después otro for que englobe al anterior para ir introduciendo 3 datos por cada partido. Algo así: for(i=0; i<=numerodepartidos-1; i++){ for(j=0; j<=datosporpartido-1; j++){ //códgio para rellenar el array nombre[i][j] } }
Saludos
|
|
« Última modificación: 7 Diciembre 2013, 23:56 pm por Caster »
|
En línea
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
Bueno viejo, mirandolo con detenimiento era algo simple, te dejo una plantilla que puede que funcione, aunque es extraño no me esta funcionando bien cuando se digita solo una letra, debe ser porque el scanf espera un string completo en lugar de un char unico. Pero creo que por lo demás funciono bien, lo del char pronostico y la estructura, la deje como dos simples arreglos. #include <stdio.h> #define simple 3 #define multiple 12 void copiarQuinielas(char* quinielaBasica, char* quinielaAvanzada); int main() { char quinielaSimple[simple]; char quinielaMultiple[multiple]; printf("--------QUINIELAS!!--------\n\n"); printf("Digite la quiniela (Maximo 3 caracteres): "); scanf("%s", quinielaSimple ); copiarQuinielas(quinielaSimple, quinielaMultiple); //printf("Su Quiniela Multiple es: "); return 0; } void copiarQuinielas(char* quinielaBasica, char* quinielaAvanzada) { int i, j; i=0; printf("Su quiniela Simple es: "); while( i<3 ) { printf("%c", quinielaBasica [i ]); i++; } // Comprobando simbolos // Caso 1 ---> TRES SIMBOLOS if( quinielaBasica[0] != '\0' && quinielaBasica[1] != '\0' && quinielaBasica[2] != '\0') { for(i=0; i<3; i++) { quinielaAvanzada[i] = quinielaBasica[i]; quinielaAvanzada[i+3] = quinielaBasica[i]; quinielaAvanzada[i+6] = quinielaBasica[i]; quinielaAvanzada[i+9] = quinielaBasica[i]; } } // Caso 2 ---> DOS SIMBOLOS // En el ejemplo se piden dos escenarios: // 1. Partido 2: 1X ---> 1 1 1 1 1 1 X X X X X X // 2. Partido 4: 12 ---> 1 1 1 2 2 2 1 1 1 2 2 2 // Pero como carajos decides que linea debe ir, yo opte por el escenario 1. else if( quinielaBasica[0] != '\0' && quinielaBasica[1] != '\0' && quinielaBasica[2] == '\0') { for(i=0; i<6; i++) { quinielaAvanzada[i] = quinielaBasica[0]; quinielaAvanzada[i+6] = quinielaBasica[1]; } } // Caso 3 ---> UNICO SIMBOLO // Todos los elementos son iguales else if( quinielaBasica[0] != '\0' && quinielaBasica[1] == '\0' && quinielaBasica[2] == '\0') { for(i=0; i<12; i++) { quinielaAvanzada[i] = quinielaBasica[0]; } } // Imprimiendo la quiniela final i=0; printf("\n\nSu quiniela Multiple es: "); while( i<12 ) { printf("%c", quinielaAvanzada [i ]); i++; } }
Alguien sabe como solucionar este pequeño detalle?
|
|
|
En línea
|
|
|
|
SoyelRobert
Desconectado
Mensajes: 46
|
El problema está en la lógica del programa, si lo que quieres es que por cada partido almacene hasta 3 caracteres (1, x ó 2) deberás hacer un for para introducir esos tres datos y después otro for que englobe al anterior para ir introduciendo 3 datos por cada partido. Algo así: for(i=0; i<=numerodepartidos-1; i++){ for(j=0; j<=datosporpartido-1; j++){ //códgio para rellenar el array nombre[i][j] } }
Saludos Hola Caster, si, correcto, es lo que pretendo, algo tal que asi: for(i=0;i<=N-1;i++){ partido ++; printf("\n\n Partido %d: ", partido);
for(j=0;j<=3;j++) scanf("%c", &A[i][j]); El primer for que engobla al segundo es el que va pasando al siguiente partido una vez se le han ido metiendo los datos y el segundo de encarga de meter los datos en cada partido. El problema viene en que si no se le meten como minimo 3 datos (1 x 2 en todos los partidos) el programa no funciona (esto no se como solucionarlo aun) pero lo mas grave es que incluso metiendole 3 datos a todos los partidos (1 x 2) el tercer partido no deja introducirle ningun dato es decir, aparece "partido N:" y el programa finaliza sin dejar darle ningun dato. -------------------- Y dato000 wow, aprecio mucho tu ayuda e interes pero creo que no has terminado de entender muy bien lo que queremos hacer... Mira, el asunto consiste en darle al programa una quiniela multiple y que este devuelva todas sus equivalentes, imagina lo siguiente: ejecuto el programa e inmediatamente pide el numero de partidos que va a tener la quiniela (ya sea la multiple o las simples equivalentes a esta tienen el mismo numero de partidos pues se trata de la misma quiniela). Una vez se la proporcionado el numero de partidos, el programa empieza a pedir las predicciones para estos y una vez introducidos todos el programa comienza a obtener todas las quinielas simples que componen la multiple inicial, algo tal que asi: (imagina que en este caso, el numero de partidos es 4:) Hola!, cuantos partidos: 4
introduzca sus predicciones:
Partido 1: 1
partido 2: 1 x
partido 3: 2
partido 4: 1 x 2
Las quinielas simples que componen esta quiniela multiple son:
quiniela simple 1: 1 1 2 1 quiniela simple 2: 1 1 2 x quiniela simple 3: 1 1 2 2 quiniela simple 4: 1 x 2 1 quiniela simple 5: 1 x 2 x quiniela simple 6: 1 x 2 2
(aqui acaba el programa)
Esto es lo que deberia hacer el programa jeje
|
|
« Última modificación: 8 Diciembre 2013, 01:01 am por SoyelRobert »
|
En línea
|
getting louder!
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Supongo que lo que pretendes es obtener algo así:Hola!, introduzca cantidad de partidos: 3
Introduzca sus pronosticos 1-X-2:
Partido 1:
A[1][1]: 1
A[1][2]: x
A[1][3]: 2
Partido 2:
A[2][1]:
A[2][2]: x
A[2][3]: 2
Partido 3:
A[3][1]:
A[3][2]:
A[3][3]: 2
Quiniela multiple: 1 x 2
x 2
2
Para lo cual puedes usar un array bidimensional, como te indicó el amigo Caster:#include <stdio.h> int main(void) { printf("Hola!, introduzca cantidad de partidos: \n"); int N,ch; scanf("%d", &N); while ((ch = getchar()) != EOF && ch != '\n'); printf("\nIntroduzca sus pronosticos 1-X-2:\n"); char A[N][3]; int i,j; for(i=0;i<N;i++){ printf("\n\n Partido %d: \n", i+1); for(j=0;j<3;j++){ printf("\n A[%d][%d]: ",i+1,j+1); fflush (stdout); scanf("%c", &A[i][j]); while ((ch = getchar()) != EOF && ch != '\n'); } } puts ("\n\n"); printf("\nQuiniela multiple:\n"); for(i=0;i<N;i++){ for(j=0;j<3;j++){ printf(" %c ", A[i][j]); }puts ("\n"); } return 0; }
O bien un array unidimensional:#include <stdio.h> int main(void) { printf("Hola!, introduzca cantidad de partidos: \n"); int N,ch; scanf("%d", &N); while ((ch = getchar()) != EOF && ch != '\n'); printf("\nIntroduzca sus pronosticos 1-X-2:\n"); char A[3*N]; int i,j; for(i=0;i<N;i++){ printf("\n\n Partido %d:\n \n", i+1); for(j=0;j<3;j++){ printf("\n A[%d][%d]: ",i+1,j+1); fflush (stdout); scanf("%c", &A[3*i+j]); while ((ch = getchar()) != EOF && ch != '\n'); } } puts ("\n\n"); printf("\nQuiniela multiple:\n"); for(i=0;i<3*N;i++){ if (i%3==0){ printf("\n\n"); } printf(" %c ", A[i]); } return 0; }
Ya "sólo" te queda a tí intentar sacar las simples a partir de los arrays.
Saluditos!. ....
|
|
|
En línea
|
|
|
|
SoyelRobert
Desconectado
Mensajes: 46
|
Excelente... si señor es justo lo que trataba de hacer! sin embargo no quiero que me "hagan los deberes" sino aprender a hacerlos yo, asi que si no te importa te preguntare algunas cosillas sobre tu código, como ya digo, son dudas muy muy básicas: #include <stdio.h> int main(void) { printf("Hola!, introduzca cantidad de partidos: \n"); int N,ch; scanf("%d", &N); while ((ch = getchar()) != EOF && ch != '\n'); printf("\nIntroduzca sus pronosticos 1-X-2:\n"); char A[N][3]; int i,j; for(i=0;i<N;i++){ printf("\n\n Partido %d: \n", i+1); for(j=0;j<3;j++){ printf("\n A[%d][%d]: ",i+1,j+1); fflush (stdout); scanf("%c", &A[i][j]); while ((ch = getchar()) != EOF && ch != '\n'); } } puts ("\n\n"); printf("\nQuiniela multiple:\n"); for(i=0;i<N;i++){ for(j=0;j<3;j++){ printf(" %c ", A[i][j]); }puts ("\n"); } return 0; } } Bien, podrías explicar exactamente la funcion que desempeña la variable ch en los while?, es decir, asignas a una variable una funcion de C "getchar()"?, he probado a cambiar todos los ch por getchar y el programa no funciona correctamente asi que imagino que tendra alguna utilidad, no solo "renombrar la funcion getchar". Respecto a los whiles: exactamente, a que estan afectando esos whiles?, no nocesitarias un do y unos "{}" para indicarlo? y por ultimo, que diferencia supone usar puts en vez de printf? Muchas gracias tu aportacion me ha ayudado muchisimo
|
|
« Última modificación: 8 Diciembre 2013, 16:24 pm por SoyelRobert »
|
En línea
|
getting louder!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
|Lo que no hay que hacer en C/C++. Nivel basico|
« 1 2 ... 6 7 »
Programación C/C++
|
Littlehorse
|
69
|
160,393
|
24 Octubre 2015, 08:48 am
por Seyro97
|
|
|
Ayudaa problema nivel basico
Programación C/C++
|
krowa
|
0
|
1,954
|
13 Marzo 2012, 23:48 pm
por krowa
|
|
|
Problema con la creación de tablas SQL nivel básico.
Desarrollo Web
|
nikko88
|
2
|
2,349
|
25 Junio 2012, 17:48 pm
por nikko88
|
|
|
[Nivel 1/10] CrackMe básico C #4
« 1 2 »
Ingeniería Inversa
|
cibergolen
|
12
|
9,226
|
30 Diciembre 2012, 22:42 pm
por cibergolen
|
|
|
[Reto] CrackMe I (Nivel: Básico / SuperFácil)
« 1 2 »
Ingeniería Inversa
|
jaxoR
|
13
|
6,704
|
28 Abril 2015, 20:21 pm
por Arkangel_0x7C5
|
|