online: 4; azi: 616; total: 51071 Manual clasa a xi a - Implementarea structurilor de date - Lista liniara

Probleme Rezolvate



Manual clasa a Xi a

Implementarea structurilor de date

Lista liniara

Să se verifice dacă numerele sunt în progresie geometrică şi să se afişeze primul termen al progresiei geometrice. ( Observaţie . Dacă numerele sunt în progresie geometică , nu este obligatoriu ca şirul de numere citit din fişier să înceapă cu primul termen al progresiei geometrice.)
V om implementa următoarele subprograme:
# include < iostream >
# include < fstream >
using namespace std ;
struct Node {
int data;
Node * next ;
};
bool isGeometricProgression ( Node * head ) {
if ( head == nullptr ) {
return false ;
}
int firstTerm = head ->data;
Node * current = head -> next ;
while ( current != nullptr ) {
if ( current ->data == 0 ) {
return false ;
}
if ( current ->data % firstTerm != 0 ) {
return false ;
}
firstTerm = current ->data;
current = current -> next ;
}
return true ;
}
void printFirstTermOfGeometricProgression ( Node * head ) {
int firstTerm = head ->data;
Node * current = head -> next ;
while ( current != nullptr ) {
firstTerm *= current ->data / head ->data;
current = current -> next ;
}
cout << " First term of geometric progression : " << firstTerm << endl ;
}
void printList ( Node * head ) {
Node * current = head ;
while ( current != nullptr ) {
cout << current ->data << " " ;
current = current -> next ;
}
cout << endl ;
}
int main () {
ifstream inFile ;
inFile. open ( "input.txt" );
Node * head = nullptr ;
Node * tail = nullptr ;
int num;
while ( inFile >> num) {
Node * newNode = new Node ;
newNode ->data = num;
newNode -> next = nullptr ;
if ( head == nullptr ) {
head = newNode ;
tail = newNode ;
} else {
tail -> next = newNode ;
tail = newNode ;
}
}
if ( isGeometricProgression ( head )) {
printFirstTermOfGeometricProgression ( head );
} else {
cout << "The list does not represent a geometric progression ." << endl ;
}
return 0 ;
}

Observație: Pentru a verifica dacă lista reprezintă o progresie geometrică, am parcurs lista și am verificat dacă fiecare element este divizibil cu primul element. Pentru a calcula primul termen al progresiei geometrice, am înmulțit toate elementele listei, împărțind fiecare element la primul element.
Pentru a testa corectitudinea programului, putem folosi următoarele date de intrare: