Estructura de datos en C

RikuTheRonin

¡Buenas! Pues es que estoy haciendo un problema, que recibiendo un fichero de texto, tiene que contar cuantas palabras son anagramas de la primera.

Para empezar estoy implementando el tipo de datos "palabra", yo lo implemente así:

typedef struct{
    char pal[15];
        }tpalabra;

Pero el profesor me lo corrigio asi:

typedef char pal[TAM+1];
    palabra;

El caso es que me da error de compilacion (tengo TAM definida), y no se si es que falta algo en lo de abajo, porque no me suena que sea asi O_o o al menos no recuerdo XD

javithelong

Con:

#define TAM 15

typedef char palabra[TAM+1];

Siendo TAM el tamaño maximo de una palabra, te crea un tipo de dato 'palabra' que es un array de caracteres (para almacenar palabras de tamaño maximo 15), no se cual es tu duda :s

Saludos

RikuTheRonin

Es que el programa es poder trabajar con palabras independientes de un .txt (sin espacios, ni signos raros)

Voy a ver si hago las operaciones que quedan, y me pongo a implementar el tipo "texto" que el programa es el mas peludo que me han mandando hasta ahora >.<

maRc

Es que ese "palabra;" no tiene sentido. En todo caso "palabra pal;", y "pal" será una variable de tipo palabra.

RikuTheRonin

Me estoy poniendo de mala ostia X-D y mira que sera facil y demas...

A ver, si, creo tel TAD asi:

typedef char palabra[TAM+1];

Pero claro, asi creo un array, que no podre devolver en una funcion, por tanto tendria que crear otro tipo, llamemoles tpalabra, que sea un puntero a palabra?

typedef palabra * tpalabra;

seria asi no?

asta aqui "bien". el problema es cuando quiero copiar una cadena en una variable tpalabra, no se como hacerlo >.<

EDIT
Bueno, ya se porque pasa, son tipos incompatibles, es decir, el programa no entiende que lo que el tipo 'tpalabra' tiene dentro son char... >.< me estoy poniendo de mala leche XDDD

javithelong

Incluidas en <string.h>:

strcpy (destino, fuente);
o
strncpy (destino, fuente, num_caracteres);

En tu caso, si la variable palabra se llama palab, puedes poner

strcpy (palab, cadena);

Que te copia la cadena de caracteres 'cadena' en 'palab'

Al compilador se la pela que sean chars o lo que sea, prueba eso, que funciona :P
Si te da warnings por tipos de datos, haces casting a char* y arreglao

RikuTheRonin

^
| Si eso es lo que hacia, pero como has dicho me da warnings por tipo de datos >.<

PD: perdon mi ignorancia, pero que es un casting? X-D

LoRTH

Casting es pasar de char a int, o de int a char, no me acuerdo ahora.

RoDRa

cast es hacer una conversion de tipos

para hacer lo que tu quieres no es mejor usar un string y olvidarse de todo?

maRc

En caso de que sea C++ si, si no, pues es un poco dificil :P

RikuTheRonin

#9 Nop, el problema me dice especificamente que tengo que crear los TAD "tpalabra" y "ttexto", para poder trabajar con ellos. Con cadenas podria resolverlo mejor, pero esas son las condiciones del programa.

Es en C, no en C++

Os ponto el enunciado del problema, y asi acabamos de explicaciones XDDDDD

"Escribir un programa que lea un fichero de texto, lo almacene en memoria en una estructura de datos adecuada y cuente el numero de palabras del texto que son anagramas de la primera palabra. Se considerara que las palabras estan delimitadas por espacios. Se dice que una palabra w es un anagrama de la palabra v, si podemos obtener w cambiando el orden de las letras de v, es decir, w es una permutacion de v. Por ejemplo, vaca es un anagrama de cava.

ESTRUCTURA DEL PROGRAMA

  • Anagrama: Incluye la funcion main()

  • Permutaciones: Contiene una funcion que calcula el numero de anagramas de la primera palabra.

  • Texto: Contiene la definicion del tipo "ttexto" e incluye funciones para leer el texto de un fichero y alamacenarlo en memoria, para extraer las palabras del texto, y para determinar si se ha procesado el texto completo.

  • Palabras: Contiene la defininicion del tipo "tpalabra" y funciones para procesar palabras.

Anagrama usara Permutaciones y Texto
Permutaciones usara Texto y Palabras
Texto usara Palabras"

no pido que me resolvais el problema, supongo que esto os la soplara y tendreis mejores cosas que hacer, ademas quiero resolverlo yo, pero alguna indicacion... porque estoy super bloquado en Palabras xD

salu2

Leunamal

mmm eres compañero de mi clase FIJOOOOO! xD No estaras estudiando I.T Informatica de gestion en cadiz? y no estaras apuntado en MP?? Es que ese es el ejercicio del tema 1 xDDDDD

Saludos

Leunamal

Bueno compi :)
Voy a ser buena gente y te paso el palabras.h ok?

//Fichero de cabecera "palabras.h"
#ifndef PALABRA
#define PALABRA

#define MAX_P 20
#define FIN_PAL '\0'

typedef char palabra[MAX_P];

int longitud(palabra pal);
//Precondicion: pal es una palabra de tamaño maximo MAX_P,representado mediante
//un vector de caracteres acabado en FIN_PAL.

//Postcondicion: Devuelve la longitud de la palabra pal.

int palabra_es_permut(palabra pal1,palabra pal2);
//Precondicion: pal es una palabra de tamaño maximo MAX_P,representado mediante
//Precondicion: pal1 y pal2 son palabras de tamaño máximo MAX_P,representados
//mediante un vector de caracteres acabado en FIN_PAL.

//Postcondicion: Devuelve si pal2 es una permutacion de pal1o no.

#endif


A mi el anagrama me funciona perfe, así que no deberias tener problemas. Si sigue fallandote, ponlo por aqui, ok?

Pistilla: Posiblemente tendras problemas en el leer_siguiente_palabra (cuando metas un fichero de varias lineas). Lo que debes hacer es cambiarle las condiciones del while (del alg. visto en teoria, ¿sabes cual te digo,no? Lo que tienes que cambiar, te lo dejo para que te lo pienses, ok?

Enga illo un saludo

RikuTheRonin

#13 Ostias, otro de la UCA xDDD

Yo estoy haciendo Sistemas, no gestion, asi que dudo que estemos en la misma clase... weno tal vez en ingles o en alguna practica.

Te mando mi msn en un mensaje privado por si quieres agregarme. Ah y gracias por el .h ^^

Usuarios habituales

  • RikuTheRonin
  • Leunamal
  • maRc
  • RoDRa
  • LoRTH
  • javithelong