babylon 0 Denunciar post Postado Agosto 25, 2009 Aew galera beleza, seguinte estou com um trabalho de faculdade e queria ajuda de vocês, tipo como sei mais Flash e PHP e ja C++ eu so sei o basico de progamação e não sei nada de arquivos TXT queria saber de vocês ate uma ajuda quanto a este trabalho de faculdade que me foi passado: "Você deverá construir um tradutor que deverá fazer uso também dos TADs implementado para traduzir um texto. Para isso, o sistema deverá receber um arquivo texto e traduzir palavra a palavra o texto de português para inglês ou de inglês para português. A mesma saída deverá ser impressa na tela e em um arquivo de saída. Quando a palavra lida não existir no dicionário o tradutor deverá manter a palavra original. Você pode assumir que as palavras no arquivo de entrada e no dicionário não estarão acentuadas. Por exemplo, suponha o dicionário: aniversario - birthday bolo – cake de – of e – is eu – I festa – party gosto – like hoje – today meu - my presente – gift Neste caso, se o usuário entrar um arquivo contendo: Hoje e meu aniversario. Eu adoro bolo. O sistema vai gerar a saída: Today is my birthday. I adoro cake. O usuário pode então interagir com o sistema para entrar uma nova palavra e acrescentar adoro – love no dicionário. Fazendo a tradução do mesmo arquivo, então se obteria: Today is my birthday. I love cake. Data Entrega: 09/09/2009 Valor: 10,0 pontos Trabalho Individual O dicionário para o sistema deverá ser carregado a partir de um arquivo. Em outras palavras dado um arquivo no formato abaixo, o sistema deverá gerar na memória o dicionário. Formato Exemplo: <palavra português 1> <palavra inglês 1> <palavra português 2> <palavra inglês 2> <palavra português 3> <palavra inglês 3> ... <palavra português n> <palavra inglês n> Observe que o arquivo contendo o dicionário deve ser carregado automaticamente a partir de um dicionário no mesmo diretório do programa principal de nome dicionario.txt. O dicionário deverá conter apenas palavras simples, sem acento e sem hífen. Palavras compostas ou expressões não precisam ser consideradas. Para o desenvolvimento do trabalho, deverão ser implementadas 3 (três) TAD (Tipos Abstratos de Dados): • Palavra: este TAD deve representar uma palavra em uma língua específica (inglês ou português). Uma palavra é definida como um conjunto de até M caracteres do alfabeto (a-z, A-Z). • Verbete: este TAD representa um par de palavras, uma em português e a sua tradução em inglês. • Dicionário: este TAD contém um conjunto de verbetes. Algumas das funções que você deverá implementar no TAD Verbete são: • void inicializaVerbete(Verbete *v, Palavra p1, Palavra p2) Inicializa o Verbete v com as palavras p1 e p2, garantindo que elas estejam em línguas diferentes, uma em PORTUGUES, outra em INGLES. • Palavra obtemTraducao(Verbete v, Palavra p) Dada a palavra p contida no verbete v, retorne a sua tradução. • Palavra retornaPort(Verbete v) Dado um verbete v, retorna a tradução em português. • Palavra retornaIng(Verbete v) Dado um verbete v, retorna a tradução em inglês. Algumas das funções que você deverá implementar no TAD Dicionário são: • void InicializaDicionario(Dicionario *dic) Inicializa o dicionário dic como vazio. • int CarregaDic(char *NomeArq, Dicionario *dic); Dado um string contendo o nome de um arquivo, abre o arquivo e carrega o dicionário em dic. Retorna 1, caso tenha conseguido carregar corretamente o dicionário e 0 se não conseguir. • int InsereDic(Dicionario *dic, Verbete v); Dado um dicionário dic e um Verbete v, acrescenta-a no dicionário. Retorna 1, caso tenha conseguido acrescentá-la (caiba no dicionário) e 0 se não conseguir. • void RetiraDic(Dicionario *dic, Palavra *p); Dado um dicionário dic e uma palavra p, retira o VERBETE que contenha p do dicionario dic. Retorna 1, caso tenha conseguido retirá-la e 0 se não conseguir (e.x. não a encontrar). • int retornaTraducaoPort(Palavra p, Palavra *p2); Dada uma palavra em inglês p, retorna 1, caso tenha conseguido traduzi-la para português, inserindo em p2 a sua tradução. Retorna 0 se não conseguir (e.x. não a encontrar). • int retornaTraducaoIng(Palavra p, Palavra *p2); Dada uma palavra em português p, retorna 1, caso tenha conseguido traduzi-la para inglês inserindo em p2 a sua tradução. Retorna 0 se não conseguir (e.x. não a encontrar)." Bom se alguem puder me ajudar, desde ja vlw e flw!!! Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Agosto 25, 2009 Título editado de acordo com as Regras do fórum iMasters Ajuda [Exercicio de C/C++ de faculdade] http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Tradutor portugues->ingles --------------------------------------- Podemos te ajudar sim! O que você ja tem pronto? Onde está tendo problemas? Tenha em mente que ninguém vai fazer o seu trabalho de graça, Se você preferir eu posso mover o tópico para "Ofertas de emprego". http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
babylon 0 Denunciar post Postado Agosto 26, 2009 Título editado de acordo com as Regras do fórum iMasters Ajuda [Exercicio de C/C++ de faculdade] http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Tradutor portugues->ingles --------------------------------------- Podemos te ajudar sim! O que você ja tem pronto? Onde está tendo problemas? Tenha em mente que ninguém vai fazer o seu trabalho de graça, Se você preferir eu posso mover o tópico para "Ofertas de emprego". http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Opa VictorCacciari beleza? Seguinte na verdade eu tava vendo aqui nuns foruns e tirando umas duvidas de como fazer, pelo que eu andei informando eu terei que usar as classes header fstream manipulando arquivo byte a byte, so que tipo eu ainda não estudei isto, ai que esta minha duvida, como começar a fazer o trabalho saca? Achei ate este endereço de link aqui como referencia: http://www.cplusplus.com/reference/iostream/fstream/ Mais tipo eu teria que entender adicionar arquivos .TXT em C++, a ideia minha seria trabalhar então com um banco de dados adicionados a um arquivo .TXT onde la abrindo o .TXT sem precisar ir ao progama (no progama no caso você so conferia so escolhia um idioma e digitava a palavra e la viria o significado) você teria as palavras em ingles e portugues alem de poder adicionar varias outras palavras, seria algo assim no .TXT: "No caso as palavras ingês e portugues seriam traduzidas pela sequencia, tipo a 1a palavra em ingles seria traduzida na 1a em portugues." Eu achei um codigo para escrever no TXT: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { FILE *fp; double ld; int d; char str[80]; if(argc!=2) { printf("Specify file name.\n"); exit(1); } /* open file for output */ if((fp = fopen(argv[1], "w"))==NULL) { printf("Cannot open file.\n"); exit(1); } fprintf(fp, "%f %d %s", 345.342, 908, "hiiiiiiii"); fclose(fp); /* open file for input */ if((fp = fopen(argv[1], "r"))==NULL) { printf("Cannot open file.\n"); exit(1); } fscanf(fp, "%lf%d%s", &ld, &d, str); printf("%f %d %s", ld, d, str); fclose(fp); return 0; } Mais eu queria no caso implementar o codigo e como não sei muito de C++ queria ajuda de vocês, bom se alguem puder me ajudar. Desde ja vlw e flw!!! Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Agosto 26, 2009 Bom, você tem q seguir a risca msm essas coisas que seu professor passou?? pq o C++ possui tanta coisa q facilidade sua vida de uma olhada: http://forum.imasters.com.br/index.php?/topic/350967-codigo-usando-o-map/ Bom caso tenha q ser do jeito q o professor passou msm: * vai ser OO ou pode ser estruturado msm? * oq você entende por TAD? * você sabe soh o basico do basico msm cara??? []s Compartilhar este post Link para o post Compartilhar em outros sites
babylon 0 Denunciar post Postado Agosto 28, 2009 Bom, você tem q seguir a risca msm essas coisas que seu professor passou?? pq o C++ possui tanta coisa q facilidade sua vida de uma olhada: http://forum.imasters.com.br/index.php?/topic/350967-codigo-usando-o-map/ Bom caso tenha q ser do jeito q o professor passou msm: * vai ser OO ou pode ser estruturado msm? * oq você entende por TAD? * você sabe soh o basico do basico msm cara??? []s Opa quitZAUMMM beleza? Seguinte necessariamente eu não tenho que seguir a risca todas as coisas que o professor passou não, tanto que eu posso usar outras bibliotecas que possam me ajudam a fazer o progama, eu so tenho que fazer um tradutor de ingles para portugues e vice versa em que ele use um banco de dados em cima de um .TXT. A ideia é eu vou fazer em C mesmo (na verdade é tambêm o que eu mais sei, ja que sei o basico). Bom quanto a TAD eu não sei nada, como eu disse eu so sei o basico mesmo. O que eu ja fiz foi a ideia de escolha, o menu do inicio do progama que você escolhe o idioma a escolhe, no caso você digita um numero para escolher qual sera o idioma da frase digitada a ser traduzida. Ate por isto estou com dificuldades de fazer a parte de armazenar num .TXT os dados como se fosse um dicionario, se alguem puder me ajudar e ou me ensinar, sei la postar um exemplo eu agradeço... desde ja vlw e flw a todos!!!! Estou dando uma olhada no link que você me passou e mesmo neste link aqui: http://www.cplusplus.com/doc/tutorial/files/ Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Agosto 28, 2009 Bom em C++ seria + facil, + td bem... Bom vamos falar um pouco de TAD. no momento eu penso algo assim: typedef dicionario{ int iId; char sPortugues[26]; char sIngles[26]; } dicionario dPalavras; pronto temos um tipo abstrato de dados. mostre oq você ta tentando fazer... []s Compartilhar este post Link para o post Compartilhar em outros sites
babylon 0 Denunciar post Postado Setembro 5, 2009 Bom em C++ seria + facil, + td bem... Bom vamos falar um pouco de TAD. no momento eu penso algo assim: typedef dicionario{ int iId; char sPortugues[26]; char sIngles[26]; } dicionario dPalavras; pronto temos um tipo abstrato de dados. mostre oq você ta tentando fazer... []s Opa quitZAUMMM beleza? Seguinte depois de muito pensar e com ajuda de um colega meu, tinha saido um codigo de manipulação de arquivos por string sem arquivo para tradução estilo dicionario, so que como o professor não aceitou por não usar parametros de arquivo .TXT no C e este meu colega assim como eu não sabe muito de manipulação de arquivos em C tb, o codigo ficou mais ou menos assim: #include<stdio.h> #include<string.h> #include <conio.h> int main() { char Ln[256], *p, atomo[256], trad[256]; int i = 0, x = 1, j, c; FILE* f; for(c=0;c<256;c++) { Ln[c] =0; atomo[c] =0; trad[c] =0; } printf("\nDigite uma palavra ou a frase a ser traduzida: \n"); fgets(char *buffer, int num, FILE *stream); if(!feof(stdin)) { p=Ln; while(*p) { if(*p!=' ') { j=0; while(*p && *p!=' ') { atomo[j]=*p; j++; p++; atomo[j]= ''; if(strcmp(atomo,"i")==0) f = fopen("eu.txt","r"); strcat(trad,texto_lido); else if(strcmp(atomo,"am")==0) f = fopen("estou.txt","r"); strcat(trad,texto_lido); else if(strcmp(atomo,"gift")==0) f = fopen("presente.txt","r"); strcat(trad,texto_lido); else if(strcmp(atomo,"party")==0) f = fopen("festa.txt","r"); strcat(trad,texto_lido); else if(strcmp(atomo,"crazy")==0) f = fopen("maluco.txt","r"); strcat(trad,texto_lido); } p++; } } } printf("\n\nTraducao: %s",trad); getch(); } PS: Eu estou usando a ideia de varios arquivos .TXT e comparar estes varios .TXT (ao invez de usar ponteiro para dizer em que linha esta cada palavra) que teriam uma unica palavra, seria mais ou menos como esta acima (deve estar um pouco errado já que não sei a sintaxe ao certo), ate por isto gostaria de que alguem pudesse ver o codigo e mesmo apontar e corrigir os erros ja que não sei muito de manipulação de arquivos .TXT, bom sei la... achei melhor fazer deste modo, se alguem puder me ajudar mesmo assim, desde ja vlw e flw!!! Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Setembro 6, 2009 Opa babylon, tudo certo? Cara, desculpa, mas o que você ta fazendo é uma gambiarra das grandes! Primeiro, o que você precisa aqui é uma analise lexical simples, de um texto. Convém dividir esse texto em tokens, no seu caso, só existirão dois tipos de tokens, palavras e pontuação. Por exemplo, imagine o texto: "Eu estou indo à festa." --> após a analise --> "Eu", "estou", "indo", "à", "festa". Agora o teu texto está pronto para ser traduzido. para cada token em lista_tokens faça: dic := procurar_entrada(token) se dic.iID > 0: ## O token existe! token.value := dic.iEnglish Não tem muito o que saber de arquivos txt, o truque aqui está nas strings. Detalhe: você pode fazer a analise lexical e a tradução "ao mesmo tempo": linha_de_texto := pegar_linha(arquivo) repetir: i := 0 se linha_de_texto[i] == '\n': interromper_loop() palavra := "" enquanto linha_de_texto[i] != ' ' faça: palavra = palavra + linha_de_texto[i] i := i + 1 i := i + 1 ## pulando o espaço para cada token em lista_tokens faça: dic := procurar_entrada(palavra) se dic.iID > 0: ## O token existe! palavra.value := dic.iEnglish E outra... for(c=0;c<256;c++) { Ln[c] =0; atomo[c] =0; trad[c] =0; } que tal fazer: memset(Ln, 0, 256); memset(atomo, 0, 256); memset(trad, 0, 256); Compartilhar este post Link para o post Compartilhar em outros sites
babylon 0 Denunciar post Postado Setembro 14, 2009 Opa VictorCacciari beleza? Seguinte pois bem parece que o pessoal ao qual eu mostrei a ideia do trabalho em varios .txt e mesmo o professor não aceitou a ideia, ele tb achou gambiarra, resultado estou voltando a estaca zero... tenso, mais tamos ai... seguinte, recomecei o codigo ate com ajuda de um colega meu e de um dos membros de um outro forum tb aproveitei tb para comentar sobre o que estou fazendo, so que eu estou com uma outra duvida, abaixo o novo codigo: #include <stdio.h> #include <conio.h> //cria estrutura com dois campos um em ingles e um em portugues typedef struct { char ingles [50]; char portugues[50]; }Tipoitem ; typedef struct { Tipoitem item[9999]; int inicio,fim; }Tipofila; void Cria(Tipofila *Fila) { Fila->inicio=0; Fila->fim=0; } //insere elemento no fim da estrutura void insere(Tipofila *Fila,Tipoitem item) { Fila->item[Fila->fim]=item; Fila->fim++; } //função para carregar as palavras do arquivo para o dicionario int CarregaDic(Tipoitem *item) { int i; int a; a=0; FILE *infile; if ((infile=fopen("infile","r"))==NULL) { return 0 ;//aborta } else { for (i=1;i<=15;i++) { fscanf(infile,"%15s",item[ i ].portugues); fscanf(infile,"%15s",item[ i ].ingles); } }//else } //função principal int main() { char frase[100]; FILE *Arq; Tipoitem item; Tipofila DIC; Cria (&DIC); CarregaDic(&item); printf("Digite uma palavra ou a frase a ser traduzida:\n\n"); gets(frase); return 0; } Seguinte, queria saber agora depois de feito e compilado este codigo, como eu faria para adicionar uma estrutura dentro do texto que é digitado? Bom se puderem novamente me ajudar... desde ja vlw e flw!!! Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 14, 2009 desculpa n entendi. []s Compartilhar este post Link para o post Compartilhar em outros sites
babylon 0 Denunciar post Postado Setembro 17, 2009 desculpa n entendi. []s Opa quitZAUMMM na verdade eu queria era colocar um texto dentro de uma estrutura, tipo a pessoa digita o texto ai vai e pega e poe cada palavra do texto separada na estrutura, tipo como eu faria isto saca, teria como me ajudar neste codigo para o programa, é que esteou em duvida nesta parte? Bom é isto vlw e flw!!! Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 18, 2009 Então babylon, é simples só você armazenar o texto numa string(ou vetor de char), e gravar na struct. de uma olhada no comando strcpy(...,...); []s Compartilhar este post Link para o post Compartilhar em outros sites