Ajuda c++

Mirage_3D

Suspenso
Boas, comecei esta semana que passou a dar c++, e precisava de uma pequena ajuda a passar um pseudocodigo para c++...vou usar o dev

pseudocodigo

inicio
ler base
ler expoente
Resultado = 0
Aux = 0
Para X = 1 ate expoente fazer
Se aux = 0 então
Resultado = base * base
Aux = 1
Se não
Resultado = resultado * base
Resultado = base * base
Fim para
Escrever resultado
Fim

Thanks
 
Eu posso tentar dar-te uma ajuda porque sei umas coisas de c++, mas como não percebo nada de pseudocódigo tens primeiro de me dizer o quê que queres que o programa faça exatamente.


Cumps
 
Eu posso tentar dar-te uma ajuda porque sei umas coisas de c++, mas como não percebo nada de pseudocódigo tens primeiro de me dizer o quê que queres que o programa faça exatamente.


Cumps

O programa aceita um valor base e um valor expoente, e no fim apresenta o resultado....

tipo valor base 10
valor expoente 5

o programa terá de fazer 10*10*10*10*10

...ou seja, o programa tem de mutiplicar o valor base pelas vezes do valor expoente, isto só usando o if for e while...

cumps
 
Código:
double calcula(double base, double expoente)
	{
		if(expoente == 0)
			return 1;
		else if(expoente > 0)
			return base * (calcula(base,expoente-1));
                //expoente < 0
		else
			return calcula(1/base, -expoente);
		
	}
 
Última edição:
Desde já agradeço pela ajuda animal666, mas estao por ai umas coisas que ainda aprendi pelo que nao entendo mto bem o que fazem....tipo o double... preciso de fazer o código com um ciclo for... é onde estou encravado...


O código que tenho até agora feito é o seguinte.... apenas falta-me completar o for para funcionar....

Código:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int base;
    int expoente;
    int aux;
    int resultado;
       
    
    
    cout<< "introduz valor base \n";
    cin>> base;
    cout<< "introduz valor expoente \n";
    cin>> expoente;
    {
    for ( int x=1; x>expoente; x++)
    {
    if (aux==0)
    resultado = base * base;
    else if (aux==1)
    resultado = resultado * base;
    else
    resultado = base * base;
}
}
    cout<< "o resultado e " << resultado << " \n";
    
    
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
Última edição:
ciclo for:
Código:
for(int i = 0; i != 5; ++i)
{
cout << i << endl; // repete 5 vezes
}

Não estou a perceber para que queres o aux...

outra coisa 1000^0 = 1

logo aqui

Código:
if (aux=0)
    resultado= base*base;

deves ter

Código:
if (expoente [b]==[/b] 0)
    resultado = 1;

== (comparação)
= (para inicialização de variáveis)

Código:
int resultado = 1;
for(int i = 0; != expoente; ++i)
{
//o teu codigo para calcular 

}

depois tens de ter em conta expoentes negativos:

2^-1 é igual a (1/2)^1


eu usei double para poder usar valores deste género 2,64^3,67 em vez de apenas valores inteiros

outra coisa, tens um erro na forma como estás a calcular

se o que tu queres é isto 10^5 = 10 * 10 * 10 * 10 * 10

então não podes ter resultado * base pois estarias a fazer 10 * 5

alias dessa forma o resultado seria igual a (10 * 5) * 5 * 5 * 5 * 5 se não estou em erro...
 
Última edição:
Código:
#include <iostream>
using namespace std;

int main()
{
    int expoente, base;
    cin >> expoente;
    cin >> base;
    expoente = expoente;
    double resultado = 1;
    if (expoente == 0)
    resultado = 1;
    else
    {
        for (int i = 0; i < expoente; i++)
        resultado *= base;
    }
    if (expoente < 0)
    resultado = 1 / resultado;
    
    cout << endl << resultado;
    cin.get();
    cin.get();
    return 0;
}
Vê se é mais ou menos isto que pretendes.

Cumps
 
Já consegui por o code a funcar mas ficou bastante diferente do teu... ficou um pouco primitivo mas ainda estou a dar os primeiros passos... agora preciso de por este mesmo code que já funca mas funcar em função... com o void que acabei de aprender lol

desde já o meu obrigado pela ajuda

Código:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    int base=0;
    int expoente=0;
    int aux=0;
    int resultado=0;
    
   
    cout<< "introduz valor base \n";
    cin>> base;
    cout<< "introduz valor expoente \n";
    cin>> expoente;
    
    for ( int x=1; x<expoente; x++)
    {
    if (aux>0)
    {
    resultado = resultado * base;
    }
    else
    {
    aux++;
    resultado = base * base;
}
}

    cout<< "o resultado e " << resultado << " \n";
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
Já consegui por o code a funcar mas ficou bastante diferente do teu... ficou um pouco primitivo mas ainda estou a dar os primeiros passos... agora preciso de por este mesmo code que já funca mas funcar em função... com o void que acabei de aprender lol

desde já o meu obrigado pela ajuda

Deixa ver se percebi, tu queres fazer uma função que calcule um numero elevado a um expoente e queres usar o void??

Nesse caso a função não serve para nada, porque não vai devolver o resultado!!!
 
Deixa ver se percebi, tu queres fazer uma função que calcule um numero elevado a um expoente e queres usar o void??

Nesse caso a função não serve para nada, porque não vai devolver o resultado!!!

Tal como disse o animal666 é possível alterar um valor com o void, passando uma referência. Uma referência é diferente da cópia na medida em que é passado um género de um apontador para o local da memória onde a variável está, e não é efectuada uma cópia para um novo local. Ao alterar o valor na função, ele é alterado na função que a chamou.

Outra hipotese é declarar assim a função:

void calcula(int* resultado, int base, int expoente)

E chamar assim

Código:
int r;
calcula(&r, 4, 2);
Um exemplo de uso de apontadores e referências

Código:
#include <iostream>

using namespace std;

void calcula(int *valor)
{
    *valor += *valor;
}
    

int main()
{
    int i = 2;
    calcula(&i);
    cout << i << endl;
    return 0;
}
O resultado no ecrã seria 4.

Ou então fazia-se exactamente como disse o animal666.

Código:
#include <iostream>

using namespace std;

void calcula(int &valor)
{
    valor += valor;
}
    

int main()
{
    int i = 2;
    calcula(i);
    cout << i << endl;
    return 0;
}
 
Última edição:
Back
Topo