Autor Tópico: Postem seus Programas!  (Lida 4410 vezes)

Offline _Luks

  • Usuário Ubuntu
  • *
  • Mensagens: 202
  • Debian Lenny
    • Ver perfil
    • Meu Blog
Postem seus Programas!
« Online: 24 de Agosto de 2006, 13:28 »
Ae galera!
Vamos compartilhar os nossos "codes" aqui nesse tópico!
Vale qualquer linuguagem, o tanto que funcione no linux.

Pra começar, postarei um script feito em python. Esse script simula uma votação.

Código: [Selecionar]
#!/usr/bin/python
# -*- coding: utf-8 -*-
#votos.py - por lucas nogueira (luksnogueira@gmail.com)

import os
from random import choice

#unix commands
unix=os.system

#clear
unix("clear")

#candidatos
candidatos=[]
cnask=[]
print 'Votacao Script 1.6'
print 'Quantos candidadtos você quer?'
nc=input()
k=0
while k <= (nc-1): # gera o name ask
    op='c'+str(k)+' = raw_input("Qual o nome do candidato '+str(k)+'?")'
    exec op
    msg='name=c'+str(k)
    exec msg
    candidatos.append(name)
    k+=1
   
unix('clear')

def start(candidatos):
    unix('clear')
    control=input('Deseja quantos eleitores (fora voce ?) ')

    w=open('./votos.txt','a')

    k=0 #variavel controladora do looping
   
    while k < control:
          k=k+1
          i=choice(candidatos)
          w.write(i)
          w.write('\n')

    #seu voto     
    print 'Em qual candidato voce vota ?'
    i=0
    for k in candidatos:
        msg='cdname = c'+str(i)
        exec msg
        print '%i) %s' %(i,k)
        i+=1
   

    your=input()
    try:
        voto=candidatos[your]
        w.write(voto)
    except:
        print 'não consegui armazenar o voto'
    unix('clear')     
    print 'votacao terminada!!!\n '
    print 'Aperte enter para ir para a CONTAGEM DE VOTOS'
    raw_input()
    w.close()
    contar(candidatos)

def contar(candidatos):
      unix('clear')
      f=open('./votos.txt','r')
      vots=f.read() #le o texto
      texto=vots.split() #transforma o texto em uma lista
      y=0
      for x in candidatos:
          msg='cv'+str(y)+' = texto.count("'+str(x)+'")'
          exec msg
          cand='vc=cv'+str(y)
          exec cand
          print 'Candidato %s obteve %i votos \n' %(x,vc)
      print 'Aperte enter para ir para o MENU'
      raw_input()
      unix('rm ./votos.txt') #deleta o dumpfile do voto
      menu()
   

def menu():
    unix('clear')
    unix('echo -ne "\a"')
    print 'Votacao Script 1.6 \n'
    print 'Esse script simula uma votacao'
    print 'a) Iniciar nova votacao'
    print 'b) Sair'
    ans=raw_input()

    if ans == 'a':
        start(candidatos)
    elif ans == 'b':
        print 'bye!'
        exit
    else:
        menu()
        exit
       

menu() #starta o programa

Offline tfmoraes

  • Usuário Ubuntu
  • *
  • Mensagens: 441
    • Ver perfil
Re: Postem seus Programas!
« Resposta #1 Online: 27 de Agosto de 2006, 19:09 »
Eu fiz um resolvedor de Sudokus. Por enquanto ele só resolve os mais simples.
Ele foi feito em python, e para usá-lo:

python programa arquivo_com_sudoku

Os arquivos com sudoku são em modo texto. Um exemplo:

Código: [Selecionar]
3,8,0,4,0,2,0,0,9
0,0,4,9,0,0,0,0,0
0,1,9,7,0,0,2,0,5
1,0,2,8,6,3,7,0,4
0,0,6,0,0,0,9,0,0
8,0,5,1,9,4,3,0,6
5,0,8,0,0,1,4,9,0
0,0,0,0,0,7,1,0,0
7,0,0,6,0,9,0,3,2

Código: [Selecionar]
from sys import argv
from time import sleep

def inicia_matriz(file):
    matriz = [[int(j) for j in i.split(',')] for i in file]
    return matriz

def imprime_matriz (matriz):
    print 'Resolvido!!!\n'
    for i in matriz:
        print ' '.join([str(j) for j in i])
    print

def cria_conjunto_quadrante (matriz,x,y):

    quad = []
    for i in xrange((x/3)*3,(x/3+1)*3):
        for j in xrange((y/3)*3,(y/3+1)*3):
            if matriz[i][j] != 0:
                quad.append(matriz[i][j])
    return quad
   
def resolve (matriz):
    #Criando um conjunto com valores de 1 a 9
    sequencia = set(range(1,10))
    for x,i in enumerate(matriz):
        for y,j in enumerate(i):
            # Se o elemento já existe não faz nada
            if j == 0:
                #cria um conjunto com todos os elementos da linha
                linha = set(i)
                linha.remove(0)
                #cria um conjunto com todos os elementos da coluna
                coluna = set([c[y] for c in matriz if c[y] != 0])
                quad = cria_conjunto_quadrante(matriz,x,y)
                try:
                    #Aqui é criado um conjunto com os elementos do quadrante
                    quad = set(quad)
                    #Diferença de conjuntos
                    temp = list(sequencia - (linha | coluna | quad))
                    #Verifica se a diferença é maior que 1. Se for ainda não o resultado
                    if len(temp) > 1:
                        continue
                    matriz[x][y]= temp[-1]
                except:
                    matriz[x][y] = 0

def completo (matriz):
    #Verifica se está completo.
    for i in matriz:
        #Caso exista um zero não esta completo
        if 0 in i:
            return False
    return True

def main():
    file = open (argv[-1])
    matriz = inicia_matriz(file)
    file.close()
    while not completo(matriz):
        resolve(matriz)
    imprime_matriz(matriz)

main()

« Última modificação: 27 de Agosto de 2006, 19:13 por tfmoraes »

Offline _Luks

  • Usuário Ubuntu
  • *
  • Mensagens: 202
  • Debian Lenny
    • Ver perfil
    • Meu Blog
Re: Postem seus Programas!
« Resposta #2 Online: 13 de Setembro de 2006, 16:29 »
essa função é para testar se o número é primo
Código: [Selecionar]
def testa_primo(numero):
 c=2
 while c<numero:
     if numero % c == 0:
         break
     else:   
         c+=1
 if c==numero:
     return True
 else:
     return False

e esse pequeno programa é para listar todos os numeros primos até o numero natural X:
Código: [Selecionar]
numero=input('Gerar números primos até que número?')
x=3
while x<=numero:
    c=2
    while c < x:
         if x % c == 0:
             break
         else:
             c+=1
         if c==x:
             print x
    x+=1
« Última modificação: 13 de Setembro de 2006, 16:43 por _Luks »

Offline _Luks

  • Usuário Ubuntu
  • *
  • Mensagens: 202
  • Debian Lenny
    • Ver perfil
    • Meu Blog
Algoritimo 3x+1
« Resposta #3 Online: 15 de Setembro de 2006, 22:53 »
um algoritimo matemático muito interessante:

para todo X={X € R | x > 0 } o valor final sempre será 1!

Código: [Selecionar]
def f(x):
    print x
    while x != 1:
       
        if x%2!=0:
            x=3*x+1
        else:
            x=x/2
        print x

if __name__ == '__main__' :
    x=raw_input('diga o valor da variavel')
    f(float(x))
« Última modificação: 15 de Setembro de 2006, 22:57 por _Luks »