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

#601
Cita de: vangodp en 10 Diciembre 2013, 18:18 PM
jaja muy buena leo ;).
eh pensado en hacer que ande todo el camino solo buscando la salida.
Pero se toma algún tiempo XDD

Es por tener que "dibujar" una matriz de 25x25, no creo que sea por otra cosa. Supongo que dependerá en gran medida de la tarjeta gráfica. O bien desactivas el system ("pause") de la función mostrar.

Cita de: vangodp en 10 Diciembre 2013, 18:18 PM
Por cierto en el array no se por que pero le tengo que poner a[26][26]
con 25 me da error.¿por que sera?
En la funcion y en main

Eso me extraña más ya que la matriz es de 25 elementos. A mí al menos me funciona sin problemas. Mira que error te "canta" y me cuentas a ver que ocurre.

Saluditos! ..... !!!!        
#602
Lo dejo a medio camino, entre la fuerza bruta de vangodp y la solución definitiva de ivancea96 - que usaría en un laberinto generado aleatoriamente, pero no es el caso- . Lo que hago es aprovecharme de que el laberinto está prefijado y con el la solución o alternativas de movimientos.

Esto hace lo que quieres:


Código (cpp) [Seleccionar]
#include <stdio.h>
//#include <conio.h> //usar en TurboC

void mostrar(char a[25][26]){
   system ("cls");//creo que es clrscr() en TurboC
   int i,j;
   for( i=0;i<25;i++) {
       for( j=0;j<25;j++) {
           printf("%c ",a[i][j]);
       }
       printf("\n");
   }
   printf("\n");
   //system ("pause");//puedes usar getch() o delay en TurboC
}

int main (){
   char a[25][26]={
   "0000000000000000000000000",
   "1111110000000000000000000",
   "0000010000000000000000000",
   "0000010000000000000000000",
   "0000011100000000000000000",
   "0000000100000000000000000",
   "0000000100000000000000000",
   "0000000110000000000000000",
   "0000000011111100000000000",
   "0000000000000100000000000",
   "0000011111111100000000000",
   "0000010000000000000000000",
   "0000010000000000000000000",
   "1111110000000000000000000",
   "1000000000000000000000000",
   "1000000000000000000000000",
   "1111111111111111000000000",
   "0000000000000001000000000",
   "0000000000000001111100000",
   "0000000000000000000100000",
   "0000000000000000111100000",
   "0000000001111111100000000",
   "0000000001000000000000000",
   "0000000001000000011111112",
   "0000000001111111110000000",
   };
   int i=1,j=0,flag=0;
   while (j<24){
           if (i==1 && j==0)
           a[i][j++]='X';
           else if (a[i+1][j]=='1' && i<24 && flag==0)
               a[i++][j]='X';
           else if (a[i][j+1]=='1')
               a[i][j++]='X';
           else if (i<24 && a[i+1][j]=='0' && a[i][j+1]=='0'|| a[i][j+1]=='X')
               a[i][(j--)]='X';
           else if (i==24 && a[i][j+1]==1 )
               a[i][j++]='X';
           else if (i==24 && a[i][j+1]=='0' ){
               a[i--][j]='X';
               flag=1;
           }
           if (i==23 && j<24 && flag==1)
               a[i][j++]='X';
           //mostrar(a);
       }
   a[i][j]='X';
   mostrar(a);
   //getch();
   return 0;
}


Ya, ya sé que es mejorable pero me da pereza xD.

Reedito:

¿Quién dijo lento?. Para muestra un botón:

Código (cpp) [Seleccionar]

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X X X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 X X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 X X X X X X 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 X X X X X X X X X 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X X X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X X X X X X X X X X X X X X X X 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X X 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X X X X 0 0 0 0 0
0 0 0 0 0 0 0 0 0 X X X X X X X X 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 X X X X X X X X
0 0 0 0 0 0 0 0 0 X X X X X X X X X 0 0 0 0 0 0 0

Process returned 0 (0x0)   execution time : 0.123 s


Saluditos! ..... !!!!        
#603
Cita de: SoyelRobert en  8 Diciembre 2013, 20:23 PM
mm y por qué si quitas el primer while, no el que esta dentro del for sino el que esta al principio de todo, la primera componente de la matriz no la hace?


Porque se quedaría en el buffer el \n del scanf y al introducir un valor, en lugar de tomar ese valor, primero toma lo que queda en el buffer - que era \n- por eso se salta el primer valor de la matriz. ¿Y que sucede con el valor que hubieras introducido?. Que estaría en el buffer pero ¡¡¡voilá ¡¡¡¡ con el segundo while se limpia antes de introducir el valor del segundo elemento de la matriz, y así sucesivamente.


Saluditos! ..... !!!!       
#604
Antes que nada cuando postees 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! ..... !!!!        
#605
Cita de: SoyelRobert en  8 Diciembre 2013, 19:05 PM
......................................

vamos a ver:

En primer lugar ese "EOF" de poco sirve no? quiero decir, si la condición fuese únicamente que ch sea distinto del salto de línea sería suficiente no?.


Es para si trabajas con ficheros, ya que indica que se llega al fin del mismo. En este caso puedes por tanto prescindir de él.

Citar

Y que es lo que está pasando en ese for exactamente?

entiendo que:

desde j = 0 hasta j = 2 hace una printf y un scanf y luego el while...

entonces entiendo que siempre que de un salto de linea tanto el scanf como el while lo "notan", es decir, se guarda un salto de linea en la componente de la matriz que toque en ese momento y luego en el while ve que no se cumple la condicion, la variable ch no almacena nada y termina esa vuelta en el for. correcto?
....................
espero haberme explicado....

Para no liarla, el código lo he generado para que cuando no se tome un valor ingreses espacio. Por ejemplo, X2 se introduce como "espacioX2", aunque también valen dos enter seguidos de X2, pero no era esa mi intención sino la primera.

Saluditos! ..... !!!!       
#606
Concretando un poco más, el while es un bucle que se "come" lo que queda en el buffer.

Pruébalo quitandolo y verás lo que sucede, se podría  saltar algunos scanf.

Saluditos! ....
#607
Supongo que lo que pretendes es obtener algo así:

Citar
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:

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

Código (cpp) [Seleccionar]
#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!. ....
#608
Programación C/C++ / Re: basura en mi programa
7 Diciembre 2013, 18:37 PM
Cita de: m@o_614 en  6 Diciembre 2013, 19:54 PM
gracias por sus respuestas, en realidad no son tantos scanf, solo que queria ahorrarme líneas de código para que cada vez que tuviera que ingresar un dato no repitiera fgets +sscanf. Le hice unos cambios al codigo y ya funciona para todos los casos excepto para el de ARITMETICA_BINARIA, que me pide que le ingrese un operando (que es de tipo char) y en la funcion de ingresarDato, me dice que el sscanf me va a guardar  el dato en una variable de tipo int, como puedo corregir esto?? que el sscanf me pueda guardar datos tanto de tipo int como de tipo char??


Una alternativa es, análogamente a lo que haces en el Menú, donde las opciones se corresponden con un valor numérico, hacer lo mismo con las operaciones y así sigues usando la variable en formato int:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#define ARITMETICA_SIMPLE 1
#define ARITMETICA_BINARIA 2
#define FACTORIAL 3
#define TABLA_MULTIPLICAR 4
#define SALIR 5

void ingresarDato(char *ch , int *dato);

int main()
{
    //Variables de uso interno del programa
    int continuar = 1,i,factorial = 1;
    //Variables para entrada de datos
    int opcion,numero1,numero2,numero_factorial,multiplicando,multiplicador;
    char operador;
    do
    {
        //Menu principal
        printf("CALCULADORA v1.0\n\n");
        printf("Elige una de las siguientes opciones:\n");
        printf("1. Aritmetica simple con suma de enteros a+b\n");
        printf("2. Aritmetica extendida binaria\n");
        printf("3. Factorial de n (n!)\n");
        printf("4. Detallar una tabla de multiplicar\n");
        printf("5. Salir\n");
        ingresarDato("Opcion a elegir? ",&opcion);
        switch(opcion)
        {
            //Aritmetica simple con suma de enteros a+b
            case ARITMETICA_SIMPLE:
               ingresarDato("Dame el valor de a = ",&numero1);
               ingresarDato("Dame el valor de b = ",&numero2);
               printf("%d + %d = %d",numero1,numero2,numero1+numero2);
               break;
            //Aritmetica extendida binaria (+,-,*,/,%modulo)
            case ARITMETICA_BINARIA:
               ingresarDato("Escribe el operador (1=+, 2=-, 3=*, 4=/, 5=%): ",&operador);
               ingresarDato("\nDame el valor de a = ",&numero1);
               ingresarDato("Dame el valor de b = ",&numero2);
               switch(operador)
               {
                   case 1:
                      printf("%d + %d = %d\n",numero1,numero2,numero1+numero2);
                      break;
                   case 2:
                      printf("%d - %d = %d\n",numero1,numero2,numero1-numero2);
                      break;
                   case 3:
                      printf("%d * %d = %d\n",numero1,numero2,numero1*numero2);
                      break;
                   case 4:
                      printf("%d / %d = %d\n",numero1,numero2,numero1/numero2);
                      break;
                   case 5:
                      printf("%d %% %d = %d\n",numero1,numero2,numero1%numero2);
                      break;
                   default:
                      printf("No hay un resultado calculable\n");
               }
               break;
            //Factorial de n (n!)
            case FACTORIAL:
               ingresarDato("Dame el valor de n = ",&numero_factorial);
               if("Dame el valor de n = ",numero_factorial < 0)
                  printf("El factorial de %d no esta definido\n",numero_factorial);
               else if(numero_factorial == 0)
                  printf("El factorial de 0 es 1\n");
               else
               {
                   for(i = numero_factorial;i > 0;i--)
                      factorial*=i;
                   printf("El factorial de %d es %d\n",numero_factorial,factorial);
               }
               break;
            //Detallar una tabla de multiplicar
            case TABLA_MULTIPLICAR:
               ingresarDato("Dame el multiplicando i = ",&multiplicando);
               ingresarDato("Dame hasta cual multiplicador n= ",&multiplicador);
               printf("Tabla de multiplicar del %d\n",multiplicador);
               i = 1;
               while(i <= multiplicador)
               {
                   printf("%d\tX\t%d\t=\t%d\n",multiplicando,i,multiplicando*i);
                   i++;
               }
               break;
            //Salida del programa
            case SALIR:
               continuar = 0;
               break;
            default:
               printf("Opcion no valida!\n");
        }
        if(continuar)
        system("pause");
    }while(continuar);
    return 0;
}

void ingresarDato(char *ch , int *dato)
{
    printf("%s ",ch);
    fflush (stdout);
    scanf ("%d",dato);
}


Saluditos! ....
#609
Cita de: CCCoder en  6 Diciembre 2013, 19:22 PM
#include <math.h>

pow(2.0,2.0);

Lamentablemente no puede usar la librería math.h, razón por la que tampoco le valdría el método propuesto por do-while:

x2 = c -> 2 Ln(x) = Ln(c) -> Ln(x) = Ln(c) / 2 -> x = eLn(c)/2

La idea de usar Taylor era una simple sugerencia.

Teniendo en cuenta que cursa primero de ingeniería no creo que tenga problema de usar el método de la bisección o bipartición, o de Newton, o de la secante, o de la Regula-Falsi, o iteración de punto fijo, o....

Vamos que por métodos iterativos que no impliquen el uso de la mencionada librería math.h no quede.

Saluditos! ....

#610
Cita de: bourne1191 en  6 Diciembre 2013, 11:55 AM
Hola! soy nuevo por aqui. Estoy estudiando ingeniería, y en una asignatura de informática han mandado hacer un programa para calcular la raíz cuadrada de un número real N sin usar la funcion sqrt sin la libreria math.................

Mira si te sirve de orientación:

raiz sin sqrt