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

#431
Cita de: nolasco281 en  9 Febrero 2014, 05:07 AM
1. Tengo dos preguntas se puede cambiar el tamaño de la consola para que se vea el tamaño que deseo en tiempo de ejecución o ya está predefino por Windows.

Se puede usando:

Código (cpp) [Seleccionar]
system("MODE ancho,alto");

Cita de: nolasco281 en  9 Febrero 2014, 05:07 AM

2. y la segunda como hago para que una que un carácter  quede inmóvil o no se mueva de ese lugar sin correr los espacios en consola.

Se puede usando una función, por comodidad más que nada:

Código (cpp) [Seleccionar]
int gotoxy(int x, int y)
{
   COORD coord;
   HANDLE h_stdout;
   coord.X = x;
   coord.Y = y;
   if ((h_stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
      return 0;
   if (SetConsoleCursorPosition(h_stdout, coord) == 0)
      return 0;
   return 1;
}


Y en el programa usas por ejemplo goto(20,30) para situar el cursor en ese punto concreto de la pantalla.

E incluso cambiar el color.

Te pongo un código de muestra:


Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define FIL 7
#define COL 8

void color (int n);
int gotoxy(int x, int y);

int main (){

  int i=0,j=0,k=0,fil=1,col=1;
  system("MODE 60,35");
  char a[7][8];
  system ("pause");
  system ("cls");
  for (i=0;i<15;i++){
    gotoxy (10+2*i,10);
    printf ("*" );
  }
  Sleep (2000);
  for (i=0;i<15;i++){
    Sleep (250);
    gotoxy (10+2*i,10);
    printf ("X" );
  }



  puts("\n\n");
  system ("pause");
  system ("cls");
  for (i=0;i<27;i++)
    printf ( "* ");
  putchar ('\n');
  for (i=0;i<27;i++){
    Sleep(150);
    gotoxy (2*i,0);
    printf ( "X ");
  }
  for (i=0;i<27;i++){
    Sleep(100);
    gotoxy (2*i,4);
    printf ( "X");
  }
  for (i=0;i<6;i++){
    for (j=0;j<6;j++){
      gotoxy (2*j+6,i+6);
      printf ( "* ");
    }
  }
  for (i=0;i<6;i++){
    for (j=0;j<6;j++){
      Sleep(250);
      gotoxy (2*j+6,i+6);
      printf ( "X");
    }
  }
  putchar ('\n');
  system ("pause");
  system ("cls");
  for (i=0;i<7;i++){
    a[i][7]='\0';
    for (j=0;j<7;j++){
      if(j>=i-1 && j<i+1 && j>0 && j<6 && i<6)
        a[i][j]='X';
      else if(i==0 || j==0 || i==6 || j==6 )
        a[i][j]='*';
      else
        a[i][j]='0';
    }
  }
  putchar ('\n');
  for (i=0;i<7;i++){
    a[i][7]='\0';
    for (j=0;j<7;j++){
      if((i==j || j==i-1) && i>0 && j<6 && j>0 && i<6)
        a[i][j]='X';
      else if(i==0 || j==0 || i==6 || j==6 )
        a[i][j]='*';
      else
        a[i][j]='0';
    }
  }
  gotoxy (0,10);
  for (i=0;i<7;i++){
    for (j=0;j<7;j++){
      printf ("%c ",a[i][j]);
    }
    putchar ('\n');
  }
  system ("pause");
 
  for (i=0;i<7;i++)
    printf ("%s\n",a[i]);
  system ("pause");
  gotoxy (0,0);

  for (i=0;i<7;i++){
    for (j=0;j<7;j++){
      printf ("%c ",a[i][j]);
    }
    putchar ('\n');
  }
  fil=1,col=1;
  while  (1){
    Sleep(1000);
    if (fil==FIL-2 && col==COL-3){
      gotoxy (2*col,fil);
      printf("%c ",'F');
      break;
    }
    else if (a[fil+1][col]=='X' && fil<FIL){
      color(215);
      gotoxy (2*col,fil);
      printf("%c ",'F');fil++;
    }
    else if (a[fil][col+1]=='X' && col<COL){
      color(215);
      gotoxy (2*(col),fil);
      printf("%c ",'F');col++;
    }
    else if (a[fil-1][col]=='X' && fil>0){
      color(215);
      gotoxy (2*(col),fil);
      printf("%c ",'F');fil--;
    }
    else if (a[fil][col-1]=='X' && col>0){
      color(215);
      gotoxy (2*col,fil);
      printf(" %c ",'F');col--;
    }
  }
  color(7);
  gotoxy (0,30);
  printf ( "Final!");
  putchar ('\n');
  system("pause");
  return 0;
}

void color (int n)
{
        SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
}


int gotoxy(int x, int y)
{
   COORD coord;
   HANDLE h_stdout;

   coord.X = x;
   coord.Y = y;

   if ((h_stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
      return 0;

   if (SetConsoleCursorPosition(h_stdout, coord) == 0)
      return 0;

   return 1;
}


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


#432
Programación C/C++ / Re: Hola Soy nuevo[DUDA]
8 Febrero 2014, 08:48 AM
Cita de: yoel_alejandro en  8 Febrero 2014, 03:31 AM
Lo otro que preguntaste "parámetros pasados por valor", significa que en C todas las variables se pasan "por valor" (se pueden simular llamadas por referencia usando punteros pero ese es un tema más avanzado).


Tampoco es para tanto.

El caso es que si quieres usar una función y pasar le un valor y en dicha función modificar el valor de dicha variable y usar ese nuevo valor en la función original, lo que hay que hacer es pasar le la dirección donde se almacena la variable en cuestión, y esto se consigue anteponiendo le a la variable el símbolo "&" que indica que se trata de la dirección donde se almacena la variable y que se está en disposición de cambiar su valor:


Código (cpp) [Seleccionar]
incrementa_x( &x );

Y ¿cómo diferencia la función el que se está pasando la dirección de la variable en lugar de su valor?. Con el uso de un " * " :

Código (cpp) [Seleccionar]
void incrementa_x( int *x )

Siguiendo con el ejemplo que tan claramente expuso yoel_alejandro, en este caso sería:

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>

/* aquí prototipo de la funcion incrementa_x */
void incrementa_x( int *x );

/* aquí viene el main */
int main ( ) {

  int x;
  x = 2;
  incrementa_x( &x );    /* llamamos a la función incrementa_x */
  printf( "El valor de x es: %d\n", x );
  return 0;
}

/* aquí la funcion incrementa_x */
void incrementa_x( int *x ) {

   *x = *x + 1;
}


Ahora el valor que imprimes en main para la variable x es 3: ¡¡¡la función sí ha modificado el valor que le pasé!!!.

Por cierto, es aconsejable poner nombres con significado a las funciones, que indiquen mínimamente lo que hacen, si no al revisar el código hay que echarle mucha imaginación para ver qué diablos hace la función.


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



#433
Cita de: yoel_alejandro en  8 Febrero 2014, 03:48 AM
No se puede!!. C es un lenguaje "tipado", al contrario de otros lenguajes donde una variable puede alegremente cambiar de un tipo a otro.

Como te contestó otro usuario, esto significa que a cada variable que uses en C debes haberle definido previamente un tipo, de lo contrario el compilador te informará un error.
.............................................

* Eso de que informa del error suena a broma. ¡Ojalá fuese siempre así!.

* Aunque previamente se haya definido un tipo para una variable siempre existe la posibilidad de cambiar el tipo mediante el correspondiente casting o mediante el uso de funciones tipo atoi, itoa,atof, etc.


Cita de: yoel_alejandro en  8 Febrero 2014, 03:48 AM
..................................
.Por otra parte, la variable a la que será asignado este valor tiene un tipo previamente declarado, por tanto será ese tipo y no otro.

Ten en cuenta algo muy importante. Si por ejemplo declaras:

Código (cpp) [Seleccionar]

int x;


y luego haces algo como

Código (cpp) [Seleccionar]

scanf( "%d", &x);


pues ya dijiste que se esperaba un tipo entero. No importa que el usuario meta un valor decimal a través del teclado, el valor será convertido forzosamente a un entero (según las reglas implícitas de conversión de C).

Según como lo interpretes. Si has declarado una variable como int e introduces 1.23 tomará como int el 1. Y si introduces 12as como dato toma el 12 como int. Y si introduces un caracter o una cadena, tipo a o asdf, en el mejor de los casos el int toma un valor "extraño" que afectará al resto de código por quedarse en el buffer. Y en el peor se produce un bucle infinito si estas en un for,while o do-while.

Cita de: Gh057 en  8 Febrero 2014, 04:46 AM
Hola minari02, como muy bien te han contestado el control que tiene el C sobre las variables exige la declaración antes de utilizarlas, aunque bien pudiera ser que lo que intentas preguntar es como "validar" un dato ingresado, que es otra cosa... lo más usual es encapsular la entrada en un "do-while...", ya que permite correr la sentencia al menos una vez (el cual usamos para el ingreso del dato) y lo aceptamos o rechazamos mediante la condiciones definidas al caso. Saludos.


Ahí estamos más de acuerdo , amigo Gh057. Se trata en realidad de validar el valor introducido, cosa que por comodidad no suele hacerse pero que en un programa serio es indispensable.

Por ejemplo si estamos tratando de introducir un int y no queremos disgustos en el resto del código hay que asegurarse que el valor introducido sea efectivamente un int. Y esto se puede realizar de varias maneras.

Para que veas minari02 como funciona, observa la salida del código que te propongo como validación de un int en el que no admite cosas como 1.23, 12as, asd12, o un simple caracter. Ante tales situaciones te vuelve a pedir que introduzcas un int:


Citar

Introduzca un numero entero:123.356

Introduzca un numero entero:12asd

Introduzca un numero entero:asd123

Introduzca un numero entero:a

Introduzca un numero entero:123456

numero= 123456


Código (cpp) [Seleccionar]

#include <stdio.h>

int main(){
 int i,numero,flag=0;
 char num [20];
 do{
   flag=0;
   printf ("\nIntroduzca un numero entero:");
   fflush(stdout);
   scanf ("%s",num);
   for (i=0;num[i];i++){
     if (num[i]<'0' || num[i]>'9'){
       flag=1;
     }
   }

 }while (flag!=0);
 numero=atoi(num);
  printf("\nnumero= %d\n",numero);
 return 0;
}


Como ves algo más complejo que un simple:

Código (cpp) [Seleccionar]

#include <stdio.h>

int main(){
 int numero;
 printf ("\nIntroduzca un numero entero:");
 fflush(stdout);
 scanf ("%s",numero);
 printf("\nnumero= %d\n",numero);
 return 0;
}


Pero como te comenté, este último se revienta introduciendo un simple caracter,12.36,etc.

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


#434
Cita de: minari02 en  7 Febrero 2014, 20:59 PM
Hola que tal? desde hace rato me vengo preguntando como hacer un programa que, al introducir un dato, identifique que tipo de dato se ha introducido, alguien sabe como?? no tengo idea de como hacer eso... alguien puede?? pueden ir postenado sus ideas, por cierto, es solo una duda, que otros tambien tendran.

Antes de introducir cualquier dato habrás tenido que declararlo previamente como int, char o lo que sea. Ahí está la respuesta. :rolleyes:

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


#435
Programación C/C++ / Re: Hola Soy nuevo[DUDA]
7 Febrero 2014, 21:14 PM
Cita de: mewto2014 en  7 Febrero 2014, 18:40 PM
..........................................................

y si me pueden ayudar en esto se los agradecería:
1° que es una función?

según leí es una forma de separa el programa por partes no? para llamarla cuando la necesites por ejemplo:

void hola();
{
printf("Hola usuario");
}


main()
{
hola();
}

estoy bien en este concepto?

.....................................


En esencia ese es el concepto de función: porción de un programa que ejecuta una determinada tarea o tareas. Es una forma de hacer el programa modular, esto es, por partes o trozos  de forma que, por ejemplo,  distintos programadores se pudieran encargar cada uno de una parte o sencillamente que sea más fácil su control y/o corrección.

En el ejemplo que pones te falta:

* determinar el tipo de función que es main: int. Cuestiones del estándar de C.

* Y en consecuencia, al ser int debe devolver un int, return 0 para indicar que todo ha ido bien.


Cita de: mewto2014 en  7 Febrero 2014, 18:40 PM

y como son las funciones de paso x valor y funciones con para metros/sin parámetros?

según leí es lo mismo como lo anterior no???


Igual que una imagen vale más que mil palabras, espero que este ejemplo te aclare el uso de parámetros, teniendo en cuenta que tú ya has puesto un ejemplo sin parámetros:

Código (cpp) [Seleccionar]

#include <stdio.h>
void hola(char a[10], int num);

int main(){
char nombre[10]="leosansan";
int numero=10;
  hola(nombre,numero);
  return 0;
}

void hola(char a[10], int num){
  printf("Hola usuario %s eres un %d.",a,num);
}


Fíjate además que una cosa es "presentar" o declarar una función:

Código (cpp) [Seleccionar]
void hola(char a[10], int num);

y otra cosa es el "cuerpo" de la función o función propiamente dicho:

Código (cpp) [Seleccionar]
void hola(char a[10], int num){
  printf("Hola usuario %s eres un %d",a,num);
}


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


#436

* Te fallan los nombres de las librerías, además te faltan un par de ellas.

* Te has hecho un lío con las llaves del for y el break.

* Te falta el return de main.

Una salida con las correcciones que te propongo:


Citar

Introduce una cadena (termina con CTRL-Z o INTRO)
leosansan 123 456 47anonimo74

La cadena es: leosansan 123 456 47anonimo74
Y su longitud es: 29
Presione una tecla para continuar . . .


Código (cpp) [Seleccionar]

#include <iostream> // Usamos: ios, cin, cout
#include <iomanip> // Usamos: resetiosflags
#include <cstdlib>
#include <cstring>
using namespace std;

void Leer_Cadena(char * s) {
  int i;
  cin >> resetiosflags(ios::skipws); // Para que no pase los caracteres blancos.
  for ( i= 0; cin >> s[i]; i++){// Leer caracteres hasta el caracter nulo.
    if (s[i] == '\n')
      break;
  }
  s[i]= '\0'; // Pone el caracter de fin de cadena.
}

int StrLen(char * s) {
  char * s0= s;
  while (*s++);
  return s - s0 - 1;
}

int main() {
  char s[100]; // Buffer de capacidad de hasta 99 caracteres y '\0'. Si metemos m s caracteres hay posibilidad de 'cuelgue'

  cout << endl << "Introduce una cadena (termina con CTRL-Z o INTRO)" << endl;
  Leer_Cadena(s);
  cout << endl << "La cadena es: " << s << endl;
  cout << "Y su longitud es: " << StrLen(s)<< endl;
  system("pause");
return 0;
}


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


#437
Cita de: yoel_alejandro en  7 Febrero 2014, 02:36 AM
......................................................

en 0x0200, de una manera independiente de la arquitectura, pues simplemente has la aritmética:

Código (cpp) [Seleccionar]

unsigned short int word1;

word1 = 0x0100 * buffer[1] + buffer[0];


así que te dará: 0x0100 * 0x02 + 0x00 , o en decimal 256 * 2 + 0 = 512

Listo  :laugh:
..........................................
... Espero te sirva ....

;-) ;-) ;-) ;-) ;-)

Me encantan las soluciones simples y de pura lógica.

Me duele que no se me haya ocurrido antes. :rolleyes:

Enhorabuena amigo yoel_alejandro

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



#438




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



#439
Te falta la librería <cstdio> para el uso de printf, así como puntos y coma en:

Citar
det = pow (b,2)-4*a*c;
....................................

else
   printf("\n No existe raices reales.");
   printf ("\n");

.......................................


Puedes ahorrarte el uso de pow con:

Código (cpp) [Seleccionar]

det = b*b-4*a*c;


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



P.D:

* La función main es de tipo int:

Código (cpp) [Seleccionar]

...........................
int main (){
 .....................
 return EXIT_SUCCESS;
}


*Y scanf es:[/size]

Código (cpp) [Seleccionar]

scanf("%lf %lf %lf", &a, &b, &c);


sin comas en medio.

Lo del Número en los printf es para sacar una determinada cantidad de decimales. Mejor es:


Código (cpp) [Seleccionar]

printf ("\n La raices son: %g, %g",x1, x2);
#440
A simple vista veo un par de errores:

Código (cpp) [Seleccionar]

scanf("%d",s);


debería ser:

Código (cpp) [Seleccionar]

scanf("%d",&s);


y:

Código (cpp) [Seleccionar]

p=Math.Pow(l,s);


sería:

Código (cpp) [Seleccionar]

p=pow(10,s);


Por cierto, aunque el código sea de C mejor usas las etiquetas GeSHi de C++ para que el código salga coloreado. Es más fácil de revisar. ;)

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