Informatică, întrebare adresată de 74asap47, 9 ani în urmă

Buna am nevoie urgenta de rezolvare folosind metoda divide et impera in c++.(clasa a x a)

6. Se citeşte de la tastatură un şir y cu p elemente întregi. Să se determine câte elemente din şir sunt numere perfecte. Un număr perfect este egal cu suma divizorilor săi ( fără el însuşi ).

7. Se citesc de la tastatură un şir y cu p elemente întregi şi un număr natural nenul r. Să se determine suma elementelor din şir care sunt divizibile cu r.

8. Se citeşte de la tastatură un şir y cu p elemente întregi. Să se determine câte elemente din şir sunt numere prime.

13. Se consideră un şir x cu n numere reale. Să se calculeze suma celor n elemente ale şirului folosind metoda Divide et Impera. Datele de intrare se citesc din fişierul SUMA.IN, astfel: de pe prima linie un număr natural nenul n, iar de pe următoarea linie n numere reale, separate prin câte un spaţiu. În fişierul SUMA.OUT se va afişa, pe prima linie, şirul dat, iar pe următoarea linie un număr real, reprezentând suma elementelor.
Exemplu: SUMA.IN SUMA.OUT
6 12 0.33 15.4 2.3 0.2 5.442
12 0.33 15.4 2.3 0.2 5.442 35.672

14. Scrieţi o funcţie recursivă pentru calculul produsului elementelor unui tablou unidimensional cu n elemente reale. Rezolvaţi problema folosind tehnica Divide et Impera.

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
4

6.#include <iostream>

using namespace std;

bool perfect(int x){

int s = 0x1;

for(int d = 0x2; d <= x>>0x1;d++)

s+=x%d?0x0:d;

return s == x;

}

int nrperf(int* a, int* b){

if(a+0x1==b)return perfect(*a)?0x1:0x0;

if(a==b)return 0x0;

int *mid = (b - a)>>0x1+a;

return nrperf(a,mid)+nrperf(mid,b);

}

int main(){

int p, vec[0xFFF];

cin>>p;

for(int i = 0x0; i < p;i++)

cin >> vec[i];

cout << nrperf(&vec[0x0],&vec[p]);

}

7.#include <iostream>

using namespace std;

int r;

int suma(int* a, int* b){

if(a==b-0x1)

return (*a)%r?0x0:(*a);

if(a==b)

return 0x0;

int* mid= a+(b-a)>>0x1;

return suma(a,mid) + suma(mid,b);

}

int main(){

int p, vec[0xFFF];

cin>>p;

cin >> r;

for(int i = 0x0; i < p;i++)

cin >> vec[i];

cout << suma(&vec[0x0],&vec[p]);

}

8.#include <iostream>

using namespace std;

bool prim(int x){

if(x<0x2)

return false;

if(x<0x4)

return true;

for(int d = 0x2; d*d <= x;d++){

if(!(x%d))return false;

d+=d%2;

}

return true;

}

int nrprim(int* a, int* b){

if(a+0x1==b)return prim(*a)?0x1:0x0;

if(a==b)return 0x0;

int *mid = (b - a)>>0x1+a;

return nrprim(a,mid)+nrprim(mid,b);

}

int main(){

int p, vec[0xFFF];

cin>>p;

for(int i = 0x0; i < p;i++)

cin >> vec[i];

cout << nrprim(&vec[0x0],&vec[p]);

}

13.#include<fstream>

using namespace std;

float suma(float* a, float* b){

if(a==b-0x1)

return *a;

if(a==b)

return 0x0;

float* mid= a+(b-a)>>0x1;

return suma(a,mid) + suma(mid,b);

}

int main(){

ifstream f("SUMA.IN");

ofstream g("SUMA.OUT");

float vec[0xFFF];

int n;

f>>n;

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

f>> vec[i];

g<<vec[i]<<' ';

}

f.close();

g<<'\n'<<suma(&vec[0x0],&vec[n]);

g.close();

}

14.

float prod(float* a, int n)// produs pentru [a, b)

{

if(0x1==n)reuturn (*a)!=0.0?(*a):1.0;

if(n == 0x0)return 1.0;

return prod(a, n/2)*prod(a+n/2,n-n/2);

}


74asap47: multumesc, dar de exemplu la problema 14 cum mai pot sa scriu asta? (*a)!=0.0?(*a):1.0;
CinevaFaraNume: if((*a)!=0)return *a;else return 1.0;
Alte întrebări interesante