Hjälp med en uppgift i C++
Jag har hållit på nu ett tag med en uppgift jag har fått gällande C++. Jag tror att allt fungerar förutom koden för bubblesort.
Programmet körs, så jag har inga felmeddelanden. Men resultatet är inte vad jag önskar.
Här nedan kommer koden jag har. Och under koden även en bild av resultatet.
Resultatet jag vill ha är att först ska familjen skrivas ut, osorterad. Denna del fungerar som den ska. Sen skall bubblesort sortera familjen efter ålder och skriva ut den nya listan. Detta fungerar inte som det ska.
Sen skall, genom en sökning, en person som är 5 år gammal skrivas ut, samt på vilken plats denna personen finns i en sorterade listan. Även detta fungerar inte som det ska.
Skulle vara evigt tacksam om jag kunde få hjälp med detta.
Tack på förhand.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Person
{
public:
string namn;
int alder;
//METOD: Sätter den info som behövs.
void SetInfo(string _namn, int _alder)
{
namn = _namn;
alder = _alder;
}
//FUNKTION: Som anropas i vektorn Familj för att skriva ut namn & ålder.
void SkrivUt ()
{
cout << namn << ", " << alder << endl;
}
};
// Nedanstående funktion står med i uppgiften att man kan använda sig av.
// Jag förstår dock inte hur.
//void byt(Person &p, Person &q)
//{
// Person temp;
// temp.namn = p.namn;
// temp.alder = p.alder;
// p.namn = q.namn;
// p.alder = q.alder;
// q.namn = temp.namn;
// q.alder = temp.alder;
//}
//FUNKTION: Sorteringsalgoritm
void bubblesort(Person p[], int n)
{
int i = 0;
//Den yttre loopen, går igenom hela listan.
for (i = 0; i < n; i++)
{
//Den inre, går igenom element för element.
int nrLeft = n - i; //För att se hur många som redan gåtts igenom
for (int j = 0; j < nrLeft; j++)
{
if (p[j].alder > p[j + 1].alder) //Jämför elementen.
{
//Byt plats!
int temp = p[j].alder;
p[j].alder = p[j + 1].alder;
p[j + 1].alder = temp;
}
}
}
}
int linsok(Person p[], int n, int a)//Funktion för linjär sökning av ålder
{
for (int i = 0; i < n; i++) //Söker igenom hela array:n.
{
if (p[i].alder == a) //Om p[i] är lika med sökt värde så returneras i.
{
return i;
}
}
return -1; //Annars returneras -1.
};
//FUNKTION: Main, programmet startas.
int main()
{
cout << "Osorterade familjen:" << endl;
//Skapar en lista med personer i min familj och ger dom även deras ålder.
Person familj[4];
familj[0].SetInfo("Andreas", 37);
familj[0].SkrivUt();
familj[1].SetInfo("Pia", 39);
familj[1].SkrivUt();
familj[2].SetInfo("Ella-My", 5);
familj[2].SkrivUt();
familj[3].SetInfo("Emil", 3);
familj[3].SkrivUt();
cout << "Sorterade familjen:" << endl;
bubblesort(familj, 4); //Anropar funktionen bubblesort för att sortera vektorn Familj.
//Den sorterade listan skrivs ut
for (int i = 0; i < 4; i++)
cout << familj[i].namn << ", " << familj[i].alder << endl;
int index = linsok(familj, 4, 5); //Söker efter en viss person i vektorn Familj som innehåller 4 element och ska vara 5 år gammal
//Skriv ut resultatet
if (index == -1)
cout << "Personen hittades ej!";
else
cout << "Personen du s\x94ker heter " << familj[index].namn << " och finns p\x86 plats " << index << " i listan.";
cin.get();
return 0;
}