PuPax Posted April 29, 2008 at 03:34 PM Report Share #182337 Posted April 29, 2008 at 03:34 PM 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. Link to comment Share on other sites More sharing options...
pedrotuga Posted April 29, 2008 at 03:59 PM Report Share #182345 Posted April 29, 2008 at 03:59 PM 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. Link to comment Share on other sites More sharing options...
Guest id194 Posted April 29, 2008 at 04:19 PM Report Share #182348 Posted April 29, 2008 at 04:19 PM 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. Link to comment Share on other sites More sharing options...
pedrotuga Posted April 29, 2008 at 04:28 PM Report Share #182351 Posted April 29, 2008 at 04:28 PM 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 Link to comment Share on other sites More sharing options...
Guest id194 Posted April 29, 2008 at 05:19 PM Report Share #182369 Posted April 29, 2008 at 05:19 PM 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... Link to comment Share on other sites More sharing options...
Rui Carlos Posted April 29, 2008 at 05:20 PM Report Share #182370 Posted April 29, 2008 at 05:20 PM 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. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
bertolo Posted April 30, 2008 at 06:04 PM Report Share #182679 Posted April 30, 2008 at 06:04 PM aplica qsort verifica se o numero de trocas =0 ta feito Link to comment Share on other sites More sharing options...
TheDark Posted April 30, 2008 at 06:14 PM Report Share #182683 Posted April 30, 2008 at 06:14 PM 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. Desaparecido. Link to comment Share on other sites More sharing options...
Rui Carlos Posted April 30, 2008 at 06:20 PM Report Share #182687 Posted April 30, 2008 at 06:20 PM 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. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
TheDark Posted April 30, 2008 at 06:43 PM Report Share #182692 Posted April 30, 2008 at 06:43 PM Desse ponto de vista tens razão. É o hábito de programar mais em C e C++ do que noutra linguagem qualquer... Desaparecido. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now