Hjälp med Programmering 1 (Bubbelsort)

Permalänk

Hjälp med Programmering 1 (Bubbelsort)

Hej har lite problem med min uppgift. Har programmerat väldigt lite och är inte så införstådd i vad saker och ting faktiskt gör. (denna kurs är på distans och är svårt att fråga läraren att förklara alla moment) Vi ska i alla fall söka igenom en "vektor" (men som egentligen är en Array om jag fattat rätt). efter en person och sedan returnera index för den personen. Och koden ska ha minst fyra familjemedlemmar.

#include <iostream> #include <string> #include <vector> using namespace std; class Person { public: string namn; int ålder; void Personuppgifter(string _namn, int _ålder) { namn = _namn; ålder = _ålder; } }; void byt(Person &p, Person &q) { Person temp; temp.namn = p.namn; temp.ålder = p.ålder; p.namn = q.namn; p.ålder = q.ålder; q.namn = temp.namn; q.ålder = temp.ålder; } int linsok(Person* personArray, int key) { for (int i = 0; i < 4; i++) { if (personArray[i].ålder == key) return i; } return -1; }; int main() { Person familj[4]; familj[0].Personuppgifter("kalle", 21); familj[1].Personuppgifter("Anna", 40); familj[2].Personuppgifter("Oskar", 18); familj[3].Personuppgifter("Sven-Erik", 82); for (int i = 0; i < 4; i++) cout << p[i] << endl; byt(temp); cout << familj << endl; int index = linsok(familj, 12); if (index == -1) cout << "Personen hittades ej!"; else cout << "Personen du s\x94ker \x84r " << familj[index].namn << " och finns p\x86 index " << index; cin.get(); system("pause"); return 0; }

vet inte hur code-taggarna funkar så kan tyvärr inte fixa till det i skede

hur som helst så till att börja med så är "Void byt" en kod som är utlagd av läraren och jag har suttit och grubblat ifall han vill att vi ska använda oss av den eller inte men den fick hamna med i detta inlägg ifall nån kan ge mig en bättre uppfattning om det. (hade en annan kod innan men behöver bättre förklaring kring denna kod)

men problemet är att jag får inte till två error medelanden och det är att
"p": uncleared identifier
"temp": uncleared identifier

har kollat runt på Cplusplus.com men tycker inte jag får hjälp av det eftersom jag inte får förklarat exakt vad felet är.

om någon vill ta och titta på koden och kanske försöka hjälpa till så hade det varit toppen

Permalänk
Medlem
Skrivet av Tiger_wow:

[...]
men problemet är att jag får inte till två error medelanden och det är att
"p": uncleared identifier
"temp": uncleared identifier

I din for-loop i main() har du arrayen p[] som du försöker skriva ut index i. Problemet är att du inte har någon array vid namn p i main-blocket. Samma med "temp".

Visa signatur

Desktop: AMD 3950X, 64 GB RAM, Nvidia 4070 ... (Windows 11)
Serverdesktop: AMD 5600G, 64 GB RAM (Proxmox)
Labbmiljö: Supermicro SC825 X9DRi-F 2xE5-2667v2 64GB RAM
Kamera: Canon R5, Canon RF 100-500, Laowa 100mm f/2.8, Canon RF 24-70 f/2,8

Permalänk
Medlem
Skrivet av Tiger_wow:

vet inte hur code-taggarna funkar så kan tyvärr inte fixa till det i skede

Det är bara att lägga din kod mellan code-taggar. Detta:
[­code]
Kod
[­/code]
blir till:

Kod

Du kan även gå tillbaks och redigera ditt första inlägg, och lägga till code-taggar. Det blir mycket lättare att läsa koden om den är korrekt indenterad.

Permalänk
Medlem

@perost:

Något i den här stilen

#include <iostream> #include <string> #include <vector> using namespace std; class Person { public: string namn; int ålder; void Personuppgifter(string _namn, int _ålder) { namn = _namn; ålder = _ålder; } }; void byt(Person &p, Person &q) { Person temp; temp.namn = p.namn; temp.ålder = p.ålder; p.namn = q.namn; p.ålder = q.ålder; q.namn = temp.namn; q.ålder = temp.ålder; } int linsok(Person* personArray, int key) { for (int i = 0; i < 4; i++) { if (personArray[i].ålder == key) return i; } return -1; }; int main() { Person familj[4]; familj[0].Personuppgifter("kalle", 21); familj[1].Personuppgifter("Anna", 40); familj[2].Personuppgifter("Oskar", 18); familj[3].Personuppgifter("Sven-Erik", 82); for (int i = 0; i < 4; i++) cout << p[i] << endl; byt(temp); cout << familj << endl; int index = linsok(familj, 12); if (index == -1) cout << "Personen hittades ej!"; else cout << "Personen du s\x94ker \x84r " << familj[index].namn << " och finns p\x86 index " << index; cin.get(); system("pause"); return 0; }

Visa signatur

/M

Permalänk

okej så nu verkar jag fått till det så koden faktiskt funkar men tror jag har lite kvar och finslipa.

#include <iostream> #include <string> #include <vector> using namespace std; class Person { public: // Denna är öppen så jag kan komma åt denna genom koden. string namn; int ålder; void Personuppgifter(string _namn, int _ålder) { namn = _namn; ålder = _ålder; } }; Person* bubbleSort(Person* p, int max) { for (int i = 0; i < max; i++) { int nrLeft = max - i; for (int j = 0; j < nrLeft; j++) { if (p[j].ålder > p[j + 1].ålder) { Person temp = p[j]; p[j] = p[j + 1]; p[j + 1] = temp; } } } return p; for (int i = 0; i < 4; i++) cout << p[i] << endl; } int linsok(Person* p, int key) { for (int i = 0; i < 4; i++) { if (p[i].ålder == key) return i; } return -1; }; int main() { Person familj[4]; familj[0].Personuppgifter("Kalle", 21); familj[1].Personuppgifter("Anna", 40); familj[2].Personuppgifter("Oskar", 18); familj[3].Personuppgifter("Sven-Erik", 82); for (int i = 0; i < 4; i++) cout << familj << endl; int index = linsok(familj, 21); if (index == -1) cout << "Personen hittades ej!"; else cout << "Personen du s\x94ker heter " << familj[index].namn << " och finns p\x86 index " << index; cin.get(); system("pause"); return 0; }

så här ser den ut nu men okunnig som man är så känns det som att jag inte riktigt fått en sortering för genom att köra koden får jag 4 identiska index samt att jag får ut rätt person i detta fall är det kalle.

så vad jag nu sitter och grubblar på är hur jag ska kunna konvertera de fyra index jag får till det fyra personerna som jag vill sortera.
kan väl även lägga till att jag tagit bort bubbelsorten ur main() funktionen för att kunna köra den. ser annars ut ungefär såhär

for (int i = 0; i < 4; i++) bubbleSort(familj); cout << familj << endl;

men eftersom den ger mig error medelandet too few arguments in function call så har jag kringått lite bara för att få igång programmet

Permalänk
Medlem
Skrivet av Tiger_wow:

så här ser den ut nu men okunnig som man är så känns det som att jag inte riktigt fått en sortering för genom att köra koden får jag 4 identiska index samt att jag får ut rätt person i detta fall är det kalle.

så vad jag nu sitter och grubblar på är hur jag ska kunna konvertera de fyra index jag får till det fyra personerna som jag vill sortera.
kan väl även lägga till att jag tagit bort bubbelsorten ur main() funktionen för att kunna köra den. ser annars ut ungefär såhär

for (int i = 0; i < 4; i++) bubbleSort(familj); cout << familj << endl;

men eftersom den ger mig error medelandet too few arguments in function call så har jag kringått lite bara för att få igång programmet

Kolla din kod.
"Too few arguments in function call"
"bubbleSort(Person* p, int key), i for-loopen ger du funktionen bara vectorn.

Visa signatur

Dator: Ett metall chassi med varierande komponenter på insidan.

Permalänk

Nu har jag suttit fast på det sista problemet med min kod lyckats fixa i stort sett allt men det är en del som jag inte fått till på några dagar nu.

for (int i = 0; i < 4; i++) cout << p[i] << endl;

då dessa ( << ) mellan cout << p[i] ger mig error medelandet C2679 "no operator found which takes a right-hand opperand of type 'Person'. har försökt fibbla runt och lösa detta men har inte fått nån lösning på det.

kan någon förklara vars felet ligger för just nu så kommer jag inte längre.

Permalänk
Medlem
Skrivet av Tiger_wow:

Nu har jag suttit fast på det sista problemet med min kod lyckats fixa i stort sett allt men det är en del som jag inte fått till på några dagar nu.

for (int i = 0; i < 4; i++) cout << p[i] << endl;

då dessa ( << ) mellan cout << p[i] ger mig error medelandet C2679 "no operator found which takes a right-hand opperand of type 'Person'. har försökt fibbla runt och lösa detta men har inte fått nån lösning på det.

kan någon förklara vars felet ligger för just nu så kommer jag inte längre.

Antingen har du råkat ta bort/eller inkluderat: "#include <string>" i koden.
En annan lösning kan vara att du glömt semicolon ( ; ) efter "using namespace std;"

Visa signatur

Dator: Ett metall chassi med varierande komponenter på insidan.

Permalänk
Medlem
Skrivet av Tiger_wow:

Nu har jag suttit fast på det sista problemet med min kod lyckats fixa i stort sett allt men det är en del som jag inte fått till på några dagar nu.

for (int i = 0; i < 4; i++) cout << p[i] << endl;

då dessa ( << ) mellan cout << p[i] ger mig error medelandet C2679 "no operator found which takes a right-hand opperand of type 'Person'. har försökt fibbla runt och lösa detta men har inte fått nån lösning på det.

kan någon förklara vars felet ligger för just nu så kommer jag inte längre.

Du försöker skriva ut ett objekt, inte dess medlemsvariabler. Antingen behöver du medlemsfunktioner som returnerar önskad data, eller överlagra operatorn till att göra något kul.

Visa signatur

Desktop: AMD 3950X, 64 GB RAM, Nvidia 4070 ... (Windows 11)
Serverdesktop: AMD 5600G, 64 GB RAM (Proxmox)
Labbmiljö: Supermicro SC825 X9DRi-F 2xE5-2667v2 64GB RAM
Kamera: Canon R5, Canon RF 100-500, Laowa 100mm f/2.8, Canon RF 24-70 f/2,8