Programmering 1 c++, sorteringsalgoritm, bubblesort, linjärsökning

Permalänk

Programmering 1 c++, sorteringsalgoritm, bubblesort, linjärsökning

Hej!!

Har det lite panik just nu, har en uppgift där jag ska göra följande:

-Deklaration av klassens attribut, dess datatyp och medlemsfunktionen/metoden ToString()
-Implementation av linsok och bubblesortering funktioner/metoder
-Få indata från användaren städernas namn och temperatur
-Kontrollera att de inmatade temperaturvärden befinner sig inom intervallet
temperatur >= -60 && temperatur <= 60
-Sök i fältet vilken stad har en viss temperatur. För detta anropa linsök funktionen/metoden
-Anropa funktionen/metoden för sortering av element i fältet
-Anropa funktionen/metoden för ToString och gör en utskrift av objekt i fältet

Så ska skapa en klass, vilket jag gjort, Stad. Sen ska användare skriva in 4 städer och temperaturer i dessa städer. Sen ska jag lagra dessa intagen någonstans och göra en bubblesortering på det där temperatur går från lägst till högst.
Sen ska jag göra en linjärsökning där man ska söka efter en temperatur så ska staden som har den temperaturen dyka upp.

Koden är inte färdig som ni kanske ser, men om någon fin själ där ute kan ta sin tid att förklara hur jag ska göra med min bubblesortering och linjära sökning för just nu är det bara blankt asså.

Det går att skriva in städer samt temperatur sen att söka temperatur men inget mer.

Tack i förhand!.

#include <iostream> #include <vector> #include <list> using namespace std; class Stad { public: string namn; int temp; string toString(); }; void InfoStad(vector <Stad>& myList, string namn, int temp) { Stad stad; myList.push_back(stad); cout << "V\204nligen ange namn p\206 4 st\204der samt temperaturen i st\204derna \n"; for (int i = 0; i < 4; i++) { cout << "Ange stad: " << endl; cin >> namn; myList.push_back(stad); cout << "Ange temperatur: " << endl; cin >> temp; if (temp >= 60 || temp <= -60) { cout << "Ogiltlig temperatur" << endl; } else { myList.push_back(stad); } } } static void Bubblesort(vector<Stad> myList) { int n = myList.size(); int max = n - 1; for (int i = 0; i < max; i++) { int nrLeft = max - i; for (int j = 0; j < nrLeft; j++) { if (myList[j].temp > myList[j + 1].temp) { Stad SorteradStad = myList[j]; myList[j] = myList[j + 1]; myList[j + 1] = SorteradStad; } } } } int linSok(vector<Stad> myList) { int soktemp; cout << "S\224k temperatur: \n"; cin >> soktemp; for (int i = 0; i < myList.size(); i++) { if (myList[i].temp == soktemp) return i; } return -1; } int main() { string namn; int temp{}; vector <Stad> myList = {}; InfoStad(myList, namn, temp); Bubblesort(myList); linSok(myList); return 0; }

Permalänk
Medlem

Ett tips - lär dig att debugga själv, det gör väldigt mycket.

T.ex. har du lite problem i din infostad. Du behöver inte skicka med namn och temp, de har du tillgång till via klassen.
Så du får modifiera de till detta nedan. (Detta felet hade du enkelt sett om du i din for-loop i linjärsöken hade kört cout << myList[i].temp. Just nu lägger du till en tom stad. Och även vid flera tillfällen. Du vill enbart lägga till den när allt är klart.
Sedan vill du ha en while-loop vid "ange temperatur" eftersom du vill ju ge användaren ett nytt försök att mata in en giltig temperatur om den tar en temperatur som är utanför intervallet.

void InfoStad(vector <Stad>& myList) { Stad stad; cout << "V\204nligen ange namn p\206 4 st\204der samt temperaturen i st\204derna \n"; for (int i = 0; i < 2; i++) { cout << "Ange stad: " << endl; cin >> stad.namn; cout << "Ange temperatur: " << endl; cin >> stad.temp; if (stad.temp >= 60 || stad.temp <= -60) { cout << "Ogiltlig temperatur" << endl; } else { myList.push_back(stad); } } }

Sedan i din linjär sök returnerar du i och inte värdet som hittas.
Dvs får du köra return myList[i].temp ELLER soktemp.

Visa signatur

10700K | NVIDIA RTX 3080

Permalänk

Tack så jättemycket för dina tips!!!