Informatică, întrebare adresată de Tzipy, 8 ani în urmă

Plss ajutatima cu acest program.

Dau coroana.​

Anexe:

Răspunsuri la întrebare

Răspuns de Apollyon
2

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;

}

Alte întrebări interesante