Przekazywanie zmiennej przez parametr

0

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;
}


0

chodzi o coś w rodzaju

void delete(..., string *output_deleted_name) {
    //...
    *output_deleted_name = has_been_deleted? deleted_cośtam.name : string("x");
}
0

Czy ta funkcja powinna tak wyglądać?

bool givenFunction ( aList *& start, int someAge, string *&outputName ){
    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;

        *outputName = deletedName;
        isDeleted = true;
    } else {
        *outputName = "x";
    }
	
    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;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1