Inlämning om 6 timmar -- C++ (HAR FASTNAT)!!

Trädvy Permalänk
Medlem
Registrerad
Apr 2012

Inlämning om 6 timmar -- C++ (HAR FASTNAT)!!

Hej kära forumare!

Jag har fastnat i min C++ inlämningsuppgift efter att endast ha läst C++ i fyra veckor..
Jag är sååå nära att få det att funka men nu sväljer jag min stolthet och ber om Er hjälp!

Har redan gjort tre steg av uppgiften men sista steget lyder följande;

Gör ett huvudprogram (main) för att testa din klass och dina funktioner. Deklarera en vektor familj med fyra personer:
Person familj[4];
som fylls med innehåll – namn och ålder på fyra personer. Välj själv om detta görs direkt i koden eller om värdena matas in av användaren när programmet körs. Programmet ska sedan sortera vektorn familj och skriva ut familje-medlemmarna i åldersordning med den yngsta först. Till sist ska funktionen linsok anropas och söka efter om någon familjemedlem har en viss ålder. (Även här får du själv välja om denna ålder är bestämd i koden eller matas in av användaren)
Uppgift 3.4 – Frivillig. Betygsskala: A-F
Komplettera ditt program med en funktion för binär sökning som söker efter ålder i en personvektor. Funktionen skall ha en rekursiv algoritm, dvs. den skall anropa sig själv.

Jag har rört till det i min kod efter att ha kämpat hela natten i frustration... Felet är att listan som ska vara "sorterad" inte sorteras enligt ålder.. Och nu har jag till och med lyckas röra till så att jag får output "Personen hittas inte" vilket är åt skogen..

#include <iostream> #include <string> using namespace std; class person // KLASS PERSON { public: string namn; int alder; void print() { cout << namn <<", "<< alder << " \x8Fr" << endl; // TALAR OM VAD SOM SKA SKRIVAS UT } void setInfo(string _namn, int _alder) // INFO SOM KRÄVS { namn = _namn; alder = _alder; } }; int linsok(person p[], int n, int a) { for (int i = 0; i < n; i++) // ITERERAR OCH FÖRSÖKER HITTA ANVÄNDAREN { if (p[i].alder == a) { return i; } } return -1; }; void bubblesort(person p[], int n) { int i = 0; for ( i = 0; i < n; i++) // ITERERAR OCH SÖKER IGENOM HELA LISTAN, ELEMENT FÖR ELEMENT { int nrLeft = n - i; for (int j = 0; j < nrLeft; j++) { if (p[j].alder > p[j+1].alder) { } } } } int main() { //START AV PROGRAM MED OSORTERAD SAMT SORTERAD LISTA AV FAMILJEN cout << "*** OSORTERAD LISTA ***" << endl << endl; // person familjenAsk[4]; familjenAsk[0].setInfo("Ritwa", 45); familjenAsk[0].print(); familjenAsk[1].setInfo("Peter", 52); familjenAsk[1].print(); familjenAsk[2].setInfo("Sandra", 19); familjenAsk[2].print(); familjenAsk[3].setInfo("Johan", 26); familjenAsk[3].print(); cout << endl << "*** SORTERAD LISTA ***" << endl << endl; bubblesort(familjenAsk, 4); // ANROP FÖR ATT SORTERING SKA SKE I LISTAN for (int x = 0; x < 4; x++) cout << familjenAsk[x].namn << ", " << familjenAsk[x].alder << " \x8Fr" << endl; int index = linsok(familjenAsk, 4, 5); if (index == -1) cout << "\nPersonen du letar efter hittas ej!" << endl;// SKRIVS UT OM PERSONEN INTE HITTAS else cout << endl << familjenAsk[5].namn << " befinner sig p\x86 plats " << index << " i listan"; // SKRIVS UT OM PERSONEN HITTAS cin.get(); return 0; }

Jag får ut följande output;

Skulle någon kunna ge mig en spark i röven så jag hinner skicka in min uppgift?

Tack på förhand!

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004

Att sorteringen inte fungerar beror nog främst på att du inte gör något här:

if (p[j].alder > p[j+1].alder) { }

och det ser ut som att du letar efter någon som har ålder 5 (vilket inte finns i listan).

Trädvy Permalänk
Medlem
Registrerad
Apr 2012

@Elgot: Jag förstår inte helt vad du menar, som sagt jag har bara läst C++ i ca fyra veckor.. Jag kommer inte längre, har suttit x antal timmar och försökt hitta felet.. Förstår inte vad jag missat i sorteringen.. Vad är det som fattas i stycket som du hittade? Snälla hjälp, jag är desperat här

cout << endl << "*** SORTERAD LISTA ***" << endl << endl;

bubblesort(familjenAsk, 4); // ANROP FÖR ATT SORTERING SKA SKE I LISTAN

for (int x = 0; x < 4; x++)
cout << familjenAsk[x].namn << ", " << familjenAsk[x].alder << " \x8Fr" << endl;

int index = linsok(familjenAsk, 0, 45); <-- har ändrat här nu men det gjorde ingen skillnad..

if (index == -1)
cout << "\nPersonen du letar efter hittas ej!" << endl;// SKRIVS UT OM PERSONEN INTE HITTAS
else
cout << endl << familjenAsk[4].namn << " befinner sig p\x86 plats " << index << " i listan"; // SKRIVS UT OM PERSONEN HITTAS

cin.get();
return 0;

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Okt 2006

Jag tror det är viktigt att du försöker namnge dina variabler bättre. Att ha variabler med namn som "n" och "a" gör det förvirrande och man förstår inte vad de ska representera. I ditt senaste exempel angav du argumenten 0 och 45 men vad är det för siffror och hur används de? Att ange 0 var till exempel inte så bra.

Elgot pekade ut ett område där det saknas kod, där behöver du såklart förstå vad som förväntas hända när villkoret uppfylls. Vad vill man göra när person j+1 är yngre än person j?

Trädvy Permalänk
Hedersmedlem
Plats
Stockholm, Sverige
Registrerad
Jul 2001

Får man fråga vad det är för uppgift, vilken kurs?

Som sagt så saknar du kod i sorteringsalgoritmen, därför inget händer. Och om du kollar på din sökfunktion så är det rätt tydligt vad som ska in. Bättre variabelnamn hade varit en bra plan.

Kanske skriva om allt från början med nya variabelnamn? När jag kör fast i kodning brukar jag börja om från ett fungerande stadie.

Litet projekt

yayaya I am Lorde yayaya

Trädvy Permalänk
Medlem
Registrerad
Apr 2012

@CCWarlock:

Jag läser Programmering 1 på distans via MiRoI, ska även läsa Programmering 2 samt Webbutveckling 1. Har alltid varit en jäkel på datorer så tänkte ge mig in i utvecklingsbranschen men just nu känns det som jag har tagit mig vatten över huvudet, detta är ju som att lära sig ett helt nytt språk

Ska absolut tänka på hur jag döper mina variabler! Fick stressa igenom uppgiften pga mycket jobb i veckan men nu verkar det som att jag har fått rätt på det

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004
Skrivet av KENUBBE:

@Elgot: Jag förstår inte helt vad du menar, som sagt jag har bara läst C++ i ca fyra veckor.. Jag kommer inte längre, har suttit x antal timmar och försökt hitta felet.. Förstår inte vad jag missat i sorteringen.. Vad är det som fattas i stycket som du hittade? Snälla hjälp, jag är desperat här

Tanken med bubblesort är att hitta element som ligger i fel ordning och byta plats på dem. Nu letar du men gör inget när något påträffas.

Det här ser också lite skumt ut:

cout << endl << familjenAsk[5].namn << " befinner sig p\x86 plats " << index << " i listan"; // SKRIVS UT OM PERSONEN HITTAS

familjenAsk[5] anger det sjätte elementet i listan, men du har bara fyra...