Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* 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.
- Segunda etapa: a mensagem inteira resultante é invertida dando origem à mensagem codificada.
- Por exemplo, a mensagem original: PROBLEMAS HIPER-INTERESSANTES.
- Passa a ser: RPOLBEMAH SIPE-RIRNERESSATNE.S
- Finalmente sendo codificada como: S.ENTASSERENTIR-EPIS HAMEBLOPR
- Escreva um algoritmo que decodifique mensagens assim codificadas. Use o template no site para a aula de 30/05.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- struct lista{
- int info;
- struct lista* prox;
- };
- typedef struct lista Lista;
- struct pilha{
- Lista* prim; //aponta para o topo da pilha
- };
- typedef struct pilha Pilha;
- //função que cria pilha: inicializa a lista como vazia
- Pilha* pilha_cria(void)
- {
- Pilha* p = (Pilha*) malloc(sizeof(Pilha));
- p -> prim = NULL;
- return p;
- }
- // Inserindo novo elemento n no inÃcio da lista
- void pilha_push(Pilha* p, int v)
- {
- Lista* n = (Lista*) malloc(sizeof(Lista));
- n->info = v;
- n->prox = p->prim;
- p->prim = n;
- }
- //retirando o elemento do inÃcio da lista
- int pilha_vazia (Pilha* p)
- {
- return (p->prim==NULL);
- }
- int pilha_pop(Pilha* p)
- {
- Lista* t;
- int v;
- if (pilha_vazia(p)){
- printf("Pilha vazia.");
- system("pause");
- }
- t=p->prim;
- v=t->info;
- p->prim= t->prox;
- free(t);
- return(v);
- }
- // libera a pilha depois de liberar todos os elementos da lista
- void pilha_libera(Pilha* p)
- {
- Lista* q = p -> prim;
- while(q!=NULL){
- Lista* t = q->prox;
- free(q);
- q= t;
- }
- free(p);
- }
- int main(void){
- char f[50];
- int i=0, nit[50];
- Pilha* p;
- p=pilha_cria();
- Pilha* buff;
- buff=pilha_cria();
- printf("Programa de Codificacao\n");
- printf("Digite a mensagem: ");
- gets(f);
- char resultado[50];
- int pos = 0;
- for(i = 0; i < strlen(f); ++i) {
- if(f[i] == 65 || f[i] == 69 || f[i] == 73 ||f[i] == 79 || f[i] == 85) {
- while (pilha_vazia(p) != 1) {
- resultado[pos] = pilha_pop(p);
- pos++;
- }
- resultado[pos] = f[i];
- pos++;
- }
- else {
- pilha_push(p, f[i]);
- }
- }
- for (i=0;i<pos;i++) pilha_push(buff,resultado[i]);
- printf("\n\nMensagem codificada: ");
- while (pilha_vazia(buff) != 1) printf("%c", pilha_pop(buff));
- printf("\n\n\n\n");
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement