Ir para conteúdo
Fórum Script Brasil

CPP

Membros
  • Total de itens

    117
  • Registro em

  • Última visita

Tudo que CPP postou

  1. CPP

    Duvidas com Struct

    Não esquenta não...todo mundo tem um começo. O importante é continuar tentando. você viu as correções no código? Abs
  2. CPP

    Duvidas com Struct

    Olá Allan, Tá dificil mesmo de compilar. Primeiro, tentar escrever usando uma identação que facilite inclusive os pedidos de ajuda no forum. Tenta postar seu código entre as tags [ code ] (sem os espaços) ... [ /code ] (sem os espaços) Ainda tem coisa pra você consertar no seu código, principalmente de lógica. Se continuar com dúvidas avisa. Abs /* COMENTARIOS: 0) Sua identação não permitiu ver que chaves e parenteses estão no lugar errado ou faltando 1) Na funcao main você faz codigolivro = mas não usa ela em lugar nenhum 2) Mesma coisa pra variavel area 3) Nas demais funções você usa "registros[...]" mas ela não foi definida em lugar nenhum 4) As variaveis biblioteca também não foi definida 5) Faltou fechar aspas no segundo puts da funcao consultar 6) A funcao consultar não pode retornar um valor porque foi definida como void (não pode usar return 0) 7) A funcao excluir tb não pode ter return 0 ou deve mudar o void por int. */ #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> typedef struct { int Codigo; char Doado; char Obra [50]; char Autor [50]; char Editora [50]; int Paginas; }livros; typedef struct { livros Exatas [500]; livros Humanas [500]; livros Biomedicas [500]; } biblio; //**********funções que serão usadas**********// void cadastrar(int cod, int pos); void consultar(); int relatorio(); int verifica_pos(); int verifica_cod(int cod); int verifica_pos(); void excluir(); //**********inicio programa principal*********// int main () { int opcao=0, posicao, codaux, retorno, areaConhecimento, area,codigoLivro; biblio biblioteca; while (1) { puts ("********* Bliblioteca Municipal *********"); puts ("***************** MENU ******************"); printf("\n\n"); printf("1: Cadastrar\n2: Consultar\n3: Excluir\n4: Encerrar Programa"); scanf("%d", &opcao); system("cls"); switch (opcao) { //CADASTRAR case 1: { puts ("AREA PARA CASTRO"); printf ("Informe Area do conhecimento para cadastramento do Livro"); printf ("1: Exatas\n2: Humanas\n3: Biomedicas\n"); scanf ("%d", &areaConhecimento); //TESTA AREA DO CONHECIMENTO 1 if (areaConhecimento == 1) { posicao = verifica_pos(); if(posicao != -1 ) { printf ("Informe o código do livro para cadastrar (somente numeros)"); scanf ("%d", &codaux); fflush (stdin); retorno = verifica_cod (codaux); if (retorno == 1) { cadastrar (codaux, posicao); area = biblioteca.Exatas[0].Codigo; } else printf ("\ncodigo já cadastrado"); } } else printf ("não foi possivel realizar cadastro\n"); //TESTA AREA DO CONHECIMENTO 2 if (areaConhecimento == 2) { posicao = verifica_pos(); if(posicao != -1 ) { printf ("Informe o código do livro para cadastrar (somente numeros)"); scanf ("%d", &codaux); fflush (stdin); retorno = verifica_cod (codaux); if (retorno == 1) { cadastrar (codaux, posicao); codigoLivro = biblioteca.Humanas[0].Codigo; } else printf ("\ncodigo já cadastrado"); } } else printf ("não foi possivel realizar cadastro\n"); //TESTA AREA DO CONHECIMENTO 3 if (areaConhecimento == 3) { posicao = verifica_pos(); if(posicao != -1 ) { printf ("Informe o código do livro para cadastrar (somente numeros)"); scanf ("%d", &codaux); fflush (stdin); retorno = verifica_cod (codaux); if (retorno == 1) { cadastrar (codaux, posicao); codigoLivro = biblioteca.Biomedicas[0].Codigo; } else printf ("\ncodigo já cadastrado"); } else printf ("não foi possivel realizar cadastro\n"); } break; } //CONSULTAR case 2: { consultar(); break; } case 3: { excluir (); break; } case 4: { printf ("Programa Encerrado"); getchar(); break; } default: printf ("Opcao Invalida"); break; } } fflush(stdin); getchar(); return 0; //FIM FUNÇÃO MAIN } //FUNÇÃO CADASTRAR void cadastrar (int cod, int pos) { pos = verifica_pos (); registros [pos].cod=cod; printf ("Informe se o livro foi doado (S)ou(N)?\n"); scanf ("%c", &biblioteca.Biomedicas[0].Doado ); printf ("Informe Nome da Obra\n"); scanf ("%s", biblioteca.Biomedicas[0].Obra); printf ("Informe Nome do Autor\n"); scanf ("%s", biblioteca.Biomedicas[0].Autor); printf ("Informe Editora\n"); scanf ("%s", biblioteca.Biomedicas[0].Editora); printf ("Informe Numero de páginas\n"); scanf ("%d", &biblioteca.Biomedicas[0].Paginas); printf ("Cadastro efetuado com Sucesso"); }//FIM FUNÇÃO CADASTRAR //FUNÇÃO CONSULTAR void consultar () { int cont = 0, cod; puts("AREA PARA CONSULTAS"); puts ("Enter com -1 para encerrar a consulta"); printf("Entre com o Codigo"); scanf ("%d", &cod); while (cod != -1) { if (registros [cont].cod == cod) { if (registros [cont].vazio == 1) { printf ("\nLivro doado %s ", registros[cont].Doado); printf ("\nNome Livro %s ", registros[cont].Obra); printf ("\nNome Autor %s ", registros[cont].Autor); printf ("\nNome Editora %s ", registros[cont].Editora); printf ("\nNumero de Paginas %s ", registros[cont].Paginas); printf("\n"); fflush(stdin); getchar(); break; } } cont ++; if (cont > 500) printf ("Codigo não encontrado"); } }//FIM FUNÇÃO CONSULTAR //FUNÇÃO VERIFICA POSIÇÃO int verifica_posicao () { int cont =0; while (cont <=500) { if (registros [cont].vazio == 0) return cont; cont ++; } return (-1); }//FIM FUNÇÃO VERIFICA POSIÇÃO //FUNÇÃO VERIFICA CODIGO int verifica_cod (int cod) { int cont = 0; while (cont <=500) { if (registros [cont].cod == cod) return (0); cont ++; } return (-1); }//FIM DA FUNÇÃO VERIFICA CODIGO //FUNÇÃO EXCLUIR void excluir() { int cod, cont =0; char resp; printf ("Informe o Codido que deseja excluir"); scanf ("%d", &cod); while (cont <=500) { if (registros[cont].cod == cod) if (registros[cont].vazio == 1) { printf ("\nLivro doado %s ", registros[cont].Doado); printf ("\nNome Livro %s ", registros[cont].Obra); printf ("\nNome Autor %s ", registros[cont].Autor); printf ("\nNome Editora %s ", registros[cont].Editora); printf ("\nNumero de Paginas %s ", registros[cont].Paginas); getchar(); printf ("Deseja Realmente Excluir? (s) ou (n)?"); if (resp == 'S' || resp == 's') { registros[cont].vazio = 0; printf ("Exclusao realizada com sucesso"); break; } else if (resp == 'N' || resp == 'n') printf ("Exclusao Cancelada\n"); break; } cont ++; if (cont < 500) printf ("Codigo não encontrado"); } fflush(stdin); getchar(); return; }
  3. Que isso mano. De boa, só espero estar ajudando em alguma coisa. Abs
  4. Isso tem a ver com o que eu mencionei antes. Um array de bytes precisa ser indexado ou usar funções que o tratem corretamente. Tenta uma das opções no if: if(x[posicao].nome[0] == ' ') ou if (strcmp(x[posicao].nomte, "") == 0) ou if (strlen(x[posicao].nome) == 0) Abs
  5. Só pra você entender o que acontece na memoria eu fiz mais algumas modificações. Copio a string "abcdefghijklmnopqrst" para agenda[0].nome. Ai você pode ver que na primeira posição tem [a = 97] e na ultima tem [ = 0]. Aqui [ = 0] representa o final da string. Quando você faz o strcpy(<variavel>, "") ele coloca o "\ 0" na primeira posição indicando que ela termina ali e ignora o resto da memória. Quando uso o memset() passando a quantidade de bytes que eu quero preencher ele limpa toda a memória. A primeira opção atende sua necessidade atual, só estou acrescentando elementos pra você poder manipular a memória do jeito que precisar. Desculpa se as vezes eu complico as coisas. Abs Executa o programa abaixo pra ver as saidas. #include <stdlib.h> #include <stdio.h> #include <mem.h> #include <string.h> typedef struct { char nome[20]; char telefone[14]; }contato; void limpar_agenda(contato x[10]); void limpar_agenda2(contato *x, int items); int main() { contato agenda[10]; strcpy(agenda[0].nome, "abcdefghijklmnopqrst"); int s; printf("\n\nString = %s\n\n", agenda[0].nome); for (s = 0; s <= 20; s++) printf("[%c = %3d] ", agenda[0].nome[s], agenda[0].nome[s]); printf("\n\n"); limpar_agenda(agenda); for (s = 0; s <= 20; s++) printf("[%c = %3d] ", agenda[0].nome[s], agenda[0].nome[s]); printf("\n\n"); limpar_agenda2(&agenda[0], 10); for (s = 0; s <= 20; s++) printf("[%c = %3d] ", agenda[0].nome[s], agenda[0].nome[s]); printf("\n\n"); system("pause"); return 0; } void limpar_agenda(contato x[10]) { for(int posicao=0;posicao<10;posicao++) { strcpy(x[posicao].nome, ""); strcpy(x[posicao].telefone, ""); } printf("\nAgenda Apagada!\n"); } void limpar_agenda2(contato *x, int items) { memset(x, 0, sizeof(contato) * items); printf("\nAgenda Apagada!\n"); }
  6. Olá Fabin, No seu for o uso de x[posicao].nome = ' ' está incorreto, o mesmo vale pra .telefone = ' '. Isso porque um array de bytes pra ser usado assim precisa ser indexado, ou seja, você teria que ter outra variavel pra fazer: for (int a = 0; a < 20; a++) x[posicao].nome[a] = ' '; for (int b = 0; b < 14; b++) x[posicao].telefone[b] = ' '; Mas isso não é muito pratico, então você pode usar o strcpy() pra zerar suas variaveis do tipo array de bytes. strcpy(x[posicao].nome, ""); strcpy(x[posicao].telefone, ""); Também pode usar o memset() pra preencher um conteudo de memória. Eu coloquei as duas opções no seu código. qualquer dúvida fala ai. Abs #include <stdlib.h> #include <stdio.h> #include <mem.h> #include <string.h> typedef struct { char nome[20]; char telefone[14]; }contato; void limpar_agenda(contato x[10]); void limpar_agenda2(contato *x, int items); int main() { contato agenda[10]; limpar_agenda(agenda); limpar_agenda2(&agenda[0], 10); system("pause"); return 0; } void limpar_agenda(contato x[10]) { for(int posicao=0;posicao<10;posicao++) { strcpy(x[posicao].nome, ""); strcpy(x[posicao].telefone, ""); } printf("\nAgenda Apagada!\n"); } void limpar_agenda2(contato *x, int items) { memset(x, 0, sizeof(contato) * items); printf("\nAgenda Apagada!\n"); }
  7. CPP

    Como funciona esse código?

    Olá Mako, A função strtol converte um numero em formato texto para um "long". Ela interrompe a conversão quando encontra um caracter que não corresponda aos padrões esperados para a conversão. Por exemplo, se o radix for 16 (conversão para hexadecimal) você pode ter um letras de A a F e x (opcional), mas se o a base (radix) for 10 , só podem haver numeros, sinais (+ ou -). Em nao_inteiro você tem a posição onde a funcao encerrou a conversão, por exemplo. String nao_inteiro "123456\ 0" \ 0 "123a45" a "b45778" b "123,45" , Então, se você executa strol e o conteudo de nao_inteiro for diferente de "\ 0" significa que havia um caracter não valido na sua string. Mas, considere que "1B45" é uma string valida na base 16 e por isso o nao_inteiro vai estar como "\ 0" no final. Espero ter ajudado. Abs
  8. CPP

    DLL e PSIM

    No proprio site da PSIM tem alguns demos view basicos, mas bem legais. http://www.psim-europe.com/PSIMVideoTutori...s3.html?movie=7
  9. Olá Raoni, Fazer "i <= strlen(normal)" copiou o terminador pra variavel "invertida". Isso resolveu seu problema, mas é bom você lembrar que as funções que tratam strings identificam o final delas pelo terminador (barra zero). Exemplo: (estou colocando como /0 pra poder aparecer no texto, mas o correto é a barra invertida) |F|r|a|s|e| |t|e|s|t|e| |2|/0| A função strlen considera o fim da string quando encontra o /0. Da mesma forma a função função printf exibe os caracteres na string até encontrar o terminador. Abs
  10. Olá você tá esquecendo de por o terminador '' (barra zero) no final da string invertida. Abs
  11. Qual ambiente e compilador você tá usando? Fiz um teste e não ocorreu o problema que você mencionou.
  12. Olá. A principio não tem nada errado, mas você pode incrementar um pouco mais o código pra evitar esse erro. Abs while (!feof(fp)) { if (fgets (ch, 50, fp) != NULL) //LEITURA DO ARQUIVO COM fgets() printf ("%s", ch); }
  13. Olá Diego, Existem várias maneiras de fazer isso em C, vou sugerir duas. Se tiver problemas é só falar. Abs // OPCAO 1 int p = 0;// guarda a posicao inicial da palavra for(int i = 0; i < strlen(stringao); i++) { if (stringao[i] == ' ') { // ACHEI UMA PALAVRA - FAZ O QUE FOR PRECISO p = i + 1; // posicao inicial da possivel proxima palavra } } // OPCAO 2 char *pInicial = stringao; char *pFinal; do { pFinal = strchr(stringao, ' '); if (pFinal != NULL) { // ACHEI UMA PALAVRA - FAZ O QUE FOR PRECISO pInicial = pFinal + 1; // posicao inicial da possivel proxima palavra } } while (pFinal != NULL);
  14. A sequencia de termino sempre tem a diferenca de 1 entre os numeros. Como em 1,2 e 3 já 10, 20 e 30 a diferenca entre os numeros digitados é de 10 e por isso o programa não termina. Se você digitar 10,11 e 12 ele termina. Abs
  15. Olá Allan. O enunciado do exercicio não condiz com o que você disse. "A leitura de valores deve parar assim que o usuário digitar 3 números em seqüência (por ex. 3, 4, 5)" Ou seja, se você digitar 3 numeros em sequencia com diferenca de 1 entre eles o programa deve terminar. Como eu havia dito antes, qualquer sequencia nessa condição, por exemplo: Sequencias que terminal o programa: 1,2,3 5,6,7 10, 11,12 89, 90,91 Etc. você tem que digitar um numero e pressionar <ENTER> pra que seja pedido o proximo. Se você digitar todos os numeros de uma vez e pressionar <ENTER> vai dar erro mesmo. Tenta ai mais uma vez. Qualquer coisa to a disposição. Abs
  16. Olá David Você ordena as notas na funcao main mas tem a matriz desordenada na funcao calculomedia. O ideal é passar a matriz ordenada para a funcao. Se tiver duvidas avisa ai. Abs #include <iostream> #include <cstdlib> #include <cmath> #include <conio.h> using namespace std; //Calcula a media Aritmetica float CalculoMedia (float nota[20], int n) { float soma = 0.0; for (int i=0; i<20; i++) { soma = soma + nota[i]; } return soma / n; } // Inicia a funcao de Ordenacao das notas int main() { float x; int i; bool parar = false; //x -> variavel auxiliar para troca de valores float average; float nota[20] = {3.5, 8.9, 9.0, 9.56, 8.78, 7.45, 5.9, 9.9, 9.98, 6.3, 4.3, 2.3, 5.0, 8.2, 6.50, 7.0, 6.98, 8.3, 9.1, 2.3}; int n = 20; float media; while (parar == false) { parar = true; for (i=0; i<19; i++) { if (nota[i] > nota[i+1]) { parar = false; x = nota[i]; nota[i] = nota[i+1]; nota[i+1] = x; } } } // Exibicao das notas cout << "Notas ordenadas \n"; for (i=0; i<20; i++) { cout << "\n "<< nota[i]; } cout << "\n\n Maior Nota: " << nota[19] << "\n"; cout << " Menor nota: " << nota[0] << "\n"; average = CalculoMedia(nota, n); cout<< " Media das notas:" << average <<"\n"; getch(); }
  17. Olá Allan, Seu programa nem sequer compila porque não existe while do e sim do while. O conceito de sequencia desejada para termino do seu programa não se restringe a 3,4 e 5, mas qualquer sequencia, tipo 100, 101, 102 ou 77,78,79 e etc. Se estive correto o laço while(num<10) iria terminar o processo independente de ter sido digitado uma sequencia progressiva ou não, e não era isso que o enunciado pedia. Bons estudos, mas se realmente interessar, foca um pouco mais no estudo de logica. Abs #include <stdio.h> void main(void) { int num1, num2, num3; int faca = 1; while (faca == 1) { printf("Digite o primeiro numero: "); scanf("%d", &num1); printf("Digite o segundo numero: "); scanf("%d", &num2); printf("Digite o terceiro numero: "); scanf("%d", &num3); printf("Digitados: %d %d %d\n", num1, num2, num3); if ((num2 - num1) == 1 && (num3 - num2) == 1) faca = 0; } printf("Sequencia de termino digitada\n"); }
  18. CPP

    Ajuda!Mplab

    Olá igorh721, Não dá pra ver direito o ID dos pinos do uC, mas seu código tem umas sintaxes estranhas, pelo menos eu não conheço. Apesar disso vou tentar ajustar algumas coisas no seu código ok. Se você tiver interesse, esse outro forum é mais especializado em programação de uC. http://www.forumnow.com.br/vip/mensagens.a...;tópico=3005345 Abs #include<18F4520.h> #use delay(clock=20000000) // não CONHECO A DIRETIVA "use" #fuses HS,NOWDT,NOMCLR,LVP,NOBROWNOUT // NÃO CONHECO A DIRETIVA "fuses" // VOCE DEFINE s1, s2 E s3 MAS NÃO USA EM LUGAR NENHUM #define s1 input(pin_a0) #define s2 input(pin_a1) #define s3 input(pin_a2) char codigo (int valor) { char num [10]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67}; return num [valor]; } void unidade (int valor) { output_d(codigo(valor)); output_high(pin_d3); } void main() { int x=0 while (1) { if (input(pin_a0)==1) { for (x = 0; x < 10; x++) { // ACREDITO QUE AS FUNCOES output_d, output_high E output_low DEVEM ENVIAR O SINAL AO DISPOSITIVO DESEJADO CERTO? unidade(x); delay_ms(500); output_low(pin_c0); } } }
  19. Sou um estudante atrasado, ainda correndo atrás do diploma. Mas sou fã de C/C++ e estudei muito por conta. Hoje desenvolvo aplicações embarcadas para equipamentos tipo POS (terminais que usam cartões de debito e credito em lojas). Ainda to aprendendo muita coisa e por isso gosto de participar do forum. Se tiver mais alguma dúvida e eu puder ajudar é só falar mano. Abs
  20. Olá Marcelo. Os "?" ficam em qualquer posição dentro do titulo ou no final?
  21. CPP

    FUNÇAO VOID C++

    Olá AlanSilva, Estou postando uma estrutura pra você ter idéia de como desenvolver seu sistema. Se precisar de ajuda é só falar. Abs #include<iostream.h> #include<conio.h> #include<stdio.h> using namespace std; // variaveis globais int cpf[100],tel[100],numpass[100],hor[100],numpol[100]; string nome[100],end[100]; char opc; int indiceLista; // Incrementa a cada inclusao de passageiros // prototipos de funções void Cadastrar(void); void Pesquisar(void); void Listar(void); void Excluir(void); // Funcao main ---------------------------------------- int main() { int opc = 9; // um valor qualquer pra iniciar indiceLista = 0; while(opc) { clrscr(); // limpa tela cout<< "\n\t _______BOM VOO SOFTWARE DE GERENCIAMENTO DE VOO________"; cout<< "\n\t _______________________VER 1.0_________________________"; cout<< "\n\t _______________________________________________________"; cout<< "\n\t|(1) CADASTRAR PASSAGEIROS DO VOO |"; cout<< "\n\t|(2) PESQUISAR OS PASSAGEIROS NA LISTA DE VOO |"; cout<< "\n\t|(3) LISTAR OS PASSAGEIROS DO VOO |"; cout<< "\n\t|(4) EXCLUIR PASSAGEIRO DO VOO |"; cout<< "\n\t|(0) ENCERRAR O PROGRAMA |"; cout<< "\n\t|__________________B.V Software V 1.0___________________|"; cout<<"\n\n\tOpcao: "; cin>>opc; if (opc == 1) Cadastrar(); else if(opc == 2) Pesquisar(); else if (opc == 3) Listar(); else if (opc == 4) Excluir(); } return 0; } //-------------------------------------------------------------- void Cadastrar(void) { // incluir o codigo para cadastro aqui } //-------------------------------------------------------------- void Pesquisar(void) { // incluir o codigo de pesquisa aqui } //-------------------------------------------------------------- void Listar(void) { // incluir o codigo listar aqui } //-------------------------------------------------------------- void Excluir(void) { // incluir o codigo excluir aqui }
  22. Beleza. Vamos lá então. (Parte II) -vi que para você preencher a matriz usou apenas 2 ifs, qual foi meu erro em usar tantos? Se voce observar os pontos abaixo vai perceber que a linha 1A e a 1B fazem exatamente a mesma coisa, a unica diferenca é a condição pra ela ser realizada. Então dá pra juntas as duas condições num unico teste e realizar o código associado se for verdadeiro. Para as linhas 2A e 2B a lógica é a mesma, já que elas se repetem dependendo da condicao eu otimizei o teste considerando que se "l" for maior que zero e a "c" for igual a 0 ou "c" for igual a nove, então executa o if. Você deve ter percebido que eu coloco ' ' em todas as posições incondicionalmente antes dos if né. Fez isso só pra não ter mais uma condição (mais um if) dentro do for. Essa parte de logica você aperfeiçoa com o tempo e muita pratica. O importante mesmo agora é chegar no resultado que você deseja dentro do seu programa. char imprime_matriz_borda() //função para imprimir borda com O na matriz { int linha=20, coluna=10, l, c; for(l=0;l<linha;l++){//for para imprimir linhas e colunas com O maisculo de acor com exercicio for(c=0;c<coluna;c++){ if(l==0){ (1A) -----------> brinq[l][c]='O';//preenche coluna superior com O }else{ if(l>=1 && c==0){ (2A) -----------> brinq[l][c]='O'; //preenche primeira coluna lateral com O }else{ if(l>=0 && c==9){ (2B) -----------> brinq[l][c]='O';//preenche ultima coluna lateral com O }else{ if(l==19){ (1B) -----------> brinq[l][c]='O';//preenche ultima linha com O }else{ brinq[l][c]=' '; } } } } printf("%c\t",brinq[l][c]); // imprime matriz completa na tela } } return brinq[linha][coluna]; } -unsigned char escolha, me explique o maximo que puder rsrsrs? e o kbhit() também O kbhit() eu já comentei certo? já o "unsigned char escolha" eu criei pra obter a tecla digitada pelo usuario e retornada pela funcao getch(). A funcao getch() lê um byte do teclado e não espera a digitação do <ENTER>. Usei ela ao invés de scanf() justamente pra tirar a necessidade do usuario ter que digitar um numero e ainda pressionar <ENTER>. escolha = getch(). A funcao lê a tecla pressionada e armazena ela na varievel indicada. -vi que voce criou uma variavel opcao. E tem opcao que é um int e voce fez opcao = escolha - '' apesar de ter o comnetario não entendi nada me explicque ai int opcao já existia (voce criou) Eu faço opcao = escolha (variavel que armazena a tecla pressionada pelo usuario) - '0'; O "escolha - '0'" é só pra converter o valor ASCII da tecla para o tipo "int". Tem uma logica envolvida ai, mas depois você me pergunta novamente ok. -Na parte do if (opcao==2 || opcao==4 || opcao==6 || opcao==8) o que faz o imprime=1 e vi é que la que você apaga a posição anterior me explique essa parte do if por completo. Nessa parte eu testo se a tecla digitada pelo usuario corresponde a alguma opcao que precisa exibir a tela novamente. Se sim eu coloco imprime em 1 pra o if ser executado na proxima passagem do laço while. E como eu sei que o "+" vai ser colocado na nova posicao já limpo a anterior. Duvidas? É só falar. Abs
  23. Olá Luciano. Que tipo de personalização você quer?
  24. Se ainda precisar de ajuda segue o codigo com uma sugestão. Abs #ifndef _PilhaEnc_H #define _PilhaEnc_H #include <stdexcept> using std::logic_error; namespace ED { template <typename Tipo> class PilhaEnc { public: PilhaEnc(); ~PilhaEnc(); // Métodos principais void empilha(const Tipo &elem) throw (logic_error); Tipo desempilha() throw (logic_error); // Métodos auxiliares bool vazia(); int tamanho(); private: struct Celula { Tipo el; Celula *prox; }; Celula *topo; int nelem; }; // Construtor template <typename Tipo> PilhaEnc<Tipo>::PilhaEnc() { topo = NULL; nelem = 0; } // Destrutor template <typename Tipo> PilhaEnc<Tipo>::~PilhaEnc() { Celula *aux; while (topo) { aux = topo; topo = topo->prox; delete aux; } } // Empilha template <typename Tipo> void PilhaEnc<Tipo>::empilha(const Tipo &el) throw (logic_error) { Celula *nova = new Celula; if (nova == NULL) throw logic_error("Falta memoria\n"); nova->el = el; nova->prox = topo; topo = nova; nelem++; } // Desempilha template <typename Tipo> Tipo PilhaEnc<Tipo>::desempilha() throw (logic_error) { if (nelem == 0) throw logic_error("Pilha vazia\n"); Tipo ret = topo->el; Celula *aux = topo; topo = topo->prox; delete aux; nelem--; return(ret); } // Métodos auxiliares template <typename Tipo> bool PilhaEnc<Tipo>::vazia() { return(nelem == 0); } template <typename Tipo> int PilhaEnc<Tipo>::tamanho() { return(nelem); } } // end namespace #endif #include <stdio.h> using namespace ED; void main(void) { PilhaEnc <char> c; char Abre = 1; char Fecha = -1; char expressao[100]; char *teste[] = {"d^{[(a+B ) * c] * [c*(a+d) ^(d+e)]}", "d^{[(a+B ) * c] * c*(a+d) ^(d+e)]}"}; for (int n = 0; n < 2; n++) { strcpy(expressao, teste[n]); for (int x = 0; expressao[x]; x++) { if (expressao[x] == '(' || expressao[x] == '{' || expressao[x] == '[') c.empilha(Abre); if (expressao[x] == ')' || expressao[x] == '}' || expressao[x] == ']') c.empilha(Fecha); } char check = 0; while (c.tamanho() > 0) { check += c.desempilha(); } if (check) printf("Expressao: %s desbalanceada...\n", expressao); else printf ("Expressao: %s Ok...\n", expressao); } }
  25. CPP

    [AJUDA] Controle de fluxo

    Beleza. Se precisar de mais alguma coisa posta ai ou me procura no MSN. Abs
×
×
  • Criar Novo...