Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PsySc0rpi0n

[Resolvido] Problema com operandos inválidos

Recommended Posts

PsySc0rpi0n

Boas malta...

Ando a tentar resolver alguns exercícios sobre ponteiros porque ainda estou muito ver nesta matéria...

Tenho o seguinte problema:

Pretende-se uma função que calcule o seguinte somatório:

http://img850.imageshack.us/img850/4396/codecogseqn31.gif

Os argumentos da função são o número de elementos e a tabela.

b)

Escreva um programa para ler os elementos para a tabela, devendo esta ser alocada dinamicamente. Apresente o resultado do somatório definido na alínea anterior...

Tenho o seguinte code mas está a dar o seguinte erro:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int FuncSoma (int n,  int  *tab) {
 float soma = 0.0,  i;
 for (i = 0; i < n; i++)
	  soma = soma + pow (*(tab + i), (n - i));
 return soma;
}
int main () {
 int num, i;
 int *tab;
 float soma;
 printf ("Quantos números vai inserir");
 scanf ("%d", &num);
 if ((tab = malloc (sizeof (int)*num)) == NULL) {
	  printf ("Erro de memória!\n");
	  exit (0);
 }
 printf ("Insira agora os %d valores!\n", num);
 for (i = 0; i < num; i++)
	  scanf ("%d", (tab + i));
 soma = FuncSoma (num,  tab);
 printf ("A soma total é %.1f\n", soma);
 return 0;
}
 

Erro:

ex_2.c:9:37: error: invalid operands to binary + (have ‘int *’ and ‘float’)
 

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
pmg

O teu problema está na linha

                  soma = soma + pow (*(tab + i), (n - i));

Repara que "tab" é um ponteiro (definido como parametro da funcao) e "i" é um float (definido como variavel local à função).

Não podes somar ponteiros e floats.

Sugiro que mudes o tipo da variavel "i" para size_t.

a tua soma é um float, e na função dizes que retorna um inteiro

Isso não dá erro: apenas obriga a uma conversão implicita de valores.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Ok. Já vi. Foi descuido. o "i" é o contador do for, por isso foi sem querer que o declarei como float... bahhh...

Edited by thoga31

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Este é um caso em que a mensagem de erro do gcc foi tudo menos esclarecedora. Pelo menos para mim. O problema estava na declaração da variável i e não na linha 9 como sugeriu o compilador.

Mas já está resolvido. Obrigado.

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.