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

Arrays: elementos repetidos e número de ocorrências

Problema: dado um determinado array, como contar quais os elementos repetidos e o número de ocorrências de cada elemento?

Existem diversas maneiras de se conseguir isso, até porque algumas linguagens possuem uma extensa biblioteca para utilização com arrays. Mas, para treinar um pouco, vou mostrar uma solução em C++. O código já está comentado.

#include <stdio.h>
#include <string.h>
#include <iostream>
 
using namespace std;
 
// estrutura que contem o valor do número e a quantidade de ocorrências
struct number { 
  int value;
  int count;
};
 
// tamanho definido arbitrariarmente (para facilitar o exemplo)
#define MAX 8
 
// array de entrada
int a[MAX] = {5, 3, 5, 1, 1, 1, 2, 1};

// array com estrutura do número
number n[MAX];

int used = -1;
int found = 0;
const int NUL = -1;
 
int main(){
  int i, j;
 
  // inicializa array
  for(i=0; i<MAX; i++){
    n[i].value = NUL;
    n[i].count = NUL;
  }
 
  for(i=0; i<MAX; i++){
    found = 0;
    
    for(j=0; j<used; j++){
      // encontrou, incrementa e sair fora
      if (a[i] == n[j].value){
        n[j].count++;
        found = 1;
        break;
      }
    }
 
    // não encontrou o número, armazena
    if (not found) {
      used++;
      n[used].value = a[i];
      n[used].count = 1;
    }
  }
 
  // inicializa array
  for(i=0; i<used; i++){
    cout << i << " "<< n[i].value << " " << n[i].count << "\n\r";
  }
 
  getchar();
  return 0;
}

Comentários

Postagens mais visitadas deste blog

Netflix não mostra ícone de streaming

Google Hacking

FTP não funciona no PHP