0% au considerat acest document util (0 voturi)
373 vizualizări16 pagini

Subiecte Atestat 16 30

Documentul prezintă cerințele pentru mai multe subiecte de programare care implică citirea și prelucrarea de date din fișiere text, utilizarea subprogramelor și rezolvarea unor probleme specifice.

Încărcat de

Zuber Alexandra
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
373 vizualizări16 pagini

Subiecte Atestat 16 30

Documentul prezintă cerințele pentru mai multe subiecte de programare care implică citirea și prelucrarea de date din fișiere text, utilizarea subprogramelor și rezolvarea unor probleme specifice.

Încărcat de

Zuber Alexandra
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

/*Subiectul nr.

16
Din fisierul text [Link] se citesc doua numere naturale n, m (1<n<30, 1<m<30 ) apoi elementele întregi ale unei
matrici de dimensiune n*m. Scrieti un program Pascal/C/C++ care modificã matricea astfel: toate elementele
egale cu valoarea maximã din matrice se înlocuiesc cu valoarea minimã de pe coloana lor. Dacã s-a fãcut mãcar o
înlocuire, matricea rezultatã se va scrie în fisierul text [Link], altfel matricea nu se va scrie în fisierul de iesire.
Pe ultima linie în fisierul de iesire se va scrie numãrul de substitutii efectuate.
*/
#include<iostream>
#include<fstream>
#include<limits.h>
using namespace std;
ifstream f("[Link]");
ofstream g("[Link]");
int main()
{
int n,m,a[30][30],k=0,maxi=INT_MIN,mini[30];
f>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{ f>>a[i][j];
if(a[i][j]>maxi)
maxi=a[i][j];
}
for(int j=0;j<m;j++)
{
mini[j]=INT_MAX;
for(int i=1;i<n;i++)
if(a[i][j]<mini[j])
mini[j]=a[i][j];

for(int i=0;i<n;i++)
{
if(a[i][j]==maxi)
{
a[i][j]=mini[j];
k++;
g<<a[i][j];
}
g<<'\n';
}
}
g<<k;
[Link]();
[Link]();
return 0;
}
/*Subiectul nr.17
Din fişierul text [Link] conţine pe prima linie două numere naturale n şi m (0<m<n<5000), pe cea de a doua
linie n numere naturale a1, a2, …, an (0 ≤ ai≤9), iar pe cea de a treia linie m numere naturale b1, b2, …, bm (0 ≤
bi≤9).
Scrieți programul C/C++ care citește datele din fișier, verifică dacă şirul b se poate obţine din şirul a prin
eliminări, fără a schimba ordinea elementelor în șirul a și afişează pe ecran un mesaj corespunzător. Se va utiliza
un algoritm eficient din punct de vedere al timpului de executare și al spațiului de memorie utilizat.
*/
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("[Link]");
int main()
{
int a[5000],x,n,m,i,poz=-1,ok=0,j;
f>>n>>m;
for(i=0;i<n;i++)
f>>a[i];
for(i=0;i<m;i++)
{ f>>x;
for(j=poz+1;j<n;j++)
if(a[j]==x)
{
poz=j;
ok++;
break;
}

}
if(ok==n)
cout<<"Se poate obtine";
else cout<<"Nu se poate obtine";
return 0;
}
/*Subiectul nr.18
a. Scrieţi o definiţie completă pentru un subprogram suma cu trei parametri:
– x, matrice pătratică cu elemente întregi;
– n, număr natural ce reprezintă numărul efectiv de linii şi coloane ale matricei x, 2≤n≤10;
– p, număr natural, 1≤p≤n.
Subprogramul va returna suma elementelor aflate pe linia p a matricei.
b. Scrieţi un program care citeşte din fişierul [Link] un număr natural n şi o matrice cu n linii şi n coloane şi
afişează în fişierul [Link] indicii liniilor din matrice pentru care suma elementelor este număr par. Se va
folosi subprogramul definit la punctul a.
*/
#include<iostream>
#include<fstream>
using namespace std;
int suma(int x[10][10],int n,int p)
{
int i,S=0;
for(j=1;j<=n;j++)
S=S+x[p][j];
return S;
}

int main()
{
int x[10][10],n,i,j;
ifstream fin("[Link]");
ofstream fout("[Link]");
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fin>>x[i][j];
for(i=1;i<=n;i++)
if(suma(x,n,i)%2==0)
fout<<i<<" ";
[Link]();
[Link]();
return 0;
}
/*Subiectul nr.19
În fisierul text [Link] sunt cel mult 9998 de numere naturale nenule, distincte. Scrieti un program C/C++
eficient din punct de vedere al timpului de executie, care sã scrie în fisierul [Link], pe o linie, în ordine
descrescãtoare, separate prin câte un spatiu, numerele naturale nunule, de cel mult 4 cifre, care nu apar în
fisierul [Link].
*/
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int v[9999]={0},i;
ifstream fin("[Link]");
ofstream fout("[Link]");
while(fin>>i)
v[i]++;
for(i=9999;i>=1;i--)
if(v[i]==0)
fout<<i<<" ";
[Link]();
[Link]();
return 0;
}
/*Subiectul nr.20
Fişierul [Link] conţine pe prima linie un text format din cel mult 250 de caractere, scris pe o singură linie.
Cuvintele din text sunt separate prin câte un spaţiu, iar fiecare cuvânt este format din cel mult 20 caractere,
doar literele mici ale alfabetului englez. Fișierul conține pe a doua linie un cuvânt format din cel mult 20 de
caractere doar literele mici ale alfabetului englez.
Se consideră subprogramul Sub care primește prin intermediul celor doi parametri t1 și t2 două cuvinte formate
fiecare din cel puţin două caractere şi returnează valoarea 1 dacă cuvântul primit prin parametrul t1 reprezintă
un prefix pentru cuvântul primit prin parametrul t2, sau valoarea 0 în caz contrar;
Cerinţe:
a) Scrieţi definiţia completă a subprogramului sub;
b) Scrieţi un program Pascal/C/C++, care citeşte din fişierul [Link] în variabila s textul aflat pe prima linie și
în variabila x cuvântul aflat pe cea de a doua linie din fișier și folosind apeluri utile ale subprogramului S1 şi
afișează pe ecran fiecare cuvânt din text care are ca prefix cuvântul x.
*/
#include<iostream>
#include<fstream>
using namespace std;
int sub(char t1[250],char t2[250])
{
char *p;
p=strstr(t2,t1);
if(p==t2)
return 1;
else return 0;
}

int main()
{
char s[251],x[21];
char *p;
ifstream f("[Link]");
ofstream g("[Link]");
[Link](s,250);
[Link](x,20);
p=strtok(s," ,:?!.;");
while(p)
{
if(sub(p,x))
g<<p<<" ";
p=strtok(NULL," ,:?!.;")
}
[Link]();
[Link]();
return 0;
}
/*Subiectul nr.21
Fişierul [Link] conţine pe prima linie un text format din cel mult 250 de caractere, scris pe o singură linie.
Cuvintele din text sunt separate prin câte un spaţiu, iar fiecare cuvânt este format din cel mult 20 caractere,
doar literele mici ale alfabetului englez.
Se consideră subprogramul:Sub care primeste prin intermediul singurului său parametru t un cuvânt din text și
înlocuiește prima, respectiv ultima literă, cu litera mare corespunzătoare şi furnizează prin intermediul
parametrului t cuvântul obţinut. De exemplu, pentru cuvântul intensitate primit prin intermediul parametrului t,
subprogramul returnează cuvântul: IntensitatE.
Cerinţe:
a) Scrieţi definiţia completă a subprogramului Sub;
b)Scrieţi un program Pascal/C/C++, care citeşte din fişierul [Link] în variabila s textul aflat pe prima linie și
folosind apeluri utile ale subprogramului Sub modifică textul memorat în variabila s prin transformarea în literă
mare a primei și ultimei litere din fiecare cuvânt dint text. Programul scrie noul text în fişierul [Link] pe o
singură linie.
*/
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("[Link]");
ofstream g("[Link]");
void sub(char t[21])
{
t[0]=t[0]-32;
t[strlen(t)-1]=t[strlen(t)-1]-32;
}

int main()
{
char s[251], aux[251]="",*p;
[Link](s,250);
p=strtok(s," ");
while(p)
{
sub(p);
strcat(aux,p);
strcat(aux," ");
p=strtok(NULL," ");
}
g<<aux;
[Link]();
[Link]();
}
/*Subiectul nr.22
Prima linie a fişierului [Link] conţine două numere naturale m şi n (1<=n,m<=100) iar următoarele m linii câte
n numere întregi cu maxim 9 cifre fiecare, separate prin câte un spaţiu. Spunem că o linie a fişierului este
simetrică dacă elementele egal depărtate de capetele linie i respective sunt egale (primul element de pe linie
este egal cu ultimul element al liniei, al doilea cu penultimul etc.)

Se consideră subprogramul: verif cu trei parametri:


– x, matrice cu elemente întregi;
– n, număr natural ce reprezintă numărul efectiv de coloane ale matricei x, 2≤n≤10;
– p, număr natural, 1≤p≤m.
Subprogramul va returna valoarea 1 dacă elementele egal depărtate de capetele liniei sunt simetrice și 0 în caz
contrar.
Cerinţe:
a) Scrieţi definiţia completă a subprogramului verif;
b) Scrieţi un program Pascal/C/C++, care citeşte din fişierul [Link] m, n și elementele matricei și afişează
pe ecran câte din cele m linii din fişier sunt simetrice.
*/
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("[Link]");
int verif(int x[100][100],int n,int p)
{
int i,j;
i=1; j=n;
while(i<j)
{
if(x[p][i]!=x[p][j])
return 0;
i++; j--;
}
return 1;
}
int main()
{
int x[100][100],n,m,i,j,k=0;
f>>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
f>>x[i][j];
for(i=1;i<=m;i++)
if(verif(x,n,i)==1)
k++;
cout<<k;
[Link]();
return 0;
}
/*Subiectul nr.23
Fişierul [Link] conţine pe prima linie un cuvânt format din cel mult 50 de caractere, doar litere mici ale
alfabetului englez.
Se consideră subprogramul Sub care primeste prin intermediul singurului său parametrul s un cuvânt (format din
cel puţin 2 litere) și returnează cuvântul obţinut prin dublarea fiecărei consoane din cuvântul s. De exemplu,
pentru cuvântul abac (primit prin intermediul parametrului s) subprogramul returnează cuvântul: abbacc.
Cerinţe:
a) Scrieţi definiţia completă a subprogramului Sub;
b) Scrieţi un program Pascal/C/C++, care folosind apeluri utile ale subprogramului Sub, citeşte textul din
fişierul [Link]
și scrie pe prima linie a fișierului [Link] cuvântul obţinut prin dublarea fiecărei consoane din cuvântul s.
*/
#include<iostream>
#include<fstream>
using namespace std;
void sub(char s[51])
{
int i,k=0;
char t[51];
for(i=0;i<strlen(s);i++)
{
t[k++]=s[i];
if(strchr("aeiou",s[i])==0)
t[k++]=s[i];
}
t[k++]='\0';
strcpy(s,t);
}
int main()
{
ifstream f("[Link]");
char s[51];
[Link](s,50);
sub(s);
ofstream g("[Link]");
g<<s;
[Link]();
[Link]();
return 0;
}
/*Subiectul nr.24
Fişierul [Link] conţine două linii. Pe prima linie a fişierului este scris un număr natural n, (1≤n≤100) iar pe
următoarele n linii sunt scrise câte n numere naturale, formate fiecare din cel mult n cifre, separate prin câte un
spaţiu, reprezentând elementele unei matrice A cu n linii și n coloane.
Se consideră subprogramul: sub cu trei parametri, care primeşte prin intermediul parametrilor:
- a,un tablou bidimensional format din cel mult 30 de linii și cel mult 30 de coloane cu elemente numere
întregi;
- n,(1≤n≤100) numărul efectiv de linii și de coloane ale matricei a;
- max, un număr natural nenul.
Subprogramul furnizează prin intermediul parametrului max, elementul maxim de pe diagonala principală a
matricei a.

Cerinţe:
a) Scrieţi definiţia completă a subprogramului sub;
b) Scrieţi un program principal Pasca/C/C++ care, folosind apeluri utile ale subprogramului sub, să citească
datele din fişierul [Link] şi care să scrie pe ecran, elementul maxim de pe diagonala principală.
*/

#include<iostream>
#include<fstream>
using namespace std;
ifstream f("[Link]");
void sub(int a[30][30],int n,int &maxi)
{
int i;
maxi=a[1][1];
for(i=2;i<=n;i++)
if(a[i][i]>maxi)
maxi=a[i][i];
}
int main()
{
int a[30][30],n,i,j,maxi;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
sub(a,n,maxi);
cout<<"max="<<maxi;
[Link]();
return 0;
}
/*Subiectul nr.25
Fişierul [Link] conţine două linii. Pe prima linie a fişierului este scris un număr natural n (1≤n≤100), iar pe
următoarele n linii sunt scrise câte n numere naturale, formate fiecare din cel mult 9 cifre, separate prin câte un
spaţiu, reprezentând elementele unei matrice A cu n linii și n coloane.
Se consideră subprogramul S cu doi parametri, care primeşte, prin intermediul parametrilor:
- a, un tablou bidimensional format din cel mult 30 de linii și cel mult 30 de coloane cu elemente numere
întregi;
- n, numărul efectiv de linii și de coloane ale matricei a.
Subprogramul returnează suma elementelor situate pe rama matricei, formată din elementele situate pe prima
linie, prima coloană, ultima linie și ultima coloană a matricei.

Cerinţe:
a) Scrieţi definiţia completă a subprogramului S;
b) Scrieţi un program principal Pasca/C/C++ care, folosind apeluri utile ale subprogramelor S,să citească
datele din fişierul [Link] şi care să scrie pe ecran, suma elementelor de pe rama matricei.
*/

int S(int a[30][30],int n)


{
int suma=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==0||j==0||i==n-1||j==n-1)
suma+=a[i][j];
return suma;
}

#include<iostream>
#include<fstream>
using namespace std;
ifstream f("[Link]");
int main()
{
int n,a[30][30];
f>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
f>>a[i][j];
cout<<s(a,n);
return 0;
}
/*Subiectul nr.26
Fişierul [Link] conţine două linii. Pe prima linie a fişierului este scris un număr natural n, (1≤n≤100) iar pe
următoarele n linii sunt scrise câte n numere naturale, formate fiecare din cel mult 9 cifre, separate prin câte un
spaţiu, reprezentând elementele unei matrice A cu n linii și n coloane.
Se consideră subprogramul: maxim cu trei parametri:
– x, matrice cu elemente întregi;
– n, număr natural ce reprezintă numărul efectiv de coloane ale matricei x, 2≤n≤10;
– p, număr natural, 1≤p≤n.
Subprogramul va returna valoarea maximă de pe linia p a matricei.

Cerinţe:
a) Scrieţi definiţia completă a subprogramului maxim;
b) Scrieţi un program principal Pascal/C/C++ care, folosind apeluri utile ale subprogramului maxim,să
citească datele din fişierul [Link] şi care să scrie pe ecran, separate prin câte un spațiu, elementele maxime de
pe fiecare linie a matricei.
*/
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("[Link]");
int maxim(int x[10][10],int n,int p)
{
int maxi=x[p][0]; //initializez cu primul element de pe linie
for(int i=0;i<n;i++)
if(maxi<x[p][i])
maxi=x[p][i];
return maxi;
}
int main()
{
int n,x[10][10],p,i,j;
f>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
f>>x[i][j];
for(i=0;i<n;i++)
cout<<maxim(x,n,i)<<" ";
[Link]();
return 0;
}
/*Subiectul nr.27
Fişierul [Link] conține, pe prima linie, un număr natural n (2<n<100), iar pe linia a doua n numere cu cel
mult 9 cifre fiecare.
Se consideră subprogramul maxim care primeşte prin intermediul parametrului A un vector cu cel mult 100 de
numere reale şi prin intermediul parametrului n numărul de elemente din vector. El returnează valoarea celui
mai mare element din vector, şterge toate apariţiile acestui element din vector şi modifică corespunzător
valoarea lui n.
Cerinţe:
a) Scrieţi definiţia completă a subprogramului maxim;
b) Scrieţi un program principal Pasca/C/C++ care să citească datele din fişierul [Link] şi care, folosind
apeluri utile ale subprogramului maxim, să scrie pe ecran, separate prin câte un spațiu, în ordine strict
descrescătoare, numerele care apar în vector.
*/
#include<iostream>
#inlcude<fstream>
using namespace std;
ifstream f("[Link]");
float maxim(float a[100],int &n)
{
float maxi=a[1],i,j;
for(i=2;i<=n;i++)
if(maxi<a[i])
maxi=a[i];
for(i=1;i<=n;i++)
if(maxi==a[i])
{
for(j=i;j<n;j++)
a[j]=a[j+1];
n--;
i--;
}
return maxi;
}

int main()
{
float a[100];
int n;
f>>n;
for(int i=1;i<=n;i++)
f>>a[i];
while(n>0)
cout<<maxim(a,n)<<" ";
[Link]();
return 0;
}
/*Subiectul nr.28
Considerãm definit un subprogram nrap care are doi parametri: un sir de caractere s de lungime cel mult 100 si
un caracter c.
Subprogramul nrap întoarce numãrul aparitiilor caracterului c în sirul s.
a) Scrieti definitia completã a subprogramului nrap.
b) Scrieti un program care citeste de la tastaturã douã siruri de caractere formate fiecare din cel mult 100 de
litere ale alfabetului englez si, apelând subprogramul nrap descris mai sus, verificã dacã cele douã siruri sunt
formate din exact aceleasi caractere, eventual în altã ordine. În caz afirmativ programul va afisa pe ecran
mesajul "DA", altfel va afisa "NU"
*/
#include<iostream>
using namespace std;
int nrap(char s[101],char c)
{
int contor=0,i;
for(i=0;i<strlen(s);i++)
if(s[i]==c)
contor++;
return contor;
}
int main()
{
char a[101],b[101];
int i,ok=1;
[Link](a,100);
[Link](b,100);
if (strlen(a)!=strlen(b)) ok=0;
for(i=0;i<strlen(a);i++)
if(nrap(a,a[i])!=nrap(b,a[i]))
ok=0;
if(ok==0)
cout<<"NU";
else cout<<"DA";
return 0;
}
/*Subiectul 29
Fişierul [Link] conţine pe prima linie două numere naturale nenule m și n (1≤m≤30, 1≤n≤30), iar pe următoarele
m linii câte n numere întregi, cu cel mult 9 cifre fiecare, separate prin câte un spațiu, reprezentând elementele
unei matrice A cu m linii și n coloane.
Se consideră subprogramul sub, care primeşte prin intermediul parametrilor:
- A, o matrice cu cel mult 30 de linii și cel mult 30 de coloane, și elemente numere întregi formate din cel
mult 4 cifre fiecare;
- n, un număr natural reprezentând numărul efectiv de coloane ale matricei A, 1≤n≤30.
- k, un număr natural, 1<k≤m
Subprogramul furnizează suma elementelor situate pe linia k în matricea A.
Cerinţe:
a) Scrieţi definiţia completă a subprogramului sub.
b) Scrieţi un program principal Pascal/C/C++ care, citește matricea A din fişierul [Link], calculează,
folosind apeluri utile ale subprogramului sub, pentru fiecare linie a matricei suma elementelor corespunzătoare
și afișează pe ecran indicele primei linii din matrice de sumă maximă, precum și valoarea acestei sume. Cele
două numere sunt afișate pe aceeași linie, separate printr-un spațiu.
*/
#include<iostream>
#inlcude<fstream>
using namespace std;
ifstream f("[Link]");
int sub(int A[30][30],int n,int k)
{
int i,S=0;
for(i=0;i<n;i++)
S=S+A[k][i];
return S;
}
int main()
{
int A[30][30],n,m,i,j,maxi,l;
f>>m>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
f>>A[i][j];
maxi=sub(A,n,0);
l=0;
for(i=1;i<n;i++)
if(sub(A,n,i)>maxi)
{
maxi=sub(A,n,i);
l=i;
}
cout<<l<<" "<<maxi;
[Link]();
}
/*Subiectul nr.30
Fişierul [Link] conţine cel mult 100 de numere naturale, fiecare număr fiind format din cel 9 cifre, numerele
fiind scrise pe o singură linie, separate prin câte un spaţiu.
Se consideră subprogramele:
• prim cu un singur parametru, x, prin intermediul căruia primeşte un număr natural nenul format din cel
mult patru cifre şi care returnează valoarea 1 dacă valoarea parametrului x este un număr prim și 0 în caz
contrar.
• Sort cu doi parametri, care primeşte prin intermediul parametrilor:
- n, un număr natural, 0<n<=100;
- v,un şir de n numere naturale, fiecare număr având cel mult patru cifre.
Subprogramul furnizează prin parametrul v şirul ordonat crescător.
Cerinţe:
a) Scrieţi definiţia completă a subprogramelor prim și sort.
b) Scrieţi un program Pascal/C/C++, care citeşte din fişierul [Link] toate numerele şi, folosind apeluri utile
ale subprogramelor prim și sort, scrie în fişierul [Link], pe o singură linie, separate printr-un spaţiu, două
numere naturale reprezentând cel mai mic număr prim, respectiv cel mai mare număr prim din fişierul [Link].
Dacă niciun număr din fişierul [Link] nu este număr prim, atunci pe prima linie a fişierului [Link] se va scrie
mesajul NU EXISTA.
*/
#include<iostream>
#inlcude<fstream>
using namespace std;
ifstream f("[Link]");
ofstream g("[Link]");
int prim(int x)
{
if(x<2)
return 0;
for(int i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
return 1;
}

void sortare(int v[100],int n)


{
int aux,i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j])
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
int main()
{
int v[100],x,n,j=0;
f>>n;
for(int i=0;i<n;i++)
{
f>>x;
if(prim(x))
{
v[j]=x;
j++;
}
}
sortare(v,j);
if(j==0)
cout<<"NU EXISTA";
else cout<<v[0]<<" "<<v[j-1];
return 0;
}

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