• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

gotak

Problemas

4 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já correste isso? Mostra tb o output para ser mais fácil de analisar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem, como podem ver eu ainda estou a aprender "C" !

Só que tenho muitas dúvidas nesta parte da matéria.

Obrigado a todos !

:D

0

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