sexta-feira, 2 de março de 2012

Alguns Truques da linguagem C++

A maioria dos exercícios iniciais de programação envolve problemas relacionados com vetores. Nessa postagem, vamos resolver alguns problemas básicos usando alguns recursos do C++.

Problema 1: Inicialização aleatório de um vetor  e impressão do vetor

#include <iostream> //entrada e saida
#include <algorithm>//funcao para manipular elementos  
#include <vector>//manipulacao de vetor
#include <ctime> //manipulacao de data e informacao sobre tempo
#include <cstdlib>
#include <numeric>
using namespace std;

//gera numero aleatorio entre 0 e 99
int  RandomNumber () { return (rand()%100); }
void print(int i){ cout << i << " "; }

int main(){
  int n;
  cin >> n;
  vector <int> v(n); //vetor de inteiros
  srand ( unsigned ( time(NULL) ) );
  generate (v.begin(), v.end(), RandomNumber);
  cout << "Imprimindo vetor usando for" << endl;
  for(int i=0;i<n;i++) print(v[i]);
  cout << endl; //nova linha
  cout << "Imprimindo vetor usando foreach" << endl;
  for_each(v.begin(), v.end(), print);
  cout << endl; //nova linha
  cout << "Imprimindo vetor usando copy" << endl;
  copy (v.begin(),v.end(), ostream_iterator<int>(cout," "));
  cout << endl; //nova linha
  system("PAUSE");
}

Problema 2: Encontrar o maior e o menor de um vetor.  Encontrar a quantidade de números pares e maiores que 50.
#include <iostream> //entrada e saida
#include <algorithm>//funcao para manipular elementos de um intervalo  
#include <vector>//manipulacao de vetor
#include <ctime> //manipulacao de data e informacao sobre tempo
#include <cstdlib>
#include <numeric>
using namespace std;

int  RandomNumber () { return (rand()%100); }
void print(int i){ cout << i << " "; }
bool ehPar(int i){ return i%2==0;}

int main(){
  
  int n;
  cin >> n;
  vector <int> v(n);
  srand ( unsigned ( time(NULL) ) );
  generate (v.begin(), v.end(), RandomNumber);
  cout << "maior elemento : " << *max_element(v.begin(),v.end());
  cout << endl; 
  cout << "menor elemento : " << *min_element(v.begin(),v.end()) 
  cout << endl; 
  cout << "quantidade de numero pares: " << 
  count_if(v.begin(),v.end(), ehPar) << endl;
  //conta o numero de elementos do vetor que retorna true para o 
  // predicado ehPar
  cout << "quantidade de numeros maiores de 50:" <<
  count_if(v.begin(),v.end(), bind2nd(greater<int>(),50)) << endl;
  //bind2nd substitui o segundo parametro de um predicado binario x > y
  //bind2nd( greater<int>(), 50) retorna o predicado n > 50
  system("PAUSE");

}

Problema 3: Ordenar o vetor em ordem crescente e decrescente
#include <iostream> //entrada e saida
#include <algorithm>//funcao para manipular elementos de um intervalo  
#include <vector>//manipulacao de vetor
#include <ctime> //manipulacao de data e informacao sobre tempo
#include <cstdlib>
#include <numeric>
using namespace std;

int  RandomNumber () { return (rand()%100); }
void print(int i){ cout << i << " "; }
bool ehPar(int i){ return i%2==0;}

int main(){
  
  int n;
  cin >> n;
  vector <int> v(n);
  srand ( unsigned ( time(NULL) ) );
  generate (v.begin(), v.end(), RandomNumber);
  cout << "Imprimindo vetor em ordem crescente:" << endl;
  sort(v.begin() , v.end() , less<int>() );
  for_each(v.begin(), v.end(), print); 
  cout << endl;
  cout << "Imprimindo vetor em ordem decrescente:" << endl;
  sort(v.begin() , v.end() , greater<int>() );
  for_each(v.begin(), v.end(), print);
  cout << endl;
  system("PAUSE");
}

Problema 3: O somatório dos elementos do vetor.
#include <iostream> //entrada e saida
#include <algorithm>//funcao para manipular elementos de um intervalo  
#include <vector>//manipulacao de vetor
#include <ctime> //manipulacao de data e informacao sobre tempo
#include <cstdlib>
#include <numeric>
using namespace std;

int  RandomNumber () { return (rand()%100); }
void print(int i){ cout << i << " "; }
bool ehPar(int i){ return i%2==0;}

int main(){
  
  int n;
  cin >> n;
  vector <int> v(n);
  srand ( unsigned ( time(NULL) ) );
  generate (v.begin(), v.end(), RandomNumber);
  cout << "Somatorio dos elementos do vetor :" << 
  accumulate(v.begin(),v.end(),0) << endl;
  system("PAUSE");
}

Problema 4: Cálculo de n!
#include <iostream> //entrada e saida
#include <algorithm>//funcao para manipular elementos de um intervalo  
#include <vector>//manipulacao de vetor
#include <ctime> //manipulacao de data e informacao sobre tempo
#include <cstdlib>
#include <numeric>
using namespace std;

int current=1;
int Range () { return current++; }

int main(){
  int n;
  cin >> n;
  vector <int> x(n);
  generate_n (x.begin(), n , Range );
  cout << "fatorial:" << std::accumulate(x.begin(), x.end(), 1, std::multiplies<int>()) ;
  cout << endl;
  system("PAUSE");
}

Problema 5: Imprimindo todas as permutações de conjunto com n elementos.
#include <iostream> //entrada e saida
#include <algorithm>//funcao para manipular elementos de um intervalo  
#include <vector>//manipulacao de vetor
#include <ctime> //manipulacao de data e informacao sobre tempo
#include <cstdlib>
#include <numeric>
using namespace std;

int current=1;
int Range () { return current++; }

int main(){
  int n;
  cin >> n;
  vector <int> v(n);
  generate_n (v.begin(), n , Range );
  cout << "Imprimindo todas as permutacoes" << endl;
  int count=1;
  do {
     //imprimindo vetor
    cout << count ++ << " ";
    copy (v.begin(),v.end(), ostream_iterator<int>(cout," "));
    cout << endl;
  } while ( next_permutation (v.begin(),v.end()) );
  system("PAUSE");
}

Um comentário:

Blog disse...

Muito Legal Wladmir.
Muito bom pro pessoal que tá chegando.
Keep Going.