Arquivo

Posts Tagged ‘Dicas’

O 10001º número primo – Project Euler

3 de junho de 2010 4 comentários

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

30 de maio de 2010 Deixe um comentário

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

11 de maio de 2010 5 comentários

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;

Continue lendo…

[OBI] Problemas Resolvidos – Bits Trocados

4 de maio de 2010 1 comentário

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

22 de abril de 2010 4 comentários

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…

Categorias:Programação Tags:,

[OPI] Sites de apoio

20 de abril de 2010 3 comentários

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

20 de abril de 2010 2 comentários

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

16 de abril de 2010 Deixe um comentário

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