Ir ao conteúdo
  • Cadastre-se
Visitante

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

Recommended Posts

Visitante

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;
            }
        }
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tá declarando o protótipo da função potencia sem os &, mas tá usando eles na definição da função.

O protótipo precisa ser igual a função.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  •    0
    Visitante

    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;
                }
            }
    }

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    
    

    #include <iostream>

    using namespace std;

    int potencia(int &x, int &y); // ISSO É O PROTÓTIPO DA FUNÇÃO

    int main(){

    ...

    }

    int potencia(int &x, int &y) { // ESSA É A DECLARAÇÃO DA FUNÇÃO. O protótipo e a declaração precisam ser iguais.

    ...

    }

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro 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 publicações 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

    ×