Postagem em destaque

Código Limpo: Nomes Significativos

Imagem
Às vezes fico com um assunto na cabeça por semanas, até achar uma situação ou um exemplo que esclareça a situação. Explico: estava querendo já a algum tempo escrever sobre boas práticas de programação, e pensei em iniciar por "Nomes Significativos", para seguir a nomenclatura utilizada pelo ótimo livro Código Limpo , de Robert C. Martin.  Entretanto, ficava sempre amarrado em exemplos que pareciam ser bons, mas que ainda eu não tinha visto a utilidade prática.  Antes de continuar preciso explicar que tenho um hábito de anotar num bloco de papel todas as ideias que surgem, pois elas desaparecem com a mesma velocidade que aparecem. Para isso tenho um bloco e caneta na mesa de cabeceira (além de um no banheiro), pois esses são os lugares onde tenho mais ideias... Vai entender... Semana passada, estava com um problema bem complicado e tive uma ideia: "vou criar uma variável para indicar que quando um arquivo tiver um certo tamanho deve gravar algumas informações no log. Pois

Padrão nos resultados da Mega-Sena

Você sabia quem em 58% dos resultados da Mega-Sena, um número vai se repetir do resultado anterior? Então, espere um concurso que não repita nenhum número do concurso anterior e escolha um número para repetir! #ficadica

Apesar de parecer brincadeira, isso é sério. Ainda mais se você escolher o quarto número (em ordem crescente), que é o que mais repete.

Para quem tem curiosidade aqui está o download do programa, código fonte e arquivo de resultados. E abaixo o código fonte do programa em C++.

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

#define rep(i, n) for (int i(0), _n(n); i < _n; ++i)

int main() {
string lido = "";

int a[] = {0,0,0,0,0,0}, b[] = {0,0,0,0,0,0}, c[] = {0,0,0,0,0,0}, p[] = {0,0,0,0,0,0};
int l = 0, pos = 0, linha = 0;
int total = 0;

// abre o arquivo
ifstream infile("resultados.txt", ios::in);

// le a primeira linha
linha++;
getline(infile, lido);
rep(i,6){
pos = lido.find(',', 0);
a[i] = atoi(lido.substr(0, pos).c_str());
lido = lido.substr(pos + 1, 20);
}

// le a proxima linha, enquanto nao terminar o arquivo
while (!infile.eof()) {
linha++;
getline(infile, lido);
rep(i,6){
pos = lido.find(',', 0);
b[i] = atoi(lido.substr(0, pos).c_str());
lido = lido.substr(pos + 1, 20);
}

// compara as duas últimas linhas
rep(i, 6)
rep(j, 6)
if (a[i] == b[j]) c[j] = b[j];

// totaliza os resultados iguais
rep(i, 6){
if (c[i] != 0) {
total++;
p[i]++;
}
c[i] = 0;
}

// limpa o resultado e prepara a próxima consulta
rep(i,6){
a[i] = b[i];
b[i] = 0;
}
}

cout << "Linhas lidas: " << linha << endl;
cout << "Numeros repetidos: " << total << endl;
cout << "Repeticoes por posicao: " << endl;
rep(i,6){
cout << "#" << i+1 << ": " << p[i] << endl;
}

// fecha o arquivo
infile.close();

cin.get();
return 0;
}


Comentários

Postagens mais visitadas deste blog

Netflix não mostra ícone de streaming

Google Hacking

FTP não funciona no PHP