Somatório

25 respostas
guisantogui

Galera pelo amor de Deus!

to precisando mais do que nunca da ajuda de voces!
Preciso fazer um somatório pro seguinte laço de repetição

public int somaMai(int i, tamRua){
int maiores = 0;
for(int g = i; g< tamRua; g++){
maiores += g;
}
return maiores;

Já tentei inumeras formulas, mas nada funciona!
vlw

PS.: postei isso no avançado por engano se algum moderador ler pode tracar lá

25 Respostas

Trebloc

Pra mim é um somatório simples de i até tamRua:

tamRua Σ i

MaiqueL

http://www.guj.com.br/posts/list/202553.java#1024285

pedroroxd

Só uma coisa…
o i está cendo inútil no programa…
Só serve para o “g” receber o valor dele… Você pode muito bem utilizar o i dentro do for.

pedroroxd

[EDITADO MENSAGEM OFENSIVA]
Falar palavrão não. kkkk

http://www.guj.com.br/posts/list/202553.java

ViniGodoy
MaiqueL

pedroroxd, tudo bem o algoritmo do guisantogui esta sem lógica.

Mas tem mais alguma coisa que você queira acrescentar ?

Pq sinceramente, não leva para o lado pessoal vc não agregou valor nenhum a este tópico.

pedroroxd

MaiqueL:
pedroroxd, tudo bem o algoritmo do guisantogui esta sem lógica.

Mas tem mais alguma coisa que você queira acrescentar ?

Pq sinceramente, não leva para o lado pessoal vc não agregou valor nenhum a este tópico.


Você não viu o tópico editado…
O que eu falei é que ele duplicou tópico, e deveria ser trancado
Acabou que foi feito, e meu palavrão sensurado.
http://www.guj.com.br/posts/list/202553.java#1024318

MaiqueL

censurado*

kkkk…

Ah beleza então.

[]`s

guisantogui

Pow gente qro pedir desculpa pelo engano ai, só me dei conta que tinha postado no Avançado depois que cliquei, por isso coloquei o “PS” no primeiro post!

Mas sem perder o foco do problema o que realmente estou buscando é a formula matematica que resolve aquele laço.

deu uma lida aqui e atualizei o metodo, mas não ajuda muito na velocidade, quando em grandes proporções.

samuel.ramos

Bom dia…
Vc quer somar um valor que é recebido como parâmetro de 1 até N?

Se for isso… Faça isto aqui…

package Somatorio;

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println("Soma: " + somatorio(40));
	}

	public static int somatorio(int num) {
		int soma = 0;

		for (int i = 0; i < num; i++) {
			soma += num;
		}
		return soma;
	}

}
guisantogui
samuel.ramos:
Bom dia... Vc quer somar um valor que é recebido como parâmetro de 1 até N? Se for isso... Faça isto aqui...
package Somatorio;

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println("Soma: " + somatorio(40));
	}

	public static int somatorio(int num) {
		int soma = 0;

		for (int i = 0; i < num; i++) {
			soma += num;
		}
		return soma;
	}

}

Não, meu problema é na matematica qro transformar esse metodo:

public  int somaMai(int i, tamRua){  
 int maiores = 0;  
 for(; i< tamRua; i++){  
 maiores += i;  
 }  
return maiores;

Em uma formula matematica que me trara mais velocidade para quando eu rodar o algoritimo ele levar menos tempo!

MaiqueL

http://sftcode.blogspot.com/2010/03/conhecer-metodos-matematicos-te-faz-um.html

Contam que Gauss encontrou essa razão matemática aos 8 anos de idade.

guisantogui

MaiqueL:
http://sftcode.blogspot.com/2010/03/conhecer-metodos-matematicos-te-faz-um.html

Contam que Gauss encontrou essa razão matemática aos 8 anos de idade.

Só tem uma pequena diferença nos algoritimos, nesse ele sabia de qual numero começar (1), mas no meu algoritimo eu passo o numero de inicio (i) e o de fim (tamAtual)!

Analise melhor o codigo antes! :wink:

MaiqueL

guisantogui:
MaiqueL:
http://sftcode.blo[color=red] [/color]gspot.com/2010/03/conhecer-metodos-matematicos-te-faz-um.html

Contam que Gauss encontrou essa razão matemática aos 8 anos de idade.

Só tem uma pequena diferença nos [size=18]algoritimos[/size][size=10] [/size], nesse ele sabia de qual numero começar (1), mas no meu algoritimo eu passo o numero de inicio (i) e o de fim (tamAtual)!

Analise melhor o codigo antes! :wink:

Você ta brincando né ?

1 ) algoritmos* e não algoritimos

2 ) Ta na hora de você pensar um pouco né !

  1. Agora entendi o pq o palavrão do pedroroxd a minha vontade é %&^*&
guisantogui

Gente consegui chegar em uma formula

((tamAtual-i+1) * (tamAtual - i))*3

classe completa:

package Teste;

public class Teste {

    public static int somaMen(int i){
        return ((i+1)*i)/2;
    }

    public static int somaMai(int i, int tamAtual){
        return ((tamAtual-i+1) * (tamAtual - i))*3;

        /*int maiores = 0;
        for(;i <= tamAtual; i++){
        maiores += i;
        }
        return maiores;*/
    }

    public static void confeitaria(){
        StringBuilder sb = new StringBuilder();
        for(int tamRua = 8; tamRua < 50000; tamRua++){
            for(int i= 5; i < tamRua; i++){
                if(somaMen(i) == somaMai(i, tamRua)){
                    sb.append("\nConf ");
                    sb.append(i);
                    sb.append("\nRua ");
                    sb.append(tamRua);
                    System.out.println(sb.toString());
                }
            }
        }
    }

O problema que só funciona para quando a rua tem tamanho 49, a posição seria a 35 e o resultado 630, alguem sabe me dizer onde tenho que mexer para que funcione para os outros casos?

MaiqueL

fesaab

cara, nao to entendendo o que vc quer fazer…
dah uma explicada ai…

guisantogui

Eu tenho q comparar o metodo somaMai(int, int) com o somaMen(int) e se eles forem iguais eu printo se não, não!

Mas agora eu to tentando formular uma formula para o metodo somaMai(int, int) ficar mais eficiente!

guisantogui

Alguem?

pedroroxd

public static Integer somatorioNPrimeirosInteiros(Integer n) { return (n * (n+1)) / 2; }
Foi só seguir o link de uma das respostas. Evita o loop, é um método matemático.

T

guisantogui:
Galera pelo amor de Deus!

to precisando mais do que nunca da ajuda de voces!
Preciso fazer um somatório pro seguinte laço de repetição

public int somaMai(int i, tamRua){
int maiores = 0;
for(int g = i; g< tamRua; g++){
maiores += g;
}
return maiores;

Já tentei inumeras formulas, mas nada funciona!
vlw

PS.: postei isso no avançado por engano se algum moderador ler pode tracar lá

Cara, é uma PA de razão 1. Pra somar é só fazer:

public int somaMai(int i, int tamRua){
      return (i+tamRua)*(tamRua-i+1)/2;
}
pedroroxd

Como eu disse, e o Tiago também, é uma PA de razão 1.
Se não estudou isso em matemática ainda, olhe: http://pt.wikipedia.org/wiki/Progressão_aritmética

guisantogui
public int somaMai(int i, int tamRua){   
      return (tamRua-i)*(tamRua-i+1)/2;   
}

Eu tinha feito assim com o sinal de menos, não testei, mas será que essa alteração para mais funciona certinho?
mesmo assim obrigado pela contribuição! Vou testar qdo puder

T

guisantogui:
public int somaMai(int i, int tamRua){ return (tamRua-i)*(tamRua-i+1)/2; }

Eu tinha feito assim com o sinal de menos, não testei, mas será que essa alteração para mais funciona certinho?
mesmo assim obrigado pela contribuição! Vou testar qdo puder

A questão é você entender a lógica guisantogui.
A fórmula para somar elementos de uma PA da forma que você propôs é:

Soma = [(a1 + an) * n]/2. Onde a1 é o primeiro elemento; an é o último elemento; e n é o número de elementos. Para uma PA de razão 1, o número de elementos é a diferença entre o an e a1 somado ao valor 1, pois os dois valores (an e a1) são inclusos na somatória.

guisantogui

Gente, não funcionou, mas vou deixar como está!

Obrigado a todos pela ajuda!

Criado 30 de março de 2010
Ultima resposta 31 de mar. de 2010
Respostas 25
Participantes 8