Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pomoc w zadaniu c++


Rekomendowane odpowiedzi

Opublikowano

Witam mam problem z zadaniem, a dokładnie z podpunktami d,e,f.

Treść zadania jest nad bibliotekami. Język c++

Może mi ktoś wytłumaczyć jak napisać te 3 funkcje?

Cytuj


 

/*Napisz program wykorzystujący struktury tablic, który będzie pracował na obiekcie "człowiek". Cechy obiektu:imie, nazwisko, płeć, wiek, wzrost, pesel, a następnie zaprogramuj funkcję:

a) wypełniająca tablice struktury,
B) wypisującą tablice struktury,
c) wyświetlający wszystkie kobiety,
d) najstarszą osobę w strukturze,
e) usuwajcy jeden z obiektów w strukturze,
f) modyfikujący zadany element struktury*/
#include <iostream>
#include <cstdlib>
using namespace std;
 
 
 struct czlowiek{
 char imie[50];
 char nazwisko[50];
 char plec;
 long long pesel;
 int wiek;
 float wzrost;
};
 
void wprowadz(int n,czlowiek osoba[])
{
for(int i=0;i<n;i++)
{
cout<<"podaj imie: " ;
cin>>osoba.imie;
cout<<"podaj nazwisko: ";
cin>>osoba.nazwisko;
cout<<"Wpisz m jesli jestes mezczyzna, a k jesli kobieta: ";
cin>>osoba.plec;
cout<<"podaj pesel: ";
cin>>osoba.pesel;
cout<<"podaj wiek: ";
cin>>osoba.wiek;
cout<<"podaj wzrost: ";
cin>>osoba.wzrost;
}
}
 
void wypisz(int n,czlowiek osoba[])
{
for(int i=0;i<n;i++)
{
cout<<endl;
cout<<i+1<<" ";
cout<<"imie: "<<osoba.imie<<" ";
cout<<"nazwisko:"<<osoba.nazwisko<<" ";
if(osoba.plec=='m')
cout<<"plec: mezczyzna"<<" ";
else
cout<<"plec: kobieta"<<" ";
cout<<"pesel: "<<osoba.pesel<<" ";
cout<<"wiek: "<<osoba.wiek<<" ";
cout<<"wzrost: "<<osoba.wzrost<<endl;
}
}
void wyszukaj(int n,czlowiek osoba[])
{
for(int i=0;i<n;i++){
if(osoba.plec=='k')
{cout<<"Spis kobiet:"<<endl;
cout<<i+1<<" ";
cout<<"imie: "<<osoba.imie<<" ";
cout<<"nazwisko:"<<osoba.nazwisko<<" ";
cout<<"plec: kobieta"<<" ";
cout<<"pesel: "<<osoba.pesel<<" ";
cout<<"wiek: "<<osoba.wiek<<" ";
cout<<"wzrost: "<<osoba.wzrost<<endl;}
}
}
void najstarsza(int n,czlowiek osoba[])
{cout<<"Najstarsza osoba;"<<endl;
for(int i=0;i<n;i++)
{int starszy;
if(osoba.wiek>starszy)
starszy==osoba.wiek;
wypisz(n, osoba);
}
 
}
 
int main(int argc, char** argv) {
int n;
cin>>n;
czlowiek osoba[n];
wprowadz(n, osoba);
wypisz(n, osoba);
wyszukaj(n, osoba);
najstarsza(n, osoba);
return 0;
   
}

 

Opublikowano

Cześć, nie jestem pewnien ale powinieneś tak to zrobić (wg. mnie)

 

e) Musiałbyś do tablicy dodać (Możesz ale nie musisz) zmienną id w celu identyfikowania tej osoby za pomocą liczby a nie imienia, nazwiska lub pesel'u następnie:

void Usun(int n, czlowiek osoba[]){

int id, z = 0;

cout << "Podaj identyfikator osoby: ";

cin >> id;

while(true){

if(osoba[z].id == id){

osoba[z].id = NULL;

} z++; break;

}

}

Po usunięciu identyfikatora tej osoby wystarczy potem tylko nadpisywać dane np. Imie, Nazwisko itp.

 

-> Musiałbyś zrobić przy wyświetlaniu danych z tablicy po identyfikatorze jeżeli jest pusty to nie wyświetla ;)

 

Oczywiście można to zrobić w inny sposób np. osoba[n-1]........ :)

Opublikowano

void Usun(int n, czlowiek osoba[]){

int id;

cout << "Podaj identyfikator osoby: ";

cin >> id;

while(true){

if(osoba[n].id == id){

osoba[n].id = NULL;

} break;

}

}

Po co robić w tym wypadku while(true)? Od tego masz możliwość podania jakiegoś warunku wykonywania pętli, żeby z niego korzystać a nie robić while(true) a następnie break(oczywiście break jest przydatne ale przecież można wykorzystać możliwości pętli w tym wypadku), kiedy możesz to łatwo zmienić, inna sprawa że ta pętla jest tu w ogóle nie potrzebna, dosłownie można wykasować te dwie linijki z while i break, bo nawet nie przechodzisz w tej pętli po elementach tablicy...

 

Co do tematu:

Najłatwiej moim zdaniem będzie tutaj moim zdaniem użyć vectoru, i wtedy:

d)

czlowiek najstarszyCzlowiek;
if (tab.size() > 0) {
    najstarszyCzlowiek = tab[0];
    for (int i = 0; i != tab.size(); i++){
        if (tab[i].wiek > najstarszyCzlowiek.wiek)
            najstarszyCzlowiek = tab[i]
    }
}

To tylko przykład, pewnie można to zrobić lepiej.

e)

Po prostu wczytujesz który element ma być usunięty i używasz funkcji dla vecotra

f)

To samo co dla twojej funkcji wprowadź, tylko zamiast pętli podajesz index który chcesz zmodyfikować, czyli

bool zmien(int index, std::vector<czlowiek>tab){
if (index >= tab.size() || tab.size() == 0 || index < 0) return false;
cout<<"podaj imie: " ;
cin>>osoba[index].imie;
return true;
}

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

 

Po co robić w tym wypadku while(true)? Od tego masz możliwość podania jakiegoś warunku wykonywania pętli, żeby z niego korzystać a nie robić while(true) a następnie break(oczywiście break jest przydatne ale przecież można wykorzystać możliwości pętli w tym wypadku), kiedy możesz to łatwo zmienić, inna sprawa że ta pętla jest tu w ogóle nie potrzebna, dosłownie można wykasować te dwie linijki z while i break, bo nawet nie przechodzisz w tej pętli po elementach tablicy...

 

Co do tematu:

Najłatwiej moim zdaniem będzie tutaj moim zdaniem użyć vectoru, i wtedy:

d)

czlowiek najstarszyCzlowiek;
if (tab.size() > 0) {
    najstarszyCzlowiek = tab[0];
    for (int i = 0; i != tab.size(); i++){
        if (tab[i].wiek > najstarszyCzlowiek)
            najstarszyCzlowiek = tab[i]
    }
}

To tylko przykład, pewnie można to zrobić lepiej.

e)

Po prostu wczytujesz który element ma być usunięty i używasz funkcji dla vecotra

f)

To samo co dla twojej funkcji wprowadź, tylko zamiast pętli podajesz index który chcesz zmodyfikować, czyli

bool zmien(int index, std::vector<czlowiek>tab){
if (index >= tab.size() || tab.size() == 0 || index < 0) return false;
cout<<"podaj imie: " ;
cin>>osoba[index].imie;
return true;
}

Pętle dałem bo całkowicie co innego miałem napisać ale z tego że zmieniłem całkowicie kod to zapomniałem usunąć pętli :/

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...