Witam,
Mam zadanie, które prawie w całości rozwiązałem. Oto jego treść:
Napisz funkcję, która dla listy jednokierunkowej zawierającej rekordy o polach (nazwisko, wiek) i zaczynającej się pod jakimś adresem:
- usuwa drugą osobę z listy, jeśli lista ma co najmniej 4 osoby w pewnym wieku,
- przekazuje przez parametr nazwisko usuniętej osoby albo "x", jeśli nie było usuwania,
- dopisuje na końcu listy rekord zawierający Twoje imię,
- zwraca informację logiczną, czy nastąpiło usunięcie.
Nie wiem o co chodzi w kropce drugiej. Nie do końca wiem co oznacza "przekazywanie przez parametr".
Wydaje mi się, że dopiero w definicji funkcji określone jest, czy ta funkcja może "przyjąć" dany argument przez wartość (argument formalny bez znaku &) albo przez referencję (argument formalny łącznie ze znakiem &).
#include <iostream>
using namespace std;
struct aList{
string nazwisko;
int wiek;
aList *next;
};
aList *createList ( aList *&start ){
aList *present, *tail;
present = start;
for( int i = 0 ; i < 5; i++ ){
tail = present;
present = new aList;
cout << "Podaj " << i+1 << " nazwisko: ";
cin >> present->nazwisko;
cout << "Podaj " << i+1 << " wiek: ";
cin >> present->wiek;
present->next = NULL;
if ( tail == NULL ){
start = present;
} else {
tail->next = present;
}
}
return start;
}
void printList ( aList *start ){
aList *present = NULL;
present = start;
if ( present != NULL ){
cout <<"\nDrukuje liste: \n";
while ( present != NULL ){
cout << present->nazwisko <<" " << present->wiek;
present = present->next;
cout << endl;
}
} else {
cout <<"\nLista jest pusta.";
}
}
bool givenFunction ( aList *& start, int someAge ){
aList *present = NULL;
present = start;
int howMany = 0;
while ( present != NULL ){
if( present->wiek == someAge ) howMany++;
present = present->next;
}
bool isDeleted = false;
present = start;
int numberToDelete = 2;
if ( howMany >= 4 ){
aList *addressOfSecondElement = NULL;
aList *addressOfThirdElement = NULL;
while ( present != NULL && --numberToDelete ){
present = present->next;
}
addressOfSecondElement = present;
addressOfThirdElement = present->next;
start->next = addressOfThirdElement;
string deletedName = addressOfSecondElement->nazwisko;
delete addressOfSecondElement;
// przekazanie przez parametr zmiennej deletedName ?
isDeleted = true;
} else {
// przekazanie X, gdy nie bylo usuwania ?
}
while ( present->next != NULL ){
present = present->next;
}
aList *lastElement = new aList;
lastElement->nazwisko = "JakiesImie";
lastElement->wiek = 10;
lastElement->next = NULL;
present->next = lastElement;
return isDeleted;
}
int main()
{
aList *start = NULL;
start = createList ( start );
if( start != NULL) {
printList ( start );
int someAge = 10;
bool isDeleted = false;
isDeleted = givenFunction ( start, someAge );
if ( isDeleted ) cout << "\nUsunieto element\n";
printList ( start );
} else {
cout << "Nie udalo sie utworzyc listy.\n";
}
return 0;
}