Exercicios Programação

Exacto. Em Python não há switch. Tem que ser criado manualmente. No exame de uma cadeira em que a linguagem era Python, tinha uma questão em que se pretendia exactamente isso ;)

Quanto ao problema em questão:

Código:
from math import sqrt
def primo(num):
    if num<4:
        return 1
    elif num%2==0:
        return 0
    else:
        for i in range(2,int(sqrt(num))+1):
            if num%i==0:
                return 0
    return 1
                
def main():
    i=0
    z=1
    n=input("Insira n\n")
    while i<n:
        z+=1
        if primo(z):
            i+=1
            print "Primo -> ",z

if __name__=="__main__":
    main()

Se não fosse pedir muito, podias explicar o teu como chegaste a isto? Explicar o raciocínio?
 
Se não fosse pedir muito, podias explicar o teu como chegaste a isto? Explicar o raciocínio?

Código:
from math import sqrt
def primo(num):
    if num<4: #Se o número for menor do que 4 (1 já foi excluído) tem que ser primo
        return 1
    elif num%2==0: #Caso contrário, se o número for par não é primo
        return 0
    else: #Caso contrário verifica se o número é divisível por outro de 2 até ao valor da sua raiz quadrada
        for i in range(2,int(sqrt(num))+1):
            if num%i==0:
                return 0
    return 1
                
def main():
    i=0 #Inicialização do numero de primos encontrados
    z=1 #Inicialização do número a comprovar se é primo (como está a 1 e incrementa logo no início, exclui o 1)
    n=input("Insira n\n")
    while i<n: #Enquanto não se encontrarem n primos
        z+=1 #Incrementa o número a comprovar
        if primo(z): #Se for primo
            i+=1 #Incrementa o númeor de primos encontrados
            print "Primo -> ",z #Imprime o primo encontrado

if __name__=="__main__":
    main()
Agora com comentários já está suficientemente explícito? ;)
 
os programas que eu fazia na escola sempre que iniciamosr uma linguagem eram +/- estes:
-numeros primos de um intervalo(ja foi dito atras)

-adivinhar um numero de 0 a 100 gerado pelo pc (random..) (o PC vai dizendo se e mais alto ou mais baixo do que a tentativa)

-dizer os anos bissextos de um intervalo de anos (tipo de 1000 a 2000)

dizer todos os divisores de um certo numero

calculadoras com diversas funcoes (quadrados, raizes, operacoes basicas etc..)

chave do totoloto / euromilhoes (nunca acertou mesmo :P )
entre outros.. agora so me lembrei desses.. mas havia mais programas que faziam parte do nosso ritual :D
com isso ai ficavamos a dominar bem todos os loops, arrays, operacoes com numeros etc....


[offtopic]
nao ha aqui um topico para pedir ideias para um programa? tenho um que comecei a fazer ha uns meses atras e curtia melhorar (porque o programa e util..).. faltam e ideias.. mas nao me apetecia abrir um topico so para isso. :P
[/offtopic]
 
Última edição:
Boas,

Estou a tentar fazer o exercício dos numeros primos, mas como o Viskonde sugeriu, ou seja, procurar todos os numeros primos num dado intervalo.

Eu fiz isto:

Código:
//Programa que encontra todos os numeros primos num intervalo
#include <iostream>
using namespace std;
int main()
{
    int a, b
    cout << "Este programa descobre todos os numeros primos num dado intervalo" << endl;
    cout << "\nIntroduza um numero, prima ENTER e em seguida introduza outro numero" << endl;
    cin >> a >> b;
    cout << "\nNumeros primos entre " << a << " e " << b << ":" <<endl;
    if (a<b)
    primo(a);
    cin.get();
    cin.get();
    return 0;
}
int primo( int a)
    {
           while ((a%z != 0) && (z < ( a / 2)))
           z= z + 1
             if (z= a/2)
             a=a+1
             else
             {
                 a=a + 1
                 return a;
                 }
                 }

Mas não tive coragem para compilar isto, porque parece-me que está errado, mas de qualquer forma gostava que alguém me dissesse o quê que está errado (se estiver errado).

A linguagem é C++.

Desde já agradeço a quem responder à minha pergunta e a quem contribuiu para este post.
 
na função primo. falta declarar e iniciar a variavel z
em vez de if (z= a/2), deve ser if (z== a/2)

depois isso calcula os primos (se estiver certo, não estou com cabeça apra ver isso agora) mas não os escreve

btw, escusas de ter medo de compilar. no máximo podias ter um ciclo infinito mas bastava desligares o processo pelo gestor de tarefas
 
na função primo. falta declarar e iniciar a variavel z
em vez de if (z= a/2), deve ser if (z== a/2)

depois isso calcula os primos (se estiver certo, não estou com cabeça apra ver isso agora) mas não os escreve

btw, escusas de ter medo de compilar. no máximo podias ter um ciclo infinito mas bastava desligares o processo pelo gestor de tarefas

Tem mesmo de ser pelo gestor de tarefas...tipo eu quando executo um programa aparece-me sempre uma janela do tipo MS-DOS...não basta fechá-la???

Eu não gosto muito de arriscar, porque ainda estou no início e li algures que C++ é uma linguagem que usa muito o processador e por isso pode-se queimar o processador se as instruções estiverem erradas.


EDIT: Ao compilar dá-me um erro na linha:

Código:
primo(a)

Diz que a função primo não está declarada. O quê que devo fazer???


EDIT2: já resolvi (pus primeiro a função primo e depois a main) e corrigi os erros (já compilei e tudo), mas quando executo depois de inserir os 2 numeros (a,b) aparece-me uma janela a dizer que o programa deixou de funcionar e que o windows (Vista) vai tentar resolver o problema (eu meti cancelar).

É obvio que o programa tem erros...gostava que alguem mos dissesse.
 
Última edição:
queimar o processador?? nem pensar! os jogos também usam muito a placa gráfica e ela não se estraga pois não? se o processador tem uma velocidade de X GHz o que o programa vai fazer é ocupar muitos desse Hz, tornando talvez o computador mais lento.
para queimar era preciso que o programa fizesse overclock ao processador ou desligasse o cooler, sei lá

quanto ao erro: a função primo (e todas as funções que uses) têm que ser declaradas antes da função main().
dito de uma maneira simples: quando o compilador vê uma chamada a uma função ele tem que conhecer já a função, senão dá erro
se por exemplo a tua função primo() chamasse a função exemplo(), esta ultima tinha que estar declarada antes da primo
 
queimar o processador?? nem pensar! os jogos também usam muito a placa gráfica e ela não se estraga pois não? se o processador tem uma velocidade de X GHz o que o programa vai fazer é ocupar muitos desse Hz, tornando talvez o computador mais lento.
para queimar era preciso que o programa fizesse overclock ao processador ou desligasse o cooler, sei lá


Assim fico mais descansado, por não haver problemas com o processador.

Obrigado pela resposta.

Dentro da função primo estou a ver a falta de muitos ";"s. Isso não estará a causar problemas?

Isso não é problema, porque já consegui compilar o programa (á medida que ia compilando o programa ia dizendo os erros e já acrescentei todos os ";".

O problema é que executo o programa, ele pede para introduzir os 2 numeros e depois aparece uma janela a dizer que o programa foi encerrado e que o windows está a tentar encontrar uma solução para o problema.

Já agora tirando os ";" o exercício está correcto?? Acgo que não era suposto dar este erro...o programa depois das correcções está com este aspecto:

Código:
//Programa que encontra todos os numeros primos num intervalo
#include <iostream>
using namespace std;
int primo( int a)
    {
           int z;
           while ((a%z != 0) && (z < ( a / 2)))
           z= z + 1;
             if (z= a/2)
             a=a+1;
             else
             {
                 a=a + 1;
                 return a;
                 }
                 }
int main()
{
    int a, b;
    cout << "Este programa descobre todos os numeros primos num dado intervalo" << endl;
    cout << "\nIntroduza um numero, prima ENTER e em seguida introduza outro numero" << endl;
    cin >> a >> b;
    cout << "\nNumeros primos entre " << a << " e " << b << ":" <<endl;
    if (a<b)
    primo(a);
    cin.get();
    cin.get();
    return 0;
}
 
além disso declaras a variavel z, mas não lhe atribuis um valor no inicio.
resultado, quando chega pela primeira vez ao z=z+1, pode dar um número qualquer, e a partir dai está o programa estragado

outra coisa, o teu programa diz que calcula os primos entre A e B, mas depois de leres o B nunca mais o usas. tens que o enviar também como parametro e no ciclo verificar se já chegou ao limite (será que era a suposta função do z?)
 
A função primo só termina se entrar no bloco do else. Se por acaso entrar no do if, não termina.

E o quê que eu devo fazer então???

Eu acrescentei isto à função:

Código:
int primo( int a)
    {
           int z;
           while ((a%z != 0) && (z < ( a / 2)))
           z= z + 1;
             if (z= a/2)
             {
                    a=a+1;
                    return 0;
                    }
             else
             {
                 a=a + 1;
                 return a;
                 }
                 }

Mas mesmo assim o programa dá-me o mesmo erro.
Se puderes dá-me uma ajuda, porque eu ainda não tenho muita prática em programação.

Cumps


EDIT: já mudei o programa todo e agora não dá erro mas mesmo assim oprograma não devolve nenhum numero (nem primo nem não primo)...o programa ficou:

Código:
//Programa que encontra todos os numeros primos num intervalo
#include <iostream>
using namespace std;
int primo( int a)
    {
           int z;
           while ((a%z != 0) && (z < ( a / 2)))
           {
           z= z + 1;
             if (z= a/2)
             {
                    a=a+1;
                    int main();
                    return 0;
                    }
             else
             {
                 cout << a << endl;
                 a=a + 1;
                 int main();
                 return a;
                 }
                 }
                 }

int main()
{
    int a, b;
    cout << "Este programa descobre todos os numeros primos num dado intervalo" << endl;
    cout << "\nIntroduza um numero, prima ENTER e em seguida introduza outro numero" << endl;
    cin >> a >> b;
    cout << "\nNumeros primos entre " << a << " e " << b << ":" <<endl;
    if (a<b)
    {
            int primo(a);
            }
    cin.get();
    cin.get();
    return 0;
}

Peço desculpa pela extensão do post.
 
Última edição:
Boas,

Estou a tentar fazer um programa que resolva equações do segundo grau (em c++), mas estou com um problema, porque preciso de usar a raiz quadrada e então faço sqrt (delta) , só que ao compilar dá-me erro e diz que esta função não foi declarada...não existe nenhuma função pre-definida que calcule a raiz quadrada???

Se não houver como é que faço para calcular a raiz quadrada de um numero??

Agradeço desde já a quem me conseguir ajudar e já agora será que me podiam ajudar na minha dúvida do meu post anterior (sobre os numeros primos), porque ainda não consegui fazer esse exercício...nem sei mais o quê que hei-de mudar no programa.
 
Estive a alterar o código do exercício dos numeros primos de um dado intervalo e ficou assim:

Código:
//Programa que encontra todos os numeros primos num intervalo
#include <iostream>
using namespace std;
int a, b;
int funcao(); //Função auxiliar
int primo( int a)
    {
           int z;
           z=1;
           z= z+1;
           if ((a%z != 0) && (z < ( a / 2)))
           z= z + 1;
           else if (z < ( a / 2))
             {
             cout << a << endl;
             a=a + 1;
             int funcao();
             return a;
             }
           else
           int funcao();
    }
int funcao()
{
    if (a<b)
    {
            int primo(a);
            }
    else
    {
        cin.get();
        cin.get();
        return 0;
        }
}
int main()
{
    int a, b;
    cout << "Este programa descobre todos os numeros primos num dado intervalo" << endl;
    cout << "\nIntroduza um numero, prima ENTER e em seguida introduza outro numero" << endl;
    cin >> a >> b;
    cout << "\nNumeros primos entre " << a << " e " << b << ":" <<endl;
    if (a<b)
    {
            int primo(a);
            }
    else
    {
        cout << "O primeiro numero tem de ser menor do que o segundo" << endl;
        cout << "Prima ENTER para sair";
    cin.get();
    cin.get();
    return 0;
}
cin.get();
cin.get();
return 0;
}

Eu penso que esteja quase tudo correcto...o meu único problema é na função primo:

Código:
int primo( int a)
    {
           int z;
           z=1;
           z= z+1;
           if ((a%z != 0) && (z < ( a / 2)))
           z= z + 1;
           else if (z < ( a / 2))
             {
             cout << a << endl;
             a=a + 1;
             int funcao();
             return a;
             }
           else
           int funcao();
    }

Mais propriamente no if...eu sei que está errado, mas não sei como alterar, ou seja, o meu problema é verificar se um numero é primo ou não.

Já agora também tava a pensar fazer o exercício 1 (das combinações de letras), mas precisava de uma orientação (só dizerem como devo começar, o código quero ser eu a fazer).

Peço desculpa por estar sempre a chatear-vos com o exercício dos numeros primos, mas quando tenho um problema gosto de lhe arranjar uma solução...nem que seja com ajuda.

P.S. Obrigado pelas respostas.
 
Que confusão para aí vai, estás a complicar o que é simples.

A função primo() chama a função funcao() que chama outra vez a função primo()... isso resolve-se com uns simples ciclos for.

PS: Quando chamas um função não tens que por o tipo da função, aliás, até acho que dá erro.
 
Back
Topo