online: 7; azi: 963; total: 51418 Manual clasa a xi a - Implementarea structurilor de date - Lista liniara

Probleme Rezolvate



Manual clasa a Xi a

Implementarea structurilor de date

Lista liniara

Se calculează produsul a două polinoame. Informaţiile despre cele două polinoame se citesc dintr-un fişier . (indicație. Pentru fiecare nod din prima listă se parcurge a doua listă şi , dacă produsul coeficienţilor nu este nul, se creează un nod în lista a treia care va avea coeficientul egal cu produsul coeficienţilor şi gradul egal cu suma gradelor. Lista a treia este o listă ordonată descrescător după grad.)
# include < iostream >
# include < fstream >
struct Term {
int coeff ;
int power ;
Term * next ;
};
Term * create_term ( int coeff , int power ) {
Term * new_term = new Term ;
new_term -> coeff = coeff ;
new_term -> power = power ;
new_term -> next = nullptr ;
return new_term ;
}
void insert_term ( Term *& head , int coeff , int power ) {
Term * new_term = create_term ( coeff , power );
if (! head || head -> power < power ) {
new_term -> next = head ;
head = new_term ;
} else {
Term * current = head ;
while ( current -> next && current -> next -> power > power ) {
current = current -> next ;
}
new_term -> next = current -> next ;
current -> next = new_term ;
}
}
Term * multiply_poly ( Term * head1, Term * head2) {
Term * result = nullptr ;
for ( Term * i = head1; i; i = i-> next ) {
for ( Term * j = head2; j; j = j-> next ) {
int coeff = i-> coeff * j-> coeff ;
int power = i-> power + j-> power ;
insert_term ( result , coeff , power );
}
}
return result ;
}
void print_poly ( Term * head ) {
while ( head ) {
std :: cout << head -> coeff << "x^" << head -> power ;
if ( head -> next ) std :: cout << " + " ;
head = head -> next ;
}
std :: cout << std :: endl ;
}
void delete_poly ( Term *& head ) {
while ( head ) {
Term * temp = head ;
head = head -> next ;
delete temp ;
}
}
int main () {
std :: ifstream input_file ( "polinoame.txt" ) ;
Term *head1 = nullptr , *head2 = nullptr ;
int n1, n2, coeff , power ;
input_file >> n1;
for ( int i = 0 ; i < n1; ++i) {
input_file >> coeff >> power ;
insert_term (head1, coeff , power );
}
input_file >> n2;
for ( int i = 0 ; i < n2; ++i) {
input_file >> coeff >> power ;
insert_term (head2, coeff , power );
}
Term * result = multiply_poly (head1, head2);
print_poly ( result );
delete_poly (head1);
delete_poly (head2);
delete_poly ( result );
return 0 ;
}

Acest program va citi două polinoame dintr-un fișier text numit polinoame.txt , va calcula produsul lor și va afișa rezultatul. Fișierul de intrare ar trebui să aibă următorul format:
numar_de_termeni_polinom1
coeficient1_1 grad1_1
coeficient1_2 grad1_2
...
numar_de_termeni_polinom2
coeficient2_1 grad2_1
coeficient2_2 grad2_2
...
Asigurați-vă că aveți un fișier numit polinoame.txt în același director