Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

gotak

Problemas

Mensagens Recomendadas

gotak    0
gotak

Ola' não é costume meu postar muitas coisas aqui mas tou com grandes dúvidas num problemas em C  :thumbdown:

/* 11º caso: */
/*
char s[TAMANHO_MAXIMO]="012345678" ;
char s_copy[TAMANHO_MAXIMO];

int i=0;
while(s[i]!='\0')
{
s_copy[i]=s[i];
i++;
}
printf("%i\n\n",i);

for(int j=0;j<i;j++)
{
s[j]=s_copy[i-1-j];
printf("%i: s_final: %c ; s_inicial: %c\n",j,s[j],s_copy[j]);
}
*/

/* 12º caso: */
/*
char s[TAMANHO_MAXIMO]="0123\05678" ;
char s_copy[TAMANHO_MAXIMO];

int i=0;
while(s[i]!='\0')
{
s_copy[i]=s[i];
i++;
}
printf("%i\n\n",i);

for(int j=0;j<i;j++)
{
s[j]=s_copy[i-1-j];
printf("%i: s_final: %c ; s_inicial: %c\n",j,s[j],s_copy[j]);
}
*/

/* 13º caso: */
/*
char s[TAMANHO_MAXIMO]={'0','1','2','3','\0','5','6','7','8','\0'} ;
char s_copy[TAMANHO_MAXIMO];

int i=0;
while(s[i]!='\0')
{
s_copy[i]=s[i];
i++;
}
printf("%i\n\n",i);

for(int j=0;j<i;j++)
{
s[j]=s_copy[i-1-j];
printf("%i: s_final: %c ; s_inicial: %c\n",j,s[j],s_copy[j]);
}
*/
}

Gostaria se pudessem explicar o que faz cada caso.

Obrigado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nunocanc    0
nunocanc

Boas,

Pelo que estive a analisar (de notar que não corri o código),

Este pedaço de código

int i=0;
while(s[i]!='\0') {
    s_copy[i]=s[i];
    i++;
}
printf("%i\n\n",i);

está a copiar os caracteres das posições  do array "s" para o array "s_copy". Por fim imprime para a consola o último indicie incrementado.

Ele faz esta cópia começando da posição 0 (zero) até à posição definida pelo '\0', neste caso 9.

no pedaço de código seguinte

for(int j=0;j<i;j++) {
   s[j]=s_copy[i-1-j];
   printf("%i: s_final: %c ; s_inicial: %c\n",j,s[j],s_copy[j]);
}

é importante aqui é saber fazer contas  :D.

o i=8, o j=0 e vai até i (8) então:

i - 1 - j = 9 - 1 - 0 = 8

...

e por ai adiante, que concluindo vai invertendo as posições do array "s_copy" no array "s".

os outros dois casos fazem a mesma coisa com duas alterações:

12º Caso

Existe um '\0' no meio do array. isto significa que na memoria o array está partido em dois arrays consecutivos.

Ele copia até ao 3 e depois inverte,

13º Caso

é igual ao caso anterior, somente mostra outra maneira de inicializar um array de caracteres.

Este exemplos de manipulação de memória são clássicos e importantes na aprendizagem. Espero que consigas os entender.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade