Clipper On Line • Ver Tópico - Ajuda em Linguagem C
Mudar para estilo Clássico
Discussão sobre outras linguagens de programação.
Postar uma resposta

Ajuda em Linguagem C

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...
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=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

Ajuda em Linguagem C

17 Mai 2010 10:10

Achei mudar como desse jeito, veja se é isso:

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); // Aqui mora o problema!
    getch();
}

Re: Ajuda em Linguagem C

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!

Re: Ajuda em Linguagem C

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.

Re: Ajuda em Linguagem C

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

Re: Ajuda em Linguagem C

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.

Re: Ajuda em Linguagem C

17 Mai 2010 11:45

Opa Maligno!

Acho que agora consegui...

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%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:
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

Re: Ajuda em Linguagem C

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. :)

Re: Ajuda em Linguagem C

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!

Re: Ajuda em Linguagem C

17 Mai 2010 13:42

Caramba!
Acho que AGORA eu consegui...

Código:
#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!

Re: Ajuda em Linguagem C

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.

Código:
#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.

Ajuda em Linguagem C

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...

Re: Ajuda em Linguagem C

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.

Ajuda em Linguagem C

17 Mai 2010 22:21

Tá cerrrto !

Re: Ajuda em Linguagem C

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.
Postar uma resposta