Exercicios Programação

| Blasted |

Portugal@Home Member
Boas!

Bem, tenho vindo a iniciar-me em python e no mundo da programação, e criei esta thread para que o pessoal possa trocar exercicios.
Isto é, já existem enumeras threads sobre programação, iniciação à programação, etc, mas não encontrei nenhuma que se destine à troca de exercicios.

Criei a thread porque o livro que estou a ler, não tem muitos exercicios e sou apologista que para os conhecimentos ficarem bem adquiridos, é importante praticar.
Não sei se acham útil, mas nada como propor e ver o feedback.

P.S: Não reduzi os exercicios a serem apenas para python. Coloca-se os exercicios e as pessoas resolvem na linguagem que sabem e gostam mais.

Digam de vossa justiça.

cumprimentos,
 
Criei a thread porque o livro que estou a ler, não tem muitos exercicios e sou apologista que para os conhecimentos ficarem bem adquiridos, é importante praticar.
É como a Matemática, a teoria é muito bonita, mas só se sabe o que realmente se sabe na prática :)
Eu pelo menos acho a ideia boa ;)

Assim de repente, ocorrem-me algumas coisas, mas não as vou organizar em "grau de dificuldade".

1 - fazer um programa que faça todas as combinações de todas as palavras de n letras do abecedário. Isto é, para 4 letras, AAAA,AAAB,AAAC,AAAD,(...),AAAZ,AABA,AABB,AABC,AABD,(...),AABZ,(...),AAZZ,ABAA,(......),ZZZZ.

2 - um programa que aparece no The C Programming Language: dado o input do utilizador, o programa diz o número de letras, palavras e linhas. Isto é,
Código:
The quick brown fox 
jumps over
the
lazy dog
Tem 35 letras; 9 palavras e 4 linhas (os espaços não contam ou contam à parte - são 5 :P )

3 - uma ideia que sempre gostei e concretizei: um jogo, daqueles que "o leitor faz a história". Isto é:
Código:
Ele percorreu a rua, mas, após dobrar a esquina, verifica que se encontrava num beco sem saída. 
No entanto, repara que em cada lado no fundo da rua há uma porta. O que faz?
 
1 - Entra na porta da esquerda
2 - Entra na porta da direita
3 - Recua e segue outro caminho
(a ideia original veio do meu pai, que fez isto em Clipper :P )

4 - um programa equivalente ao "tree" do DOS: mostra uma "árvore" de todas as directorias no interior de uma outra.
4.1 - ou, um programa que serve de "file explorer"
4.2 - ou ainda, um programa que calcula o tamanho de todos os ficheiros no interior de uma dada directoria.
4.2.1 - e dentro de cada uma das subdirectorias no interior da mesma. Este é especialmente útil :)

5 - um programa que faça a cópia de um ficheiro byte a byte ou buffer a buffer. Isto é especialmente útil quando, por exemplo, um CD está danificado e o Windows não deixa copiar, digamos, um vídeo que se encontrava no seu interior, mas, como a falta de alguns dados num vídeo não é crítica, o vídeo ainda é recuperável desta forma. Been there, done that :P

6 - um programa que determina os primeiros n números primos, sendo n um número definido pelo utilizador.
Como número primo entenda-se "número inteiro que apenas é divisível por ele mesmo e por 1".
6.1 - o mesmo programa, com optimizações :D


Para já, é o que se me ocorre. Espero que seja útil :)
 
Última edição:
Bem, pelo menos já tenho alguém que gostou :D

Adorei mesmo a ideia do 3. O programa em que o leitor faz a historia. É realmente uma excelente ideia. Hoje já não (o sono não deixa), mas amanha vou por isso em prática. (já estou a fervilhar de ideias ;) )
Os restantes também me parecem bons exercicios, para treinar as capacidades, mas mais matemáticos (o que também gosto). O da história, é mais pela ideia e não pela dificuldade em realizar.

Também gostei do 5, até pela utilidade que pode ter. (estava a precisar de algo do género para um video que aqui tenho). No entanto, não faço a minima ideia de por onde lhe pegar. :D

cumprimentos,
 
Sim, aquela lista tem exercícios relativamente simples, mas para quem ainda está no começo, acho que dá umas boas bases, tanto a nível de ciclos como comparações :)
btw, sou só eu que não vejo NADA de jeito nesse site? IE7 here, parece que aquilo está tudo pequeno e misturado :x

Blasted, olha que desses, eu diria que o 3 é o mais complexo a nível de estrutura ;) pensa bem em como o organizar, porque faz toda a diferença.

Quanto ao 5, abrir os ficheiros, ir sacando do ficheiro de origem <tamanho do buffer> bytes de cada vez, escrever esse buffer no ficheiro de destino e fechar os ficheiros :P
O tamanho do buffer que uso é de 8192 (2^13), mas isso é alterável.
 
Sim, aquela lista tem exercícios relativamente simples, mas para quem ainda está no começo, acho que dá umas boas bases, tanto a nível de ciclos como comparações :)
btw, sou só eu que não vejo NADA de jeito nesse site? IE7 here, parece que aquilo está tudo pequeno e misturado :x

Blasted, olha que desses, eu diria que o 3 é o mais complexo a nível de estrutura ;) pensa bem em como o organizar, porque faz toda a diferença.

Quanto ao 5, abrir os ficheiros, ir sacando do ficheiro de origem <tamanho do buffer> bytes de cada vez, escrever esse buffer no ficheiro de destino e fechar os ficheiros :P
O tamanho do buffer que uso é de 8192 (2^13), mas isso é alterável.

Claro. Nem eu disse o contrário. Por alguma coisa referi que só se ele quiser "complicar" é que deverá pegar nos problemas existentes no Uva (antigo ACM) ;)

Aquele site é optimizado para Firefox. Tem um disclaimer que diz o seguinte:

Due to the technologies used in its development, we recommend (at this time and as far as it is possible for you) the use of the Firefox Browser navigator (it has been developed with version 2 in mind, but it is possible that it works with version 1.5 too). In other case, some services could don't work in an optimal way.

Aqui aparece assim:



Basta aceder a Problem Set Volumes e irão ser listados os problemas existentes por capítulos. Caso se registem e queiram participar em concursos, terão que escolher Contest Volumes. É simples ;)
 
Última edição:
Pois, por cá aparece assim:

Quase que parece ter sido feito para ser Firefox-specific :x

@ tópico, ocorreu-me mais uma ideia: uma lista de contactos (ou agenda, etc). Mas totalmente em modo de texto :D
 
Pois, por cá aparece assim:

Quase que parece ter sido feito para ser Firefox-specific :x

@ tópico, ocorreu-me mais uma ideia: uma lista de contactos (ou agenda, etc). Mas totalmente em modo de texto :D

Pois, eles têm aquilo preparado para Firefox, tal como alguns têm preparado para IE e não funcionam bem com Firefox. É uma questão de teres os 2 como eu ;)

Essa é uma boa ideia. Foi projecto de uma cadeira de programação e tinha que ser feito em C com listas ligadas e ficheiros binários. No caso do utilizador em questão, como usa Python, aconselharia que usasse classes e ficheiros "normais".
 
Vou tentar fazer algo relacionado com o 3.
Ainda estou muito no inicio. Sei o básico do básico mesmo. Mas acho que devo conseguir fazer algo relacionado com o 3. (Por muito código inútil e desnecessário que meta lá para o meio).
Depois vocês ajudam a melhorar :D

P.S: Kayvlim, não fazia ideia que haviam tantos livros neste formato de história. Parece-me bastante interessante mesmo.

EDIT: Fiz algo assim muito rápido, só para ver se é algo deste género.
Código:
print 'Inicio da historia'
raw_input()
print 'E agora?'
print '1 - Opcao 1'
print '2 - Opcao 2'
print '3 - Opcao 3'
x = raw_input(' ')
if x == 1:
    print 'Desenvolvimento 1'
elif x == 2:
    print 'Desenvolvimento 2'
else:
    print 'Desenvolvimento 3'
Isto deve ter muita coisa desnecessária, mas pronto. Iniciante aqui! :D
Fiz só para uma opção, mas quando desenvolver mais, é só continuar. Pus aqui antes de fazer mesmo, porque assim vejo o que posso melhorar e ao fazer, já faço algo mais em condições.
 
Última edição:
Apesar de eu se calhar estar a tirar parte da piada à coisa, eu pessoalmente não iria por aí :D senão o que é que te acontece?
Código:
pergunta 1
if 1 then 
  pergunta 1.1
  if 1 then
     pergunta 1.1.1
     if 1 then
        pergunta 1.1.1.1
     else if 2 then
        pergunta 1.1.1.2
     else if 3 then
        pergunta 1.1.1.3
     end if
  if 2 then
      (... para 1.1.2)
  if 3 then
      (... para 1.1.3)
if 2 then
      (... para 1.2)

Tradução: uma valente confusão :D

Eu se fosse a ti usava...
...funções e arrays
;)
Por isso, enquanto não souberes como trabalham, talvez seja melhor ires vendo os restantes exercícios que propus e ires aprendendo melhor a linguagem. Como disse, esse exercício é um bocado complexo :P

De qualquer das formas, se realmente quiseres ir por aí, quem sou eu para te impedir? :)
Vais é perder algum tempo a repetir código :x
 
isso é o mesmo que este: http://acm.uva.es/problemset/ ?
tenho usado esse site de vez em quando ha anos já (e foi na techzone que o descobri por acaso), e é brutal para se fazer uns exercicios de programação.

Sim, é o mesmo. Se reparares ao abrires esse link tem lá escrito que migraram para um novo servidor, servidor esse que possui o endereço que referi.

Sim, para treinar programação a sério não deve haver melhor ;)
 
Kayvlim, decidi então começar por um dos outros exercícios que sugeriste.
Qual te parece ser a ordem adequada de execução? Isto é, qual devo fazer primeiro?
 
Acho que o 1, o 2 e o 6 são os mais simples, mas no caso do 1 e do 6 tens de saber relativamente bem usar ciclos, e no caso do 2, depende da linguagem, mas deves precisar de saber manipular strings :x No caso do C não é preciso tanta coisa (é só uma brincadeira com getchars), mas as outras linguagens já tratam o input de forma diferente.

Acho que a ordem certa é 6-1-2-5-4-3, sem contar com os "sub"-exercícios :P
 
Estou a tentar fazer aqui este exercício. Apesar de provavelmente ser dos mais básicos que existem, ainda estou aqui a ver como hei-de pegar nisto.
Considero que a parte do "desafio" é a mais interessante e produtiva do exercício, venho aqui pedir umas dicas (indicações, não código) de como pegar nisto.

O exercício, tal como está no post do Kayvlim, é este:

6 - um programa que determina os primeiros n números primos, sendo n um número definido pelo utilizador.
Como número primo entenda-se "número inteiro que apenas é divisível por ele mesmo e por 1".
 
Definição de número primo: "número inteiro apenas divisível por ele mesmo e por 1".
Como determiná-lo? Tentativa e erro - dividir por cada um dos números inteiros entre 2 (porque por 1 são todos divisíveis) e ele mesmo - 1 (porque por ele mesmo é sempre 1). Ou seja, para qualquer n, dividir por todos os números inteiros do intervalo ]1, n[

Optimização:
Para qualquer n, não é possível dividí-lo não é preciso dividí-lo por qualquer número entre raíz quadrada de n e n, uma vez que, se for divisível por algum número entre sqrt(n) e n/2, é divisível por pelo menos um número entre 2 e sqrt(n). Ou seja, não vale a pena dividir pelos números inteiros no intervalo [raíz(n), n]
Em relação à correcção do spoiler acima, ver este post.
 
Última edição:
Definição de número primo: "número inteiro apenas divisível por ele mesmo e por 1".
Como determiná-lo? Tentativa e erro - dividir por cada um dos números inteiros entre 2 (porque por 1 são todos divisíveis) e ele mesmo - 1 (porque por ele mesmo é sempre 1). Ou seja, para qualquer n, dividir por todos os números inteiros do intervalo ]1, n[

Optimização:
Para qualquer n, não é possível dividí-lo por qualquer número entre raíz quadrada de n e n. Ou seja, não vale a pena dividir pelos números inteiros no intervalo [raíz(n), n]

Percebi a primeira parte do teu post. No entanto a parte do spoiler, confesso que não percebi onde queiras chegar, envolvendo:

raizes quadradas.
 
Back
Topo