Ir ao conteúdo
  • Cadastre-se

Preciso de uma ajuda, não estou conseguindo fazer alguns algoritmos


TMBruhTH

Posts recomendados

  1. Utilizando os comandos da linguagem C/C++ desenvolva os programas, com base nos conceitos de recursividade:
    a)Mostrar na tela números de 1 a 10
    b)Imprimir os números pares entre 0 e N (N deve ser informado no inicio do programa).
    c)Escreva uma função recursiva, potencia(x,y), que devolva x elevado a potência y.
    d)Escreva uma função recursiva, mdc(x,y), que receba dois valores inteiros e que devolva o maior divisor comum aos dois valores recebidos.

mdc(u,v) = u  se v=0

mdc(u;v) = mdc(v; u mod v), caso contrário.


e)Faça uma função recursiva, em linguagem C/C++, que calcule o valor da série S descrita a seguir para um valor n>0 a ser fornecido como parâmetro para a mesma: S = 1 + 1/1! + 1/2! +... + 1 /n!.

 

f)Escreva uma função recursiva que faça o seguinte: leia um número; se o número for negativo, a função pára; caso contrário, a função imprime o número e faz uma chamada recursiva a si mesma.

___________________________________________________________________________________________________

 

2.Faça uma função que receba por parâmetro o tempo de duração de uma fábrica expresso em segundos e retorne por referência esse tempo em horas, minutos e segundos.

________________________________________________________________________________________________

3.Elabore uma função em C/C++ que receba por parâmetro uma data (dia, mês e ano) e um valor referente a quantidade de dias que deverão ser somados a data recebida. A função deve retornar (por referência) a nova data.

________________________________________________________________________________________________

 

4.Faça uma função para receber os valores necessários para o cálculo da fórmula de báskara e retorne por referência, as suas raízes, caso seja possível calcular.

________________________________________________________________________________________________

 

5.Seja a função troca cujo protótipo está definido abaixo, uma função que permute o valor de uma variável do tipo double por outra, ambas passadas por referência. Defina uma função main que permute os valores das variáveis a, b e c, de forma que no final a<=b<=c. A função main deve chamar a função troca.

void troca(double*x,double*y, double *z);

________________________________________________________________________________________________

6.Elabore um programa em C/C++ que chama uma função calcIdade. A função calcIdade deve receber um parâmetro que indica a quantidade de idade de pessoas que devem ser lidas, calcular e retornar;

  1. A soma de idade das pessoas com mais de 70 kg (retorno de valor);
  2. A quantidade de pessoas com mais de 50 anos (referência);
  3. O percentual de pessoas com mais de 65 anos e menos de 75 kg (referência).

__________________________________________________________________________________________________

7.Faça um programa em C/C++ para chamar uma função que receba o salário de um funcionário, calcule e retorne por valor o salário a receber, sabendo-se que esse funcionário tem gratificação de 5% sobre seu salário base e paga 10% de imposto sobre o salario bruto (salario base + gratificação). O programa também deve retornar por referência o valor do imposto devido.

 

LstFuncoesRecRef(1).doc

Link para o comentário
Compartilhar em outros sites

#include <iostream>
#include <conio.h>
#include <stdio.h>

using namespace std;

int HoraDaVerdade (int num);
int HoraDaVerdade2(int num);
int pot (int x, int y);
int mdc (int u, int v);

int main(){
           int num1, num2, num3, num4, num5, n;
               int res, res2, res3, res4;
                   cout << "\nInforme um numero de 1 a 10: ";
                   cin >> num1;
                   res = HoraDaVerdade(num1);
                   cout << "\nOs Numeros de 1 a 10: " << res << endl << endl;

                   cout << "\nInforme um numero: ";
                   cin >> n;
                   res2 = HoraDaVerdade2(n);
                   cout << "\nNumero 0 a N: " << res2 << endl << endl;

                   cout << "\nInforme a Base: ";
                   cin >> num2;
                   cout << "\nInforme o Expoente: ";
                   cin >> num3;
                   res3 = pot(num2,num3);
                   cout << "\nA Potencia : " << res3 << endl << endl;

                   cout << "\nInforme um Nr: ";
                   cin >> num4;
                   cout << "\nInforme um Nr: ";
                   cin >> num5;
                   res4 = mdc(num4,num5);
                   cout << "\nO Mdc : " << res4 << endl << endl;

    }

int HoraDaVerdade (int num){

                  if ((num >= 1)  && (num <= 10))

                    return num;
    }

int HoraDaVerdade2(int num1){

                 if (num1%2== 0)
                    cout << "\nNumero Par!";
                        return num1;
}

int pot(int x, int y){
             if (y==0)
                return 1;
             else
                return x * pot(x,y-1);
}

int mdc (int u, int v){

                if (v==0)
                   return mdc(u,v) = mdc(v,u);

}

 

não consigo continuar, e eu não sei se está certo essa ultima

Link para o comentário
Compartilhar em outros sites

Não, o enunciado já dá a descrição exata da função:
 
mdc(u,v) = u  se v=0
mdc(u;v) = mdc(v; u mod v), caso contrário.
 
Só o que você precisa saber é que o módulo (mod) é o resto da divisão inteira... Logo a função fica:

int mdc(int x, int y){    if (y == 0)        return x;    else        return mdc(y, (x % y));}

 
Agora, você pode verificar que isto funciona calculando alguns exemplos manualmente, e até dar uma pesquisada pra entender o fundamento matemático por trás deste método de cálculo de MDC.

Link para o comentário
Compartilhar em outros sites

beleza, deu certo. Vou começar a fazer a letra e. Se tiver mais alguma duvida chamo você,

Obrigado


só mais uma pergunta, o meu algoritmo em si está correto?


fiz a e, f

 

float fatorial(float s){
        if (s<=2)
            return s;
        else
            return s*fatorial(s-1);

}
float somaserie(float n){
    float s = 0;
        if (n == 0)
            return 1;
        else
            s = s+(somaserie(n-1)+(1.0/fatorial(n)));
        return s;
}
float Nrnegativo(float x){
            if (x < 0)
                return 1 ;
            else
                return Nrnegativo(- x);
}

não está imprimindo certo

Link para o comentário
Compartilhar em outros sites

Note que esta série da alternativa "e" é a série para calcular uma aproximação do número neperiano (ou número de Euler, ou número exponencial, ou como preferir chamá-lo):

e = 2,718281828459045235360287.....

Então é esperado que o programa obtenha um número que se aproxime mais de e quanto maior for o valor de n.

 

 

Você chegou próximo da lógica ao notar que serie(n) = serie(n-1) + 1/n!, mas por algum motivo você está somando mais s, que sempre tem valor 0 (visto que s sempre é inicializado com valor s = 0 no começo da função), o que é desnecessário...

 

 

E o maior problema é que você está calculando n! para depois fazer a divisão 1/n!, mas n! fica grande demais muito rapidamente conforme n aumenta, e aí chega no ponto em que uma variável do tipo inteiro (int) não consegue mais armazenar um valor tão grande, resultando em erros...

 

O melhor modo de calcular 1/n! é notar que:

1/n! = 1/2 * 1/3 * 1/4 * ... * 1/n

E que assim você não terá de calcular n!, que estoura o valor máximo que pode ser calculado rapidamente, mas apenas multiplicar várias frações para obter diretamente 1/n!.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...