Ir ao conteúdo

Posts recomendados

Postado

Boa tarde pessoal,

necessito desenvolver um programa em C com a utilização da função recursiva,

já elaborei previamente até onde o meu conhecimento permitia, mas está com algum erro na construção, se possível alguém ajudar ou compartilhar o seu conhecimento.

 

Problema:

1 Vetor c/ 04 elementos;

O programa necessita encontrar o maior e o menor elemento do vetor;

Aplicar a função recursiva e imprimir os números entre o maior e menor número encontrado (em ordem decrescente).

 

------------------------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

 

int main() {
    int vet[4], i, menor = 999999, maior = 0;

float soma (int n, float vet []){
    if(n == 0){
         return 0;
    }
    else{
         return vet [n-1] + soma (n-1, vet);
    }
}
    for(i= 0; i <4; i++){
        printf("Digite o valor da posicao sugerida %d: ", i);
        scanf("%d", &vet[i]);
    }

    for(i = 0; i < 4; i++){
        printf("%d ", vet[i]);
        if(menor > vet[i])
           menor = vet[i];
        if(maior < vet[i])
           maior = vet[i];
    }

    printf("\nMenor: %d\nMaior: %d\n\n", menor, maior);

    return (0);
}

  • Amei 1
Postado
#include <stdio.h>
#include <stdlib.h>

 

int main() {
    int vet[4], i, menor = 999999, maior = 0;

float soma (int n, float vet []){
    if(n == 0){
         return 0;
    }
    else{
         return vet [n-1] + soma (n-1, vet);
    }
}
    for(i= 0; i <4; i++){
        printf("Digite o valor da posicao sugerida %d: ", i);
        scanf("%d", &vet[i]);
    }

    for(i = 0; i < 4; i++){
        printf("%d ", vet[i]);
        if(menor > vet[i])
           menor = vet[i];
        if(maior < vet[i])
           maior = vet[i];
    }

    printf("\nMenor: %d\nMaior: %d\n\n", menor, maior);

    return (0);
}

 

Use o tal botão code como está escrito nas instruções do forum... Acima está o seu programa DENTRO do formulário de código pra você ver a diferença...

 

Sobre sue programa:

 

  • Por que soma retorna float?

 

   int vet[4], i, menor = 999999, maior = 0;

 

  • Não declare mais que uma variável por linha. É grátis.

 

  • Entenda que um int pode ser negativo. E maior ou igual a 1 milhão. Sua ideia de iniciar os valores não funciona.
     
  • O programa está construído errado: as funções não podem ficar umas dentro das outras.
     
  • main() deve ser a primeira função de seu programa
     
  • uma função recursiva é como um loop simples. Apenas vai continuar somando até chegar ao menor, inclusive.

 

 

 

  • Curtir 1
  • Obrigado 1
Postado

@Luan Nicoluzzi    você colocou a função dentro da func main ,  e seria no final depois dela , e criar o protótipo lá em cima antes da main ,  e se for digitado um valor maior que 999999 dará erro  e também de digitar um número negativo ,  

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <limits.h>           // ai precisa desse include biblioteca
#include <stdlib.h>           // em C as func dicam fora da main , pois dentro não faz sentido 
int recursiva(int , unsigned int* ); // os protótipos de func ficam agrupados aqui antes da func main
int main()                    // para facilitar as coisa a func main fica em primeiro e as outras no final
{                             // para que ficar pulando linhas ? 
    unsigned int vet[4]; 
    int i;
    int menor = INT_MIN;      // inicializa com o maior valor possivel
    int maior = INT_MIN;      // inicializa com o menor valor possivel
    for (i = 0; i < 4; i++)
    {
        printf("Digite o valor da posicao sugerida %d: ", i);
        scanf("%d", &vet[i]);
    }
    recursiva(4,vet);
    for (i = 0; i < 4; i++)
    {
        printf("%d ", vet[i]);
        if (menor > vet[i])
            menor = vet[i];
        if (maior < vet[i])
            maior = vet[i];
    }
    printf("\nMenor: %d\nMaior: %d\n\n", menor, maior);
    return (0);
}
int recursiva(int n, unsigned int*   vet )
{
    if (n == 0)
    {
        return 0;
    }
    else {
        return vet[n - 1] + recursiva(n - 1, vet);
    }
}

mas assim mesmo não está mostrando o resultado certo , não .    precisa corrigir alguma coisa ainda  .

  • 2 anos depois...
Postado

Olá

 

O Problema

1 vetor com 04 elementos;


O programa necessita encontrar o maior e o menor elemento do vetor;

Aplicar a função recursiva e imprimir os números entre o maior e menor número

encontrado  (em ordem decrescente).

 

***A suposta tentativa de solução é distante do problema.

Comecei pelo vetor; ele supostamente existe — não há indicação de carregar, solicitar ou ler os seus 4 elementos.

 

#include <stdio.h>
int main (void){
  int vetor [4]= {1,3,2,4};
  ...
  return 0;
  }

 

Daí, assuma-se o primeiro elemento, sendo maior e menor, e continua num laço.

#include <stdio.h>
int main (void){
  int vetor [4]= {1,3,2,4} ,menor ,maior;

  maior= menor= vetor[0];
  for (int i= 1 ; i<4 ; ++i)
    if (vetor[i]>maior) maior= vetor[i];
        else
    if (vetor[i]<menor) menor= vetor[i];

  /* ... */
  return 0;
  }

 

@Luan Nicoluzzi ***Confundiu histórias quando imprime ou solicita cada dado no laço.

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...