Ir ao conteúdo
  • Cadastre-se

ElisaMaria

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

0
  1. Analisando a topologia abaixo de uma rede que interliga duas cidades e contém dois roteadores que não implementam nenhum protocolo de roteamento específico, e as tabelas de roteamento feitas para o roteador R1 e o roteador R2 (logo abaixo da topologia), qual a análise que deve ser feita para se chegar às máscaras de sub-rede que aparecem nas tabelas de roteamento? (As interfaces dos roteadores são "Fa" pois a topologia é Fast Ethernet). Tabela de roteamento do roteador R1: Tabela de roteamento do roteador R2:
  2. Olá, obrigada pelas dicas!! Eu reduzi o código pela metade, e o automato está funcionando, porém não consigo imprimir, você poderia olhar meu código novo e ver o q está errado? Estou tentando imprimir os chars aprovados, tentei um por um , e tentei guardá-los em uma string global e imprimir ao final da ultima função, mas nao está dando. Se voce entender o automato, agora é esse que uso: Ao usar as funções (isalnum(simbolo[contador]), (is alfa numerico) não sei se está correto, pois os caracteres q vem de dentro da Entrada.txt não diferenciam numeros de letras nesse caso, mas para reduzir o código usei isso. Nem com o malloc nao mudou. E no caso da quantiadade de chars, em uma leitura previa q fiz no aruivo deu 77000, por isso defini NMAX como 77000. Alguma ideia de como imprimir? #include <stdio.h> #include <stdlib.h> #include <string.h> #define NMAX 76959 //todos os caracteres da entrada char frase[1000]; i = 0; int SelecionaSimbolosValidos(char Simbolo); void qInicial(char Simbolo[NMAX]); void q0(int contador, char Simbolo[NMAX]); void q1(int contador, char Simbolo[NMAX]); void q2(int contador, char Simbolo[NMAX]); void q3(int contador, char Simbolo[NMAX]); void q4(int contador, char Simbolo[NMAX]); void q5(int contador, char Simbolo[NMAX]); int SelecionaSimbolosValidos(char Simbolo) { int aceita = 0, rejeita = 1; if((Simbolo >= 'a' && Simbolo <= 'z') || (Simbolo >= 'A' && Simbolo <= 'Z') || Simbolo == '@' || Simbolo == '-' ||Simbolo == '.' || ((Simbolo >= '0' && Simbolo <= '9'))) return aceita; else return rejeita; } void qInicial(char Simbolo[NMAX]) { int contador = 0; q0(contador, Simbolo); } void q0(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ while((isalpha(Simbolo[contador])) == 1) //loop? { q0(++contador, Simbolo); //do something with string? } if ((isalnum(Simbolo[contador])) == 0) { frase[i] = Simbolo[contador]; i++; q1(++contador, Simbolo); //passa p o q1. } } } void q1(int contador, char Simbolo[NMAX]) { if(contador < NMAX) { while((isalnum(Simbolo[contador])) == 0) { frase[i] = Simbolo[contador]; i++; q1(++contador, Simbolo); //loop no q1. } if (Simbolo[contador] == '@') { frase[i] = Simbolo[contador]; i++; q2(++contador, Simbolo[contador]); } else { q0(++contador, Simbolo); } } } void q2(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ while((isalnum(Simbolo[contador])) == 0) { frase[i] = Simbolo[contador]; i++; q2(++contador, Simbolo); } if(Simbolo[contador] == '.') { frase[i] = Simbolo[contador]; i++; q3(++contador, Simbolo); } else { q0(++contador, Simbolo); } } } void q3(int contador, char Simbolo[NMAX]) { if(contador < NMAX) { while( (isalnum(Simbolo[contador])) == 0) { frase[i] = Simbolo[contador]; i++; q3(++contador, Simbolo); } if (Simbolo[contador] == '.') { frase[i] = Simbolo[contador]; i++; q5(++contador, Simbolo); } else if ( (isspace(Simbolo[contador])) == 0) { q4(++contador, Simbolo); } else if(((isspace(Simbolo[contador])) == 1) && (Simbolo[contador]!= '.')) { q0(++contador, Simbolo); } } } void q4(int contador, char Simbolo[NMAX]) { if(contador < NMAX) { printf("%s", frase); strcpy(frase, ""); q0(++contador,Simbolo); } // else //IMPRESSÃO. } void q5(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ while((isalnum(Simbolo[contador])) == 0) { q5(++contador, Simbolo); } { q0(++contador,Simbolo); } printf("%s", frase); strcpy(frase, ""); } // else //IMPRESSÃO. } int main() { int i = 0; int teste_validacao; int tamanho = 0; char caracteres[NMAX]; char caracter; FILE *arquivo; arquivo = fopen("Entrada.txt", "r"); if (arquivo == NULL) return EXIT_FAILURE; while(!feof(arquivo)) { caracter = getc(arquivo); teste_validacao = SelecionaSimbolosValidos(caracter); if(teste_validacao == 0) { caracteres[i] = caracter; i++; tamanho++; } } qInicial(caracteres); /*int j; for(j = 0; j < tamanho; j++) printf("%c", caracteres[j]); printf("\nnumCaracteresValidos: %d\n", tamanho); */ fclose(arquivo); return 0; }
  3. Preciso implementar um programa em C que leia o código fonte da página "Email address" do Wikipédia colocado em um arquivo "Entrada.txt" no diretório do programa em C, (fopen..., "r"), e imprima como resultado os e-mails válidos que estão no código, a partir de um automato finito deterministico, ou seja, com os estados em forma de função. Esse é código fonte: view-source:https://en.wikipedia.org/wiki/Email_address Esse é o automato que usei: Fiz o seguinte código: #include <stdio.h> #include <stdlib.h> #include <string.h> #define NMAX 76959 //caracteres aceitos que são do tipo letra, num, ponto, traço, @ int SelecionaSimbolosValidos(char Simbolo); void qInicial(char Simbolo[NMAX]); void q0(int contador, char Simbolo[NMAX]); void q1(int contador, char Simbolo[NMAX]); void q2(int contador, char Simbolo[NMAX]); void q3(int contador, char Simbolo[NMAX]); void q4(int contador, char Simbolo[NMAX]); void q5(int contador, char Simbolo[NMAX]); void q6(int contador, char Simbolo[NMAX]); void q7(int contador, char Simbolo[NMAX]); void q8(int contador, char Simbolo[NMAX]); void q9(int contador, char Simbolo[NMAX]); void q10(int contador, char Simbolo[NMAX]); void q11(int contador, char Simbolo[NMAX]); void qErro(int Contador, char Simbolo[NMAX]); int SelecionaSimbolosValidos(char Simbolo) { int aceita = 0, rejeita = 1; if((Simbolo >= 'a' && Simbolo <= 'z') || (Simbolo >= 'A' && Simbolo <= 'Z')|| Simbolo == '@' || Simbolo == '-' ||Simbolo == '.' || ((Simbolo >= '0' && Simbolo <= '9'))) return aceita; else return rejeita; } void qInicial(char Simbolo[NMAX]) { int contador = 0; q0(contador, Simbolo); } void q0(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ if ((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')) { printf("%c", Simbolo[contador]); q1(++contador, Simbolo); } /*else qErro(contador, Simbolo);*/ } } void q1(int contador, char Simbolo[NMAX]) { if(contador < NMAX) { if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')) { printf("%c", Simbolo[contador]); q2(++contador, Simbolo); } else if (Simbolo[contador] == '@') { printf("%c", Simbolo[contador]); q3(++contador, Simbolo); } else if (Simbolo[contador] == '-') { printf("%c", Simbolo[contador]); q4(++contador, Simbolo); } /*else qErro(++contador, Simbolo);*/ } } void q2(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')) { printf("%c", Simbolo[contador]); q2(++contador, Simbolo); } else if (Simbolo[contador] == '@') { printf("%c", Simbolo[contador]); q3(++contador, Simbolo); } else { q0(contador, Simbolo); } /* else qErro(contador, Simbolo); */ } } void q3(int contador, char Simbolo[NMAX]) { if(contador < NMAX) { if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')) { printf("%c", Simbolo[contador]); q10(++contador, Simbolo); } else if ((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z')) { printf("%c", Simbolo[contador]); q11(++contador, Simbolo); }/* else qErro(contador, Simbolo);*/ } } void q4(int contador, char Simbolo[NMAX]) { if(contador < NMAX) { if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')) { printf("%c", Simbolo[contador]); q5(++contador, Simbolo); }/* else qErro(contador, Simbolo);*/ } } void q5(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')) { printf("%c", Simbolo[contador]); q5(++contador, Simbolo); } else if (Simbolo[contador] == '@') { printf("%c", Simbolo[contador]); q3(++contador, Simbolo); } else if(Simbolo[contador] == '-') { printf("%c", Simbolo[contador]); q4(++contador, Simbolo); }/* else qErro(contador, Simbolo);*/ } } void q6(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')) { printf("%c", Simbolo[contador]); q7(++contador, Simbolo); }/* else qErro(contador, Simbolo);*/ } } void q7(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')) { printf("%c", Simbolo[contador]); q7(++contador, Simbolo); } else if (Simbolo[contador] == '-') { printf("%c", Simbolo[contador]); q8(++contador, Simbolo); } else if (Simbolo[contador] == '@') { printf("%c", Simbolo[contador]); q3(++contador, Simbolo); }/* else qErro(contador, Simbolo);*/ } } void q8(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')) { printf("%c", Simbolo[contador]); q9(++contador, Simbolo); }/* else qErro(contador, Simbolo);*/ } } void q9(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')) { printf("%c", Simbolo[contador]); q9(++contador, Simbolo); } else if (Simbolo[contador] == '@') { printf("%c", Simbolo[contador]); q3(++contador, Simbolo); } else if (Simbolo[contador] == '-') { printf("%c", Simbolo[contador]); q8(++contador, Simbolo); }/* else qErro(contador, Simbolo);*/ } } void q10(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')|| Simbolo[contador] == '-') { printf("%c", Simbolo[contador]); q10(++contador, Simbolo); } else if (Simbolo[contador] == '.') { printf("%c", Simbolo[contador]); q11(++contador, Simbolo); }/* else qErro(contador, Simbolo);*/ } } void q11(int contador, char Simbolo[NMAX]) { if(contador < NMAX){ if((Simbolo[contador] >= 'a' && Simbolo[contador] <= 'z') || (Simbolo[contador] >= 'A' && Simbolo[contador] <= 'Z') || (Simbolo[contador] >= '0' && Simbolo[contador] <= '9')) { printf("%c", Simbolo[contador]); q11(++contador, Simbolo); } }} else qErro(contador, Simbolo); } } void qErro(int contador, char Simbolo[NMAX]) { if(contador < NMAX) q0(++contador, Simbolo); else exit(1); } int main() { int i = 0; int teste_validacao; int tamanho = 0; char caracteres[NMAX]; char caracter; FILE *arquivo; arquivo = fopen("Entrada.txt", "r"); if (arquivo == NULL) return EXIT_FAILURE; while(!feof(arquivo)) { caracter = getc(arquivo); teste_validacao = SelecionaSimbolosValidos(caracter); if(teste_validacao == 0) { caracteres[i] = caracter; i++; tamanho++; } } qInicial(caracteres); /*int j; for(j = 0; j < tamanho; j++) printf("%c", caracteres[j]); printf("\nnumCaracteresValidos: %d\n", tamanho); */ fclose(arquivo); return 0; } Porém como saida está reconhecendo apenas uma linha "DOCTYPEhtmlclassclient" e nada mais; Além disso, não consegui chamar recursivamente as funções, pois transformei os símbolos validos em uma string de 76959 caracteres a partir da função SelecionaSimbolosValidos e tentei aplicar o automato nessa string, repetindo o reconhecimento até o fim dela, caracter por caracter. Mas não tenho ideia do que pode estar errado, pois os AFD está certo. Alguma ajuda?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...