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

PuPax

Recursividade

10 mensagens neste tópico

Boas,

Alguém pode dar aqui uma ajuda para criar esta função:

"Função recursiva em C que verifique se uma tabela de inteiros está ordenada de

forma crescente. A função recebe como argumentos um ponteiro para a primeira posição da

tabela e o número de elementos que ela contém. Devolve 1 se a tabela estiver ordenada ou 0 no

caso contrário."

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Comparas o primeiro elemento com o segundo, se o primeiro for maior que o segundo devolves zero, caso contrário chamas a própria função mas desta vez passas como argumento o array original a começar no segundo elemento.

Se o comprimento do array a passar for 1 então devolves 1.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Atenção, não passas o "array original a começar no segundo elemento", mas sim o apontador/ponteiro para o segundo elemento no array... De resto, é fazeres o que o pedrotuga disse.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma cópia tambem funciona, mas não é de todo tão eficiente.

Outra coisa a ter em atenção... a verificação do comprimento deve ser a primeira coisa a fazer

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, mas tendo em consideração o enunciado "A função recebe como argumentos um ponteiro para a primeira posição da

tabela" e se a função é recursiva, tens de passar um ponteiro para a posição seguinte...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tiveres que manter a assinatura da função (com o array e o tamanho), acho que o exercício incentiva a desenvolver uma resolução de uma forma não muito "correcta". Eu acrescentaria mais um argumento à função que indicava a posição que queria verificar naquele momento (pois embora alterar o apontador do array seja bastante simples, é uma solução que eu vejo como um "truque" que a linguagem C permite).

A solução de copiar o array seria mais limpa do que andar a mexer nos apontadores (embora pudesse ser desastrosa em termos de eficiência).

É claro que numa disciplina e que o objectiva seja trabalhar em baixo nível, por vezes pretende-se mesmo que se ande a mexer nos apontadores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tiveres que manter a assinatura da função (com o array e o tamanho), acho que o exercício incentiva a desenvolver uma resolução de uma forma não muito "correcta". Eu acrescentaria mais um argumento à função que indicava a posição que queria verificar naquele momento (pois embora alterar o apontador do array seja bastante simples, é uma solução que eu vejo como um "truque" que a linguagem C permite).

:o Andar a mexer nos apontadores é das coisas que mais me atrai em C/C++. às vezes é atrofiante não ter a mesma facilidade em C#.

A solução de copiar o array seria mais limpa do que andar a mexer nos apontadores (embora pudesse ser desastrosa em termos de eficiência).

A mim parece-me o contrário. Andar a copiar o array de um lado para o outro parece-me muito mais "sujo" do que reutilizar a memória.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A mim parece-me o contrário. Andar a copiar o array de um lado para o outro parece-me muito mais "sujo" do que reutilizar a memória.

Para mim é limpa porque te abstrais da plataforma em que estás a programar.

O algoritmo funciona em qualquer linguagem. É uma solução que qualquer um percebe. Já quando andas com apontadores, precisas de conhecer os truques do C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desse ponto de vista tens razão. É o hábito de programar mais em C e C++ do que noutra linguagem qualquer...

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