Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

KrilMun

Algoritmo AFD

Recommended Posts

Boa noite pessoal,

 

É meu primeiro post no fórum, havia descoberto ele há alguns dias procurando sobre o mesmo assunto do título, e acho que vocês poderiam me ajudar. O seguinte código representa um AFD simples para o reconhecimento de constantes reais com exponenciação.

 

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

int testePalavra(int contador, char palavra[]);
int testePosicao(int e, int estadoFinal[]);

int main() {
    char palavra[] = "+32E-52E";

    int estadoFinal[] = {3, 5, 9};
    int estadoIncial = 0;
    int i;
									//+ //- //. //E //Digito
    int tabelaTransicoes[10][5] =	{{1,  1,  2, -1,  3},  //q0
    								{-1, -1,  2, -1,  3},  //q1
    								{-1, -1, -1, -1,  5},  //q2
    								{-1, -1,  4,  6,  3},  //q3
    								{-1, -1, -1, -1,  5},  //q4
    								{-1, -1, -1,  6,  5},  //q5
    								{ 8,  8, -1, -1,  9},  //q6
    								{-1, -1, -1, -1,  9},  //q8
    								{-1, -1, -1, -1,  9}}; //q9

    int e = estadoIncial;
    printf("Estado Inicial q%d\n", e);

    int contador = 0;
    for (i = 0; i < strlen(palavra); i++) {
        char c = palavra[i];
        int coluna;
        
		if (c == '+') {
        	printf("Caractere lido: %c\n", c);
            coluna = 0;
        } else if (c == '-') {
        	printf("Caractere lido: %c\n", c);
            coluna = 1;
    	} else if (c == '.') {
        	printf("Caractere lido: %c\n", c);
            coluna = 2;
        } else if (c == 'E') {
        	printf("Caractere lido: %c\n", c);
            coluna = 3;
        } else if (isdigit(c)) {
        	printf("Caractere lido: %c\n", c);
            coluna = 4;
        } else {
        	printf("Caractere lido: %c\n", c);
            coluna = -1;
        	printf("   Transicao invalida: Caractere nao aceito!\n");
            break;
        }

        e = tabelaTransicoes[e][coluna];

        if (e != -1) {
            contador++;
            printf("   Transicao para q%d", e);
            if (testePosicao(e, estadoFinal))
            	printf(" | Estado Final");
            else
            	printf(" | Estado Nao-Final");
            printf("\n");
        }
        else{
        	printf("   Transicao invalida: Erro de leitura!\n");
            break;
        }
    }

    if ((testePalavra(contador, palavra)) && (testePosicao(e, estadoFinal))) {
        printf("\nA palavra %s foi aceita pelo AFD!", &palavra);
    } else{
        printf("\nA palavra %s foi recusada pelo AFD!", &palavra);
    }
    
    return 0;
}

int testePalavra(int contador, char palavra[]){ //Teste para verificar se a 
	if (contador == strlen(palavra))
		return 1;
	else
		return 0;
}

int testePosicao(int e, int estadoFinal[]){ //Teste para verificar se a posição em que a palavra terminou é estado final
	int i;
	int status = 0;
	
	for(i = 0; i < sizeof(estadoFinal); i++){
		if (e == estadoFinal[i]){
			status = 1;
			break;
		}
	}
	
	return status;
}
int tabelaTransicoes[10][5] =	{{1,  1,  2, -1,  3},  //q0
    								{-1, -1,  2, -1,  3},  //q1
    								{-1, -1, -1, -1,  5},  //q2
    								{-1, -1,  4,  6,  3},  //q3
    								{-1, -1, -1, -1,  5},  //q4
    								{-1, -1, -1,  6,  5},  //q5
    								{ 8,  8, -1, -1,  9},  //q6
    								{ 0,  0,  0,  0,  0},  //q7
    								{-1, -1, -1, -1,  9},  //q8
    								{-1, -1, -1, -1,  9}}; //q9

//EDIT 2: Problema corrigido apenas por inserir um novo array na matriz, "q7", com todos os valores 0.
//O porquê eu não sei hahahaha ainda estou em dúvida! Se alguém souber responder, agradeço!

#Estou fazendo um trabalho da faculdade, em que foi pedido um AFD para reconhecimento de constantes reais com exponenciação, e acabei de concluí-lo, porém estou #com um erro totalmente sem sentido, que ainda não consegui compreender o que é.

 

#A palavra que estou usando como teste demonstra o erro, segundo a tabela de transições, quando eu chego no estado q9 eu não posso mais sair dele (e isso está explícito #na matriz que eu declarei), porém de alguma forma ela está voltando para q5, o que possibilita inserir um E após os dígitos.


#Preciso da resposta urgente, quem puder me ajudar agradeço!

 

Problema acima corrigido, agora preciso saber o porquê de essa alteração ter resolvido..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz aqui um teste de mesa com o que você passou no código e ao chegar no primeiro dígito da palavra ele já não aceita (apesar de seguir em frente) porque o novo valor de e corresponde a um dos estados finais. Então a única alteração que fiz no código foi inserir um break no if:

 

 if (testePosicao(e, estadoFinal)) {
       printf(" | Estado Final");
       break;
  }



-> Não esqueça que existe um loop lendo a palavra. Para uma palavra válida o estado final corresponde ao final da palavra (último caractere lido, a princípio... não me parece que você está trabalhando com transições "vazias") então isso vai corresponder ao final do loop (a condição do for vai ser falsa e o loop, interrompido). Mas para uma palavra inválida, cujo estado final pode estar já no início da palavra, esse loop precisa ser interrompido "no braço".

-> Altere aquele sizeof no loop. O sizeof te dá o tamanho do array em *bytes*. Se você precisa do tamanho como quantidade de elementos presentes no array, precisa dividir o tamanho em bytes do array pelo tamanho em bytes do tipo do array (sizeof(estadoFinal)/sizeof(int))

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 2017-6-21 at 12:40, _Isis_ disse:

->Altere aquele sizeof no loop. O sizeof te dá o tamanho do array em *bytes*. Se você precisa do tamanho como quantidade de elementos presentes no array, precisa dividir o tamanho em bytes do array pelo tamanho em bytes do tipo do array (sizeof(estadoFinal)/sizeof(int))

Agradeço pela explicação! Não sabia deste detalhe, ou talvez não lembrasse, estou meio enferrujado em C hahaha..

 

Em 2017-6-21 at 12:40, _Isis_ disse:

 Então a única alteração que fiz no código foi inserir um break no if

 

-> Não esqueça que existe um loop lendo a palavra. Para uma palavra válida o estado final corresponde ao final da palavra (último caractere lido, a princípio... não me parece que você está trabalhando com transições "vazias") então isso vai corresponder ao final do loop (a condição do for vai ser falsa e o loop, interrompido). Mas para uma palavra inválida, cujo estado final pode estar já no início da palavra, esse loop precisa ser interrompido "no braço".

Agora, um pequeno adendo aqui, segundo o AFD pelo problema proposto, a palavra pode tanto sair de alguns estados finais, quanto retornar a eles, o importante é que o último caractere lido pelo mesmo seja um estado final, portanto poderia chegar a um estado final no meio da palavra e ir para um estado não-final e voltar a assumir um estado final novamente ao fim da palavra.

 

Perceba (pela matriz) que a palavra pode transitar do estado q3 (final) para o estado q6 (não final), e deste para o q9 (final novamente), e ser aceita (válida). Apenas invertendo a ordem do que você escreveu "Para uma palavra válida, o final da palavra corresponde a um estado final".

 

Não sei se você fez a alteração apenas por teste, mas a ideia aqui é justamente não ter um break.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como que ficou teu autômato no papel? Tava tentando lembrar como era a gramática do C p/ constante com exponenciação, mas não achei o documento técnico.
https://goo.gl/photos/9YdLNgkxCAXfEXdN7

(Faltou a transição do q0 p/ q6 caso você informe qq coisa diferente de +,- ou dígito)
Entenda o asterisco como "qualquer coisa que não tenha uma transição especificada".

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, _Isis_ disse:

Como que ficou teu autômato no papel? Tava tentando lembrar como era a gramática do C p/ constante com exponenciação, mas não achei o documento técnico.
https://goo.gl/photos/9YdLNgkxCAXfEXdN7

(Faltou a transição do q0 p/ q6 caso você informe qq coisa diferente de +,- ou dígito)
Entenda o asterisco como "qualquer coisa que não tenha uma transição especificada".

 

Segue o diagrama de transições do AFD

 

ub_VgH2_QkmcITBx3Bm1eQ.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso te ajuda? Não tentei simplificar o autômato.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
const int ESTADOS_FINAIS[] = {6,8,9};
const int ESTADOS_ERRO[] = {9};
const int AFD[11][6] = { // + , - , . , digito , 'E', *
                        {  1 , 1 , 9 ,   2    ,  9 , 9 }, // q0
                        {  9 , 9 , 9 ,   2    ,  9 , 9 }, // q1
                        {  9 , 9 , 3 ,   2    ,  5 , 9 }, // q2
                        {  9 , 9 , 9 ,   4    ,  9 , 9 }, // q3
                        {  9 , 9 , 9 ,   4    ,  5 , 9 }, // q4
                        { 10 ,10 , 9 ,   6    ,  9 , 9 }, // q5
                        {  9 , 9 , 7 ,   6    ,  9 , 9 }, // q6
                        {  9 , 9 , 9 ,   8    ,  9 , 9 }, // q7
                        {  9 , 9 , 9 ,   8    ,  9 , 9 }, // q8
                        {  9 , 9 , 9 ,   9    ,  9 , 9 }, // q9
                        {  9 , 9 , 9 ,   6    ,  9 , 9 }  // q10
                      };
                    
int indexOf(const int * arr, int size, int element) {
  int i;
  for(i=0; i<size && element != arr[i]; i++);
  return (i >= size)? -1 : i;
}

int isErro(int estado) {
  return (indexOf(ESTADOS_ERRO, sizeof(ESTADOS_ERRO)/sizeof(int), estado) != -1);
}

int isFinal(int estado) {
  return (indexOf(ESTADOS_FINAIS, sizeof(ESTADOS_FINAIS)/sizeof(int), estado) != -1);
}

int localizar_estado(char c, int estado_atual) {
  int proximo_estado = 9; // define o estado de erro como padrão.
  
  if (c == '+') {
    proximo_estado = AFD[estado_atual][0];
  } else if (c == '-') {
    proximo_estado = AFD[estado_atual][1];
  } else if (c == '.') {
    proximo_estado = AFD[estado_atual][2];
  } else if (isdigit(c)) {
    proximo_estado = AFD[estado_atual][3];
  } else if (c == 'e') {
    proximo_estado = AFD[estado_atual][4];
  } else {
    proximo_estado = AFD[estado_atual][5];
  }
  return proximo_estado;
}

int main(void) {
  const char * palavra = "+3.389E-10.8";
  int estado_atual = 0;
  int i;
  
  for(i = 0; i < strlen(palavra) && !isErro(estado_atual); i++) {
    printf("-- Estado atual: %d --\n", estado_atual);
    printf("Processando caractere: %c\n", palavra[i]);
    estado_atual = localizar_estado(tolower(palavra[i]), estado_atual);
  }
  
  if (i >= strlen(palavra) && !isFinal(estado_atual)) {
    printf("Palavra \t%s\t não aceita.", palavra);
  } else {
  
    if (isFinal(estado_atual)) {
      printf("Palavra \t %s \t %saceita.\n", palavra, isErro(estado_atual)? "não ":"");
    } else {
      printf("Palavra \t %s \t não aceita.\n");
    }
    
  }
  return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
37 minutos atrás, _Isis_ disse:

Isso te ajuda? Não tentei simplificar o autômato.


#include <stdio.h>
#include <string.h>
#include <ctype.h>
const int ESTADOS_FINAIS[] = {6,8,9};
const int ESTADOS_ERRO[] = {9};
const int AFD[11][6] = { // + , - , . , digito , 'E', *
                        {  1 , 1 , 9 ,   2    ,  9 , 9 }, // q0
                        {  9 , 9 , 9 ,   2    ,  9 , 9 }, // q1
                        {  9 , 9 , 3 ,   2    ,  5 , 9 }, // q2
                        {  9 , 9 , 9 ,   4    ,  9 , 9 }, // q3
                        {  9 , 9 , 9 ,   4    ,  5 , 9 }, // q4
                        { 10 ,10 , 9 ,   6    ,  9 , 9 }, // q5
                        {  9 , 9 , 7 ,   6    ,  9 , 9 }, // q6
                        {  9 , 9 , 9 ,   8    ,  9 , 9 }, // q7
                        {  9 , 9 , 9 ,   8    ,  9 , 9 }, // q8
                        {  9 , 9 , 9 ,   9    ,  9 , 9 }, // q9
                        {  9 , 9 , 9 ,   6    ,  9 , 9 }  // q10
                      };
                    
int indexOf(const int * arr, int size, int element) {
  int i;
  for(i=0; i<size && element != arr[i]; i++);
  return (i >= size)? -1 : i;
}

int isErro(int estado) {
  return (indexOf(ESTADOS_ERRO, sizeof(ESTADOS_ERRO)/sizeof(int), estado) != -1);
}

int isFinal(int estado) {
  return (indexOf(ESTADOS_FINAIS, sizeof(ESTADOS_FINAIS)/sizeof(int), estado) != -1);
}

int localizar_estado(char c, int estado_atual) {
  int proximo_estado = 9; // define o estado de erro como padrão.
  
  if (c == '+') {
    proximo_estado = AFD[estado_atual][0];
  } else if (c == '-') {
    proximo_estado = AFD[estado_atual][1];
  } else if (c == '.') {
    proximo_estado = AFD[estado_atual][2];
  } else if (isdigit(c)) {
    proximo_estado = AFD[estado_atual][3];
  } else if (c == 'e') {
    proximo_estado = AFD[estado_atual][4];
  } else {
    proximo_estado = AFD[estado_atual][5];
  }
  return proximo_estado;
}

int main(void) {
  const char * palavra = "+3.389E-10.8";
  int estado_atual = 0;
  int i;
  
  for(i = 0; i < strlen(palavra) && !isErro(estado_atual); i++) {
    printf("-- Estado atual: %d --\n", estado_atual);
    printf("Processando caractere: %c\n", palavra[i]);
    estado_atual = localizar_estado(tolower(palavra[i]), estado_atual);
  }
  
  if (i >= strlen(palavra) && !isFinal(estado_atual)) {
    printf("Palavra \t%s\t não aceita.", palavra);
  } else {
  
    if (isFinal(estado_atual)) {
      printf("Palavra \t %s \t %saceita.\n", palavra, isErro(estado_atual)? "não ":"");
    } else {
      printf("Palavra \t %s \t não aceita.\n");
    }
    
  }
  return 0;
}

 

Ajuda sim, muito obrigado!

 

Mas no caso, já solucionei o problema, conforme escrevi no post original, o único que ficou faltando foi a inserção do q7, a qual realizei depois, e solucionou o problema de ele (de alguma forma que eu não compreendi) estar no estado q9 e ir para o q5 (o que seria impossível, pois q9 não tem transição para q5)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Sim, mas se você montar o autômato seguindo a tua tabela de transição, ele não vai fazer sentido nenhum porque a princípio, q7 é um estado inalcançável. Eu alterei os estados e a matriz de transição (ao invés de pular o q7 e ter somente o q8 e q9, mudei p/ q7 e q8) e alterei a condição do for do testeFinal (for(i = 0; i <= sizeof(estadoFinal)/sizeof(int) ; i++)).
Ele ainda processa o 'E' que está no expoente, mas atinge o -1 e recusa. O comportamento está certo. 
Agora, se você quer um autômato LR(1) a coisa vai ser mais complicada.

 


int estadoFinal[] = {3, 5, 8};
    int estadoIncial = 0;
    int i;
                                    //+ //- //. //E //Digito
   int tabelaTransicoes[9][5] =    {{1,  1,  2, -1,  3},  //q0
                                                 {-1, -1,  2, -1,  3},  //q1
                                                 {-1, -1, -1, -1,  5},  //q2
                                                 {-1, -1,  4,  6,  3},  //q3
                                                 {-1, -1, -1, -1,  5},  //q4
                                                 {-1, -1, -1,  6,  5},  //q5
                                                 { 7,  7, -1, -1,  8},  //q6
                                                 {-1, -1, -1, -1,  8},  //q7
                                                 {-1, -1, -1, -1,  8}}; //q8

 

Citar
Estado Inicial q0                                                                                                                                                                          
Caractere lido: 3                                                                                                                                                                          
   Transicao para q3 | Estado Final                                                                                                                                                        
Caractere lido: E                                                                                                                                                                          
   Transicao para q6 | Estado Nao-Final                                                                                                                                                    
Caractere lido: 2                                                                                                                                                                          
   Transicao para q8 | Estado Final                                                                                                                                                        
Caractere lido: E                                                                                                                                                                          
   Transicao invalida: Erro de leitura!                                                                                                                                                    
                                                                                                                                                                                           
A palavra 3E2E foi recusada pelo AFD!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por biza
      Ola
      Estou  a construir um datalogger em código C.Desta forma necessito passar os dados entre ficheiros. O meu problema está na inclusão de algumas variáveis no topo de um arquivo .txt onde os dados são salvos. Variáveis como tempo de data e hora, id do dispositivo e muito mais... Para isso preciso de ajuda, gostaria que os dados estivessem disponíveis para todos os arquivos, até aí é fácil, basta incluir a variável como extern, no arquivos *.h e incluí-lo em todos os outros que você deseja que a variável esteja disponível. mas como posso fazer para ter acesso a ele dentro do array que preciso?
      Exemplo: main.c
      #include "main.h" char dateTimeFormat[24]; void main(void){ dateTimeFormat = "22-02-22 13:23:04"; } main.h
      extern char dateTimeFormat[24];  
      teste.c
       
      #include "main.h" extern char dateTimeFormat[24]; /*Header .txt file initialization*/ volatile char headerFile[] ="\n\n" "# HEALT MONITORING SYSTEM \r\n" "# DEVELOPED: BIZA \r\n" "# VERSION: B \r\n" "# DATATIMECAPTURE:"+dateTimeFormat+ "\r\n" "# SAMPLINGFREQUENCY: 500 \r\n" "# SAMPLECHANNELS: 1 2 3 4 5 6 7 8 \r\n" "# SAMPLINGRESULUTION: 24 \r\n" "# IDDEVICE: HEALTHY \r\n" "# ENDOFHEADER  
      Como posso incluir a variável "dateTimeFormat" dentro do headerFile como descrevi acima?
       
    • Por thiago_tw
      eu to com uma tarefa que preciso de ajuda, já tentei alguns algoritmos que achei por aqui mas nunca dá certo, mandei a imagem do que é para ser feito, agradecido se me ajudarem

    • Por oromotoceu
      #include <stdio.h>
      #include <stdlib.h>
      #define MAXTAM 1000
      int Frente, Tras, Lista[MAXTAM];
      void Lista_Construtor(){
      Frente=0;
      Tras=-1;
      }
      int Lista_Vazia(){
      if(Tras==-1)
      return 1;
      else
      return 0;
      }
      int Lista_Cheia(){
      if(Tras==MAXTAM-1)
      return 1;
      else
      return 0;
      }
      int Lista_Tamanho(){
      return Tras+1;
      }
      int Lista_Inserir_Inicio(int Valor){
      if(Lista_Cheia()){
      return 0;
      }else{
      /*se quero inserir na posição 0,
      vou deslocar todos os elementos para frente*/
      for(int i=Tras+1;i>Frente;i--){
      Lista=Lista[i-1];
      }
      Lista[Frente]=Valor;
      Tras++;
      return 1;
        }
      }
      int Lista_Inserir_Fim(int Valor){
      if(Lista_Cheia()){
      return 0;
      }else{
      Tras++;
      Lista[Tras]=Valor;
      return 1;
        }
      }
      int Lista_Inserir(int Valor, int Posicao){
      if(Lista_Cheia()){
      return 0;
      }else{
      /* Para verificar se a posição
      está no meio da lista */
      if(Posicao>Frente && Posicao<Tras){
      for(int i=Tras+1;i>Posicao;i--){
      Lista=Lista[i-1];
      }
      Lista[Posicao]=Valor;
      Tras++;
      return 1;
      }else{ 
      return 0;
         }
        }
      }
      int Lista_Remover_Inicio(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor =Lista[Frente];
      for(int i=Frente;i<Tras;i++){
      Lista=Lista[i+1];
         }
      Tras--;
        }
      }
      int Lista_Remover_Fim(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Tras];
      Tras--;
      return 1;
        }
      }
      int Lista_Remover(int *Valor, int Posicao){
      if(Lista_Vazia()){
      return 0;
      }else{
      if(Posicao>Frente && Posicao<Tras){
      *Valor=Lista[Posicao];
      for(int i=Posicao;i<Tras;i++){
      Lista=Lista[i+1];
      }
      Tras--;
      return 1;
         }
        }
      }
      int Lista_Get_toda(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Frente];
      return 1;
        }
      }
      int Lista_Get_inicio(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Frente];
      return 1;
        }
      }
      int Lista_Get_Fim(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Tras];
      return 1;
        }
      }
      int Lista_Busca_Valor(int Valor, int *Posicao){
      int i;
      if(Lista_Vazia()){
      return 0;
      }else{
      for(i=Frente;i<Tras;i++){
      if(Lista==Valor){
      break;
        }
      }
      if(i==Tras){
      return 0;
      }else{
      *Posicao=i; 
      return 1;
         }
        }
      }
      int Lista_Busca_Posicao(int *Valor, int Posicao){
      if(Lista_Vazia()){
      return 0;
      }else{
      if(Posicao>Frente && Posicao<Tras){
      *Valor=Lista[Posicao];
      return 1;
      }else{
      return 0;
         }
        }
      }
      int main(){
      int i,Valor,op=0,pos;
      Lista_Construtor();
      while(op!=12){
      printf("*** Menu de opções ***\n");
      printf("1-Inserir início\n");
      printf("2-Inserir fim\n");
      printf("3-Inserir meio\n");
      printf("4-Excluir início\n");
      printf("5-Excluir fim\n");
      printf("6-Excluir meio\n");
      printf("7-Mostrar toda lista\n");
      printf("8-Mostrar primeiro item da lista\n");
      printf("9-Mostrar último item da lista\n");
      printf("10-Mostrar a posição de um item da lista\n");
      printf("11-Mostrar o valor de uma posição\n");
      printf("12-Sair\n");
      printf("Escolha uma opção: ");
      scanf("%d", &op);
      switch(op){
          case 1:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              Lista_Inserir_Inicio(Valor);
              break;
          case 2:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              Lista_Inserir_fim(Valor);
              break;
            case 3:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja inserir: ");
              scanf("%d", &pos);
              Lista_ Inserir_meio(int Valor, pos); 
              break;
            case 4:
              printf("Digite a remoção do início: ");
              scanf("%d", &*Valor);
              Lista_ Excluir_inicio(*Valor); 
              break;
              case 5:
              printf("Digite a remoção do fim: ");
              scanf("%d", &*Valor);
              Lista_ Excluir_fim(*Valor); 
              break;
              case 6:
              printf("Digite a remoção do meio: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja remover: ");
              scanf("%d", &*Posicao);
              Lista_ Excluir_meio(intValor, * pos); 
              break;
               case 7:
              printf("Digite ao a mostrar toda lista: ");
              scanf("%d", &Valor);
              Lista_ mostrar_toda_lista(Valor);
              break;
             case 8:
              printf("Digite ao a mostrar primeiro item da lista: ");
              scanf("%d", &*Valor);
              Lista_ mostrar_primeiro_item_da_lista(*Valor);
              break;
             case 9:
              printf("Digite ao a mostrar último item da lista: ");
              scanf("%d", &*Valor);
              Lista_ mostrar_ultimo_item_da_lista(*Valor);
              break;
              case 10:
              printf("Digite ao a mostrar a posição de um item da lista: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja mostrar na lista: ");
              scanf("%d", &* pos);
              Lista_ mostrar_posicao_de_um_item_da_lista(intValor, *pos);
              break;
              case 11:
              printf("Digite ao a mostrar o valor de uma posição: ");
              scanf("%d", &*Valor
              printf("Digite a posição que deseja mostrar no valor: ");
              scanf("%d", &pos);
              Lista_ mostrar_posicao_de_um_valor_da_lista(int*Valor, pos);
              break;
              case 12:
              default:
              printf("Valor Invalido!\n");
              system("PAUSE");
               }
         }
       return 0;
      }
    • Por oromotoceu
      bom dia pode me ajudar nessa questão por favor
      O programa deverá trabalhar dados de um veículo, onde será armazenado, Nome do proprietário, placa do carro, modelo do carro e preço do carro.
      O programa deve ter as seguintes opções:
      Inserir dados (todos os dados sugeridos no enunciado acima).
      Excluir um Carro específico com a busca pela placa.
      Editar dados de um Carro com a busca pela placa.
      Consultar carro por Placa.
      Exibir todos os dados cadastrados.
      Finalizar programa.
      A opção exibir todos os dados, apresenta tudo que já foi cadastrado e está na memória.
       
    • Por TK_T
      olá sou iniciante consegui fazer um o código de um exercício só que quando eu peço o valor 12ab ele lê como numérica alguém pode me ajudar? 
      Exercício: Leia uma string e diga se a mesma é numérica (na base decimal) ou não.
      Ex.: "123" -> numérica
      "abc" -> não numérica
      "12ab" -> não numérica
      "12.34" -> numérica 
      #include <stdio.h> int main() { char Numero; printf("Digite Algo: "); scanf("%c", &Numero); if(Numero == '1' || Numero == '2' || Numero == '3' || Numero == '4' || Numero == '5' || Numero == '6' || Numero == '7' || Numero == '8' || Numero== '9' || Numero == '0') printf("\tNumérica...\n"); else printf("\tNão Numérica\n"); return 0; }  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.