Behöver hjälp med c++ klasser, linsökningar och Bubblesort.
Så vad jag behöver hjälp med är en inlämning jag fått. Den ser ut såhär i sin helhet:
Skapa en klass Person som innehåller två attribut:
string namn int alder
som lagrar personens namn och ålder, samt metoden
void SkrivUt()
som skriver ut innehållet i variablerna namn och alder på skärmen.
Skriv en funktion för linjär sökning i en vektor p med Person-objekt.
int linsok(Person p[], int n, int a)
Funktionen ska söka igenom vektorn p efter en person med åldern a och returnera index för den personen. Om ingen person hittas returneras -1. Variabeln n är antalet element i vektorn.
Skriv också en funktion som sorterar en Person-vektor efter ålder (yngst först).
void bubblesort(Person p[], int n)
Se pseudokoden för bubblesort och exempel 15.3 på sidan134 i kursboken. För att förenkla kodningen lite grann, använd gärna nedanstående funktion för att byta plats på två element
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; }
Har suttit en bra stund och fått ihop detta. Försökt googla och hitta hur man ska göra men jag har fastnat. Såhär ser min kod ut nu:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Person
{
private:
string name;
int age;
public:
void Print()
{
cout << "Personen heter " << name << " och \x84r " << age << " \x86r gammal" << endl;
}
string get_name()
{
return name;
}
void set_name(string set)
{
name = set;
}
int get_age()
{
return age;
}
void set_age(int set)
{
age = set;
}
};
int linesearch (Person p[], int n, int a)
{
int i = 0;
for (i = 0; i < n; i++)
{
if (p[i].get_age() == a)
return i;
}
return -i;
};
void bubblesort(Person p[], int n)
{
for (int i = 0; i < n; i++)
{
int nrLeft = n-i;
for (int j = 0; j < nrLeft; j++)
{
if (p[j].get_age() > p[j+1].get_age())
{
Person temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
};
int main()
{
int age=0;
Person familj[4];
Person pers1;
Person pers2;
Person pers3;
Person pers4;
pers1.set_age(19);
pers1.set_name("Niklas");
pers2.set_age(58);
pers2.set_name("Hasse");
pers3.set_age(5);
pers3.set_name("Lasse");
pers4.set_age(33);
pers4.set_name("Liselott");
familj[0] = pers1;
familj[1] = pers2;
familj[2] = pers3;
familj[3] = pers4;
bubblesort(familj,4);
{
cout << familj << endl;
cout << "Ange en \x86lder " << endl;
cin >> age;
}
}
Just nu så får jag ingen error. Jag har inte kallat på linesearchen ännu för jag ville först se om min bubblesort sorterade något. Hade först "print" mellan pers1 2 3 4 etc, därför är det mellanrum. Om jag kör programmet såhär, så får jag upp "0x6efe0c" och sedan "ange en ålder" som jag har längst ner med. Bubblesorten vill alltså inte sortera. Jag har försökt gå efter hur boken gjort, den har iförsig inte gjort något med en funktion.
Men jag vet verkligen inte hur jag ska fortsätta. Och jag lyckas inte få tag i någon mer information. Om någon har lite hjälp att erbjuda så jätte gärna. Vet att den inte är perfekt, är en nybörjare på detta och försöker så gott jag kan. Så behöver hjälp med att få min bubblesort att fungera, sedan hur man korrekt kallar på den och sen kalla på linesearchen.
Vill även tillägga att om jag lägger tillbaks print under varje person, så kommer inte det där "0x6efe0c" upp. Och den verkar skippa "cin" längst ner med, för klickar jag något stängs det ner.