Permalänk
Medlem

Binärsökning string c#

Hej! Jag läser programmering 1 och är nybörjare på C#. Har fått en uppgift där jag ska skriva kod för bubbelsortering av siffror och bokstäver samt binärsökning av siffror och bokstäver. Nu har jag klarat av allt förutom den binärasökningen av bokstäver.. har kört fast och behöver hjälp av någon kunnig så jag kan klara uppgiften och kunna implementera detta sedan när jag jobbar med examinationsuppgiften. Detta krävs att kunna för högre betyg i kursen men förklaringen finns inte i kursboken.. Därför hoppas jag verkligen att någon kan hjälpa till..
Det här är bara en del av koden, just för den binära sökningen. Jag förstår att för att jämföra användarens önskade förstabokstav med orden i listan ska jag jämföra key==ordLista[mellan][0] men efter flera dagars försök och googlesökandet har jag stirrat mig blind och kommer ingenvart. Så sista hoppet är att någon av er vill och kan hjälpa mig..
Tack så hemskt mycket på förhand!!

case 6: // Här ska användaren kunna söka på första bokstaven av våra nonsensord i ordLista. (BINÄRSÖKNING AV BOKSTÄVER) Console.Clear(); if (ordLista.Count > 0) { if (bokstavSortering) { Console.WriteLine("\n\tVilken bokstav ska sökningen börja på?"); string key = Console.ReadLine(); ; // Tar emot användarens sökning if (key.Length <= 0) key = "a"; // Ser till att sökningen alltid är något, i det här fallet "a" /* * BINÄRSÖKNING med bokstäver * * Utifrån de nya verktyg vi har gått igenom tidigare (CompareTo och att plocka ut enstaka char från strängar för jämförelser) så * ska vi här skriva en binärsökning för att leta efter bokstäver. * */ int första = 0; int sista = ordLista.Count - 1; while (första <= sista) { int mellan = (första + sista) / 2; if (ordLista[mellan].CompareTo(key) < 0) { första = mellan + 1; } else if (ordLista[mellan].CompareTo(key) >0) { sista = mellan - 1; } else { Console.WriteLine("Ordet du sökt efter som börjar med bokstav" + key + " finns på plats " + ordLista[mellan]); break; } } if (första > sista) Console.WriteLine("Sökningen lyckades inte!"); BokstavUtskrift(ordLista); // Skriver ut hela listan med vår metod.

Permalänk
Medlem

@ivana89: CompareTo är nog fel verktyg för den här uppgiften, eftersom den metoden alltid jämför hela strängarna. En bättre metod att använda är nog StartsWith.

Du kan även jämföra första karaktärerna i strängarna direkt med [0], så länge som du tänker på att key också är en sträng även om den bara innehåller en karaktär. Eftersom texten nämner just att plocka ut chars så är det nog en sån lösning som eftersöks. Eftersom bokstaven som du söker efter inte ändras under sökningen så kan det vara en bra idé att spara den i en char snarare än en string.

Permalänk
Medlem
Skrivet av perost:

@ivana89: CompareTo är nog fel verktyg för den här uppgiften, eftersom den metoden alltid jämför hela strängarna. En bättre metod att använda är nog StartsWith.

Du kan även jämföra första karaktärerna i strängarna direkt med [0], så länge som du tänker på att key också är en sträng även om den bara innehåller en karaktär. Eftersom texten nämner just att plocka ut chars så är det nog en sån lösning som eftersöks. Eftersom bokstaven som du söker efter inte ändras under sökningen så kan det vara en bra idé att spara den i en char snarare än en string.

Tack för svaret! Jag fixade det tills slut men det var nära att jag gav upp..

int första = 0; int sista = ordLista.Count - 1; while (första <= sista) { int mellan = (första + sista) / 2; int bokstav = key.CompareTo(ordLista[mellan][0].ToString()); if (bokstav>0) { första = mellan + 1; } else if (bokstav<0) { sista = mellan - 1; } else { Console.WriteLine("Ordet du sökt efter som börjar med bokstav " + key + " finns på plats " + mellan); break; } } if (första > sista) Console.WriteLine("Sökningen lyckades inte!");

Permalänk

Fråga, lär dom ut i skolan att man ska använda svenska variabel och metodnamn?

Om inte läraren av någon konstig anledning kräver det skulle jag starkt rekommendera att du kör allt på engelska och om läraren kräver det skulle jag ifrågasätta detta.

Visa signatur

Fractal Design Node 304 -> ASUS ROG Strix B650E-I Gaming WIFI -> AMD Ryzen 7 7800X3D 4. 2GHz 104MB -> Thermalright Peerless Assassin 120 SE Svart -> MSI GeForce RTX 4070 VENTUS 2X E 12G OC -> G.Skill 32GB (2x16GB)DDR5 6000MHz CL30 Trident Z Ne -> Seasonic FOCUS Plus 650W Gold -> 2 x WD BLACK SN850X SSD 2TB

Permalänk
Hedersmedlem
Skrivet av Verdurakh:

Fråga, lär dom ut i skolan att man ska använda svenska variabel och metodnamn?

Om inte läraren av någon konstig anledning kräver det skulle jag starkt rekommendera att du kör allt på engelska och om läraren kräver det skulle jag ifrågasätta detta.

Det är väl en smaksak och beror på vad det är för något slags program man skriver. Det är inte fel att ha variabelnamn på svenska.

I många fall blir det extremt krystat om man ska skriva affärssystem och liknande och behöva hitta på eller lära sig engelska begrepp för normala svenska bokföringstermer eller liknande. Vilket variabelnamn föredrar du? personnummer eller personalidentitynumber? Som ett exempel.

För systemprogrammering så är så klart engelska att föredra (eftersom det är det språk som primärt används i denna värld), men långt ifrån allt är systemprogrammering.

Permalänk
Skrivet av pv2b:

Det är väl en smaksak och beror på vad det är för något slags program man skriver. Det är inte fel att ha variabelnamn på svenska.

I många fall blir det extremt krystat om man ska skriva affärssystem och liknande och behöva hitta på eller lära sig engelska begrepp för normala svenska bokföringstermer eller liknande. Vilket variabelnamn föredrar du? personnummer eller personalidentitynumber? Som ett exempel.

För systemprogrammering så är så klart engelska att föredra (eftersom det är det språk som primärt används i denna värld), men långt ifrån allt är systemprogrammering.

Med tanke på hur global världen är idag så kan du ju inte vara säker på att nästa person som ska kolla på koden kan svenska?
Var riktigt kul en gång när jag fick ta över en kod som var skriven med polska namn på saker fick skriva om allt med hjälp av google translate.

Tror inte vi svenskar har så många ord som är speciellt unika i vårt språk och inte är några svårigheter att hitta engelska motsvarigheter. Personnr hade jag helt klart valt personalIdentityNumber eller socialSecurityNumber.

Nej jag tycker nog ändå att best practice är att skriva på engelska om inte det finns något krav på just svenska, vilket jag som sagt hade ifrågasatt.

Visa signatur

Fractal Design Node 304 -> ASUS ROG Strix B650E-I Gaming WIFI -> AMD Ryzen 7 7800X3D 4. 2GHz 104MB -> Thermalright Peerless Assassin 120 SE Svart -> MSI GeForce RTX 4070 VENTUS 2X E 12G OC -> G.Skill 32GB (2x16GB)DDR5 6000MHz CL30 Trident Z Ne -> Seasonic FOCUS Plus 650W Gold -> 2 x WD BLACK SN850X SSD 2TB

Permalänk
Medlem
Skrivet av Verdurakh:

Fråga, lär dom ut i skolan att man ska använda svenska variabel och metodnamn?

Om inte läraren av någon konstig anledning kräver det skulle jag starkt rekommendera att du kör allt på engelska och om läraren kräver det skulle jag ifrågasätta detta.

Hej, det är mest för att vi nybörjare ska lättare förstå hur allting funkar, tror jag.. I kursboken Programmering 1 med C# av Krister Trangius är det mesta på svenska och jag tror att orsak till det är att vi som precis börjat och kan inget alls om programmering inte ska tro att variabler måste heta just tex 'name' utan att vi kan använda precis vad vi vill. Det hände mig i början att jag trodde att jag måste skriva just så men sedan fattade jag att jag kan använda vilket namn jag vill..
Om en vecka är jag klar med kursen och ska då söka till systemutvecklare.Net och där tror jag inte jag får använda mig av svenska variabelnamn längre..

Permalänk
Medlem
Skrivet av pv2b:

Det är väl en smaksak och beror på vad det är för något slags program man skriver. Det är inte fel att ha variabelnamn på svenska.
...
För systemprogrammering så är så klart engelska att föredra (eftersom det är det språk som primärt används i denna värld), men långt ifrån allt är systemprogrammering.

Svenska variabelnamn och kommentarer === job security, ngl.

Visa signatur

Att förespråka Mac på Swec är som att förespråka hybridbilar på en raggarträff i Mora.

Nuvarande stationär: 7800X3D, 128Gb ram, 4Tb nvme, 3x8Tb sata-ssd, 4070 Ti S

Permalänk
Hedersmedlem
Skrivet av Verdurakh:

Med tanke på hur global världen är idag så kan du ju inte vara säker på att nästa person som ska kolla på koden kan svenska?
Var riktigt kul en gång när jag fick ta över en kod som var skriven med polska namn på saker fick skriva om allt med hjälp av google translate.

Tror inte vi svenskar har så många ord som är speciellt unika i vårt språk och inte är några svårigheter att hitta engelska motsvarigheter. Personnr hade jag helt klart valt personalIdentityNumber eller socialSecurityNumber.

Nej jag tycker nog ändå att best practice är att skriva på engelska om inte det finns något krav på just svenska, vilket jag som sagt hade ifrågasatt.

Min poäng är att, beroende på vad det är för specifik applikation man skriver, specifikt om det är en applikation för att digitalisera en myndighet eller liknande, där det finns mycket inarbetad terminologi på svenska, så kan det förenkla kommunikationen och tänket genom att inte behöva hitta på engelska ord för allt.

Det finns så klart nackdelar med det också, och beroende på vad man har för krav i sin organisation så löser man det på olika sätt. Det kan vara så att ett krav på att det ska vara enklare att ta in icke-svensktalande programmerare väger tyngre än att det ska vara enklare för svenska programmerare att förstå verksamheten genom att använda variabelnamn som matchar samma språk som användarna har. Det finns ingen lösning som är bäst för alla i alla lägen.

Permalänk
Skrivet av Trihxeem:

Svenska variabelnamn och kommentarer === job security, ngl.

Ah okay, då vet jag

Rekommenderar att försöka hålla det på engelska om det inte finns några specifika krav för annat

Kör hårt

Visa signatur

Fractal Design Node 304 -> ASUS ROG Strix B650E-I Gaming WIFI -> AMD Ryzen 7 7800X3D 4. 2GHz 104MB -> Thermalright Peerless Assassin 120 SE Svart -> MSI GeForce RTX 4070 VENTUS 2X E 12G OC -> G.Skill 32GB (2x16GB)DDR5 6000MHz CL30 Trident Z Ne -> Seasonic FOCUS Plus 650W Gold -> 2 x WD BLACK SN850X SSD 2TB