Advertisement
Guest User

Untitled

a guest
Sep 14th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.65 KB | None | 0 0
  1. /*  Primeira etapa: todas as sequências de não-vogais incluindo o espaço em branco e os caracteres de pontuação são invertidas.
  2.     Segunda etapa: a mensagem inteira resultante é invertida dando origem à mensagem codificada.
  3.     Por exemplo, a mensagem original: PROBLEMAS HIPER-INTERESSANTES.
  4.     Passa a ser: RPOLBEMAH SIPE-RIRNERESSATNE.S
  5.     Finalmente sendo codificada como: S.ENTASSERENTIR-EPIS HAMEBLOPR
  6.     Escreva um algoritmo que decodifique mensagens assim codificadas. Use o template no site para a aula de 30/05.
  7. */
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <ctype.h>
  13.  
  14. struct lista{
  15.    int info;
  16.    struct lista* prox;
  17. };
  18. typedef struct lista Lista;
  19.  
  20. struct pilha{
  21.    Lista* prim; //aponta para o topo da pilha  
  22. };
  23.  
  24. typedef struct pilha Pilha;
  25.  
  26.  
  27. //função que cria pilha: inicializa a lista como vazia
  28.  
  29.  
  30. Pilha* pilha_cria(void)
  31. {
  32.   Pilha* p = (Pilha*) malloc(sizeof(Pilha));
  33.   p -> prim = NULL;
  34.   return p;
  35. }
  36.  
  37. // Inserindo novo elemento n no início da lista
  38.  
  39. void pilha_push(Pilha* p, int v)
  40. {
  41.   Lista* n = (Lista*) malloc(sizeof(Lista));
  42.   n->info = v;
  43.   n->prox = p->prim;
  44.   p->prim = n;
  45. }
  46.  
  47. //retirando o elemento do início da lista
  48. int pilha_vazia (Pilha* p)
  49. {
  50. return (p->prim==NULL);
  51. }
  52.  
  53. int pilha_pop(Pilha* p)
  54. {
  55.   Lista* t;
  56.   int v;
  57.   if (pilha_vazia(p)){
  58.    printf("Pilha vazia.");
  59.    system("pause");
  60.   }
  61.   t=p->prim;
  62.   v=t->info;
  63.   p->prim= t->prox;
  64.   free(t);
  65.   return(v);
  66. }
  67.  
  68. // libera a pilha depois de liberar todos os elementos da lista
  69.  
  70. void pilha_libera(Pilha* p)
  71. {
  72.   Lista* q = p -> prim;
  73.   while(q!=NULL){
  74.     Lista* t = q->prox;
  75.     free(q);
  76.     q= t;  
  77.   }
  78.   free(p);
  79. }
  80.  
  81. int main(void){
  82.     char f[50];
  83.     int i=0, nit[50];
  84.     Pilha* p;
  85.     p=pilha_cria();
  86.     Pilha* buff;
  87.     buff=pilha_cria();
  88.     printf("Programa de Codificacao\n");
  89.     printf("Digite a mensagem: ");    
  90.     gets(f);    
  91.     char resultado[50];
  92.     int pos = 0;
  93.     for(i = 0; i < strlen(f); ++i) {
  94.         if(f[i] == 65 || f[i] == 69 || f[i] == 73 ||f[i] == 79 || f[i] == 85) {
  95.             while (pilha_vazia(p) != 1) {                                                                                                                                                                                        
  96.                 resultado[pos] = pilha_pop(p);
  97.                 pos++;
  98.             }
  99.            
  100.             resultado[pos] = f[i];
  101.             pos++;
  102.         }
  103.         else {
  104.             pilha_push(p, f[i]);
  105.         }
  106.     }    
  107.     for (i=0;i<pos;i++) pilha_push(buff,resultado[i]);
  108.     printf("\n\nMensagem codificada: ");
  109.     while (pilha_vazia(buff) != 1) printf("%c", pilha_pop(buff));
  110.     printf("\n\n\n\n");
  111.     system("pause");
  112.     return 0;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement