Kurzusok
/
C++
C++
/
Feladatok
/
Választás napja
Választás napja

Választás napja

Tanulófeladat

Bevezetés

Referenciák

Másolatok és referenciák

A jelenlegi ismereteinkkel egy kicsit körülményes egy függvény segítségével frissíteni egy változót. Minden függvényargumentum másolatként kezelődik, és nem változtatja meg az eredeti értéket. A típusod méretétől függően ennek komoly következményei lehetnek a kódod teljesítményére.

int adjust_salary(int base, int kids) {
    return base + kids * 500;
}
int now_a_mother_of_twins{2500};
adjust_salary(now_a_mother_of_twins, 2);

// now_a_mother_of_twins is still 2500
now_a_mother_of_twins = adjust_salary(now_a_mother_of_twins, 2);
// now_a_mother_of_twins is now 3500

A References álneveknek tekinthetők: a rajtuk végzett változtatások hatással vannak az eredeti változóra. A References a típusdeklarációban és-jelet (&) használ.

int balance{1000};
int& budget{balance};
int pro_computer_wheels{699};
budget -= pro_computer_wheels;
// budget is now 301;
// balance is also 301;

Az újrakötés (egy reference kötésének megváltoztatása) nem lehetséges. Nem lehet inicializálatlan reference. A References-t egy létező változóval kell inicializálni.

int main_acc{1'000'000};
int side_acc{-20};
int& savings{main_acc};
// => main_acc and savings are 1'000'000

// try to reseat savings to use main account
savings = side_acc;
// savings and main_acc are now -20
// as this uses the **value** of side_acc
savings += 20;
// savings and main_acc are now 0, side_acc is still -20

int& future_budget;
// => compiler error, reference must be bound!

void

A references erejével lehet, hogy egyáltalán nem is kell értéket visszaadnod egy függvényből. Ebben az esetben void-ot használunk visszatérési típusként.

void increase_power(int& level) {
    level += 500;
}
int goku{8700};
increase_power(goku);
// goku's power level?
// It's over 9000!

Utasítások

A közeledben lévő helyi iskolában működik egy nagyon aktív diákegyesület. A diákegyesületet egy elnök vezeti, és kétévente új elnököt választanak.

Az idei választáson úgy döntöttek, hogy szükség van egy új, digitális szavazatszámláló rendszerre. Az iskola a segítségedet kéri ennek az új rendszernek a megépítéséhez.

1. Szerezd meg a szavazatok számát egy ElectionResult-ból

Az új rendszernek szüksége lesz egy módra, amivel lekérdezheti a szavazatok számát egy számlálóból.

A választási eredmény structot már létrehozták neked, és így van definiálva:

struct ElectionResult {
    // Name of the candidate
    std::string name{};
    // Number of votes the candidate has
    int votes{};
};

Mivel a struct minden tagja nyilvános, nem kell constructor-t írnod egy ElectionResult objektum inicializálásához. Ehelyett használhatsz initializer list-et:

ElectionResult hamilton{"Alex", 1804};
// => the hamilton object was initialized with the name "Alex" and 1804 votes.

Készíts egy vote_count függvényt, amely argumentumként egy ElectionResult-ra mutató referenciát kap, és visszaadja az ElectionResult-ban lévő szavazatok számát.

vote_count(hamilton);
// => 1804

2. Növeld egy ElectionResult szavazatainak számát

Végre eljött az idő a szavazatok feldolgozására! Most egy módra van szükséged, amivel növelheted a szavazatok számát egy ElectionResult-ban.

Készíts egy void függvényt increment_vote_count néven, amely argumentumként egy ElectionResult-ra mutató referenciát és egy szavazatszámot kap, majd megnöveli az ElectionResult-ot az adott szavazatszámmal.

ElectionResult burr{"Aaron " 1801};

increment_vote_count(burr, 3);

vote_count(burr);
// => 1804

3. Szavazatszámlálás és elnökség

Az iskola leadta a szavazatait, és most itt az idő, hogy megnézzük az eredményt, és megállapítsuk, ki a győztes.

Készíts egy determine_result függvényt, amely referenciaként megkapja a végeredményt, és visszaad egy referenciát az új elnök ElectionResult-jára. A győztes nevét is módosítania kell úgy, hogy elé fűzi a „President” szót. A végeredményt egy std::vector<ElectionResult>-ra mutató reference formájában kapod meg; ez a vektor az összes induló jelölt ElectionResults-át tartalmazza.

ElectionResult sanchez{"Pedro", 471};
ElectionResult wheatley{"Summer", 340};
std::vector<ElectionResult> final_count{sanchez, wheatley};

ElectionResult& winner = determine_result(final_count);

winner.name;
// => "President Pedro"

Hogy egyszerű legyen, a következőket feltételezheted:

  • A vector-nak legalább egy eleme van.
  • Az első helyen nem lesz holtverseny.
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
C++ Exercism

Készen állsz elkezdeni a(z) Választás napja feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C++ nyelvet 19 fogalom100 feladat segítségével, valódi emberi mentorálással, mindez ingyen.