Pessoal é o seguinte leiam atentamente essa questão dada pra mim:
O seguinte método para codificar despachos diplomáticos foi adotado:
primeiro etapa – todas seqüências não vogais incluindo o espaço em branco e os caracteres de pontuação são invertidas.
Segunda etapa – a mensagem inteiro resultante é invertida dando origem à mensagem codificada.
Por exemplo a mensagem original
PROBLEMAS HIPER-INTERESSANTES.
Passa a ser
RPOLBEMAH SIPE-RITNERESSATNE.S
Após a primeira etapa e finalmente é codificada como
S.ENTASSERENTIR-EPIS HAMEBLOPR
Após a Segunda etapa.
O embaixador recebeu uma mensagem codificada como se segue:
S. ETEUQAS RES TRIAR MAMPRO CEUGENSO CE SE. VENTERGU
Escreva um programa em C que ajude o embaixador a decodificar mensagens assim codificadas. Use alocação dinâmica (onde cada nó contém um caractere no campo de info), pois o embaixador não sabe o tamanho da mensagem.
aí está o código feito por mim:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//
// retorna != 0 se o valor passado
// e' uma vogal
//
int vogal(char c)
{
char *v="AaEeIiOoUu";
while(*v)
if(*v++==c)
return true;
return false;
}
//
// detecta as sequencias de não-vogais
// e defaz as trocas
//
void troca(char *msg, int *i)
{
int j, t;
char aux;
j=*i;
t=0;
while(msg[j]&&!vogal(msg[j++])) t++;
switch(t)
{
case 2: // 2 não-vogais contiguas
aux=msg[*i];
msg[*i]=msg[*i+1];
msg[*i+1]=aux;
(*i)+=2;
break;
case 3: // 3 não-vogais contiguas
aux=msg[*i];
msg[*i]=msg[*i+2];
msg[*i+2]=aux;
(*i)+=3;
break;
case 4: // 4 não-vogais contiguas
aux=msg[*i];
msg[*i]=msg[*i+3];
msg[*i+3]=aux;
aux=msg[*i+1];
msg[*i+1]=msg[*i+2];
msg[*i+2]=aux;
(*i)+=4;
break;
}
}
void main()
{
int k, j, t;
char aux, *msg;
msg = (char*) malloc(80);
printf("Digite a mensagem codificada:\n>> ");
gets(msg);
t=strlen(msg);
k=0;
j=t-1;
// reverte a string...
while(j>k)
{
aux=msg[k];
msg[k]=msg[j];
msg[j]=aux;
k++;
j--;
}
// desfaz as trocas não-vogais...
for(k=0; k<t; k++) troca(msg, &k);
printf("\nMensagem decodificada:\n>> %s", msg);
free(msg);
}
Porém não encontro uma maneira de encaixar uma Struct no código alguém poderia ajudar onde iseria a Struct como pedido na questão?? e o malloc tirar aquele 80 porque se a mensagem for maior que 80 vai dar erro.. ajudem por favor
Pergunta
feswood
Pessoal é o seguinte leiam atentamente essa questão dada pra mim:
O seguinte método para codificar despachos diplomáticos foi adotado:
primeiro etapa – todas seqüências não vogais incluindo o espaço em branco e os caracteres de pontuação são invertidas.
Segunda etapa – a mensagem inteiro resultante é invertida dando origem à mensagem codificada.
Por exemplo a mensagem original
PROBLEMAS HIPER-INTERESSANTES.
Passa a ser
RPOLBEMAH SIPE-RITNERESSATNE.S
Após a primeira etapa e finalmente é codificada como
S.ENTASSERENTIR-EPIS HAMEBLOPR
Após a Segunda etapa.
O embaixador recebeu uma mensagem codificada como se segue:
S. ETEUQAS RES TRIAR MAMPRO CEUGENSO CE SE. VENTERGU
Escreva um programa em C que ajude o embaixador a decodificar mensagens assim codificadas. Use alocação dinâmica (onde cada nó contém um caractere no campo de info), pois o embaixador não sabe o tamanho da mensagem.
aí está o código feito por mim:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//
// retorna != 0 se o valor passado
// e' uma vogal
//
int vogal(char c)
{
char *v="AaEeIiOoUu";
while(*v)
if(*v++==c)
return true;
return false;
}
//
// detecta as sequencias de não-vogais
// e defaz as trocas
//
void troca(char *msg, int *i)
{
int j, t;
char aux;
j=*i;
t=0;
while(msg[j]&&!vogal(msg[j++])) t++;
switch(t)
{
case 2: // 2 não-vogais contiguas
aux=msg[*i];
msg[*i]=msg[*i+1];
msg[*i+1]=aux;
(*i)+=2;
break;
case 3: // 3 não-vogais contiguas
aux=msg[*i];
msg[*i]=msg[*i+2];
msg[*i+2]=aux;
(*i)+=3;
break;
case 4: // 4 não-vogais contiguas
aux=msg[*i];
msg[*i]=msg[*i+3];
msg[*i+3]=aux;
aux=msg[*i+1];
msg[*i+1]=msg[*i+2];
msg[*i+2]=aux;
(*i)+=4;
break;
}
}
void main()
{
int k, j, t;
char aux, *msg;
msg = (char*) malloc(80);
printf("Digite a mensagem codificada:\n>> ");
gets(msg);
t=strlen(msg);
k=0;
j=t-1;
// reverte a string...
while(j>k)
{
aux=msg[k];
msg[k]=msg[j];
msg[j]=aux;
k++;
j--;
}
// desfaz as trocas não-vogais...
for(k=0; k<t; k++) troca(msg, &k);
printf("\nMensagem decodificada:\n>> %s", msg);
free(msg);
}
Porém não encontro uma maneira de encaixar uma Struct no código alguém poderia ajudar onde iseria a Struct como pedido na questão?? e o malloc tirar aquele 80 porque se a mensagem for maior que 80 vai dar erro.. ajudem por favor
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.