|
121
|
Programación / Programación C/C++ / Re: Auxilio :C
|
en: 14 Julio 2014, 15:09 pm
|
Para evitar ese "rosario" de if, yo usaría un par de arrays que recojan el palo y el valor de la carta, algo como: const char *palo[4] = { "Corazones", "Diamantes", "Treboles", "Picas" }; const char *valor[13] = { "As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve","Diez", "Jack", "Reina", "Rey" };
donde con las operaciones " % " y " / " obtendría del valor de la carta el palo y su valor. Y después de barajar, como te comentó anteriormente eferion, el reparto, suponiendo como planteas cuatro jugadores, haría algo como: int carta; for( carta = 0 ; carta < 20; carta++){ if ( carta %10 == 0 ) putchar('\n'); printf("\t%7s de %-9s%c", valor[baraja[carta] % 13], palo[baraja[carta] / 13], ( carta+1 ) %2 == 0 ? '\n' : '\t'); }
para obtener una salida como: Seis de Corazones Diez de Corazones Rey de Treboles As de Picas As de Treboles Nueve de Treboles Dos de Picas As de Corazones Dos de Treboles Cuatro de Treboles Cinco de Corazones Siete de Picas Reina de Diamantes Siete de Treboles Diez de Diamantes Jack de Diamantes Dos de Diamantes Tres de Picas Reina de Corazones Cuatro de Diamantes
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
122
|
Programación / Programación C/C++ / Re: Soy Principiante
|
en: 13 Julio 2014, 13:56 pm
|
................................................................................................. Si yo escribo: "C", que el programa me responda con la palabra: "FA" Si yo escribo: "FA", que el programa me responda con la palabra: "SIB" Eso seria de gran ayuda amigos, gracias de antemano. PD: No se nada de programación, estoy aprendiendo apenas Antes que nada debes declarar las variables a utilizar en el código, algo como: int i , opc = -1 , tamay ; char entrada[100] ; const char *palabras[] = { "C","FA" /** mas..... **/ } ; const char *respuestas[] = { "FA","SIB" /** mas..... **/ } ;
donde i se usará como índice, opc como opción y tamay como tamaño del array a usar, que lo podrías calcular como: tamay = sizeof palabras / sizeof palabras[0] ;
A continuación necesitas entrar por teclado la palabra a comparar/buscar, teniendo en cuenta lo que no hay que hacer en C/C++. Nivel basico: fgets(entrada , 100 , stdin ); if (entrada[strlen(entrada)-1] == '\n') entrada[strlen(entrada)-1] = '\0';
Una vez entrada la palabra todo es comparar con el array palabras, cosa que se hace usando la función /strcmp: for ( i = 0 ; i < tamay ; i++ ) if ( strcmp ( entrada , palabras[i] ) == 0){ opc = i ; break ; }
Y ya casi está. Ahora, y según el valor de opc, se imprimirá la respuesta si la hay: if ( opc != -1 ) printf ( "%s" , respuestas[opc] ); else printf ( "No hay respuesta" );
No olvides incluir la librería string.h para el uso de strcmp. ¡¡¡¡ Saluditos! ..... !!!!
|
|
|
123
|
Programación / Programación C/C++ / Re: Como pasar a mayuscula vocales acentuadas ?
|
en: 12 Julio 2014, 22:42 pm
|
Ahora sí: ***************** for ( i = 0 ; i < strlen(cad) ; i++ ){ if( cad[i] == 'á' ) cad[i] = 65 ; else if (cad[i] == 'ñ' ) cad[i] = 165 ; else if( cad[i] == ' ' ) continue ; else if( cad[i] >= 97 && cad[i] <= 122 ) cad[i] = cad[i] -32 ; } *************************
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
124
|
Programación / Programación C/C++ / Re: problema con array de punteros a cadenas
|
en: 11 Julio 2014, 18:50 pm
|
Me debo haber expresado ma.l..................... La linea 9 y la linea 14 son una repetición de la linea 4. Esas 2 lineas son superfluas. Osea, si decides usar punteros, asignarlos 1 vez (en este caso) sería suficiente.
Sorry!, eso pasa por querer aprovechar el código previo. Efectivamente, están de más (para el caso de usar punteros): int mayor = 0 , menor = 0 , *posicion1 , *posicion2 ; mayor = votos[0]; menor = votos[0]; posicion1 = &mayor_, posicion2 = &menor_; for( contador = 1 ; contador < 4 ; contador++ ){ if ( votos[contador] > mayor){ mayor_= contador ; mayor = votos[mayor_]; } else if ( votos[contador] < menor){ menor_= contador ; menor = votos[menor_]; } }
Y gracias por la observación!!!!!, sólo espero no haberla pifiado esta vez. ¡¡¡¡ Saluditos! ..... !!!! EDITADO: Con la perspicaz observación de CalgaryCorpus.
|
|
|
125
|
Programación / Programación C/C++ / Re: problema con array de punteros a cadenas
|
en: 11 Julio 2014, 18:13 pm
|
............................................ y es que de manera premeditada asigne votacion de la siguiente manera. japon =7 brazil=2 suecia=1 mexico=0 y me sale bien el del mayor pero en el menor me imprime que el de menor votos es suecia con 1 voto cuando en realidad es mexico
Pues a mi con: for( contador = 1 ; contador < 4 ; contador++ ){ if ( votos[contador] > mayor){ mayor=votos[contador]; posicion1=contador; } if ( votos[contador] < menor){ menor=votos[contador]; posicion2=contador; } }
me da una solución correcta: votos[0]=7 votos[1]=2 votos[2]=1 votos[3]=0 EL PAIS GANADOR ES Japon con 7 votos EL PAIS CON MENOS VOTOS ES Mexico con 0 votos
¡¡¡¡ Saluditos! ..... !!!! EDITADO: Con la perspicaz observación de CalgaryCorpus.
|
|
|
126
|
Programación / Programación C/C++ / Re: problema con array de punteros a cadenas
|
en: 11 Julio 2014, 16:43 pm
|
Es superfluo asignar los punteros en cada vuelta. Si se eliminan esas asignaciones el resultado será el mismo.
Ya, estoy "totalmente" de acuerdo contigo. Sólo era una opción por si "sí o sí" tenía que usar punteros. No sé, a lo mejor era una tarea en la que obligaban a hacer uso de los mismos. Si no es así es una redundancia su uso y tu propuesta es más que suficiente. ok me quedo mejor con la segunda sugerencia. ahora como para imprimir el pais que esta en la posicion del mayor y menor?? e intentado de varias formas pero nada printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[(int)posicion1], mayor); printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[posicion1], mayor); printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[*posicion1], mayor);
Sería: printf("\n\nEL PAIS GANADOR ES %s con %d votos",paises_postulados[*posicion1], mayor); printf("\n\nEL PAIS CON MENOS VOTOS ES %s con %d votos",paises_postulados[*posicion2],menor);
si eso lo acabo de notar, donde me dices que quite los asteriscos? en la declaracion o en la asignacion dentro del for??
En ese caso de todos los lados. ¡¡¡¡ Saluditos! ..... !!!!
|
|
|
127
|
Programación / Programación C/C++ / Re: problema con array de punteros a cadenas
|
en: 11 Julio 2014, 15:31 pm
|
Antes que nada debes cambiar la función mayor_menor a algo como esto: void mayor_menor(int votos[])
ya que haces uso del array votos en ella. Y el array votos lo puedes inicializar de forma más simple: int votos[10]={0};
Si quieres usar punteros, por lo que sea, en lugar de : *posicion1=contador;
deberías hacer: posicion1 = &mayor_;
Pero ello se traduce en un error lógico y es que el puntero posicion1 apuntaría siempre a contador, con lo que su valor sería siempre 4. En su lugar habría que usar unas nuevas variables donde guardar el mayor valor de contador y hacer que el puntero apunte a esa variable. Y lo mismo con la posicion2. Algo como, y aprovecha el for para calcular tanto el mayor como el menor, en lugar de dos for: **************************************** int mayor_= 0, menor_= 0; mayor = votos[0]; menor = votos[0]; posicion1 = &mayor_, posicion2 = &menor_; for( contador = 1 ; contador < 4 ; contador++ ){ if ( votos[contador] > mayor){ mayor_= contador ; mayor = votos[mayor_]; posicion1 = &mayor_; } else{ menor_= contador ; menor = votos[menor_]; posicion2 = &menor_; } } ***************************
Pero doctores tiene el foro en punteros y yo no soy uno de ellos, así que es muy posible que lo que propongo sea mejorable. En cualquier caso la propuesta de CalgaryCorpus es la más razonable, sólo pongo lo anterior si es que sí o sí debes usar punteros. ¡¡¡¡ Saluditos! ..... !!!!
|
|
|
130
|
Programación / Programación C/C++ / Re: Como pasar a mayuscula vocales acentuadas ?
|
en: 10 Julio 2014, 10:14 am
|
...................................... este es mi programa usando el codigo ASCII, pero no funciona, me devuelve la ñ y la á en minuscula ..................................
Usa un: for(i=0;i<strlen(cad);i++) printf("%d ",cad[i]);
para que veas con qué int se corresponden la ñ y la á y ya tá.¡¡¡¡ Saluditos! ..... !!!!
|
|
|
|
|
|
|