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

#131
Cita de: engel lex en  9 Julio 2014, 18:09 PM
Leosansan si ya te han eliminado código antes, por que sigues haciendolo? :s puedes responder en pseudo o explicando, no es necesario (y va contra las reglas) resolverlo -.-

Gracias amigo engel lex por recordarmelo, aunque ya se encarga E.I de hacerlo si me despisto. Sorry!.

En este caso se trataba de que en la función validare, con lo indicado en mi anterior mensaje, se valide la cadena de entrada que representará la edad como un int y, por tratarse de la edad, de valor no superior a 100, que no está nada mal. ;)

Por lo tanto un paso sería algo como esto:

Código (cpp) [Seleccionar]
................
  if ( edad_char[i] < '0' ||  edad_char[i] > '9' || lon > 2 )
...............................


donde lon representa la longitud de la cadena que se calcula bien con strlen, incluyendo entonces la librería string.h, o bien sin ella calculándola como:

Código (cpp) [Seleccionar]
for ( lon = 0 ; edad_char[lon] ;

Y si la cadena que representa la edad es efectivamente un int menor que 100, se trata de pasarlo de cadena a int, algo como:

Código (cpp) [Seleccionar]
for (int i = 0; edad_char[i] ; i++)
    edad = edad * 10 + ( edad_char[i] - '0' );


Y ya , tampoco era para tanto, creo yo.

Espero no haberme pasado esta vez.  :silbar:

¡¡¡¡ Saluditos! ..... !!!!



*****
\. ./
  |
(-)

#132
Cita de: carlosabcs18 en  9 Julio 2014, 05:12 AM
Necesito una función que valide una edad entre 8 a 11 años, y que rechace numeros decimales, negativos, etc.
.........................

También tendría que rechazar el que entren letras en lugar de números.

Para ello lo mejor es que en main, o en la función que corresponda, se ingrese la variable "e", que yo llamaré edad, no cuesta tanto y es más significativa, como decía que se ingrese dicha variable como un array tipo char, ej::char  edad_char[10] y ya la función validare se encargará de validar la entrada. Por supuesto rechazo edades superiores a 99, ¿o no? :laugh:

Y la función validare sería, y es sólo una sugerencia, algo como esto:

EI: codigo removido.

¡¡¡¡ Saluditos! ..... !!!!


#133
Cita de: hctr12 en  9 Julio 2014, 08:07 AM
sigue imprimiendome dos veces.
.........................................

El problema de imprimir dos veces es indicativo que hay que realizar una limpieza del bufffer, cosa que puedes conseguir con:

Código (cpp) [Seleccionar]
while (getchar() !='\n' );

Cita de: hctr12 en  9 Julio 2014, 08:07 AM
.......................................
PD2: QUÉ FUNCION PUEDE REEMPLAZAR A GOTO ?


Como te comentó engel lex es usar una función que bien podría ser menu(),. Te indico como podría ser y además como vas a tener 4 casos, si no más, sería aconsejable el uso de un switch para  no liarla con un porrón de if eslse:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

void menu();

int main(){
  menu ();
  system("pause");
  return 0;
}

void menu(){
  char OP;
  char M; // VARIABLES DE MENU
  .............................................

  // INICIO DE LA FUNCION MENU
....................................................
    do
  {
.....................................................
    scanf("%c",&OP);
    while (getchar() !='\n' ); /* <== !!!!!!!!!!!!!!!!!!!!!!!!*/
      printf("\n\n");

  }
  while (OP<'1' || OP>'4');
 
........................................................

  switch (OP){ //CONDICION PARA QUE DIRECCIONE A LA PRIMERA FUNCION

    case '1':
      printf("\tIngrese la cantidad N de numeros impares ,al cuadrado, a sumar: ");
      scanf("%d",&N); // scanf LEE EL ENTERO QUE SE INGRESARA EN LA VARIABLE N
      while (getchar() !='\n' );
.............................................................................
   
        do
        {
            printf("\n\n\n\tRETORNAR AL MENU: 1 = SI o 0 = NO , PARA FINALIZAR: ");
            scanf("%c",&M); //
            if(M == '1') //
            {
            printf("\n\n");
            while (getchar() !='\n' );  /* <== !!!!!!!!!!!!!!!!!!!!!!!!*/
            menu(); /* <== !!!!!!!!!!!!!!!!!!!!!!!!*/
            }
            else if(M == '0')
...............................................................
        }while (M<'0' || M>'1');
  }
}


¡¡¡¡ Saluditos! ..... !!!!


#134

<stdio.h>    C

<cstdio>    C++

<fstream>  y familia  C++

Cita de: kasficher en  7 Julio 2014, 17:55 PM
......................
solo encuentro información sobre fstream por sobre stdio.h lo cual me hace pensar que stdio.h ya no es usada o es poco usada.


El C está vivito y coleando.....y por mucho tiempo.

¡¡¡¡ Saluditos! ..... !!!!


#135
Programación C/C++ / Re: Holaaaa !!!
6 Julio 2014, 21:11 PM
Cita de: sebastian1114 en  6 Julio 2014, 20:06 PM
Soy más o menos nuevo en programación y estoy usando c++

Tengo el problema de que necesito intercambiar 2 elementos de una matriz.

he buscado información y no he dado con como hacerlo :C
......................................................

Tan sencillo como:

Código (cpp) [Seleccionar]

............................
#include <utility>  
..................
swap(a[1][0],a[2][1]);.


O a la manera cñásica:

Código (cpp) [Seleccionar]
  temp = a[2][1];
  a[2][1] = a[1][0];
  a[1][0] = temp;


Y para cuando postees el código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.

¡¡¡¡ Saluditos! ..... !!!!


#136
Cita de: Baal_30 en  6 Julio 2014, 14:48 PM
Uff que grande leosansan. Ahora va genial.

Lo que no entiendo muy bien es lo de static, así, ¿sin static, no mantendrían el valor? ¿que valor tendrían entonces?

Y lo de main, creía que no había que poner int, y si es main, ¿dónde devuelve el valor de return?

Gracias!!!!

Lo del static es para que en llamadas sucesivas a la función no se pierdan los valores de las variables declaradas como static.

Si no lo hicieras así en la nueva llamada a la función esas variables contendrían "basura". Haz la prueba y quita lo de static y veras que aunque entres los mismos valores para las variables correspondientes el programa dice que no son iguales de manera continua y es que perderías los valores previamente introducidos por valores impredecibles. Es como si no hubieras introducido los valores anteriores y claro las variables apuntan a direcciones cualesquiera.

Y lo del main es porque el estándar de C/C++ lo establece así y punto. Es más, si te fijas el compilador debe lanzar un "warning" alertando sobre ello.

#137
Cita de: Baal_30 en  6 Julio 2014, 13:06 PM
Muchas gracias leosansan! Ahora mismo pruebo con strcmp  :) y gracias por el link, ya me lo había mirado, pero me surgían más dudas.
.............................
Edito: He probado con el código que me comentas, y de esa forma accede al menu del juego con cualquier combinación, da igual que sea la cuenta creada o no. ¿Como lo tengo que poner para que compare el nombre que se escribe con el nombre de la cuenta que se ha creada anteriormente?

Lo del scanf para op lo dejaría como está, aunque sería más correcto validar dicha entrada.

Sorry, pero copié y pegué mal:

Código (cpp) [Seleccionar]
if((strcmp (nombre , nombre1))==0  && (strcmp (pass , pass1))==0)
..........................
while(strcmp (nombre , nombre1)!=0  || strcmp (pass , pass1)!=0)


Además deberías declarar las variables  nombre1 y pass1 con el prefijo static para que mantengan el valor al ser invocadas nuevamente por la función:

Código (cpp) [Seleccionar]
char nombre[20], pass[20];
static char nombre1[20], pass1[20];


¡¡¡¡ Saluditos! ..... !!!!



EDITO:

Se me olvidó comentarte que main es de tipo int y lleva al final el correspondiente return:

Código (cpp) [Seleccionar]
int main(){
   menu();
   return 0;
}
#138
Cita de: Baal_30 en  6 Julio 2014, 11:50 AM
............l problema está en que cuando se supone que he creado una cuenta, luego al ingresar con ella me dice dice que el nombre o la pass son incorrectos (no es que sean incorrectos, sino que directamente no reconoce lo que he creado antes), supongo que el problema será que cuando "creo" la nueva cuenta, no se me guarda correctamente en la variable, o quizás que no busque bien donde está la contraseña nueva........

Estas comparando cadenas con:

Código (cpp) [Seleccionar]
if(nombre == *nombre1 && pass == *pass1)

Y eso es sólo para caracteres o números. Tendrías que usar, tanto en el if com en el while:

Código (cpp) [Seleccionar]
if(strcmp (nombre , nombre1)!=0  || strcmp (pass , pass1)!=0)

Con la función "strcmp " de la librería string.h.

Deberías leerte Lo que no hay que hacer en C/C++. Nivel basico donde se explica porqué no se debe usar gets y fflush(stdin).

¡¡¡¡ Saluditos! ..... !!!!


#139
Cita de: daniloops en  6 Julio 2014, 07:03 AM
hola gente, necesito una ayudita. Ingreso 2 números y necesito hacer una operación  para calcular la distancia de un numero a otro. es decir.

Si ingreso el  2 y el 5 debo imprimir cuantos números hay entre esos 2 números ingresados

se utiliza un contador en este caso?


Código (cpp) [Seleccionar]
for ( i = num_menor + 1; i < num_mayor; i++)
   print ("%d  ",i);


¡¡¡¡ Saluditos! ..... !!!!


#140
Cita de: CharterC+ en  5 Julio 2014, 06:21 AM
Muchas gracias por la ayuda. Creo que este el código final además le agregue otro problema jeje.
........................................................

Con respecto al return 0, ¿es siempre obligatorio?, nunca lo he usado en otros códigos.  Donde dice matriz[j] en realidad debe ser matriz i[j], no sé porque se ve asi. Por último, cuando termino de ejecutar el programa sale que debe cerrarse  :huh:

Respecto a lo último se debe a que [ i ] , sin los espacios en blanco que he puesto, es la secuencia de escape para las letras en cursivas. Por ello a partir del primer [ i ] que escribes la letra cambia a cursiva. Fíjate en el código de tu mensaje y lo veras. Para evitarlo usa las llamadas etiquetas GeSHi, en la parte superior de los iconos a la derecha, y en el desplegable que aparece elige las de C++ y en medio de las etiquetas "code" que aparecen pegas tu código.

Sí, el return es obligatorio porque por cuestiones del estándar del C/C++ main se debe declarar como una función de tipo int y estas han de retornar algo. Lo normal es que si no lo pones el programa te lance un warning de advertencia, al menos en el modo pedantic.

Y respecto al código sigues declarando mal el array. Como el mio lo han borrado te lo vuelvo a poner:

Código (cpp) [Seleccionar]
int **mat = new int*[orden];
   for( int i = 0; i < orden; ++i )
     mat[i] = new int[orden];


Y ya está.

También te aconsejo el uso de mensajes para introducir los valores, como:

Código (cpp) [Seleccionar]
cout <<"Ingrese los elementos de la matriz: "<< endl;
 for( i = 0; i < f; i++ )
   for( j = 0; j < c; j++ ){
     cout << "matriz[" << i << "][" << j << "] = " ;
     cin >> matriz[i][j];
   }
 cout << endl;


Y en la impresión que lo hagas como matriz:

Código (cpp) [Seleccionar]
cout << "La matriz es: " << endl;
 for( i = 0; i <f ; i++){
   for( j = 0; j < c; j++ )
     cout << matriz[i][j] << "  ";
   cout <<  endl;
 }


Así te quedará todo mucho más claro.



,,,
. .
|
\-/


¡¡¡¡ Saluditos! ..... !!!!