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

#151
Hola

Aquí no se hacen tareas, léete las normas del foro, pero te voy a orientar para que puedas empezar. Luego si tienes dudas concretas las preguntas.

Lo que tienes que hacer es:

char cadena[50] //por ejemplo de 50 caracteres
int numero
leer cadena
leer numero
cadena[numero] = '\0'

Así de fácil es. Ahora inténtalo y nos pones las dudas que tengas

Saludos
#152
Programación C/C++ / Re: Porque no funciona?
19 Octubre 2011, 16:50 PM
Hola

Prueba con

char resul[20];


En la linea 25
fscanf (hora, "%s", resul);

Y en la 38
if (strcmp (times(), resul) == 0)

A ver si así funciona

Saludos
#153
Hola

Lo primero de todo decirte que no debes usar goto, utiliza los bucles.

Lo del pitido en por el \a de \administrador, se soluciona poniendo dos \ para que se vea un \, el cout debe ser:
Código (cpp) [Seleccionar]
cout<<"C:\\Documents and Settings\\administrador>";

Saludos
#154
Hola

Me alegro mucho por ti, si sigues teniendo dudas o lo que sea ya sabes donde estamos.

Saludos
#155
Hola

Vamos por partes

Cita de: nolosabe en  7 Octubre 2011, 21:21 PM
¿si yo en una función pongo "struct dato aux" la estructura aux va a tener todo lo mismo que la que declare arriba afuera del main?

Claro, ya que cuando declaras arriba "struct dato" estás creando un tipo de datos y cada vez que crees una variable de este tipo, en este caso "aux", va a tener los mismos campos: char nombre[20], char sinonimo1[20], etc.


Cita de: nolosabe en  7 Octubre 2011, 21:21 PM
en el siguiente caso " if(ok)"¿cuando se cumple el if, cuando es 0 o cuando es otro valor distinto a 0 o cuando?

El if se cumple SIEMPRE cuando la condición de dentro es verdadera, es decir cuando distinto de cero o de NULL


Cita de: nolosabe en  7 Octubre 2011, 21:21 PM
¿y en este caso
"archivo = fopen(DICCIONARIO, "rb");
if(archivo)"
cuando se cumple el if y cuando no?

La condición del if se cumple cuando "archivo" es distinto de NULL. Si el fopen hubiese fallado por cualquier motivo entonces "archivo" valdría NULL y el if no se cumpliría


Cita de: nolosabe en  7 Octubre 2011, 21:21 PM
¿que significa esto?
while(!enc && !feof(archivo))

feof es una función que indica si se ha llegado al final del fichero y "enc" es una variable auxiliar que se utiliza para no tener que recorrer el fichero entero buscando el dato. Inicialmente vale 0, cuando se encuentra el dato buscado lo ponemos a 1 y ya sale del while. Entonces lo que dice es que mientras no se llegue al final del fichero y no se haya encontrado el dato se ejecute lo de dentro.

Espero haberte sido de ayuda, si sigues teniendo dudas ya sabes.

Saludos
#156
Hola

memset: lo que hace es rellenar la memoria de lo que le pasas en el primer parámetro con el valor que le pasas en el segundo parámetro el nº de bytes que le pasas en el tercer parámetro, en el caso del ejercicio:
memset(&aux, 0x00, sizeof(struct dato));
Lo que hace es rellenar la memoria donde está la variable aux de ceros (0)

Saludos
#157
Hola

Tienes varios errores, leete esto.

He visto el código en el otro post que tienes y he hecho el ejercicio en 15 minutos basándome en lo que tienes hecho, creo que funciona todo.

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

#define DICCIONARIO "diccionario.bin"


void alta();
void baja();
void modificar();
void consultar();
void listarSin();
void listarAnt();
void listarPar();
void subMenu();
int total();

struct dato{
char palabra[20];
char sinonimo1[20], sinonimo2[20], sinonimo3[20];
char antonimo[20];
char paronimo[20];
};


int main(void)
{
int opcion=0;
char salir='n';
FILE *archivo;

    archivo = fopen(DICCIONARIO, "rb");
    if(!archivo)
        archivo = fopen(DICCIONARIO, "wb");
    fclose(archivo);

while (salir!='s')
        {
        printf("\n   DICCIONARIO \n");
        printf("1) Ingresar \n");
        printf("2) Eliminar \n");
        printf("3) Modificar \n");
        printf("4) Consultar \n");
        printf("5) Listar \n");
        printf("0) Salir \n");
        scanf("%i", &opcion);
        while(getchar()!='\n');

        switch(opcion)
            {
            case 1:
                alta();
                break;
            case 2:
                baja();
                break;
            case 3:
                modificar();
                break;
            case 4:
                consultar();
                break;
            case 5:
                subMenu();
                break;
            case 0:
                printf("\nEsta seguro que desea salir? (s/n)\n");
                scanf("%c", &salir);
                while(getchar()!='\n');
                break;
            default:
                printf("Opcion incorrecta\n\n");
                break;
            }//fin switch
}//fin while
    return 0;
}//fin int main


void subMenu()
{
int opc, ok=0;
FILE *archivo;
char salir='n';

archivo = fopen(DICCIONARIO, "rb");
if(archivo)
        {
        fseek(archivo, 0, SEEK_END);
        if(ftell(archivo) != 0)
            ok = 1;
        fclose(archivo);
        }

    if(ok)
        {
        while(salir!='s')
            {
            printf("\n Listar Palabras existentes \n");
            printf("\n1) Listar sinonimos");
            printf("\n2) Listar antonimos");
            printf("\n3) Listar paronimos");
            printf("\n4) Listar: sinonimos, antonimos y paronimos");
            printf("\n0) Volver al menu principal\n");
            scanf("%i", &opc);
            while(getchar()!='\n');

            switch(opc)
                {
                case 1:
                    listarSin();
                    break;
                case 2:
                    listarAnt();
                    break;
                case 3:
                    listarPar();
                    break;
                case 4:
                    listarSin();
                    listarAnt();
                    listarPar();
                    break;
                case 0:
                    salir='s';
                    break;
                default:
                    printf("\nOPCION INCORRECTA\n\n");
                    break;
                }
            }
        }
    else
        printf("El diccionario esta vacio\n\n");
}//fin subMenu


int total()
{
int total = 0;
FILE *archivo;
archivo=fopen(DICCIONARIO, "rb");//abro el archivo diccionario.bin como solo lectura
if(archivo==NULL)
printf("\nError al abrir el archivo %s\n\n", DICCIONARIO);
else
        {
fseek(archivo,0,SEEK_END);
total=ftell(archivo) / sizeof(struct dato);//divido el tama¤o del archivo entre el tama¤o de la estructura para saber cuantas hay
fclose(archivo);
        }
return total;
}


void alta()
{
char opc;
struct dato aux;
FILE *archivo;

memset(&aux, 0x00, sizeof(struct dato));
printf("\nIngresar palabra/s \n");
printf("\nPalabra: ");
fgets(aux.palabra, 20, stdin);

    printf("Ingresa un sinonimo: ");
    fgets(aux.sinonimo1, 20, stdin);

    printf("Desea ingresar otro sinonimo? (s/n): ");
    scanf("%c", &opc);
    while(getchar()!='\n');
    if(opc=='s')
        {
        printf("Ingrese otro sinonimo: ");
        fgets(aux.sinonimo2, 20, stdin);

        printf("Desea ingresar otro sinonimo? (s/n): ");
        scanf("%c", &opc);
        while(getchar()!='\n');
        if(opc=='s')
            {
            printf("Ingrese otro sinonimo: ");
            fgets(aux.sinonimo3, 20, stdin);
            }
        }//if2

printf("Ingrese un antonimo: ");
fgets(aux.antonimo, 20, stdin);

printf("Ingrese un paronimo: ");
fgets(aux.paronimo, 20, stdin);

printf("\nUsted ingreso:\n");
printf("Palabra: %s \nSinonimos:\n\t%s \n\t%s \n\t%s \nAntonimo:\n\t%s \nParonimo: \n\t%s", aux.palabra, aux.sinonimo1, aux.sinonimo2, aux.sinonimo3, aux.antonimo, aux.paronimo);
do
        {
        printf("\n\nEsta seguro que desea agregar estos datos al diccionario(s/n): ");
        scanf("%c", &opc);
        while(getchar()!='\n');
        }
while(opc!='s' && opc!='n');

if(opc=='s')
        {
archivo=fopen(DICCIONARIO, "a+b");
if(archivo)
            {
            fwrite(&aux, sizeof(struct dato), 1, archivo);
            fclose(archivo);
            }
}//if
}//funcion


void baja()
{
    char palabra[20];
    FILE *archivo;
    int ok = 0, i = 0, n = total();
    struct dato aux, aux2[n];

    archivo = fopen(DICCIONARIO, "rb");
if(archivo)
        {
        fseek(archivo, 0, SEEK_END);
        if(ftell(archivo) != 0)
            ok = 1;
        fclose(archivo);
        }

    if(ok)
        {
        memset(&palabra, 0x00, 20);
        memset(&aux, 0x00, sizeof(struct dato));
        memset(&aux2, 0x00, sizeof(aux2));

        printf("Ingresa la palabra a eliminar: ");
        fgets(palabra, 20, stdin);
        archivo = fopen(DICCIONARIO, "rb");
        if(archivo)
            {
            while(!feof(archivo))
                if(fread(&aux, sizeof(struct dato), 1, archivo))
                    if(strcmp(palabra, aux.palabra)!=0)
                        {
                        strcpy(aux2[i].palabra, aux.palabra);
                        strcpy(aux2[i].sinonimo1, aux.sinonimo1);
                        strcpy(aux2[i].sinonimo2, aux.sinonimo2);
                        strcpy(aux2[i].sinonimo3, aux.sinonimo3);
                        strcpy(aux2[i].antonimo, aux.antonimo);
                        strcpy(aux2[i].paronimo, aux.paronimo);
                        i++;
                        }
            fclose(archivo);

            if(i < n)
                {
                remove(DICCIONARIO);
                archivo = fopen(DICCIONARIO, "wb");
                if(archivo)
                    {
                    for(i=0; i<n-1; i++)
                        fwrite(&aux2[i], sizeof(struct dato), 1, archivo);
                    fclose(archivo);
                    }
                printf("Palabra eliminada con exito\n\n");
                }
            else
                printf("No se encuentra la palaba en el diccionario\n\n");
            }
        }
    else
        printf("El diccionario no se encuentra o esta vacio\n\n");
}


void modificar()
{
char opc;
struct dato aux;
FILE *archivo;
char palabra[20];
int enc = 0, ok = 0;

archivo = fopen(DICCIONARIO, "rb");
if(archivo)
        {
        fseek(archivo, 0, SEEK_END);
        if(ftell(archivo) != 0)
            ok = 1;
        fclose(archivo);
        }

    if(ok)
        {
        memset(&aux, 0x00, sizeof(struct dato));
        archivo = fopen(DICCIONARIO, "r+b");
        if(archivo)
            {
            printf("Ingresa la palabra a modificar: ");
            fgets(palabra, 20, stdin);

            while(!enc && !feof(archivo))
                {
                fread(&aux, sizeof(struct dato), 1, archivo);
                if(strcmp(palabra, aux.palabra)==0)
                    enc = 1;
                }

            if(enc)
                {
                fseek(archivo, sizeof(struct dato)*(-1), SEEK_CUR);
                printf("Introduce la nueva palabra: ");
                fgets(aux.palabra, 20, stdin);
                printf("Introduce un sinonimo: ");
                fgets(aux.sinonimo1, 20, stdin);
                do
                    {
                    printf("Quieres introducir otro sinonimo? (s/n)");
                    scanf("%c", &opc);
                    while(getchar()!='\n');
                    }
                while(opc!='s' && opc!='n');

                if(opc=='s')
                    {
                    printf("Introduce otro sinonimo: ");
                    fgets(aux.sinonimo2, 20, stdin);

                    do
                        {
                        printf("Quieres introducir otro sinonimo? (s/n)");
                        scanf("%c", &opc);
                        while(getchar()!='\n');
                        }
                    while(opc!='s' && opc!='n');

                    if(opc=='s')
                        {
                        printf("Introduce otro sinonimo: ");
                        fgets(aux.sinonimo3, 20, stdin);
                        }
                    }
                printf("Introduce un antonimo: ");
                fgets(aux.antonimo, 20, stdin);
                printf("Introduce un paronimo: ");
                fgets(aux.paronimo, 20, stdin);

                fwrite(&aux, sizeof(struct dato), 1, archivo);
                printf("Palabra modificada correctamente\n\n");
                }
            else
                printf("No se ha encontrado la palabra: %s\n\n", palabra);
            fclose(archivo);
            }
        else
            printf("No se puede abrir el diccionario\n\n");
        }
    else
        printf("El diccionario no se encuentra o esta vacio\n\n");
}


void consultar()
{
struct dato aux;
FILE *archivo;
char palabra[20];
int enc = 0, ok = 0;

archivo = fopen(DICCIONARIO, "rb");
if(archivo)
        {
        fseek(archivo, 0, SEEK_END);
        if(ftell(archivo) != 0)
            ok = 1;
        fclose(archivo);
        }

    if(ok)
        {
        memset(&aux, 0x00, sizeof(struct dato));
        archivo = fopen(DICCIONARIO, "rb");
        if(archivo)
            {
            printf("Ingresa la palabra a consultar: ");
            fgets(palabra, 20, stdin);

            while(!enc && !feof(archivo))
                {
                fread(&aux, sizeof(struct dato), 1, archivo);
                if(strcmp(palabra, aux.palabra)==0)
                    enc = 1;
                }
            fclose(archivo);

            if(enc)
                printf("Palabra: %s \nSinonimos: \n\t%s \n\t%s \n\t%s \nAntonimo: \n\t%s \nParonimo: \n\t%s", aux.palabra, aux.sinonimo1, aux.sinonimo2, aux.sinonimo3, aux.antonimo, aux.paronimo);
            else
                printf("La palabra no se encuentra\n\n");
            }
        else
            printf("El diccionario no se encuentra o esta vacio\n\n");
        }
    else
        printf("El diccionario no se encuentra o esta vacio\n\n");
}


void listarSin()
{
    struct dato aux;
FILE *archivo;

    memset(&aux, 0x00, sizeof(struct dato));
    archivo = fopen(DICCIONARIO, "rb");
    if(archivo)
        {
        while(!feof(archivo))
            if(fread(&aux, sizeof(struct dato), 1, archivo))
                printf("Palabra: %s \nSinonimos: \n\t%s \n\t%s \n\t%s\n", aux.palabra, aux.sinonimo1, aux.sinonimo2, aux.sinonimo3);
        fclose(archivo);
        }
}


void listarAnt()
{
    struct dato aux;
FILE *archivo;

    memset(&aux, 0x00, sizeof(struct dato));
    archivo = fopen(DICCIONARIO, "rb");
    if(archivo)
        {
        while(!feof(archivo))
            if(fread(&aux, sizeof(struct dato), 1, archivo))
                printf("Palabra: %s \nAntonimo: \n\t%s", aux.palabra, aux.antonimo);
        fclose(archivo);
        }
}


void listarPar()
{
    struct dato aux;
FILE *archivo;

    memset(&aux, 0x00, sizeof(struct dato));
    archivo = fopen(DICCIONARIO, "rb");
    if(archivo)
        {
        while(!feof(archivo))
            if(fread(&aux, sizeof(struct dato), 1, archivo))
                printf("Palabra: %s \nParonimo: \n\t%s", aux.palabra, aux.paronimo);
        fclose(archivo);
        }
}


Si tienes alguna duda no dudes en preguntar.

Saludos
#158
Programación C/C++ / Re: Estructuras.....
6 Octubre 2011, 19:46 PM
Hola

Eso pasa porque el buffer de entrada no está limpio, prueba poniendo detrás de cada scanf esto (con el ; ):
while(getchar()!='\n') ;

Además tienes otro error aquí:
if(inicio==NULL)
{
  inicio=nodo;
  inicio->sig==NULL;
  inicio->ant=NULL;
  aux=inicio;
}

Adivina donde hay un = de sobra

Saludos
#159
Programación C/C++ / Re: Busqueda lineal
3 Octubre 2011, 16:47 PM
Hola

El error lo tienes aquí:
Código (cpp) [Seleccionar]

cout<<"\ndigite el numero a buscar\n";
cin>>valor;
for (k=0;k<7;k++);{
if(valor==estudiante[k])
cout<<"\n encontrado en la posicion\n"<<k+1<<endl;
else
cout<<"no existe en el arreglo";

En el for te sobra el ; del final (el que tienes puesto delante de la llave)

Puedes sustituir todo ese trozo por este:
Código (cpp) [Seleccionar]

cout<<"\ndigite el numero a buscar\n";
cin>>valor;
bool enc = false;
for (k=0; k<7 && !enc; k++)
   if(valor==estudiante[k])
       enc = true;

if(enc)
   cout<<"\nEncontrado en la posicion"<<k<<endl;
else
   cout<<"\nNo existe en el arreglo";


Además te recomiendo que te leas esto y no olvides poner el code entre las etiquetas de GeSHi (la tienes al lado del botón de elegir el tipo de fuente)

Saludos
#160
Hola

Cita de: johnnyBsc17 en 28 Septiembre 2011, 06:13 AM
me da error constant expression required in function main()      en la linea int matriz[fila][columna];

Ese error te da porque estás creando la matriz en tiempo de ejecución, para poder hacerlo así debes declararla al principio como int **matriz pero dudo que hayas dado punteros, así que debes crearla como lo hacías al principio dándole un tamaño: int matriz[30][30] por ejemplo

Saludos