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

#121
Programación C/C++ / Re: Auxilio :C
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:

Código (cpp) [Seleccionar]
  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:

Código (cpp) [Seleccionar]
  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:

Código (cpp) [Seleccionar]


           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 C/C++ / Re: Soy Principiante
13 Julio 2014, 13:56 PM
Cita de: VanDarte en 13 Julio 2014, 10:44 AM
.................................................................................................
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  :xD

Antes que nada debes declarar las variables a utilizar en el código, algo como:

Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]
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
Ahora sí:

Citar

LA CABALA DE LA SEÑORA


Código (cpp) [Seleccionar]
*****************
  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
Cita de: CalgaryCorpus en 11 Julio 2014, 18:30 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):

Código (cpp) [Seleccionar]
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
Cita de: MessageBoxA en 11 Julio 2014, 16:56 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:

Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]

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
Cita de: CalgaryCorpus en 11 Julio 2014, 16:30 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.

Cita de: MessageBoxA en 11 Julio 2014, 16:38 PM
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

Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]
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);


Cita de: MessageBoxA en 11 Julio 2014, 16:40 PM
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
Antes que nada debes cambiar la función mayor_menor a algo como esto:

Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]
int votos[10]={0};

Si quieres usar punteros, por lo que sea, en lugar de :

Código (cpp) [Seleccionar]
*posicion1=contador;

deberías hacer:

Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]

****************************************
  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! ..... !!!!


#128
Cita de: eferion en 10 Julio 2014, 13:06 PM
No sabría decirte... a mi me funcionan las dos:

á = -96
ñ = -92

... yo estoy compilando con un compilador de C++, no tengo muy claro hasta que punto influye en este caso.

Es que yo lo puse File enconding "UTF-8 y es donde la á no aparece.  :silbar:

#129
Cita de: eferion en 10 Julio 2014, 10:47 AM
Si por ejemplo fuese UTF-8... la codificación de la 'ñ' y la 'á' ocuparían más de un byte.

He probado y la ñ sigue siendo -92, pero la á no aparece. ¿Qué puedo hacer en este caso?.

Saludos, ¡fenómeno!.

#130
Cita de: jesus++ en 10 Julio 2014, 05:23 AM
......................................
este es mi programa usando el codigo ASCII, pero no funciona, me devuelve la ñ y la á en minuscula
..................................

Usa un:

Código (cpp) [Seleccionar]
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! ..... !!!!