Pequeno problema com o C (resolvido)

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Pequeno problema com o C (resolvido)

Mensagempor Red_Beret » Sexta Dez 30, 2005 14:30

Ppl, tou aki com um prob com um exercicio em C

Enunciado:
1. Elabore um programa em C que obtenha os valores de m e n e que
através de uma função, calcule o seguinte somatório:
Imagem

Fiz assim:
Código: Seleccionar todos
#include <stdio.h>

int somatorio (int m,int n){
   int i,s,acum=1,acum2=0,ct,;
      for(i=m;i<=n;i++){
         for(ct=1;ct<=n;ct++){
            acum=acum*ct;
         }   
      s=(i^3)/(5+acum);
      acum2=acum2+s;
      }
   return acum2;
      
}



void main(){
   int m,n,s;
   printf("Introduza o M\n");
   scanf("%d",&m);
   printf("Introduza o N\n");
   scanf("%d",&n);
   somatorio(m,n);
   printf("O somatorio e %d\n",somatorio(m,n));
}


Só que não funciona correctamente. O que é que esta mal?



Edit. Agora o exercicio 2 tb da mal (ja me tou a passar com esta mer**)


Enunciado:

2. Implemente um programa em C que indique se um número é perfeito
sabendo que:
N 􀃆 Número perfeito: se a soma de todos os divisores inferiores a
N for igual a N.
Exemplos:
N=6 divisores de 6=1,2,3 1+2+3=6 (=N) 􀃆 Número Perfeito
N=8 divisores de 8=1,2,4 1+2+4=7 (≠N) 􀃆 Número imperfeito

Fiz assim:
Código: Seleccionar todos
#include <stdio.h>

void main(){
   int n,d,acum=0,num;
   printf("Introduza o numero\n");
   scanf ("%d",&n);
   for (d=1;d<=n;d*2){
      num=n/d;
      acum=acum+num;
   }
   if(acum==n){
      printf("O numero %d e Perfeito\n",n);
   }
   else{
      printf("O numero %d e Inperfeito\n",n);
   }
}


Este começa bem, e depois encalha a fazer a conta. Mais uma vez, o que esta ma?
Editado pela última vez por Red_Beret em Sexta Dez 30, 2005 18:02, num total de 3 vezes.
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13

Mensagempor capricorn » Sexta Dez 30, 2005 14:50

Código: Seleccionar todos

#include <stdio.h>

int somatorio (int m,int n){
   int i,s,acum=1,acum2=0,ct;
      for(i=m;i<=n;i++){
         for(ct=1;ct<=i;ct++){
            acum=acum*ct;
         }   
      s=(i^3)/(5+acum);
      acum2=acum2+s;
      }
   return acum2;
     
}



void main(){
   int m,n,s;
   printf("Introduza o M\n");
   scanf("%d",&m);
   printf("Introduza o N\n");
   scanf("%d",&n);
   printf("O somatorio e %d\n",somatorio(m,n));
}

capricorn
Membro de Prata
Membro de Prata
 
Mensagens: 383
Registado: Sexta Ago 20, 2004 13:03
Localização: Porto

Mensagempor Red_Beret » Sexta Dez 30, 2005 15:01

Continua a dar mal. Da sempre 0 :cry:
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13

Mensagempor faggc » Sexta Dez 30, 2005 16:40

Red_Beret Escreveu:Continua a dar mal. Da sempre 0 :cry:


O teu código têm alguns problemas. Sugiro o seguinte:
1 - O resultado do somatório dificilmente é um valor inteiro. Devias por exemplo colocar
Código: Seleccionar todos
double somatorio



2 - É mais simples colocares uma função para calcular o factorial. Por exemplo,
Código: Seleccionar todos
int fact(int z){
if (z==0){return 1;}  else  {return z*fact(z-1);}
}   


No entanto talvez seja melhor substituir o int por unsigned long. Como deves saber a função factorial cresce muito depressa e se escolheres n>17 terás problemas no cálculo.
Outra possibilidade é escreveres a função Log(Gamma) que permite obter uma generalização do factorial. Penso que desta forma terás a possibilidade de calcular factoriais um pouco maiores.


3 - Penso que não é possível escrever i^3. Deverás substituir isso por i*i*i.
faggc
Aprendiz
Aprendiz
 
Mensagens: 32
Registado: Sexta Abr 29, 2005 11:04

Mensagempor Red_Beret » Sexta Dez 30, 2005 16:49

esse ja ta resolvido.

Quanto ao exercicio 2. O prob esta no ciclo for. Mas não encontro o erro.
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13

Mensagempor Red_Beret » Sexta Dez 30, 2005 18:01

ja ta resolvido. eskecam.
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13


Voltar para Programação

Quem está ligado:

Utilizador a ver este Fórum: Nenhum utilizador registado e 1 visitante

cron