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

Se citeşte de la tastatură, un şir de n numere reale. Realizaţi un program care determină numărul de apariţii al celui mai mare număr prim din şir.


boiustef: șir de numere reale, număr prim în așa șir???
boiustef: de regulă numerele prime se caută dintr-un șir de naturale
Trollea: exact asa cere problema
boiustef: atunci ar fi necesar de controlat că sunt naturale și apoi primalitatea...
boiustef: care sunt naturale...
Trollea: ok

Răspunsuri la întrebare

Răspuns de Petruccinator
1

#include <iostream>

#include <vector>

bool is_prime(int n){ // standardul IEEE 754 nu garanteaza numerele reale precise...

   n = std::abs(n);

   for(int L = n/2, i = 2; i <= L; ++i)

       if(!(n % i))

           return false;

   return true;

}

int main(){

   std::vector<float> vec;

   float mx = 0;

   int n, fr = 0;

   std::cout << "Introduceti marimea n: ";

   std::cin >> n;

   vec.resize(n);

   std::cout << "Introduceti valorile:\n";

   for(int i = 0; i < n; ++i){

       std::cin >> vec[i];

       if(vec[i] == mx)

           ++fr;

       else if(is_prime(vec[i]) && mx < vec[i]){

           mx = vec[i];

           fr = 1;

       }

   }

   std::cout << "Numarul de aparitii al celui mai mare numar prim (numarul maxim ";

   switch(fr){

       case 0:

           std::cout << "indefinit)\n";

           break;

       default:

           std::cout << mx << "): " << fr << '\n';

   }

   return 0;

}


boiustef: nu cred că te va înțelege... nu știe de funcții și nu numai... :)))
Petruccinator: ”nu știe de funcții” Suntem pe planeta Mars?
Răspuns de boiustef
1

Răspuns:

#include <iostream>

using namespace std;

int main()

{

   int n, i, p, num, k=0, v[100];

   float x;

   cin >> n;

   for (i=1; i<=n; ++i)

   {

       cin >> x;

       if (x==(int)x && x>0)

       {

           p=1; num=(int)x;

           if (num<2)p=0;

           else

           {

               if (num==2) p=1;

               else

               {

                   if (num%2==0) p=0;

                   else

                   {

                       for (int d=3; d*d<=num; d+=2)

                       {

                           if (num%d==0)

                           {

                               p=0; break;

                           }

                       }

                   }

               }

           }

           if (p)

           {

               v[k++]=num;

           }

       }

   }

   for (i=0; i<k-1; i++)

   {

       for (int j=j+1; j<k; j++)

       {

           if (v[j]<v[i]) swap(v[i],v[j]);

       }

   }

   num=v[0];

   int ap=1, apmax=1;

   for (i=1; i<k; i++)

   {

       if (v[i]==v[i-1]) ++ap;

       else

       {

           if (ap>apmax)

           {

               num=v[i-1]; apmax=ap;

               ap=1;

           }

       }

   }

   if (ap>apmax)

   {

       num=v[k-1];

   }

   cout << num;

}

Explicație:

poate înțelegi ata, fprp funcții... succese!


Petruccinator: Răspunsul meu: https://pastebin.com/qDwxfFWf
Nu-mi ajunge capacitate de caractere.
Petruccinator: Rezumat: Codul tau este mai complicat de inteles.
Alte întrebări interesante