Fazendo buscas em Arrays
Primeiro, definimos o tamanho de nosso array, que será SIZE, será uma constante de valor 1 milhão.Em seguida, basta declarar nosso array, de nome 'numb': numb[SIZE];
Vamos declarar uma variável auxiliar, a 'count', e outras duas que vão armazenar o valor do maior (highest) e menor valor contido naquele array (lowest).
Vamos primeiro sair em busca do maior elemento.
A lógica é a seguinte: de início, vamos supor que o primeiro elemento do array, o de índice 0, seja o maior. Então, fazemos:
highest = numb[0];
O que temos que fazer é percorrer, todo o array, a partir do índice 1 e comparar todos os outros elementos com o valor armazenado em 'highest'.
Vamos comparar se o elemento 'numb[1]' é maior que 'highest'.
Vamos comparar se o elemento 'numb[2]' é maior que 'highest'.
Vamos comparar se o elemento 'numb[3]' é maior que 'highest'.
...
Vamos comparar se o elemento 'numb[999999]' é maior que 'highest'.
Essas comparações vamos fazer com um simples teste condicional IF, dentro de um looping FOR que vai percorrer todos os elementos do array gigante:
if (numb[count] > highest)
Ora, se algum elemento for maior, devemos alterar o valor armazenado em 'highest' para esse novo valor, concorda? Resumindo, basta fazer:
highest = numb[count];
Nosso código fica assim:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { const int SIZE = 1000000; int numb[SIZE], count, highest, lowest; srand( time(0) ); for (count=0; count<SIZE; count++ ) numb[count] = rand(); highest=numb[0]; for (count=1; count<SIZE; count++){ if (numb[count] > highest) highest = numb[count] ; } lowest=numb[0]; for (count=1; count<SIZE; count++){ if (numb[count] < lowest) lowest = numb[count] ; } cout<<"Maior: "<<highest<<endl; cout<<"Menor: "<<lowest<<endl; }E para achar o menor valor?
A lógica é a mesma.
Fazemos com que, de início, o menor valor armazene o valor do primeiro elemento do array:
lowest = numb[0];
Depois comparamos todos os outros elementos do array com esse 'lowest', checando se os outros elementos do array são MENORES, que lowest, se forem, atualizamos o novo valor de lowest.
Aliás, dá até pra gente fundir esses dois laços FOR com IFs aninhados, em um só laço, veja:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { const int SIZE = 1000000; int numb[SIZE], count, highest, lowest; srand( time(0) ); for (count=0; count<SIZE; count++ ) numb[count] = rand(); highest=numb[0]; lowest=numb[0]; for (count=1; count<SIZE; count++){ if (numb[count] > highest) highest = numb[count]; if (numb[count] < lowest) lowest = numb[count]; } cout<<"Maior: "<<highest<<endl; cout<<"Menor: "<<lowest<<endl; }1 milhão de elementos, e achamos o menor e o maior elemento de maneira praticamente instantânea. Poderoso esse esquema de buscar com arrays e laços, não acha? Fantástico o C++.
Nenhum comentário:
Postar um comentário