O 10001º número primo – Project Euler
Pessoal, passei o final de semana “brincando” com as questões do Project Euler. Consegui fazer a questão 7 e estou disponibilizando o código para quem quiser estudar ou procurar melhorá-lo.
Continue lendo…
Compilador Online
Se você formatou o computador, ou está num computador que não tem instalado o compilador daquela linguagem que você está trabalhando, mas precisa compilar urgentemente um programa, não se preocupe, o site Ideone compila pra você.
O que é o Ideone?
O Ideone é algo mais que um pastebin. É uma ferramenta de compilação e debugação online, na qual permite compilar e executar códigos online em mais de 40 linguagens de programação. Ele suporta uma infinidade de linguagens como: Java, Pascal, C, C++, Go, Python, PHP, entre outras.
Como usar o Ideone?
Escolha uma linguagem de programação, cole seu código-fonte e dados de entrada dentro das caixas de texto. Em seguida, marque (ou não) as opções run code (executar o código) e/ou private (para não exibir seu código na página de colagens recentes) . Depois é só clicar em submit, para enviar seu código.
Então, não perca tempo, acesse http://www.ideone.com e compile tudo o que você tiver direito.
Fonte: Ideone / Tradução: Luiz Augusto
Acesse o novo endereço do Olá Mundo!: http://ola-mundo.com
Dicas de etiqueta para programadores
Quando começamos a programar, não ligamos muito para como escrevemos o código e sim, se ele funciona.
Porém, quando ganhamos maturidade, aprendemos que não escrevemos os códigos-fonte somente para nós mesmos, mas também para os que vão estudá-los ou aprimorá-los. Para isso, devemos seguir regras básicas de etiqueta, que visam tornar o código-fonte mais inteligível.
1. Dê nomes sugestivos às variáveis
Não existe nada mais chato que quando você vai verificar um código-fonte e se depara com isso:
ERRADO
var a, b, c, d : real; e : String;
Procure dar nomes sugestivos às variáveis, para que você possa lembrar o significado delas posteriormente.
CERTO
var nota1, nota2, nota3, media : real; nomeAluno : String;
[OBI] Problemas Resolvidos – Bits Trocados
Este será o primeiro de muitos posts que serão exibidos sobre a resolução de problemas da Olimpíada Brasileira de Informática (OBI).
O Problema
Bits Trocados
As Ilhas Weblands formam um reino independente nos mares do Pacífico. Como é um reino recente, a sociedade é muito influenciada pela informática. A moeda oficial é o Bit; existem notas de B$ 50,00, B$10,00, B$5,00 e B$1,00. Você foi contratado(a) para ajudar na programação dos caixas automáticos de um grande banco das Ilhas Weblands.
Clique aqui para ver o problema completo.
RESOLUÇÃO
O código-fonte com a minha resposta está abaixo. Porém, eu aconselho a antes de ver a resposta, você tentar resolver sozinho. Esta resolução é um auxílio para quem não estiver conseguindo resolver. E lembre-se, este é o meu jeito de resolver, existem vários.
program BitsTrocados; function trocaBits(var v : integer; n : integer): integer; begin if (v >= n) then begin trocaBits := v div n; // Informa a quantidade de cédulas de n v := v mod n; // Resto de bits end else begin trocaBits := 0; end; end; var v : integer; // Valor solicitado pelo cliente i, j, k, l : integer; // Quantidades de cédulas testeN : integer; // 'Teste n' begin testeN := 1; i := 0; j := 0; k := 0; l := 0; readln(v); while(v <>0) do begin i := trocaBits(v, 50); j := trocaBits(v, 10); k := trocaBits(v, 5); l := trocaBits(v, 1); writeln('Teste ', testeN); writeln(i, ' ', j, ' ', k, ' ', l); writeln; readln(v); testeN := testeN + 1; end; end.
Se você tiver qualquer dúvida ou sugestão, deixe um comentário.
Acesse o novo endereço do Olá Mundo!: http://ola-mundo.com
Paradigmas de Programação
Quando começamos a estudar programação, nos vem milhares de expressões, tipo: programação estruturada, orientada a objetos, programação funcional, modular, e por aí vai… Confesso que fiquei meio perdido com tanta informação. Então, irei escrever esse post para aqueles que estão começando a programar ou aqueles que já programam, mas não sabem muito bem o significado das expressões acima mencionadas.
Se você já estudou programação, certamente já ouviu falar sobre algum paradigma de programação, mas o que seriam exatamente esses paradigmas? Continue lendo…
[OPI] Sites de apoio
A Olimpíada Paraíbana de Informática já está chegando (dia 15/05). Então, indicarei alguns sites que contém problemas parecidos com os que vão cair na prova.
- SPOJ Brasil – site com problemas de regionais, olimíadas e seletivas em português.
- Site da OBI – site com diversos problemas para que você pratique antes da prova.
- Usaco Gate – Curso preparatório para a IOI (International Olympiads of Informatics). Apresenta diferentes problemas clássicos em ordem crescente de dificuldade com explicações e técnicas úteis para problemas de competições.
- UVa – Um site com centenas de problemas que podem ser testados através de um sistema de correção automática.
Bem, os sites estão aí, agora é só você colocar a mão na massa e praticar a resolução dos problemas.
Acesse o novo endereço do Olá Mundo!: http://ola-mundo.com
Recursividade
Certo dia, você esta lendo um livro e encontra uma palavra que não sabe o significado. Ao invés de procurar no dicionário, você continua lendo. Adiante, você encontra a palavra novamente, só que pelo contexto, você conseguiu deduzir o significado dela. Então, você volta algumas páginas e lê novamente o trecho do texto onde você tinha visto a palavra e não tinha entendido, mas agora, entende. Já aconteceu isso com você? Comigo sim.
Quando você memorizou a palavra, continuou lendo e depois voltou e conseguiu entender a frase, você estava, inconscientemente, usando a recursividade.
Na programação, a recursividade acontece quando se tem uma função que pode invocar ela mesma. Os algoritmos recursivos são “métodos comuns de simplificação que consistem em dividir um problema em subproblemas do mesmo tipo. Como técnica de programação, isto se denomina divisão e conquista, e constitui a chave para o desenvolvimento de muitos algoritmos importantes, bem como um elemento fundamental do paradigma de programação dinâmica.” (WIKIPEDIA)
Um dos exemplos mais conhecidos de algoritmos recursivos, é a função fatorial. Veja abaixo a função fatorial escrita em Pascal:
function fatorial(n : integer) : integer; begin if(n = 0) then begin fatorial := 1; end else begin fatorial := n * fatorial(n - 1); end; end;
Quando a função é chamada, o computador vai guardando várias instâncias desta função, até que chegue no resultado final.
VANTAGENS:
- Clareza no código;
- Simplicidade e elegância na implementação.
DESVANTAGENS:
- Dificuldade para encontrar erros;
- Consumo de muito tempo e memória.
Para mais informações sobre a recursividade, clique aqui.
Acesse o novo endereço do Olá Mundo!: http://ola-mundo.com
[DICAS] PegaData
Para quem deseja criar um programa que receba uma data, mas quer que ela fique organizada no modelo (dd/mm/aaaa), aí está!
O código-fonte está liberado para quem quiser usar, pois eu acho que devemos compartilhar o nosso conhecimento com todos, sem cobrar nada por isso. Só peço que não me tirem a autoria.
(* Programa que recebe uma data e exibe a mesma ao usuário. Autor: Luiz Augusto de M. Morais Data: 16/04/2010 *) program PegaData; uses crt; var data : record dia, mes, ano : integer; end; coluna : integer; begin //Lê os valores: dia, mês e ano. clrscr; coluna := 31; write('Informe a data (dd/mm/aaaa): ( / / )'); gotoxy(coluna, 1); //Leva o cursor para a coluna 30 e linha 1 readln(data.dia); //Recebe o dia coluna := coluna + 3; //Avança 3 espaços na coluna gotoxy(coluna, 1); //Leva o cursor para a coluna 33 e linha 1 readln(data.mes); //Recebe o mês coluna := coluna + 3; //Avança 3 espaços na coluna gotoxy(coluna, 1); //Leva o cursor para a coluna 36 e linha 1 readln(data.ano); //Recebe o ano //Exibe a data. writeln; with data do begin writeln('Data: ', dia, '/', mes, '/', ano); end; readkey; end.
Acesse o novo endereço do Olá Mundo!: http://ola-mundo.com