2022-10-14, 13:26
  #1
Medlem
Jag har ett litet problem med min kod. Nästan allt i texten fungerar utmärkt med user input och display av säljaruppgifter. Det som krånglar är att varsin säljare inte sorteras helt rätt. Om jag skriver in två säljare och ena har sålt till nivå 4 och den andra har sålt till nivå 1 så visas båda på både ettan och fyran när dom egentligen ska vara på varsin nivå. Jag hittar inte felet så uppskattar hjälpen!

KOD:
Kod:
public struct saljare  // Skapar en construkt för säljare
        
{
            public 
string namn;
            public 
string personnummer;
            public 
string distrikt;
            public 
int antalartiklar;
            public 
int niva;

        }
        private static 
void BubbleSort(saljare[] osorterad// Array för bubblesort så att varsin säljare sorteras korrekt
        
{
            
int length osorterad.Length;
            for (
int i 0length 1i++)
            {
                for (
int j 0length ij++)
                {
                    if (
osorterad[j].antalartiklar osorterad[1].antalartiklar)
                    {
                        
saljare num osorterad[j];
                        
osorterad[j] = osorterad[1];
                        
osorterad[1] = num;
                    }
                } 
            }
        }
        static 
void Main(string[] args)
        {
            
int counter 0;         //skapar variablar till nivåerna och en counter
            
int nivaett 0;
            
int nivatva 0;
            
int nivatre 0;
            
int nivafyra 0;
            
Console.WriteLine("Klass för säljare och resultat: ");
            
Console.WriteLine("-------------------------------");
            
Console.Write("Antal säljare som ska registreras: ");
            
int num int.Parse(Console.ReadLine());
            
int[] numbers = new int[num];

            
saljare[] saljkar = new saljare[num];
            
saljare[] osorterad = new saljare[num];

            
// låter användaren skriva in 6 personer och dess attribut
            
for (int i 0numi++) // Läs in alla säljare i en array av "Säljare"
            
{
                
Console.WriteLine(" ");
                
Console.Write("Ange information för säljare " + (1));
                
Console.WriteLine(" ");
                
Console.WriteLine(" ");
                
Console.Write("Ange Namn: ");
                
saljkar[i].namn Console.ReadLine();
                
Console.Write("Ange Personnummer: ");
                
saljkar[i].personnummer Console.ReadLine();
                
Console.Write("Ange Distrikt: ");
                
saljkar[i].distrikt Console.ReadLine();
                
Console.Write("Ange antal Artiklar: ");
                
saljkar[i].antalartiklar int.Parse(Console.ReadLine());
                
Console.WriteLine(" ");

                
// lägger till i varje nivå     
                
if (saljkar[i].antalartiklar 50)
                {
                    
saljkar[counter].niva 1;
                    
nivaett++;
                }
                if (
saljkar[i].antalartiklar >= 50 && saljkar[i].antalartiklar 100)
                {
                    
saljkar[counter].niva 2;
                    
nivatva++;
                }
                if (
saljkar[i].antalartiklar >= 100 && saljkar[i].antalartiklar 200)
                {
                    
saljkar[counter].niva 3;
                    
nivatre++;
                }
                if (
saljkar[i].antalartiklar 200)
                {
                    
saljkar[counter].niva 4;
                    
nivafyra++;
                }
            }

            
BubbleSort(saljkar); // sorterar arrayen "säljkår"

                
Console.WriteLine("------------------------");
                
Console.WriteLine("Antal Säljare på nivå 1: " nivaett);
                
Console.WriteLine(" ");
            if (
nivaett 0)
            {
                for (
int i 0saljkar.Lengthi++)
                {
                    
Console.WriteLine("Namn: " saljkar[i].namn);
                    
Console.WriteLine("Personnummer: " saljkar[i].personnummer);
                    
Console.WriteLine("Distrikt: " saljkar[i].distrikt);
                    
Console.WriteLine("Antal sälj: " saljkar[i].antalartiklar);
                    
Console.WriteLine("Sälj nivå: " saljkar[i].niva);
                    
Console.WriteLine("-----------------------------");

                }
            }
            
                
Console.WriteLine("Antal Säljare på nivå 2: " nivatva);
                
Console.WriteLine(" ");
            if (
nivatva 0)
            {
                for (
int i 0saljkar.Lengthi++)
                {
                    
Console.WriteLine("Namn: " saljkar[i].namn);
                    
Console.WriteLine("Personnummer: " saljkar[i].personnummer);
                    
Console.WriteLine("Distrikt: " saljkar[i].distrikt);
                    
Console.WriteLine("Antal sälj: " saljkar[i].antalartiklar);
                    
Console.WriteLine("Sälj nivå: " saljkar[i].niva);
                    
Console.WriteLine("-----------------------------");

                }
            }
                
Console.WriteLine("Antal Säljare på nivå 3: " nivatre);
                
Console.WriteLine(" ");
            if (
nivatre 0)
            {
                for (
int i 0saljkar.Lengthi++)
                {
                    
Console.WriteLine("Namn: " saljkar[i].namn);
                    
Console.WriteLine("Personnummer: " saljkar[i].personnummer);
                    
Console.WriteLine("Distrikt: " saljkar[i].distrikt);
                    
Console.WriteLine("Antal sälj: " saljkar[i].antalartiklar);
                    
Console.WriteLine("Sälj nivå: " saljkar[i].niva);
                    
Console.WriteLine("-----------------------------");

                }
            }
                
Console.WriteLine("Antal Säljare på nivå 4: " nivafyra);
                
Console.WriteLine(" ");
            if (
nivafyra 0)
            {
                for (
int i 0saljkar.Lengthi++)
                {
                    
Console.WriteLine("Namn: " saljkar[i].namn);
                    
Console.WriteLine("Personnummer: " saljkar[i].personnummer);
                    
Console.WriteLine("Distrikt: " saljkar[i].distrikt);
                    
Console.WriteLine("Antal sälj: " saljkar[i].antalartiklar);
                    
Console.WriteLine("Sälj nivå: " saljkar[i].niva);
                    
Console.WriteLine("-----------------------------");

                }
            }
            
// skriver ut uppnådda nivåer och antal sålda artiklar
            
Console.ReadLine();
        } 
__________________
Senast redigerad av Proton 2022-10-15 kl. 17:58.
Citera
2022-10-14, 13:38
  #2
Medlem
Sane?s avatar
Börja med att använda code taggar så kanske någon kan läsa och hjälpa dig.

Kod:
int a = 1;
void B()
{
    // indentering är bra
}
Citera
2022-10-14, 13:42
  #3
Medlem
På samma sätt som du kontrollerar att det finns säljare på en viss nivå borde du också kontrollera att säljaren är på den nivån innan utskrift.

Nu skrivs väl hel säljkåren ut på varje nivå.

Sedan tycker jag att det borde skrivas ut ett meddelande om det inte finns några säljare på en nivå.
Citera
2022-10-17, 16:37
  #4
Medlem
Citat:
Ursprungligen postat av rysuser
På samma sätt som du kontrollerar att det finns säljare på en viss nivå borde du också kontrollera att säljaren är på den nivån innan utskrift.

Nu skrivs väl hel säljkåren ut på varje nivå.

Sedan tycker jag att det borde skrivas ut ett meddelande om det inte finns några säljare på en nivå.

Ja därav tänkte jag att IF skulle hjälpa för när ingen säljare är på en nivå står det "Antal säljare på nivå 1: 0". men när en säljare kommer på till exempel nivå 1 så hamnar alla där även fast dom har annan nivå.
Koden visar hur många säljare det ska vara på varsin nivå, den slänger bara in alla andra under fel nivå. Som du nämnde, det borde vara en kontroll på antalartiklar som sedan skriver ut säljkåren men vet ej hur jag ska sortera den. Har du något exempel?
Citera
2022-10-17, 17:17
  #5
Medlem
JohannesSnajdares avatar
Kod:
...
if (nivaett > 0)
{
    for (int i = 0; i < saljkar.Length; i++)
    {
        if( saljkar[i].niva != 1 )
            continue;

        Console.WriteLine("Namn: " + saljkar[i].namn);
        Console.WriteLine("Personnummer: " + saljkar[i].personnummer);
        Console.WriteLine("Distrikt: " + saljkar[i].distrikt);

         ...
Citera
2022-10-17, 19:05
  #6
Medlem
Luktar skoluppgift
Kod:
public class Saljare
{
    public string namn;
    public string personnummer;
    public string distrikt;
    public int antalartiklar;   

    public Saljare(string namn, string personnummer, string distrikt, int antalartiklar)
    {
        this.namn = namn;
        this.personnummer = personnummer;
        this.distrikt = distrikt;
        this.antalartiklar = antalartiklar;        
    }
}


public class Program
{

    static void PrintSalesSorted(int level, IEnumerable<Saljare> salespersons)
    {
        if (!salespersons.Any())
        {
            return;
        }

        Console.WriteLine("-----------------------------");
        Console.WriteLine($"Antal Säljare på nivå {level}: {salespersons.Count()}");
        Console.WriteLine("");

        foreach (var p in salespersons.OrderBy(n=>n.antalartiklar))
        {
            Console.WriteLine("Namn: " + p.namn);
            Console.WriteLine("Personnummer: " + p.personnummer);
            Console.WriteLine("Distrikt: " + p.distrikt);
            Console.WriteLine("Antal sälj: " + p.antalartiklar);
            Console.WriteLine("Sälj nivå: " + level);
            Console.WriteLine("-----------------------------");
        }
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Klass för säljare och resultat: ");
        Console.WriteLine("-------------------------------");
        Console.Write("Antal säljare som ska registreras: ");
        int num = int.Parse(Console.ReadLine() ?? "0");

        List<Saljare> salesmen = new List<Saljare>();

        for (int i = 0; i < num; i++)
        {
            Console.WriteLine();
            Console.Write("Ange information för säljare " + (i + 1));
            Console.WriteLine();
            Console.WriteLine();
            Console.Write("Ange Namn: ");
            var name = Console.ReadLine() ?? "";
            Console.Write("Ange Personnummer: ");
            var pnr = Console.ReadLine() ?? "";
            Console.Write("Ange Distrikt: ");
            var district = Console.ReadLine() ?? "";
            Console.Write("Ange antal Artiklar: ");
            var antalArtiklar = int.Parse(Console.ReadLine() ?? "0");
            Console.WriteLine();

            var saljare = new Saljare(name, pnr, district, antalArtiklar);
            salesmen.Add(saljare);
        }

        var level1 = salesmen.Where(n => n.antalartiklar < 50);
        PrintSalesSorted(1, level1);

        var level2 = salesmen.Where(n => n.antalartiklar >= 50 && n.antalartiklar < 100);
        PrintSalesSorted(2, level2);

        var level3 = salesmen.Where(n => n.antalartiklar >= 100 && n.antalartiklar < 200);
        PrintSalesSorted(3, level3);

        var level4 = salesmen.Where(n => n.antalartiklar > 200);
        PrintSalesSorted(3, level4);

        Console.ReadLine();
    }
}



Citera
2022-10-20, 02:38
  #7
Medlem
Har också denna uppgift i en programmeringskurs jag läser. Mitt problem är att jag inte vet hur jag ska sortera säljarna i en bubblesort baserat på vad användaren har matat in tidigare (items). Har gjort ett försök med bubblesort men får inte till det riktigt. Min kod ser lite annorlunda ut. Postar den nedanför. (Väldigt ny inom programmering och tar gärna mot tips på vad jag kan göra bättre eller annorlunda.)

Kod:
using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System;
using System.Collections.Generic;
using System.Reflection.Metadata.Ecma335;
using System.Reflection;
using System.Net.Security;
using System.Formats.Asn1;

namespace salesprogram
{
    class SalesPerson
    {
        public string name;
        public ulong number;
        public string district;
        public int items;

        static void Main(string[] args)
        {
            SalesPerson.InputSalesPersons();
            int[] arr = {};
            bubbleSort(arr);

            
        }


        public static void InputSalesPersons()
        {
            Console.Write("Hur många säljare vill du mata in? ");
            int count = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("\n");

            var sellers = new List<SalesPerson>();
            for (int i = 0; i < count; i++)
            {
                SalesPerson s = RegisterPerson(i);
                sellers.Add(s);
            }
            
        }
            
        static SalesPerson RegisterPerson(int i)
        {

            // Sätter en string för namn på säljare
            Console.WriteLine("Registrera säljare " + i);
            
            Console.Write(" Ange namn för säljare {0}: ", i);
            string name = Console.ReadLine();
            

            // String för personnummer 
            Console.Write(" Ange personnummer för säljare {0} (10 siffror): ", i);
            ulong number = ulong.Parse(Console.ReadLine());

            // String för distrikt på säljare
            Console.Write(" Ange distrikt för säljare {0}: ", i);
            string district = Console.ReadLine();

            // String för sålda artiklar
            Console.Write(" Ange antal sålda artiklar för säljare {0}: ", i);
            int items = int.Parse(Console.ReadLine());
            Console.WriteLine("\n");


            SalesPerson s = new SalesPerson(name, number, district, items);
            return s;

            Console.WriteLine("Antal säljare med uppnådd nivå 1 " + items);
            Console.ReadLine();
            
        }

        public static void bubbleSort(int[] arr)
        {
            for (int i = 0; i < arr.Length - 1; i++)
            {
                for (int j = 0; j < arr.Length - i - 1; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
        }

        public SalesPerson(string name, ulong number, string district, int items)
        {
            this.name = name;
            this.number = number;
            this.district = district;
            this.items = items;
        }

        // Beroende på antal sålda artiklar (items) får säljarna en nivå (Level)
        public int Level
        {
            get
            {
                if (items < 50) return 1;
                if (items < 100) return 2;
                if (items < 200) return 3;
                return 4;
            }
            
        }

       

    }
}
__________________
Senast redigerad av Saaand 2022-10-20 kl. 02:49.
Citera
2022-10-20, 10:29
  #8
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Saaand
Har också denna uppgift i en programmeringskurs jag läser. Mitt problem är att jag inte vet hur jag ska sortera säljarna i en bubblesort baserat på vad användaren har matat in tidigare (items). Har gjort ett försök med bubblesort men får inte till det riktigt. Min kod ser lite annorlunda ut. Postar den nedanför. (Väldigt ny inom programmering och tar gärna mot tips på vad jag kan göra bättre eller annorlunda.)
Utan att vara särskilt bra på C# känner jag att du måste lära dig OOP från grunden innan du börjar med en hyfsad komplex uppgift som detta. Vad är klassvariabler och instansvariabler t.ex.
Citera
2022-10-21, 17:35
  #9
Medlem
PissBusss avatar
Du har ju List<T>.Sort(), varför möga med hemkokt bubbelsortering?
Citera
2022-10-24, 14:40
  #10
Medlem
Citat:
Ursprungligen postat av CJRecovery
Luktar skoluppgift
Kod:
public class Saljare
{
    public string namn;
    public string personnummer;
    public string distrikt;
    public int antalartiklar;   

    public Saljare(string namn, string personnummer, string distrikt, int antalartiklar)
    {
        this.namn = namn;
        this.personnummer = personnummer;
        this.distrikt = distrikt;
        this.antalartiklar = antalartiklar;        
    }
}


public class Program
{

    static void PrintSalesSorted(int level, IEnumerable<Saljare> salespersons)
    {
        if (!salespersons.Any())
        {
            return;
        }

        Console.WriteLine("-----------------------------");
        Console.WriteLine($"Antal Säljare på nivå {level}: {salespersons.Count()}");
        Console.WriteLine("");

        foreach (var p in salespersons.OrderBy(n=>n.antalartiklar))
        {
            Console.WriteLine("Namn: " + p.namn);
            Console.WriteLine("Personnummer: " + p.personnummer);
            Console.WriteLine("Distrikt: " + p.distrikt);
            Console.WriteLine("Antal sälj: " + p.antalartiklar);
            Console.WriteLine("Sälj nivå: " + level);
            Console.WriteLine("-----------------------------");
        }
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Klass för säljare och resultat: ");
        Console.WriteLine("-------------------------------");
        Console.Write("Antal säljare som ska registreras: ");
        int num = int.Parse(Console.ReadLine() ?? "0");

        List<Saljare> salesmen = new List<Saljare>();

        for (int i = 0; i < num; i++)
        {
            Console.WriteLine();
            Console.Write("Ange information för säljare " + (i + 1));
            Console.WriteLine();
            Console.WriteLine();
            Console.Write("Ange Namn: ");
            var name = Console.ReadLine() ?? "";
            Console.Write("Ange Personnummer: ");
            var pnr = Console.ReadLine() ?? "";
            Console.Write("Ange Distrikt: ");
            var district = Console.ReadLine() ?? "";
            Console.Write("Ange antal Artiklar: ");
            var antalArtiklar = int.Parse(Console.ReadLine() ?? "0");
            Console.WriteLine();

            var saljare = new Saljare(name, pnr, district, antalArtiklar);
            salesmen.Add(saljare);
        }

        var level1 = salesmen.Where(n => n.antalartiklar < 50);
        PrintSalesSorted(1, level1);

        var level2 = salesmen.Where(n => n.antalartiklar >= 50 && n.antalartiklar < 100);
        PrintSalesSorted(2, level2);

        var level3 = salesmen.Where(n => n.antalartiklar >= 100 && n.antalartiklar < 200);
        PrintSalesSorted(3, level3);

        var level4 = salesmen.Where(n => n.antalartiklar > 200);
        PrintSalesSorted(3, level4);

        Console.ReadLine();
    }
}



Vad är det för sorteringsmetod du använder?
Citera
2022-10-24, 15:42
  #11
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Bingbong211
Vad är det för sorteringsmetod du använder?
Min gissning:
Kod:
 foreach (var p in salespersons.OrderBy(n=>n.antalartiklar))

https://learn.microsoft.com/en-us/do...y?view=net-7.0
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in