Clipper On Line • Ver Tópico - Ajuda em Linguagem C

Ajuda em Linguagem C

Discussão sobre outras linguagens de programação.

Moderador: Moderadores

 

Ajuda em Linguagem C

Mensagempor trooper7 » 17 Mai 2010 08:58

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...
#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 de usuário

trooper7
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 53
Data de registro: 19 Fev 2010 11:22
Cidade/Estado: Ribeirão Preto/SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Ajuda em Linguagem C

Mensagempor Pablo César » 17 Mai 2010 10:10

Achei mudar como desse jeito, veja se é isso:

#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.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Re: Ajuda em Linguagem C

Mensagempor trooper7 » 17 Mai 2010 10:20

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 de usuário

trooper7
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 53
Data de registro: 19 Fev 2010 11:22
Cidade/Estado: Ribeirão Preto/SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Ajuda em Linguagem C

Mensagempor Maligno » 17 Mai 2010 10:36

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!
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Re: Ajuda em Linguagem C

Mensagempor trooper7 » 17 Mai 2010 11:14

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:
#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 de usuário

trooper7
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 53
Data de registro: 19 Fev 2010 11:22
Cidade/Estado: Ribeirão Preto/SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Ajuda em Linguagem C

Mensagempor Maligno » 17 Mai 2010 11:35

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!
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Re: Ajuda em Linguagem C

Mensagempor trooper7 » 17 Mai 2010 11:45

Opa Maligno!

Acho que agora consegui...

#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!

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 de usuário

trooper7
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 53
Data de registro: 19 Fev 2010 11:22
Cidade/Estado: Ribeirão Preto/SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Ajuda em Linguagem C

Mensagempor Maligno » 17 Mai 2010 11:52

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!
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Re: Ajuda em Linguagem C

Mensagempor trooper7 » 17 Mai 2010 13:07

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)
Avatar de usuário

trooper7
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 53
Data de registro: 19 Fev 2010 11:22
Cidade/Estado: Ribeirão Preto/SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Ajuda em Linguagem C

Mensagempor trooper7 » 17 Mai 2010 13:42

Caramba!
Acho que AGORA eu consegui...

#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 de usuário

trooper7
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 53
Data de registro: 19 Fev 2010 11:22
Cidade/Estado: Ribeirão Preto/SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Ajuda em Linguagem C

Mensagempor Maligno » 17 Mai 2010 14:06

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.

#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 de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Ajuda em Linguagem C

Mensagempor Pablo César » 17 Mai 2010 21:45

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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Re: Ajuda em Linguagem C

Mensagempor Maligno » 17 Mai 2010 22:18

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 de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Ajuda em Linguagem C

Mensagempor Pablo César » 17 Mai 2010 22:21

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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Re: Ajuda em Linguagem C

Mensagempor Maligno » 17 Mai 2010 23:09

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!
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Próximo



Retornar para Outras linguagens de programação

Quem está online

Usuários vendo este fórum: Google Adsense [Bot] e 14 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro