Posts Tagged

fisiere

V9 S3 P3
  • 19 august 2013

Se consideră definite două subprograme:
– Subprogramul s1, cu 3 parametri, care primeşte prin intermediul parametrului a un tablou
unidimensional cu exact 100 de elemente, numerotate de la 0 la 99, numere întregi de cel
mult 4 cifre fiecare, iar prin intermediul parametrilor p şi q (0≤p<q<100) poziţiile a două
elemente ale tabloului. Subprogramul furnizează prin intermediul parametrului p poziţia
primului element par (dacă există), şi prin intermediul parametrului q poziţia ultimului
element impar (dacă există), din secvenţa ap,ap+1, …, aq. Dacă această secvenţă nu
conţine niciun element par subprogramul va furniza prin intermediul lui p valoarea -1, iar
dacă nu conţine niciun element impar, va furniza prin intermediul lui q valoarea -1.

– Subprogramul s2, cu doi parametri, a şi b, două numere întregi cu cel mult 4 cifre fiecare;
subprogramul interschimbă valorile a două variabile transmise prin intermediul parametrilor
a şi b.
a) Scrieţi numai antetul subprogramului s2.

b) Scrieţi definiţia completă a subprogramului s1.

c) Scrieţi un program C/C++ care:
– citeşte de la tastatură un număr natural nenul n (0≤n<100), apoi cele n elemente ale unui
şir a. Fiecare dintre aceste elemente este un număr întreg cu cel mult 4 cifre şi cel puţin un
element al şirului este par;
– determină rearanjarea elementelor şirului astfel încât toate valorile pare să fie plasate la
sfârşitul şirului a, folosind apeluri utile ale subprogramelor s1 şi s2;
– scrie elementele şirului rezultat în urma acestei transformări pe o singură linie a fişierului
text BAC.TXT, separate prin câte un spaţiu.

Exemplu: pentru n=5 şi a=(2,3,4,7,5) fişierul ar putea avea conţinutul:
7 5 3 4 2.

Punctul a)

void s2( int &a, int &b );

Punctul b)

void s1( int a[], int &p, int &q ) {
    int i, x = -1, y = -1;
    for ( i=p; i<=q; i++ ) {
        if ( a[i]%2==0 && x==-1 ) x = i;
        if ( a[i]%2!=0 ) y = i;
    }
    p = x;
    q = y;
}

Punctul c)

#include<iostream>
#include<fstream>
using namespace std;
void s1( int a[], int &p, int &q ) {
    int i, x = -1, y = -1;
    for ( i=p; i<=q; i++ ) {
        if ( a[i]%2==0 && x==-1 ) x = i;
        if ( a[i]%2!=0 ) y = i;
    }
    p = x;
    q = y;
}
void s2( int &a, int &b ) {
    int c;
    c = a;
    a = b;
    b = c;
}
int main()
{
    unsigned int n, i;
    int a[100], p, q;
    cout<<"n=";cin>>n;
    for ( i=0; i<n; i++ ) {
        cout<<"a["<<i<<"]=";
        cin>>a[i];
    }
    for ( i=0; i<n/2; i++ ) {
        p = i;
        q = n-i-1;
        s1( a, p, q );
        if ( p!=-1 && q!=-1 ) s2( a[p], a[q] );
    }
    fstream f("BAC.TXT", ios::out);
    for ( i=0; i<n; i++ )
        f<<a[i]<<" ";
    return 1;
}
V8 S3 P3
  • 12 august 2013

Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (n≤50) şi care
afişează pe prima linie a fişierului BAC.TXT primele n numere pare, pe a doua linie primele
n-1 numere pare, …, pe linia n primul număr par. Numerele vor fi afişate pe fiecare linie în
ordine crescătoare şi vor fi separate prin câte un spaţiu. (10p.)

Exemplu: dacă n=3 fişierul BAC.TXT va avea conţinutul alăturat.
0 2 4
0 2
0

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    int n, i, j;
    cout<<"n=";cin>>n;
    fstream f("BAC.txt", ios::out);
    for ( i=n-1; i>=0; i-- ) {
        for ( j=0; j<=i; j++ )
            f<<2*j<<" ";
        f<<endl;
    }
    f.close();
    return 1;
}
V7 S3 P4
  • 12 august 2013

Se consideră şirul definit de următoarea relaţie de recurenţă:
Captură de ecran_2013-08-12_161857

a) Scrieţi numai antetul unui subprogram sub, care primeşte prin intermediul parametrului n
un număr natural de maximum 8 cifre, şi care returnează cel mai mare termen al şirului de
mai sus mai mic sau cel mult egal cu n.

Exemplu: dacă n=83 atunci subprogramul va returna valoarea 80.

b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural s (s≤10000000)
şi determină un şir de numere distincte a căror sumă este egală cu s, folosind apeluri utile
ale subprogramului sub. Numerele determinate se vor scrie în fişierul Numere.txt, pe
prima linie a acestuia, separate prin câte un spaţiu.

Exemplu: dacă valoarea citită de la tastatură este 63, atunci fişierul Numere.txt va
conţine valorile următoare, nu neapărat în această ordine: 40 20 3.

Punctul a)

unsigned long sub( unsigned long n );

Punctul b)

#include<iostream>
#include<fstream>
using namespace std;
unsigned long sub( unsigned long n ) {
    unsigned long a=5;
    if ( n<=5 ) a = n;
    else {
        while ( a<=n )
            a = 2*a;
        a /= 2;
    }
    return a;
}
int main()
{
    unsigned long s;
    cout<<"s=";cin>>s;
    fstream f("Numere.txt", ios::out);
    while ( s>0 ) {
        f<<sub(s)<<" ";
        s -= sub(s);
    }
    f.close();
    return 1;
}
V6 S3 P3
  • 7 august 2013

Se consideră definite următoarele subprograme:
– s1, cu doi parametri: a, b două numere întregi cu cel mult 4 cifre fiecare; subprogramul
interschimbă valorile a două variabile transmise prin intermediul parametrilor a şi b.
– s2, cu trei parametri: a, un tablou unidimensional cu exact 100 de elemente, numere
întregi cu cel mult 4 cifre fiecare, p, un număr natural (p≤100), q, un număr natural
(q≤100). Subprogramul caută primul element divizibil cu 5 în secvenţa ap,ap+1, …, aq,
şi returnează poziţia acestuia, dacă există un astfel de element, sau valoarea -1 în caz
contrar.
a) Scrieţi numai antetul subprogramului s1.

b) Scrieţi definiţia completă a subprogramului s2.

c) Scrieţi programul C/C++ care citeşte de la tastatură o valoare naturală n (0<n≤100) şi
apoi un tablou unidimensional a, cu n elemente, numere întregi cu cel mult 4 cifre fiecare.
Programul determină, folosind apeluri utile ale subprogramului s2, primul element divizibil
cu 5 (dacă există) şi ultimul element divizibil cu 5 (dacă există) al tabloului a, interschimbă
valorile elementelor găsite, folosind apelul subprogramului s1, şi apoi scrie pe prima linie a
fişierului text BAC.TXT elementele tabloului a, astfel transformat, separate prin câte un
spaţiu, sau valoarea 0 dacă tabloul conţine mai puţin de două elemente divizibile cu 5.

Exemplu: pentru n=7 şi tabloul a=(6,10,4,15,2,5,8), programul va scrie în fişier:
6 5 4 15 2 10 8

Punctul a)

void s1( int &a, int &b );

Punctul b)

int s2( int a[], unsigned int p, unsigned int q ) {
    while ( p<=q )
        if ( a[p]%5==0 )
            return p;
        else p++;
    return -1;
}

Punctul c)

#include<iostream>
#include<fstream>
using namespace std;
void s1( int &a, int &b ) {
    int c;
    c = a;
    a = b;
    b = c;
}
int s2( int a[], unsigned int p, unsigned int q ) {
    while ( p<=q )
        if ( a[p]%5==0 )
            return p;
        else p++;
    return -1;
}
int main()
{
    unsigned int n, i;
    int a[100], p, u;
    cout<<"n=";cin>>n;
    for( i=0; i<n; i++ ) {
        cout<<"a["<<i<<"]=";
        cin>>a[i];
    }
    p = s2(a, 0, n-1);
    i = 0;
    while ( s2(a, i, n-1)!=-1 ) {
        i++;
    }
    u = --i;
    fstream f("BAC.TXT", ios::out);
    if ( p==-1 || u==-1 ) f<<0;
    else {
        s1(a[p], a[u]);
        for ( i=0; i<n; i++ )
            f<<a[i]<<" ";
    }
    f.close();
    return 1;
}
V5 S3 P3
  • 5 august 2013

Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n cu cel mult 8 cifre
(n≥10) şi care creează fişierul text NR.TXT ce conţine numărul n şi toate prefixele nenule
ale acestuia, pe o singură linie, separate prin câte un spaţiu, în ordine descrescătoare a
valorii lor.

Exemplu: pentru n=10305 fişierul NR.TXT va conţine numerele:
10305 1030 103 10 1

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    unsigned long n;
    cout<<"n=";cin>>n;
    fstream f("NR.TXT", ios::out);
    while ( n>0 ) {
        f<<n<<" ";
        n /= 10;
    }
    f.close();
    return 1;
}
V4 S3 P4
  • 5 august 2013

Subprogramul cif, cu doi parametri, primeşte prin intermediul parametrului a un număr
natural cu cel mult 8 cifre şi prin intermediul parametrului b o cifră; subprogramul returnează
numărul de apariţii ale cifrei b în scrierea numărului a.

Exemplu: pentru a=125854 şi b=5, subprogramul va returna valoarea 2.

a) Scrieţi definiţia completă a subprogramului cif.

b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n cu cel mult 8
cifre, dintre care cel puţin una impară, şi care determină şi afişează pe ecran, folosind
apeluri utile ale subprogramului cif, cel mai mic număr natural care poate fi obţinut
utilizând toate cifrele impare ale numărului n.

Exemplu: dacă n=2152331 atunci se va afişa pe ecran numărul 11335.

Punctul a)

unsigned int cif ( unsigned long a, unsigned int b ) {
    unsigned int no=0;
    while ( a>0 )   {
        if ( a%10==b )
            no++;
        a /= 10;
    }
    return no;
}

Punctul b)

#include<iostream>
using namespace std;
unsigned int cif ( unsigned long a, unsigned int b ) {
    unsigned int no=0;
    while ( a>0 )   {
        if ( a%10==b )
            no++;
        a /= 10;
    }
    return no;
}
int main()
{
    unsigned long n, m=0, p;
    cout<<"n=";cin>>n;
    for ( int i=1; i<10; i+=2 )
    {
        p = cif(n, i);
        if ( p>0 )
            for ( int j=1; j<=p; j++ )
                m = m*10+i;
    }
    cout<<m;
    return 1;
}
V4 S3 P3
  • 5 august 2013

Fişierul text NR.TXT conţine pe o singură linie, separate prin câte un singur spaţiu, cel mult
100 de numere naturale, fiecare număr având cel mult 4 cifre. Scrieţi un program C/C++
care citeşte numerele din fişierul NR.TXT şi afişează pe ecran, separate prin câte un spaţiu,
în ordine descrescătoare, toate numerele din fişier care au cel mult 2 cifre. Dacă fişierul nu
conţine astfel de numere se va afişa pe ecran mesajul NU EXISTA.

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    unsigned int a, no=0, i, v[100];
    fstream f("NR.TXT", ios::in);
    while ( f>>a )
        if ( a<100 ) {
            v[no++] = a;
    }
    f.close();
    if ( !no ) cout<<"NU EXISTA";
    else {
        for ( i=0; i<no-1; i++ )
            for ( int j=i+1; j<no; j++ )
                if ( v[i]<v[j] )
                {
                    a = v[i];
                    v[i] = v[j];
                    v[j] = a;
                }
        for ( i=0; i<no; i++ )
            cout<<v[i]<<" ";
    }
    return 1;
}
V2 S3 P3
  • 4 august 2013

Fişierul text NR.TXT conţine pe o singură linie, separate prin câte un singur spaţiu, cel mult
100 de numere întregi, fiecare număr având cel mult 4 cifre. Scrieţi un program C/C++ care
citeşte numerele din fişierul NR.TXT şi afişează pe ecran, separate prin câte un spaţiu, în
ordine crescătoare, toate numerele naturale nenule din fişier. Dacă nu există astfel de
numere se va afişa pe ecran mesajul NU EXISTA.

Exemplu: dacă fişierul NR.TXT conţine numerele: -3 -10 0 7 -5 7 51 -800 6 3798,
atunci pe ecran se va afişa: 6 7 7 51 3798

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    unsigned int v[100], no=0, i, j;
    int a;
    fstream f("NR.TXT", ios::in);
    while ( f>>a )
        if ( a>0 ) v[no++] = a;
    f.close();
    if ( !no ) cout<<"NU EXISTA";
    else {
        for ( i=0; i<no-1; i++ )
            for ( j=i+1; j<no; j++ )
                if ( v[i]>v[j] )
                {
                    a = v[i];
                    v[i] = v[j];
                    v[j] = a;
                }
        for ( i=0; i<no; i++ )
            cout<<v[i]<<" ";
    }
    return 1;
}