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 - amchacon

#951
Lo más fácil es compilarlo desde linux xDDD.

Si no tienes Linux instalado, puedes montarte una maquina virtual.

Para que te hagas una idea, en el mismo Windows tengo abierto un linux y un MacOs:



Haces el código en Windows, despues copias el código en tu maquina virtual y lo compilas ahí.

Puedes descargarte el programa aquí:
https://www.virtualbox.org/wiki/Downloads

Despues tendrás que bajarte una versión de Linux (ej: Debian) y instalarla en la nueva maquina virtual.
#952
Creo que no es num sino dec.
#953
Una forma sería que el programa imprimiese las variables en un archivo y después el otro lo leyese  ;-)
#954
CitarSi creo una clase dentro de otra clase, los datos miembros de la clase interna también le pertenecen a la clase externa.?
No. Ambas clases se comunican como si se creasen por separado.

Lo ideal esque definas las dos clases por separado y luego crees el objeto en la clase:

Código (cpp) [Seleccionar]
clase Interna
{
private:
 int dato1;
 int dato2;
 //blablabla...
};

clase Externa
{
private:
 Interna Nueva; // Creando una clase dentro de otra

 //blablabla....
};

CitarSi yo creo una función miembro constante en la clase externa, puedo modificar las variables miembro de la clase interna o no?
No, una función constante no puede modificar ningún dato... Y si modificas una clase estás cambiando datos.

CitarOtra cosa porqué si yo al declarar el nombre de una clase en la función principal, digamos que es const las demas funciones tienen que ser const porqué si no da error, a que se debe esto?
Todo objeto constante se caracteriza porque no se puede modificar, la única forma que tiene el compilador de saber esto es coger las funciones que poseen el atributo const.
#955
Perfecto, ahora lo ideal sería encontrar un "cruce" donde meter.

Por no complicarse mucho, coge la ultima letra de una palabra y busca otra igual en el tablero. Cada letra que encuentres en el tablero debe cumplir el siguiente requisito:

- Que no haya ninguna otra letra ocupada en n+1 espacios a la izquierda (donde n es la longitud de la palabra).


Despues ya, intenta generalizarlo para cruzar en vertical, de izquierda a derecha...
#956
Podemos pensar en, segun las palabras que disponga el bot. Generar una lista de palabras equivalentes o seudoequivalentes (seudoequivalente es igual pero faltando la
ultima/primera letra). Calcular los puntos de cada palabra y coger la que más tiene, después sería buscar alguna letra "libre" con la que cruzar (colocar la palabra y detectar si hay alguna palabra en horizontal o vertical).

Creo que deberías seguir ese camino. De momento intenta apañarte una función que te devuelva las palabras posibles respecto a un cojunto de letras desordenadas...
#957
Programación C/C++ / Re: Archivos
14 Mayo 2013, 23:01 PM
Vale, eso me pasa por no testear *_*

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

#define ACTIVO 1
#define INACTIVO 0

typedef struct alumnos
{
    char nombre[10];
    int estado;
    int edad;
} Alumnos;

Alumnos altas();
void cambios(Alumnos* entrada);
void despliegues(Alumnos* lista,int MAX);

int main()
{
    Alumnos lista[10];
    int op; // switch
    int Candidatos = 0;
    int x;

    do
    {
        printf("\nseleccione una de las opciones\n1.-altas\n2.-bajas\n3.-cambios\n4.-despliegues\n");
        scanf("%d",&op);

        switch (op)
        {
            case 1:
            do
            {
                lista[Candidatos] = altas();
                Candidatos++;
                printf("\nQuiere dar de alta ha alguien mas?\n");
                printf("Si la respuesta es si presione 1\npara salir presione 2\n");
                scanf("%d",&x);
                printf("\nIntroduzca otro pues \n\n");
            }
            while(x==1);
            break;
        case 2:
            printf("alumno que desea dar de baja\n");
            scanf("%d",&x);
            lista[x].estado = INACTIVO;
            break;
        case 3:
            printf("Que alumno desea modificar\n");
            scanf("%d",&x);
            cambios(&lista[x]);
            break;
        case 4:
            despliegues(lista,Candidatos);
            break;
        }
        printf("Presione 1 para regresar al menu anterior\nPresione alt F4 para salir\n");
        scanf("%d",&x);

    }
    while(x==1);

    return 0;
}

Alumnos altas()
{
    Alumnos auxiliar;

    printf("Nombre: ");
    scanf(" ");

    fgets(auxiliar.nombre,10,stdin);

    printf("Edad: ");
    scanf("%d",&auxiliar.edad);

    auxiliar.estado = ACTIVO;

    /*printf("Estado: ");
    scanf("%s",&auxiliar.estado);
*/
    return auxiliar;
}

void cambios(Alumnos* entrada)
{
    printf("Datos actuales:\nnombre: %s\n",entrada->nombre);
    printf("edad: %d\n",entrada->edad);
    printf("estado:%d",entrada->estado);

    printf("\nIngresar nuevos datos");
    printf("\nNombre: ");
    fgets(entrada->nombre,10,stdin);
    printf("Edad:");
    fgets(entrada->nombre,10,stdin);
    printf("Estado (0 para inactivo y 1 para activo) :");
    scanf("%d",&entrada->estado);
}

void despliegues(Alumnos* lista,int MAX)
{
    int j; //variables despliegues

    printf("Presione 1 para ver un dato\nPresione otra tecla para ver todos los datos\n");
    scanf("%d",&j);

    if (j==1)
    {
        printf("Alumno al cual quiere visualizar\n");
        scanf("%d",&j);
        printf("nombre: %s\n",lista[j].nombre);
        printf("edad: %d\n",lista[j].edad);
        printf("estado: %d\n",lista[j].estado);
    }
    else
    {
        printf("Todos los datos son:\n");
        for (j=0; j<=MAX; j++)
        {
            printf("nombre: %s\n",lista[j].nombre);
            printf("edad: %d\n",lista[j].edad);
            printf("estado: %s\n",lista[j].estado);
        }
    }
}


Se me ha olvidado el case 1. Además los espacios en el scanf sobran.
#958
Programación C/C++ / Re: Archivos
13 Mayo 2013, 23:01 PM
Pues hombre, desde el punto de vista de la programación y siendo sincero. Tu programa tiene muchos fallos y errores de concepto.

Partamos desde el principio:

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


No necesitas la librería conio, es más, no deberías usarla nunca (es una librería de Windows y hay que intentar hacer los programas multiplataforma).

Código (cpp) [Seleccionar]
struct alumnos
{
      char nombre[10];
      char estado [5];
      int edad;
};

alumnos lista[10];


Esta sentencia solo funciona en C++. En C tendrías que poner struct al lado de lista.

Código (cpp) [Seleccionar]

int i=1;// variable altas y despliegues
int b; // variable bajas
int c; // variable cambios
int ver,j,w ; //variables despliegues
int x; // variable while(despliegues)
int op; // switch
int h; // variable while (switch)



alumnos altas();
alumnos bajas();
alumnos cambios();
alumnos despliegues();

main()
{


Variables globales? No son una buena opción, por otro lado esas funciones no retornan nada por lo que deben ser declaradas como void.

El main() debe ser int main() y retornar 0 al final. Está claro que así también funciona pero se carga el estándar y pierdes la facilidad de comunicar errores al SO.

Código (cpp) [Seleccionar]
printf("Presione 1 para regresar al menu anterior\nPresione alt F4 para salir\n");
   scanf("%d",&x);

  }while(x==1);

Si pulsas cualquier otra tecla (2,3,5...) el programa también saldrá.

Código (cpp) [Seleccionar]
alumnos altas()
  {
   printf("Nombre: ");
   scanf("%s",&lista.nombre);
   printf("Edad: ");
   scanf("%d",&lista.edad);
   printf("Estado: ");
   scanf("%s",&lista.estado);
   i++;
  }

 alumnos bajas()
  {
    printf("alumno que desea dar de baja\n");
    scanf("%d",&b);
    strcpy(lista.estado,"baja");
  }

Además de lo de "alumnos" (esas funciones son void), está el uso de variables globales.

Es importante evitar las variables globales y tirar de parametros. No voy a explanarme mucho pero son una fuente de errores impresionante, además están muy mal vistas (lo que influye de cara al profesor).

Este es mi propuesta de código:

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

#define ACTIVO 1
#define INACTIVO 0

typedef struct alumnos
{
   char nombre[10];
   int estado;
   int edad;
} Alumnos;

Alumnos altas();
void cambios(Alumnos* entrada);
void despliegues(Alumnos* lista,int MAX);

int main()
{
   Alumnos lista[10];
   int op; // switch
   int Candidatos = 0;
   int x;

   do
   {
       printf("\nseleccione una de las opciones\n1.-altas\n2.-bajas\n3.-cambios\n4.-despliegues\n");
       scanf("%d",&op);

       switch (op)
       {
           do
           {
               lista[Candidatos] = altas();
               Candidatos++;
               printf("¿Quiere dar de alta ha alguien mas?\n");
               printf("Si la respuesta es si presione 1\npara salir presione 2\n");
               scanf("%d ",&x);
           }
           while(x==1);
           break;
       case 2:
           printf("alumno que desea dar de baja\n");
           scanf("%d",&x);
           lista[x].estado = INACTIVO;
           break;
       case 3:
           printf("Que alumno desea modificar\n");
           scanf("%d",&x);
           cambios(&lista[x]);
           break;
       case 4:
           despliegues(lista,Candidatos);
           break;
       }
       printf("Presione 1 para regresar al menu anterior\nPresione alt F4 para salir\n");
       scanf("%d",&x);

   }
   while(x==1);

   return 0;
}

Alumnos altas()
{
   Alumnos auxiliar;

   printf("Nombre: ");

   fgets(auxiliar.nombre,10,stdin);

   printf("Edad: ");
   scanf("%d ",&auxiliar.edad);

   auxiliar.estado = ACTIVO;

   /*printf("Estado: ");
   scanf("%s",&auxiliar.estado);
*/
   return auxiliar;
}

void cambios(Alumnos* entrada)
{
   printf("Datos actuales:\nnombre: %s\n",entrada->nombre);
   printf("edad: %d\n",entrada->edad);
   printf("estado:%d",entrada->estado);

   printf("\nIngresar nuevos datos");
   printf("\nNombre: ");
   fgets(entrada->nombre,10,stdin);
   printf("Edad:");
   fgets(entrada->nombre,10,stdin);
   printf("Estado (0 para inactivo y 1 para activo) :");
   scanf("%d",&entrada->estado);
}

void despliegues(Alumnos* lista,int MAX)
{
   int j; //variables despliegues

   printf("Presione 1 para ver un dato\nPresione otra tecla para ver todos los datos\n");
   scanf("%d",&j);

   if (j==1)
   {
       printf("Alumno al cual quiere visualizar\n");
       scanf("%d",&j);
       printf("nombre: %s\n",lista[j].nombre);
       printf("edad: %d\n",lista[j].edad);
       printf("estado: %d\n",lista[j].estado);
   }
   else
   {
       printf("Todos los datos son:\n");
       for (j=0; j<=MAX; j++)
       {
           printf("nombre: %s\n",lista[j].nombre);
           printf("edad: %d\n",lista[j].edad);
           printf("estado: %s\n",lista[j].estado);
       }
   }
}


(Desconozco las cosas que habeís dado, asi que he usado todo lo que estaba en mi mano).

En cuanto a guardar los datos, te valdría una función como esta:

void Guardar(Alumnos* Datos,int MAX)
{
  FILE* Fichero = fopen("Salida.txt","wb");
  int i = 0;

 for (i = 0; i < MAX; i++)
 {
     write(Datos[i].nombre,strlen(Datos[i].nombre),sizeof(nombre),Fichero);
     write(Datos[i].estado,1,sizeof(int),Fichero);
     write(Datos[i].edad,1,sizeof(int),Fichero);
     fprintf(Fichero,"\n \n"); // Saltos de linea
 }

 fclose(Fichero);
}


Siendo "Datos" el vector de datos y MAX los elementos que hay.
#959
Lee el primer caracter de cada línea, si encuentra un # usa getline para "comerte la linea":
Código (cpp) [Seleccionar]
cin.getline (char* s, streamsize n, char delim );

En char delim pon '\n'


#960
Terminamos antes si nos dices que problemas te da el código.