Ir ao conteúdo
  • Cadastre-se

Estou com dúvida nesse exercício com relação a ponteiros e funções no c++


Visitante

Posts recomendados

O exercício é esse aqui:

http://www.decom.ufop.br/alan/bcc702/potencia.cpp

 

Esta dando erro quando eu coloco &a e &b

da uma olhada no meu código

 

// Copie este arquivo para seu computador. Complete o código fazendo o que é pedido em cada um dos exercícios dos comentários.
 
/*
Exercicio de compreensao de funcoes com passagem por parametro ou por valor e funcões recursivas
A cada vez que a funcao e alterada nas perguntas abaixo, a versao antiga deve ser colocada como resposta da pergunta anterior
 
 1) Analise o codigo abaixo
 2) Troque a funcao int potencia(int x, int y) com passagem por valor por uma funcao int potencia(int &x, int &y) com passagem por referência.
    a) O que se alterou no programa do ponto de vista de resultados? Porquê?
    B) O que se alterou no programa do ponto de vista de sua interpretacão pelo computador?
    c) Em quais casos a diferenca de passagem por valor e referencia se torna relevante?
 3) Simule uma passagem de parâmetros por referência através de ponteiros passados por valor.
Para isso, crie uma nova funcao potencia2 para não perder a resposta das perguntas anteriores.
    a) Como a passagem de parâmetros por referência pode ser simulada com ponteiros passados por valor?
B) Tendo a funcao potencia com passagem por referência atraves de ponteiros passados por valor,
    descreva qual a desvantagem desta abordagem do ponto de vista do programador.
 4) Crie uma nova versão da função pontencia chamada potencia3. Faça esta função pontencia3 de modo que:
* ela retorne void
* a passagem de todas as variaveis seja por referencia
* e o resultado seja salvo diretamente em uma variavel extra passada como argumento.
 5) Refazer esta funcao potencia em uma função potencia4 de modo que ela seja recursiva, ou seja, a funcao fara uso de si mesma.
Ex: x^0 = 1, x^1 = x. x^2 = x * x^1, x^3 = x^2 * x, ..., x^n = x^(n-1) * x
 6) Analise a funcao ordena(). Veja como ela recebe um arranjo e o tamanho deste arranjo. Crie no main um arranjo que a utilize.
  a) Substitua os comandos da funcao ordena, reponsaveis pela troca, por uma chamada a uma nova funcão void troca(int &a, int &B)
  Esta função void troca(int &a, int &B) deve receber como parametros duas variaveis inteiras e troque seus valores.
 
*/
 
#include <iostream> // biblioteca de entrada e saida
 
using namespace std; // usa a biblioteca std por padrão
 
int potencia(int x, int y); // cabecalho da funcao com a qual vamos trabalhar
void ordena(int a[], int n); // funcao utilizada no ultimo exercicio
 
 
int main(){
    int a, b, resultado; // variaveis para programa que faz a elevado a b e salva em resultado
    do {
        cout << "Digite a base : ";
        cin >> a;
        cout << "Digite o expoente : ";
        cin >> b;
        resultado = potencia(a,B); // chamando a funcao que definiremos apos o main
        cout << a << " elevado a " << b << " = " << resultado << endl;
    } while (a!=-1); // programa se repete ate
    return 0;
}
 
int potencia(int &x, int &y){ // funcao que eleva a a b
    int produto = *x; //N sei como q faz esse negocio com ponteiro
    int i;
    for (i=1; i<y; i++){
        produto*= *x; // equivale a produto = produto * *x
    }
    return produto;
}
 
// Ordenação pelo "método da bolha"
void ordena(int a[], int n)
{
    int i,j,aux;
    for( j= n-1; j>0; j--)
        for(i=0; i<j; i++)
        {
            if(a[i+1] < a)
            {
                // trocar a com a[i+1]
                aux = a;
                a = a[i+1];
                a[i+1] = aux;
            }
        }
}
 
Link para o comentário
Compartilhar em outros sites

Assim? 

Obs.: continua dando erro rsrsrsrsrsr

 

// Copie este arquivo para seu computador. Complete o código fazendo o que é pedido em cada um dos exercícios dos comentários.
 
/*
Exercicio de compreensao de funcoes com passagem por parametro ou por valor e funcões recursivas
A cada vez que a funcao e alterada nas perguntas abaixo, a versao antiga deve ser colocada como resposta da pergunta anterior
 
 1) Analise o codigo abaixo
 2) Troque a funcao int potencia(int x, int y) com passagem por valor por uma funcao int potencia(int &x, int &y) com passagem por referência.
    a) O que se alterou no programa do ponto de vista de resultados? Porquê?
    B) O que se alterou no programa do ponto de vista de sua interpretacão pelo computador?
    c) Em quais casos a diferenca de passagem por valor e referencia se torna relevante?
 3) Simule uma passagem de parâmetros por referência através de ponteiros passados por valor.
Para isso, crie uma nova funcao potencia2 para não perder a resposta das perguntas anteriores.
    a) Como a passagem de parâmetros por referência pode ser simulada com ponteiros passados por valor?
B) Tendo a funcao potencia com passagem por referência atraves de ponteiros passados por valor,
    descreva qual a desvantagem desta abordagem do ponto de vista do programador.
 4) Crie uma nova versão da função pontencia chamada potencia3. Faça esta função pontencia3 de modo que:
* ela retorne void
* a passagem de todas as variaveis seja por referencia
* e o resultado seja salvo diretamente em uma variavel extra passada como argumento.
 5) Refazer esta funcao potencia em uma função potencia4 de modo que ela seja recursiva, ou seja, a funcao fara uso de si mesma.
Ex: x^0 = 1, x^1 = x. x^2 = x * x^1, x^3 = x^2 * x, ..., x^n = x^(n-1) * x
 6) Analise a funcao ordena(). Veja como ela recebe um arranjo e o tamanho deste arranjo. Crie no main um arranjo que a utilize.
  a) Substitua os comandos da funcao ordena, reponsaveis pela troca, por uma chamada a uma nova funcão void troca(int &a, int &B)
  Esta função void troca(int &a, int &B) deve receber como parametros duas variaveis inteiras e troque seus valores.
 
*/
 
#include <iostream> // biblioteca de entrada e saida
 
using namespace std; // usa a biblioteca std por padrão
 
int potencia(int x, int y); // cabecalho da funcao com a qual vamos trabalhar
void ordena(int a[], int n); // funcao utilizada no ultimo exercicio
 
 
int main(){
    int a, b, resultado; // variaveis para programa que faz a elevado a b e salva em resultado
    do {
        cout << "Digite a base : ";
        cin >> a;
        cout << "Digite o expoente : ";
        cin >> b;
        resultado = potencia(&a,&B); // chamando a funcao que definiremos apos o main
        cout << a << " elevado a " << b << " = " << resultado << endl;
    } while (a!=-1); // programa se repete ate
    return 0;
}
 
int potencia(int &x, int &y){ // funcao que eleva a a b
    int produto = *x; //N sei como q faz esse negocio com ponteiro
    int i;
    for (i=1; i<y; i++){
        produto*= *x; // equivale a produto = produto * *x
    }
    return produto;
}
 
// Ordenação pelo "método da bolha"
void ordena(int a[], int n)
{
    int i,j,aux;
    for( j= n-1; j>0; j--)
        for(i=0; i<j; i++)
        {
            if(a[i+1] < a)
            {
                // trocar a com a[i+1]
                aux = a;
                a = a[i+1];
                a[i+1] = aux;
            }
        }
}
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...