Sunteți pe pagina 1din 2

Scriei programul Pascal/C/C++care citete din fiierul text BAC.

TXT
numrul ntreg n(1n10000) i un ir de nperechi de numere ntregi
ab(1a<=b32000), fiecare pereche fiind scris pe o linie nou a
fiierului, cu un spaiu ntre cele dou numere. Programul afieaz pe
ecran pentru fiecare pereche a,bcel mai mare numr natural din
intervalul nchis [a,b]care este o putere a lui 2sau numrul 0dac nu
exist nicio putere a lui 2n intervalul respectiv. Numerele afiate pe ecran
se scriu n linie, separate prin cte un spaiu. Un numr peste putere a lui
2dac exist un numr natural kastfel nct p=2k.
Exemplu: dac fiierul BAC.TXTconine numerele
3
2 69
10 20
19 25
se va afia: 64 16 0.
Pentru program corect
- declararea corect a tuturor variabilelor
- operaii cu fiiere
- citirea lui n i a tuturor perechilor din fiier
- calculul unei puteri a lui 2 din vecintatea intervalului *
- puterea determinat aparine intervalului
- tratarea cazului 0
- afiarea tuturor valorilor n formatul cerut
- corectitudinea global a programului**

10p
1p
1p
1p
2p
1p
1p
2p
1p

(*) puterea calculat se afl n interval sau n imediata apropiere a capetelor acestuia
(**) Corectitudinea global vizeaz structura, sintaxa, alte greeli neprecizate n barem

C++

Pascal

Rezolvare 1:

Rezolvare 1:

#include <fstream.h>
void main()
{unsigned int a,b,p,n,i;
ifstream f("bac.txt");
f>>n;
for (i=1;i<=n;i++)
{f>>a>>b;
p=1;
while (p<=b) p=p*2;

program cerc1;
var f:text;
a,b,n,i,p:word;
begin
assign(f,bac.txt);
end.

if (p/2>=a) cout<<p/2<<" ";


else cout<<0<<" ";
}
f.close();
}

Rezolvare 2:

Rezolvare 2:

#include <fstream.h>
void main()
{unsigned int a,b,p,n,i,gasit,k;
ifstream f("bac.txt");
f>>n;
for (i=1;i<=n;i++)
{f>>a>>b;
gasit=0;
while (a<=b && gasit==0)
{if (b%2) {b=b-1;k=b;}
else k=b;
while (k%2==0) k=k/2;
if (k==1) gasit=b;
b--;}
cout<<gasit<<" ";
}
f.close();
}

Rezolvare 3:

Rezolvare 3:
program crec3;
var a,b,k,n,i,j,p:word;
f:text;
begin
assign (f,'bac.txt');
reset(f);
readln(f,n);
for i:=1 to n do
begin
readln(f,a,b);
k:=trunc(ln(b)/ln(2));
p:=1;
for j:=1 to k do p:=p*2;
if p>=a then write(k,' ')
else write(0,' ');
end;
end.

S-ar putea să vă placă și