Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não consigo utilizar vetores e ponteiros corretamente

Já tentei várias vezes, mas o compilador não entende as referências feitas no cabeçalho da função "void CalculaValorparaPagar(float *ValorPago[MAX], float Quant_Kwh[MAX],float Preco[MAX], int bandeira[MAX], int tipo[MAX])" e na main "CalculaValorparaPagar(&ValorPago[MAX],Quant_Kwh,Preco,bandeira,tipo/*i*/);" e da o seguinte erro: "[Error] cannot convert 'float*' to 'float**' for argument '1' to 'void CalculaValorparaPagar(float**, float*, float*, int*, int*)' "

Como devo proceder?

#include <stdio.h>
//#include "headerfiledoconsumo.h"
#define MAX 2
int x;  
float Imposto[MAX], Taxa_ilum [MAX];
float Taxa_Band_Tar [MAX];
float Quant_Kwh [MAX];
int tipo [MAX];
float ValorPago[MAX];
float Preco[MAX];
int bandeira[MAX];

//void CalculaValorparaPagar();
//void fazperguntas();
//void imprimevalorpagar();

void fazperguntas(/*float Quant_Kwh[MAX],float Preco[MAX],int tipo[MAX],int bandeira[MAX]*/){

for (int i= 0; i<MAX; i++){

//printf("Informe seu nome:\n");
//scanf("%s", &nome[i]);
printf("Informe seu consumo em KW: \n");
scanf("%f", &Quant_Kwh[i]);
getchar();
printf("Digite o preco do Khw: \n");
scanf("%f", &Preco[i]);
getchar();
printf("Informe o tipo de consumidor que voce eh: 1(residencial), 2(comercial), 3(Industrial)\n");
scanf("%d", &tipo[i]);
getchar();
printf("Informe a bandeira tarifaria: Verde(1), Amarela(2), Vermelha(3)\n");
scanf("%d", &bandeira[i]);
getchar();

}
}



void CalculaValorparaPagar(float *ValorPago[MAX], float Quant_Kwh[MAX],float Preco[MAX], int bandeira[MAX], int tipo[MAX]){


    //int i = 10;

    for(int i=0; i<MAX;i++){

    if (bandeira[i] == 1){
        Taxa_Band_Tar[i] = 0;
    }

    if(bandeira[i] == 2 || Quant_Kwh[i] > 100){

        x = (Quant_Kwh[i]/100);
        Taxa_Band_Tar[i] = x*3.5;
    }

    if(bandeira[i] == 3 || Quant_Kwh [i] >100){

        x = (Quant_Kwh[i]/100);
        Taxa_Band_Tar[i] = x*10.5;
    }


    if (tipo[i] == 1){

        Taxa_ilum[i] = 23.45;
    }

    if(tipo[i] == 2){

        Taxa_ilum[i] = 29.23;
    }

    if(tipo[i] == 3){

        Taxa_ilum[i] = 37.06;
    }



    Imposto[i] = 0.04*Quant_Kwh[i] + 0.02*Taxa_ilum[i];
    *ValorPago[i] = Quant_Kwh[i]*Preco[i] + Taxa_ilum[i] + Imposto[i] + Taxa_Band_Tar[i];

    }
}


    void imprimevalorpagar(){

        for(int i = 0; i<MAX; i++){    

 printf("Consumidor %d  Valor a pagar: %f\n", i,ValorPago[i]); 
}

}

int main() {

fazperguntas();

CalculaValorparaPagar(&ValorPago[MAX],Quant_Kwh,Preco,bandeira,tipo/*i*/);

imprimevalorpagar();

}
2 respostas
solução!

Oi Vinicius,

Quando você faz a declaração float ValorPago[MAX]; a sua variável ValorPago tem a capacidade de guardar um valor do tipo float.

No momento que você tenta declarar no parâmetro da sua função CalculaValorparaPagar que você quer receber float *ValorPago[MAX] você está dizendo que espera receber um ponteiro para um ponteiro de float (float **) mas passa como parâmetro &ValorPago[MAX] que representa o endereço do ponteiro de float (float *).

Neste caso, aparentemente o que você precisa é o próprio valor armazenado na variável ValorPago então não é necessário nem fazer um ponteiro de ponteiro e nem buscar o endereço de memória da variável, você pode fazer da mesma forma que fez com a variável Quant_Kwh, ou seja:

1) Declarar o parâmetro do método CalculaValorparaPagar como float ValorPago[MAX] 2) Passar o valor da variável ValorPago diretamente na chamada do método : CalculaValorparaPagar(ValorPago,Quant_Kwh,Preco,bandeira,tipo);

Abraço!

Muito obrigado, Joviane! Funcionou perfeitamente!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software