1. Se considera tabloul T[1..n,1..n] cu elemente numere intregi. Sa se compuna un program
care va calcula produsul elementelor nenule de deasupra diagonalei secundare si va numara elementele negative de sub diagonala principala a matricei T.
2. Se considera o expresie algebrica memorata in variabila T de tip String. Sa se compuna un program care verifica daca in sirul T sunt aplicate corect parantezele rotunde.
Exemple: ‘(12+ab(c-d)/5 -67) +(a+b)’ –corect; ‘(12+ab(c-d)/5 -67) +)a+b(’ –incorect.
Programele sa fie in C++.
Răspunsuri la întrebare
1.
#include <iostream>
using namespace std;
int main() {
int n;
int a[100][100];
cout << "n=";
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
cout << "a[" << i << "][" << j << "]=";
cin >> a[i][j];
}
cout << "Matricea initiala:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
cout << a[i][j] << " ";
cout << endl;
}
int p=1;
int k=0;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
if (i + j < n - 1 && a[i][j] != 0)
p = p * a[i][j];
if (i > j && a[i][j] < 0)
k++;
}
cout<<"P="<<p<<endl;
cout<<"Nr. elem neg = "<<k<<endl;
return 0;
}
2. Daca nu ai inteles rezolvarea intreaba si iti explic. Pe scurt e o problema ce se rezuma la un automat de tip stiva. Cand ai o paranteza ( incrementezi contorul, cand ai invers decrementezi si verifici mereu sa fie mai mare sau egal cu 0. La sfarsitul sirului ar trebui ca el sa fie 0.
#include <iostream>
#include <cstring>
using namespace std;
int validare(char c, int k)
{
if(!(c=='(' || c==')'))
return k;
if(c=='(')
return k+1;
if(c==')')
return k-1;
}
int main() {
char T[200] ="(12+ab(c-d)/5 -67) +(a+b)";
int k=0;
for(int i=0; i<strlen(T); i++)
{
k = validare(T[i],k);
if(k<0)
break;
}
if(k==0)
cout<<"corect"<<endl;
else
cout<<"incorect"<<endl;
return 0;
}