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 - m@o_614

#161
Programación C/C++ / Re: basura en mi programa
7 Diciembre 2013, 07:30 AM
entonces el primer argumento de la función ingresarDato está bien no?? porque es *void

void ingresarDato(void *dato)
{
   char buffer[TAM];
   fgets(buffer,sizeof(buffer),stdin);
   sscanf(buffer,"%d",dato);
}


ya solo le faltaria otro argumento para indicarle el tipo de dato, pero como se le puede pasar por argumento un tipo de dato y que este sea int??
#162
Programación C/C++ / Re: basura en mi programa
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??

#include <stdio.h>
#include <stdlib.h>
#define TAM 5
#define ARITMETICA_SIMPLE 1
#define ARITMETICA_BINARIA 2
#define FACTORIAL 3
#define TABLA_MULTIPLICAR 4
#define SALIR 5

void ingresarDato();

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");
       printf("Opcion a elegir? ");
       ingresarDato(&opcion);
       switch(opcion)
       {
           //Aritmetica simple con suma de enteros a+b
           case ARITMETICA_SIMPLE:
              printf("Dame el valor de a = ");
              ingresarDato(&numero1);
              printf("Dame el valor de b = ");
              ingresarDato(&numero2);
              printf("%d + %d = %d",numero1,numero2,numero1+numero2);
              break;
           //Aritmetica extendida binaria (+,-,*,/,%modulo)
           case ARITMETICA_BINARIA:
              printf("Escribe el operador (+,-,*,/,%%): ");
              ingresarDato(&operador);
              printf("\nDame el valor de a = ");
              ingresarDato(&numero1);
              printf("Dame el valor de b = ");
              ingresarDato(&numero2);
              switch(operador)
              {
                  case '+':
                     printf("%d %c %d = %d\n",numero1,operador,numero2,numero1+numero2);
                     break;
                  case '-':
                     printf("%d %c %d = %d\n",numero1,operador,numero2,numero1-numero2);
                     break;
                  case '*':
                     printf("%d %c %d = %d\n",numero1,operador,numero2,numero1*numero2);
                     break;
                  case '/':
                     printf("%d %c %d = %d\n",numero1,operador,numero2,numero1/numero2);
                     break;
                  case '%':
                     printf("%d %c %d = %d\n",numero1,operador,numero2,numero1%numero2);
                     break;
                  default:
                     printf("No hay un resultado calculable\n");
                     printf("%d %c %d = 0\n",numero1,operador,numero2);
              }
              break;
           //Factorial de n (n!)
           case FACTORIAL:
              printf("Dame el valor de n = ");
              ingresarDato(&numero_factorial);
              if(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:
              printf("Dame el multiplicando i = ");
              ingresarDato(&multiplicando);
              printf("Dame hasta cual multiplicador n= ");
              ingresarDato(&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(void *dato)
{
   char buffer[TAM];
   fgets(buffer,sizeof(buffer),stdin);
   sscanf(buffer,"%d",dato);
}


gracias
#163
Saludos

Tengo una duda, si en la Arquitectura de Harvard la CPU esta conectada a dos memorias independientes(una para datos, otra para instrucciones), la CPU puede acceder a ambas memorias simultaneamente, por tener dos buses diferentes y a mayor velocidad, entonces por que la Arquitectura de Von Neumman es más utilizada, si parece que la otra tiene mas ventajas??

gracias
#164
Programación C/C++ / basura en mi programa
6 Diciembre 2013, 00:47 AM
Saludos estoy haciendo un programa que contiene un menu para elegir diferentes operaciones aritmeticas, ya se que no se puede usar fflush(stdin) para limpiar el buffer, pero ya le puse el fgets + sscanf en las partes donde crei que me daba problemas pero aun asi sigue con basura, tengo que cambiar cada uno de los scanf() que tengo en mi codigo por un fgets + sscanf???? lo que pasa es que son muchisimos y crei que con solo ponerle 2 seria mas que suficiente

#include <stdio.h>
#include <stdlib.h>
#define TAM 5
#define ARITMETICA_SIMPLE 1
#define ARITMETICA_BINARIA 2
#define FACTORIAL 3
#define TABLA_MULTIPLICAR 4
#define SALIR 5
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,buffer[TAM];
    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");
        printf("Opcion a elegir? ");
        fgets(buffer,sizeof(buffer),stdin);
        sscanf(buffer,"%d",&opcion);
        switch(opcion)
        {
            //Aritmetica simple con suma de enteros a+b
            case ARITMETICA_SIMPLE:
               printf("Dame el valor de a = ");
               scanf("%d",&numero1);
               printf("Dame el valor de b = ");
               scanf("%d",&numero2);
               printf("%d + %d = %d",numero1,numero2,numero1+numero2);
               break;
            //Aritmetica extendida binaria (+,-,*,/,%modulo)
            case ARITMETICA_BINARIA:
               printf("Escribe el operador (+,-,*,/,%%): ");
               fgets(buffer,sizeof(buffer),stdin);
               sscanf(buffer,"%c",&operador);
               printf("\nDame el valor de a = ");
               scanf("%d",&numero1);
               printf("Dame el valor de b = ");
               scanf("%d",&numero2);
               switch(operador)
               {
                   case '+':
                      printf("%d %c %d = %d\n",numero1,operador,numero2,numero1+numero2);
                      break;
                   case '-':
                      printf("%d %c %d = %d\n",numero1,operador,numero2,numero1-numero2);
                      break;
                   case '*':
                      printf("%d %c %d = %d\n",numero1,operador,numero2,numero1*numero2);
                      break;
                   case '/':
                      printf("%d %c %d = %d\n",numero1,operador,numero2,numero1/numero2);
                      break;
                   case '%':
                      printf("%d %c %d = %d\n",numero1,operador,numero2,numero1%numero2);
                      break;
                   default:
                      printf("No hay un resultado calculable\n");
                      printf("%d %c %d = 0\n",numero1,operador,numero2);
               }
               break;
            //Factorial de n (n!)
            case FACTORIAL:
               printf("Dame el valor de n = ");
               scanf("%d",&numero_factorial);
               if(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:
               printf("Dame el multiplicando i = ");
               scanf("%d",&multiplicando);
               printf("Dame hasta cual multiplicador n= ");
               scanf("%d",&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;
}


de antemano gracias
#165
Programación C/C++ / problema al abrir archivo
4 Diciembre 2013, 22:13 PM
Saludos, tengo un archivo.txt guardado en x ruta, y quiero abrirlo en modo de solo lectura, pero tengo la duda si debo ingresarle en la funcion fopen la ruta completa donde se encuentra el archivo, o si puedo hacerlo de esta manera, el archivo se encuentra en el escritorio pero si lo hago de esta manera me imprime que no se pudo abrir archivo

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

int main()
{
   FILE *fd;
   if((fd = fopen("P1ASM.txt","r"))!= NULL)
   {
       printf("Si se pudo abrir archivo");
   }
   else
      printf("No se pudo abrir el archivo");
   return 0;
}


de antemano gracias
#166
Programación C/C++ / varias listas ligadas
4 Diciembre 2013, 00:20 AM
Saludos

Si tengo un codigo en el que tengo que crear diferentes listas simplemente ligadas, tendria que hacerlo como un arreglo de punteros?? para que cada uno de esos punteros apunte al primer nodo de la lista??

#167
Dudas Generales / Duda de matematicas
1 Diciembre 2013, 03:32 AM
Saludos

Tengo una duda respecto a unos ejercicios de matematicas, se que este es un foro de informatica y no de mate, pero espero que me pudieran ayudar con esto:

el ejercicio dice:  encuentra el orden de las siguientes expresiones:

a ) 3n! + 100 n^100
b) 3^(n+1) + 10^ n/2

tengo entendido que el orden de la suma de unas expresiones algebraicas es el el orden del mayor elemento o algo asi, como por ejemplo si tengo:

3n^2 + 5n + 2, el orden va a ser el mayor o sea n^2, pero de las expresiones anteriores no se como calcularlos porque tienen factoriales y n/2

gracias
#168
Programación C/C++ / Caballos
27 Noviembre 2013, 21:02 PM
Saludos, tengo un programa que dado un tamaño n de un tablero, me diga cual es el numero maximo de caballos que se pueden colocar en ese tablero sin atacarse? y de cuantas formas, el programa me tiene que dar maximo 10 soluciones solamente.

e hice un codigo que me pida una (x,y) aleatoria para poner en esa casilla al caballo y despues calcular los 8 movimientos posibles y asegurarme que no haya otra pieza en ninguna de esas 8 casillas que marque, para que no se ataquen,en caso de que si haya otro caballo que pueda atacar pedir otra (x,y) aleatoria, y asi sucesivamente hasta que tengo el total de caballos en el tablero, como son 10 tableros maximo, a cada uno le saco el numero total de caballos y esos totales los almaceno en un arreglo para despues buscar con una funcion el mayor de ellos. y ese seria mi maximo. Pero el problema es que ese no es el maximo, porque solo son 10 tableros, pero por ejemplo si fueran 20 tableros a los que les calculo su total de caballos puede ser que en alguno de esos haya un numero de caballos mayor que al mayor que calcule de los 10 tableros que tenia

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define NO_CASILLAS_DISPONIBLES 0
#define MAX_SOLUCIONES 10

void inicializarTablero(char **tablero,int n);
int insertarCaballos(char **tablero,int fila,int columna,int casillasDisponibles,int numCaballos,int n);
int verificarMovimientos(char **tablero,int fila,int columna,int casillasDisponibles,int n);
void imprimirTablero(char **tablero,int n);
int maximoCaballos(int totalCaballos[]);

int main()
{
   FILE *fd;
   int n,i,j = 0,fila,columna,numCaballos,totalCaballos[MAX_SOLUCIONES],casillasDisponibles,MaxCaballos;
   char **tablero;
   do
   {
       printf("Dame tamanio de tablero: ");
       scanf("%d",&n);
   }while(n < 2 || n > 20);/*
   if((fd = fopen("caballos_xx.txt","w"))!=NULL)
   {*/
       srand(time(NULL));
       tablero = malloc(n*sizeof(char*));
       for(i = 0;i < n;i++)
          tablero[i] = malloc(n);
       while(j < MAX_SOLUCIONES)
       {
           numCaballos = 0;
           casillasDisponibles = n*n;
           fila = rand() % n;
           columna = rand() % n;
           printf("(%d,%d)\n",fila,columna);
           inicializarTablero(tablero,n);
           totalCaballos[j] = insertarCaballos(tablero,fila,columna,casillasDisponibles,numCaballos,n);
           imprimirTablero(tablero,n);
           printf("\n\nEl numero maximo de caballos en esta solucion es de %d\n",totalCaballos[j]);
           j++;
       }
       MaxCaballos = maximoCaballos(totalCaballos);
       printf("\nEl numero maximo de caballos en un tablero de %d x %d sin atacarse es %d\n",n,n,MaxCaballos);/*
   }
   else
      printf("No se pudo crear archivo");*/
   return 0;
}

void inicializarTablero(char **tablero,int n)
{
   int i,j;
   for(i = 0;i < n;i++)
   {
       for(j = 0;j < n;j++)
          tablero[i][j] = '0';
   }
}

int insertarCaballos(char **tablero,int fila,int columna,int casillasDisponibles,int numCaballos,int n)
{
   if(casillasDisponibles > NO_CASILLAS_DISPONIBLES)
   {
       if(tablero[fila][columna] == '0')
       {
           tablero[fila][columna] = 'C';
           casillasDisponibles = verificarMovimientos(tablero,fila,columna,casillasDisponibles,n);
           numCaballos++;
           fila = rand() % n;
           columna = rand() %n;
           insertarCaballos(tablero,fila,columna,casillasDisponibles,numCaballos,n);
       }
       else
       {
           fila = rand() % n;
           columna = rand() %n;
           insertarCaballos(tablero,fila,columna,casillasDisponibles,numCaballos,n);
       }
   }
   else
      return numCaballos;
}

int verificarMovimientos(char **tablero,int fila,int columna,int casillasDisponibles,int n)
{
   int i,j,nuevaFila,nuevaColumna,eliminadas;
   eliminadas = casillasDisponibles-1;
   nuevaFila = fila + 2;
   nuevaColumna = columna -1;
   if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
   {
       tablero[nuevaFila][nuevaColumna] = 'x';
       eliminadas--;
   }
   nuevaFila = fila + 2;
   nuevaColumna = columna + 1;
   if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
   {
       tablero[nuevaFila][nuevaColumna] = 'x';
       eliminadas--;
   }
   nuevaFila = fila + 1;
   nuevaColumna = columna - 2;
   if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
   {
       tablero[nuevaFila][nuevaColumna] = 'x';
       eliminadas--;
   }
   nuevaFila = fila + 1;
   nuevaColumna = columna + 2;
   if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
   {
       tablero[nuevaFila][nuevaColumna] = 'x';
       eliminadas--;
   }
   nuevaFila = fila - 2;
   nuevaColumna = columna - 1;
   if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
   {
       tablero[nuevaFila][nuevaColumna] = 'x';
       eliminadas--;
   }
   nuevaFila = fila - 2;
   nuevaColumna = columna + 1;
   if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
   {
       tablero[nuevaFila][nuevaColumna] = 'x';
       eliminadas--;
   }
   nuevaFila = fila - 1;
   nuevaColumna = columna - 2;
   if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
   {
       tablero[nuevaFila][nuevaColumna] = 'x';
       eliminadas--;
   }
   nuevaFila = fila - 1;
   nuevaColumna = columna + 2;
   if((nuevaFila>=0&&nuevaFila<n)&&(nuevaColumna>=0&&nuevaColumna<n)&&(tablero[nuevaFila][nuevaColumna]=='0'))
   {
       tablero[nuevaFila][nuevaColumna] = 'x';
       eliminadas--;
   }
   return eliminadas;
}

void imprimirTablero(char **tablero,int n)
{
    int i,j;
    for(i = 0;i < n;i++)
    {
        printf("\n");
        for(j = 0;j < n;j++)
           printf("[%c]",tablero[i][j]);
    }
    printf("\n");
}

int maximoCaballos(int totalCaballos[])
{
    int Maximo,i;
    Maximo = totalCaballos[0];
    for(i = 1;i < MAX_SOLUCIONES;i++)
    {
        if(totalCaballos[i] > Maximo)
           Maximo = totalCaballos[i];
    }
    return Maximo;
}



este es el codigo, pero no entiendo como puedo hacer que me saque el maximo posible sin necesidad de cambiar todo el codigo, me costo un poco de trabajo hacerlo y entender como iba a ser el algoritmo y todo, por eso no  quiero empezar desde 0, si pudieran ayudarme se los agradeceria muchisimo

de antemano gracias
#169
Programación C/C++ / abrir archivo con default
26 Noviembre 2013, 22:08 PM
Saludos, yo siempre que utilizo archivos los creo y abro  indicandole al fopen que quiero crear mi archivo en la USB, pero ahora quiero usar la forma default solo que no se como hacerlo ni donde me va a crear y guardar los archivos:

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

void crearTablero(int n,int **tablero);

int main()
{
    FILE *pd;
if((pd = fopen("F:\\archivo.txt","w"))!= NULL)
   printf("Se ha creado archivo");
}


de antemano gracias
#170
Programación C/C++ / memoria dinamica y funciones
25 Noviembre 2013, 03:09 AM
saludos

tengo el siguiente codigo en el que le asigno memoria dinamica a una matriz en lenguaje C para poder ingresarle x numero de datos, el problema que tengo es que si quiero pasarle la matriz a una funcion para dentro de esta asignarle memoria dinamica el programa me truena, pero si se la asigno dentro del main el programa funciona correctamente y no se a que se debe, este es el codigo que me truena:

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

void inicializaTablero(char **tablero,int n);

int main()
{
    int n,i,j;
    char **tablero;
    printf("Dame tamanio de tablero: ");
    scanf("%d",&n);
    inicializaTablero(tablero,n);
    for(i = 0;i < n;i++)
    {
        printf("\n");
        for(j = 0;j < n;j++)
        printf("[%c]",tablero[i][j]);
    }
    return 0;
}

void inicializaTablero(char **tablero,int n)
{
    int i,j,k;
     tablero = (char**)malloc(n*sizeof(char*));
    for(i = 0;i < n;i++)
       tablero[i] = (char*)malloc(n);
    for(j = 0;j < n;j++)
    {
        for(k = 0;k < n;k++)
           tablero[j][k] = '0';
    }
}


y de esta manera si funciona:

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

int main()
{
    int n,i,j,k;
    char **tablero;
    printf("Dame tamanio de tablero: ");
    scanf("%d",&n);
    tablero = (char**)malloc(n*sizeof(char*));
    for(i = 0;i < n;i++)
       tablero[i] = (char*)malloc(n);
    for(j = 0;j < n;j++)
    {
        for(k = 0;k < n;k++)
           tablero[j][k] = '0';
    }
    for(i = 0;i < n;i++)
    {
        printf("\n");
        for(j = 0;j < n;j++)
        printf("[%c]",tablero[i][j]);
    }
    return 0;
}


de antemano gracias