11 svar
502 visningar
elmo111 är nöjd med hjälpen
elmo111 20
Postad: 22 dec 2021 14:45 Redigerad: 22 dec 2021 15:00

Enkel sortering

Hej.
Håller på med ett program som låter användaren mata in temperatur för 4 städer och sedan ska programmet sortera (bubblesort) så att den kallaste staden hamnar överst. (Man ska även kunna söka efter en viss temperatur och finns den ska programmet berätta vilken indexposition den finns på men det har jag löst.)
Här är min kod: 

 

    class Program
    {
        static int linsok(Stad[] städer, int söktemp)
        {
            for (int i = 0; i < städer.Length; i++)
            {
                if (städer[i].temp == söktemp)
                {
                    return i;
                }
            }
            return -1;
        }
        public static void Bubblesort(Stad[] städer)
        {
            int sorttemp;
            for (int i = 0; i < städer.Length - 1; i++)
            {
                for (int j = 0; j < städer.Length - (1 + i); j++)
                {
                    if (städer[j].temp > städer[j + 1].temp)
                    {
                        sorttemp = städer[j + 1].temp;
                        städer[j + 1].temp = städer[j].temp;
                        städer[j].temp = sorttemp;

                    }
                }
            }
        }

        static void Main(string[] args)
        {
            Stad[] städer = new Stad[4];
            Console.Write("Hej! Fyll i temperatur för Stockholm: ");
            städer[0] = new Stad("Stockholm", Convert.ToInt32(Console.ReadLine()));
            Console.Write("Fyll i temperatur för Göteborg: ");
            städer[1] = new Stad("Göteborg", Convert.ToInt32(Console.ReadLine()));
            Console.Write("Fyll i temperatur för Malmö: ");
            städer[2] = new Stad("Malmö", Convert.ToInt32(Console.ReadLine()));
            Console.Write("Fyll i temperatur för Umeå: ");
            städer[3] = new Stad("Umeå", Convert.ToInt32(Console.ReadLine()));
            int söktemp;
            Console.Write("Vilken temperatur vill du söka efter? ");
            söktemp = Convert.ToInt32(Console.ReadLine());
            int index = linsok(städer, söktemp);
            if (index < 0) 
            {
                Console.WriteLine("Temperaturen hittades inte");
            }
            else 
            {
                Console.WriteLine("Temperaturen hitas i index " + index);
            }
            Bubblesort(städer);
            for (int i = 0; i < städer.Length; i++)
            {
                städer[i].skrivUt();
            }   


        }
       
    }
}

Mitt problem är att få namnet på städerna att hänga med temperaturen när jag ska printa ut dem i ordning.
Nu har jag en for loop för det men den är helt värdelös. Någon som har något tips? :)

Lindehaven 820 – Lärare
Postad: 22 dec 2021 15:08

Metoden BubbleSort sorterar endast städernas temperaturer utan att sortera deras namn. Kan lösas genom att sortera hela stad-objekten. Min skrivbordskod (har inte testat den):

                    Stad sortStad = new Stad("", 0);
                    if (städer[j].temp > städer[j + 1].temp)
                    {
                        sortStad = städer[j + 1];
                        städer[j + 1] = städer[j];
                        städer[j] = sortStad;
                    }
elmo111 20
Postad: 22 dec 2021 16:10
Lindehaven skrev:

Metoden BubbleSort sorterar endast städernas temperaturer utan att sortera deras namn. Kan lösas genom att sortera hela stad-objekten. Min skrivbordskod (har inte testat den):

                    Stad sortStad = new Stad("", 0);
                    if (städer[j].temp > städer[j + 1].temp)
                    {
                        sortStad = städer[j + 1];
                        städer[j + 1] = städer[j];
                        städer[j] = sortStad;
                    }

Jajamän. Det där funka bra det. Tusen tusen tack som vanligt för bra hjälp Lindehaven!! :)

Gokka 17
Postad: 22 dec 2021 23:02

Håller på med samma uppgift.

Hur har du löst att om användaren skriver in fel temp så ska meddelande komma?

elmo111 20
Postad: 22 dec 2021 23:04
Gokka skrev:

Håller på med samma uppgift.

Hur har du löst att om användaren skriver in fel temp så ska meddelande komma?

Det står väl ingenstans i uppgiften att man ska göra det?

Gokka 17
Postad: 22 dec 2021 23:09
elmo111 skrev:
Gokka skrev:

Håller på med samma uppgift.

Hur har du löst att om användaren skriver in fel temp så ska meddelande komma?

Det står väl ingenstans i uppgiften att man ska göra det?

I den allmänna beskrivningen för mig står det så här:

Kontrollera att de inmatade temperaturvärden befinner sig inom intervallet
temperatur >= -60 && temperatur <= 60

Men osäker om man måste göra så =) 

elmo111 20
Postad: 22 dec 2021 23:17

Ja okej, såg de precis. Hade missat det.
Antar att man ska göra något liknande?

if (städer [i] >= -60 || temperatur <= 60)
print fel temperatur har angivits

Vet inte riktigt, gissar bara lite grann nu...

Gokka 17
Postad: 22 dec 2021 23:47
elmo111 skrev:

Ja okej, såg de precis. Hade missat det.
Antar att man ska göra något liknande?

if (städer [i] >= -60 || temperatur <= 60)
print fel temperatur har angivits

Vet inte riktigt, gissar bara lite grann nu...

 

Ja något sånt ser vettigt ut.

En annan fråga. Jag får ingen utskrift fråpn städer[i].skrivUt();

Antar att jag missar något i min class men ser inte .

Har du lagt till något speciellt i class för utskrift?

elmo111 20
Postad: 22 dec 2021 23:51
Gokka skrev:
elmo111 skrev:

Ja okej, såg de precis. Hade missat det.
Antar att man ska göra något liknande?

if (städer [i] >= -60 || temperatur <= 60)
print fel temperatur har angivits

Vet inte riktigt, gissar bara lite grann nu...

 

Ja något sånt ser vettigt ut.

En annan fråga. Jag får ingen utskrift fråpn städer[i].skrivUt();

Antar att jag missar något i min class men ser inte .

Har du lagt till något speciellt i class för utskrift?

Japp. Gör en funktion i din class. Public void skrivUt();

{

skriv det du vill den ska skriva ut här

}

Gokka 17
Postad: 25 dec 2021 21:27
elmo111 skrev:
Lindehaven skrev:

Metoden BubbleSort sorterar endast städernas temperaturer utan att sortera deras namn. Kan lösas genom att sortera hela stad-objekten. Min skrivbordskod (har inte testat den):

                    Stad sortStad = new Stad("", 0);
                    if (städer[j].temp > städer[j + 1].temp)
                    {
                        sortStad = städer[j + 1];
                        städer[j + 1] = städer[j];
                        städer[j] = sortStad;
                    }

Jajamän. Det där funka bra det. Tusen tusen tack som vanligt för bra hjälp Lindehaven!! :)

Jag får inte till det med att skriva ut stadens namn och temperatur, blir bara staden.  Har kollat på det du gjort men får inte ordning på det.

Har du skrivit in något i class Stad eller bara ändrat i metoden bubbelsort?


Tillägg: 26 dec 2021 00:15

Löste det :) huvudet har inte riktigt varit med så hade missat att skriva in rätt vad som skulle printas ut :)

Kaptenstein 14
Postad: 26 dec 2021 16:01 Redigerad: 26 dec 2021 16:03

Håller också på med denna fast i c++ och får inte till sorteringen.. kan någon hjälpa mig att översätta detta till c++ :)

Sen en fråga till! lägger ni det inte i olika filer eller fattade jag fel om att man skulle göra de?

Gokka 17
Postad: 26 dec 2021 21:34
elmo111 skrev:

Ja okej, såg de precis. Hade missat det.
Antar att man ska göra något liknande?

if (städer [i] >= -60 || temperatur <= 60)
print fel temperatur har angivits

Vet inte riktigt, gissar bara lite grann nu...

Har du löst med kontroll av temperatur?

Svara Avbryt
Close