Ajuda em Linguagem C

Fórum sobre outras linguagens de programação.

Moderador: Moderadores

trooper7
Usuário Nível 2
Usuário Nível 2
Mensagens: 53
Registrado em: 19 Fev 2010 12:22
Localização: Ribeirão Preto/SP

Ajuda em Linguagem C

Mensagem por trooper7 »

Olá pessoal, tudo beleza!?

Bom, preciso fazer uma lista de exercícios para a faculdade, em que há o seguinte problema:
Escrever os números primos entre 100 e 200 bem como a soma desses números
A única coisa que consegui até agora foi fazer o cálculo dos números primos...

Código: Selecionar todos

#include <stdio.h>
#include <conio.h>

int main (void){
    int i, soma;
    printf("\nNumeros primos entre 100 e 200:\n\n", i);
    for(i=100; i<=200; i++){
        if (i % 2 != 0)
        { 
           printf("%d\n", i);
           }
           }
           soma=i+1;
           printf("E a soma de todos eles eh: %d", soma); // Aqui mora o problema!
    getch();
    

}
Mas estou me embananando na hora da soma!

Tentei de várias maneiras, mas está difícil... :(Neg

Agradeço muito quem puder me ajudar nessa, galera!

Um grande abraço a todos! ;D
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Ajuda em Linguagem C

Mensagem por Pablo César »

Achei mudar como desse jeito, veja se é isso:

Código: Selecionar todos

#include <stdio.h>
#include <conio.h>

int main (void){
    int i, soma;
    printf("\nNumeros primos entre 100 e 200:\n\n", i);
    for(i=100; i<=200; i++){
        if (i % 2 != 0)
        {
           printf("%d\n", i);
           soma=soma+i;
        }
    }
    printf("E a soma de todos eles eh: %d", soma); // Aqui mora o problema!
    getch();
}
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
trooper7
Usuário Nível 2
Usuário Nível 2
Mensagens: 53
Registrado em: 19 Fev 2010 12:22
Localização: Ribeirão Preto/SP

Re: Ajuda em Linguagem C

Mensagem por trooper7 »

Nossa!
Perfeito Pablo!
Maravilha amigão! Deu certinho!

A minha variável soma estava fora do if e contando +i... rs

Muito obrigado!
E vamos aos outros exercícios agora... :'( kkk

Abraços!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Ajuda em Linguagem C

Mensagem por Maligno »

Detalhe: você está considerando como primo o número que for ímpar. Mas nem todos ímpares são primos. Entre 100 e 200 há vários ímpares não-primos. Veja a lista completa, nessa faixa:

101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197 e 199.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
trooper7
Usuário Nível 2
Usuário Nível 2
Mensagens: 53
Registrado em: 19 Fev 2010 12:22
Localização: Ribeirão Preto/SP

Re: Ajuda em Linguagem C

Mensagem por trooper7 »

Olá maligno!

Realmente, estou pegando apenas os números ímpares no intervalo [100, 200]... :/
Acho que estou penando na verificação se o número é primo ou não!

Segue meu código:

Código: Selecionar todos

#include <stdio.h>
#include <conio.h>

int main (void){
    int i, soma;
    printf("\nNumeros primos entre 100 e 200:\n\n", i);
    for(i=100; i<=200; i++)
    {
        if (i % 2 != 0)
        {
           printf("%d\n", i);
           soma=soma+i;
        }
    }
    printf("E a soma de todos eles eh: %d", soma);
    getch();
}
Se puder me ajudar a resolver, agradeço muito!

Abraço!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Ajuda em Linguagem C

Mensagem por Maligno »

Nunca fiz isso. Felizmente nunca precisei. Mas não parece ser tão difícil. A única forma de resolver o problema é estudá-lo. Na net tem tudo o que precisa. Não acredito que vá ter qualquer dificuldade. Veja na Wikipedia. Acho que lá já deve ter tudo.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
trooper7
Usuário Nível 2
Usuário Nível 2
Mensagens: 53
Registrado em: 19 Fev 2010 12:22
Localização: Ribeirão Preto/SP

Re: Ajuda em Linguagem C

Mensagem por trooper7 »

Opa Maligno!

Acho que agora consegui...

Código: Selecionar todos

#include <stdio.h>
#include <conio.h>

int main (void){
    int i, soma;
    printf("\nNumeros primos entre 100 e 200:\n\n", i);
    for(i=100; i<=200; i++)
    {
        if (i%1==0 && i%i==0)
        {
           printf("%d\n", i);
           soma=soma+i;
        }
    }
    printf("E a soma de todos eles eh: %d", soma);
    getch();
}
Claro, um número só é considerado primo quando é divisível por 1 e por ele mesmo... então é só colocar isso na condicional!

Código: Selecionar todos

if (i%1==0 && i%i==0)
Muito obrigado pela ajuda, galera!
Ultimamente ando tão cheio de coisas na cabeça, que essas "bobeiras" acabam passando despercebidas! rs

Mais uma vez obrigado!

Abraços! ;D
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Ajuda em Linguagem C

Mensagem por Maligno »

Acho que você vai precisar elaborar um pouco mais esse código. Tome por exemplo o número 121. Ele é divisível por 1 e por ele mesmo. No entanto, ele também é divisível por 11. Não é primo, mas passa no seu código como se fosse.

Dica: sempre que fizer algum código, faça o possível para provar que ele está errado. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
trooper7
Usuário Nível 2
Usuário Nível 2
Mensagens: 53
Registrado em: 19 Fev 2010 12:22
Localização: Ribeirão Preto/SP

Re: Ajuda em Linguagem C

Mensagem por trooper7 »

Puts! :%
Todo número é divisível por 1 e por ele mesmo... porém os números primos obedecem SOMENTE esta condição!

E do jeito que coloquei no meu programa, ela irá imprimir na tela todos os números contidos entre 100 e 200, que sejam divisíveis por 1 e por eles mesmos, ou seja, imprime tudo! ¬¬'

Nossa, consciliando tarefas do serviço com trabalho da faculdade... nossa, é complicado! Tô ficando louco! rs

Mas obrigado pela observação Maligno! Vou tentar elaborar melhor esse programa!

Abraço!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
trooper7
Usuário Nível 2
Usuário Nível 2
Mensagens: 53
Registrado em: 19 Fev 2010 12:22
Localização: Ribeirão Preto/SP

Re: Ajuda em Linguagem C

Mensagem por trooper7 »

Caramba!
Acho que AGORA eu consegui...

Código: Selecionar todos

#include <stdio.h>
#include <conio.h>

int primo(int b)
{
    int i, count = 0;
    for(i=1;i<b+1;i++)
    {
          if((b % i) == 0)
          {
                count++;
          }
    }

    if(count == 2)
    {
          return 1;
    }
    else
    {
          return 0;
    }
}

int main()
{
    int i, soma;
    printf("\nNumeros primos entre 100 e 200!\n\n");
    for(i=100;i<=200;i++)
    {
          if(primo(i) == 1)
          {
                printf("%d\n", i);
                soma=soma+i;
          }
    }
    printf("\nE a soma de todos eles eh: %d", soma);
    getch();
} 
Pesquisei, rachei a cabeça, e acho que agora está tudo conforme! o/ kkk

Valeu pela força!

Abraços!
"É comum vermos os homens zombarem do que não podem compreender." (Goethe)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Ajuda em Linguagem C

Mensagem por Maligno »

Claro que são poucos números. Mas se fosse um volume grande de dados, a performance poderia ser comprometida pelo código redundante. Então resolvi fatorar o seu código, a título de ilustração. Não precisa mudar o que já fez.

Código: Selecionar todos

#include <stdio.h>
#include <conio.h>

int primo(int b) {
    int i, count = 0;
    for(i=2; i<=b; i++) if(!(b%i)) count++;
    return (count<2);
}

int main() {
    int i, soma;
    printf("\nNumeros primos entre 100 e 200!\n\n");
    for(i=100; i<=200; i++) {
        if (primo(i)) {
            printf("%d\n",i);
            soma += i;
        }
    }
    printf("\nE a soma de todos eles eh: %d", soma);
    getch();
}
Lembre-se: em C e C++, o zero é sempre falso e qualquer valor diferente de zero é verdadeiro. Essa característica ajuda a economizar código e melhora a performance, já que dispensa uma comparação.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Ajuda em Linguagem C

Mensagem por Pablo César »

Maligno escreveu:Detalhe: você está considerando como primo o número que for ímpar.
Puts... como passou por alto isso ! Olhe que tinha entendido mas não me deparei nesse "pequeno" detalhe... rsrs
Fiquei empolgado em responder, ainda com a pressa que tinha para me preparar e ir ao dentista... acabei não atentando a esse detalhe. Ainda bem que aqui sempre podemos contar com o nosso benemérito colega Maligno. Desculpem, não foi má vontade... foi distração mesmo. Mas o importante que foi resolvido.
se fosse um volume grande de dados, a performance poderia ser comprometida pelo código redundante.
Mas ainda acho Maligno que a sua fatoração só sintetizou a quantidade de linha mas manteve o mesmo procedimento que o Thiago fez por ultimo. Estou errado ?

Também não sei, se seria conveniente verificar a possibilidade de inclusão do único número par que é primo, isto é, o número 2. Claro que sabemos que logo de cara, essa faixa não inclui o 2 mas talvez seja necessário colocar em váriáveis, ou melhor dito, permitir a parametrização do número inicial e final para que a função fosse mais flexível, aceitando números ou faixa de números variáveis, daí sim caberia fazer a comparação de faixa inicio e fim se está incluso o número dois e checar os valores se está em modo ascendentes (primeiro_parametro <= segundo_parametro) por exemplo.

Ahh mas acho que eu ja estou sendo chato... se foi fixo essa faixa, então esqueça o 2...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Ajuda em Linguagem C

Mensagem por Maligno »

sua fatoração só sintetizou a quantidade de linha mas manteve o mesmo procedimento
Sim, o procedimento é o mesmo de antes. Mas como eu disse, a eliminação de uma comparação numa malha que possa eventualmente manipular porrilhões de números, pode fazer uma notável diferença de perfomance. Mas foi só uma sugestão para projetos futuros. Fatorar código é sempre uma boa idéia, um hábito saudável. Até o limite da legibilidade, claro.
único número par que é primo, isto é, o número 2.
Repare que o enunciado do problema exclui o número 2, já que pede apenas os valores entre 100 e 200.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Ajuda em Linguagem C

Mensagem por Pablo César »

Tá cerrrto !
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Ajuda em Linguagem C

Mensagem por Maligno »

Enquanto tomava banho lembrei de um detalhe: todo número é divisível por 1. Então fatorei mais um pouco e economizei uma iteração da malha.

Tá vendo? Você não foi o único que se distraiu. :) Quando não se tem compromisso com o problema, que é bem o nosso caso, há o risco de deixarmos escapar algum detalhe.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder