Plss ajutatima cu acest program.
Dau coroana.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <fstream>
static int binarySearch(int vectorNumere[], int primulIndex, int ultimulIndex, int numarulCautat)
{
if (ultimulIndex >= primulIndex)
{
int elementulDinMijloc = primulIndex + (ultimulIndex - primulIndex) / 2;
if (vectorNumere[elementulDinMijloc] == numarulCautat)
return elementulDinMijloc;
if (vectorNumere[elementulDinMijloc] > numarulCautat)
return binarySearch(vectorNumere, primulIndex, elementulDinMijloc - 1, numarulCautat);
return binarySearch(vectorNumere, elementulDinMijloc + 1, ultimulIndex, numarulCautat);
}
return -1;
}
static void afiseazaVector(int vectorNumere[], int dimensiuneVector)
{
for (int i = 0; i < dimensiuneVector; i++)
std::cout << vectorNumere[i] << " ";
std::cout << std::endl;
}
static int cautareSecventiala(int vectorNumere[], int dimensiuneVector, int numarCautat)
{
int pozitieGasita{-1};
for (int j = 0; j < dimensiuneVector; j++)
if (vectorNumere[j] == numarCautat)
{
pozitieGasita = j;
break;
}
return pozitieGasita;
}
int main()
{
int vectorNumere[100]{}, i{}, numarCautat{}, pozitieNumar{};
// Citim numerele din fisier si le salvam in vectorNumere
std::ifstream ifstream("vector.in");
if (!ifstream.good())
exit(EXIT_FAILURE);
while (ifstream >> vectorNumere[i])
++i;
ifstream.close();
// Afisam vectorul de numere citite
std::cout << "Numerele citite din \"vector.in\" sunt >> ";
afiseazaVector(vectorNumere, i);
// Citim numarul pentu a-i afla pozitia in vector
std::cout << "Introdu numarul pe care vrei sa-l cauti ( cu cautarea secventiala ) >> ";
std::cin >> numarCautat;
// Cautam pozitia numarului citit, daca e -1 inseamna ca numarul nu se afla in vector.
pozitieNumar = cautareSecventiala(vectorNumere, i, numarCautat);
(pozitieNumar != -1)
? std::cout << "Numarul " << numarCautat << " se afla pe pozitia " << pozitieNumar + 1 << std::endl
: std::cout << "Numarul " << numarCautat << " nu se afla in vector!" << std::endl;
// Sortam vectorul crescator inainte sa aplicam cautarea binara
std::sort(vectorNumere, vectorNumere + i);
// Afisam din nou vectorul pentru a vedea daca este sortat crescator
std::cout << "Vectorul sortat crescator este >> ";
afiseazaVector(vectorNumere, i);
// Citim numarul pentru a-i afla pozitia in vector
std::cout << "Introdu numarul pe care vrei sa-l cauti ( cu cautarea binara ) >> ";
std::cin >> numarCautat;
pozitieNumar = binarySearch(vectorNumere, 0, i - 1, numarCautat);
(pozitieNumar != -1)
? std::cout << "Numarul " << numarCautat << " se afla pe pozitia " << pozitieNumar + 1 << std::endl
: std::cout << "Numarul " << numarCautat << " nu se afla in vector!" << std::endl;
return 0;
}