Bruno Mars Skrevet 19. januar 2009 Del Skrevet 19. januar 2009 Skal lage en array og så skal jeg skrive ut alle tall som forekommer flere ganger, samt indeksene det gjelder. Samme kombinasjon skal bare skrives ut en gang. Begynte slik men det funket ikke bra: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class HeltallKombinasjoner : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int[] heltall = {7,2,4,5,6,6,7,8,6,7,8,5,7,5,6,6,4,6,5,4,3,5,3,2,1,2,3,4,5,6,7,8,9,0,9,8,7,6,5,4,3,2,1}; for (int i = 0; i < heltall.Length; i++) { for (int j = 0; j < heltall.Length; j++) { if (heltall[i] == heltall[j]) { labHeltall.Text += Convert.ToString(heltall[i]) + " " + Convert.ToString(heltall[j]); } } } } } Oppgave 2: Lag en webside som innholder en array med bokstaver som tilsammen former et ord. Brukeren skal gjette på bokstavene i en tekstboks og få tilbakemelding om bokstaven forekommer i ordet. Så skal oppgaven utvides til å bli en enkel hangmann. Lag en array som skal være av typen char med så mange plasser plasser som det skal være forsøk, og ta vare på forsøkte bokstaver i denne. Vis så hele tiden de bokstavene av det hemmlige ordet som også finnes i arrayen med forsøkte bokstaver. Lag en variabel som innholder feil og vise bilder med filnavn på følgene form; feil1.jpg, feil2.jpg, feil3.jpg osv. Har ikke prøvd meg noe på oppgave 2, men ønsker gjerne et par småtriks på hvordan jeg burde begynne. Lenke til kommentar
Gjest Slettet-aNZFa3 Skrevet 20. januar 2009 Del Skrevet 20. januar 2009 Jeg ser ingen direkte feil nå sånn på sparket. Hva er den som feiler? Kommer det feilmelding? Eller kommer det ikke noe som helst? Lenke til kommentar
Bruno Mars Skrevet 20. januar 2009 Forfatter Del Skrevet 20. januar 2009 Får ut dette: 7 77 77 77 77 77 72 22 22 22 24 44 44 44 44 45 55 55 55 55 55 55 56 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 67 77 77 77 77 77 78 88 88 88 86 66 66 66 66 66 66 66 67 77 77 77 77 77 78 88 88 88 85 55 55 55 55 55 55 57 77 77 77 77 77 75 55 55 55 55 55 55 56 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 64 44 44 44 44 46 66 66 66 66 66 66 66 65 55 55 55 55 55 55 54 44 44 44 44 43 33 33 33 35 55 55 55 55 55 55 53 33 33 33 32 22 22 22 21 11 12 22 22 22 23 33 33 33 34 44 44 44 44 45 55 55 55 55 55 55 56 66 66 66 66 66 66 66 67 77 77 77 77 77 78 88 88 88 89 99 90 09 99 98 88 88 88 87 77 77 77 77 77 76 66 66 66 66 66 66 66 65 55 55 55 55 55 55 54 44 44 44 44 43 33 33 33 32 22 22 22 21 11 1 Lenke til kommentar
HDSoftware Skrevet 20. januar 2009 Del Skrevet 20. januar 2009 Resultatet du har sier at 7 er på plass nr. 7, seks ganger og så gjøres dette igjen og igjen. Du repererer for mye med andre ord. Kort ned den indre løkka til kunn å sjekke fra ytre posisjon i stedet ifra 0. Dette fordi tallene i forkant allerede er sjekket. Putt kombinasjonene du finner i en LIST. Da kan du sjekke om du har kombinasjonen fra før. Lenke til kommentar
Bruno Mars Skrevet 20. januar 2009 Forfatter Del Skrevet 20. januar 2009 Forklar litt nærmere takk. Den indre løkka er for- løkke nr.2? Skjønte ikke helt hva jeg skal sette istedenfor 0. Sette kombinasjonene i en LIST..? Lenke til kommentar
HDSoftware Skrevet 22. januar 2009 Del Skrevet 22. januar 2009 (endret) Du har jo to løkker. Dette for å sjekke alle tall om de eksisteder flere ganger. Løkka di sjekker jo alle tallene med absolutt alle og det er jo ikke nødvendig. Det holder jo å sjekke med kunn de resterende tallene, altså slik: tallrekke: 1 2 3 4 5 Sjekkes slik: 1-2, 1-3, 1-4, 1-5, 2-3, 2-4, 2-5, 3-4, 3-5, 4-5 Din løkke sjekker jo slik: 1-1, 1-2, 1-3, 1-4, 1-5, 2-1, 2-2, 2-3, 2-4, 2-5, 3-1, 3-2, 3-3, 3-4, 3-5, 4-1, 4-2, 4-3, 4-4, 4-5, 5-1, 5-2, 5-3, 5-4, 5-5 Og dette var bare fem siffer. Med din algoritme så sjekkes jo ting en dullion ganger, derfor kan du endre løkkene slik: for (int i = 0; i < tallrekke.length; i++) for (int o = i+1; o < tallrekke.length; o++) { if(tallrekke[i] == tallrekke[o]) { // Vi haar en mætsj og vi kan lagre mætsjen i f.eks. en LIST } } Skjønner? LIST overlater jeg til deg å studere selv. Bare søk i MSDN så finner du at List<t> og SortedList<t, T> er to utrolig kraftige klasser Endret 22. januar 2009 av HDSoftware Lenke til kommentar
The Jackal Skrevet 23. januar 2009 Del Skrevet 23. januar 2009 (endret) int[] heltall = {7,2,4,5,6,6,7,8,6,7,8,5,7,5,6,6,4,6,5,4,3,5,3,2,1,2,3,4,5,6,7,8,9,0,9,8,7,6,5,4,3,2,1}; Dictionary<int,List<int>> numbers = new Dictionary<int,List<int>>(); for(int i=0;i<heltall.Length;i++) if (numbers.ContainsKey(heltall[i])) numbers[heltall[i]].Add(i); else numbers.Add(heltall[i], new List<int> { i }); StringBuilder builder = new StringBuilder(); foreach (KeyValuePair<int, List<int>> number in numbers.Where(x => x.Value.Count > 1).OrderBy(x => x.Key)) { builder.AppendFormat("{0}: ", number.Key); for (int i = 0; i < number.Value.Count; i++) { builder.AppendFormat("{0}", number.Value[i]); if (i == number.Value.Count - 1) builder.AppendLine(); else builder.Append(","); } } Console.Write(builder.ToString()); Endret 23. januar 2009 av The Jackal Lenke til kommentar
Bruno Mars Skrevet 23. januar 2009 Forfatter Del Skrevet 23. januar 2009 Det der er iallefall en helt annen måte enn det vi pleier å skrive på. Uansett prøvde jeg. For det første hadde du glemt to "}" på slutten. Men det var ikke noe problem selvsagt. Problmet er at jeg får komp. feil. "The type or namespace 'StringBuilder' could not be foud. Hva er galt? Lenke til kommentar
Bruno Mars Skrevet 23. januar 2009 Forfatter Del Skrevet 23. januar 2009 Du har jo to løkker. Dette for å sjekke alle tall om de eksisteder flere ganger. Løkka di sjekker jo alle tallene med absolutt alle og det er jo ikke nødvendig. Det holder jo å sjekke med kunn de resterende tallene, altså slik:tallrekke: 1 2 3 4 5 Sjekkes slik: 1-2, 1-3, 1-4, 1-5, 2-3, 2-4, 2-5, 3-4, 3-5, 4-5 Din løkke sjekker jo slik: 1-1, 1-2, 1-3, 1-4, 1-5, 2-1, 2-2, 2-3, 2-4, 2-5, 3-1, 3-2, 3-3, 3-4, 3-5, 4-1, 4-2, 4-3, 4-4, 4-5, 5-1, 5-2, 5-3, 5-4, 5-5 Og dette var bare fem siffer. Med din algoritme så sjekkes jo ting en dullion ganger, derfor kan du endre løkkene slik: for (int i = 0; i < tallrekke.length; i++) for (int o = i+1; o < tallrekke.length; o++) { if(tallrekke[i] == tallrekke[o]) { // Vi haar en mætsj og vi kan lagre mætsjen i f.eks. en LIST } } Skjønner? LIST overlater jeg til deg å studere selv. Bare søk i MSDN så finner du at List<t> og SortedList<t, T> er to utrolig kraftige klasser Skjønner ikke helt hva jeg skal skrive i if- settningen. Prøver f.eks med "labHeltall.Text += heltall + " ";" men det funker dårlig. Lenke til kommentar
The Jackal Skrevet 23. januar 2009 Del Skrevet 23. januar 2009 Det der er iallefall en helt annen måte enn det vi pleier å skrive på. Uansett prøvde jeg. For det første hadde du glemt to "}" på slutten. Men det var ikke noe problem selvsagt. Problmet er at jeg får komp. feil. "The type or namespace 'StringBuilder' could not be foud. Hva er galt? du må ha med System.Text namespace. Skriv "using System.Text;" helt øverst i filen. Jeg har brukt LINQ for å den siste for løkken for å skrive ut. Krever .NET 3.5. Vet ikke om du får lov å bruke det i oppgaven din. Lenke til kommentar
Bruno Mars Skrevet 23. januar 2009 Forfatter Del Skrevet 23. januar 2009 Takk for hjelpen the jackal. virker uansett ikke som det funka. Og det er skrevet på en helt annen måte enn en det vi lærer nå. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class HeltallKombinasjoner : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int[] heltall = { 7, 2, 4, 5, 6, 6, 7, 8, 6, 7, 8, 5, 7, 5, 6, 6, 4, 6, 5, 4, 3, 5, 3, 2, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; int[] antall = new int[11]; for (int i = 0; i < antall.Length; i++) { for (int j = i+1; j < antall.Length; j++) { if (heltall[i] == heltall[j]) { labHeltall.Text += "Antall " + i + " er: " + heltall[j] + "<br />"; } } } } } Dette funker nesten. Får ut: Antall 0 er: 7Antall 0 er: 7 Antall 0 er: 7 Antall 1 er: 2 Antall 2 er: 4 Antall 3 er: 5 Antall 4 er: 6 Antall 4 er: 6 Antall 4 er: 6 Antall 5 er: 6 Antall 5 er: 6 Antall 6 er: 7 Antall 6 er: 7 Antall 7 er: 8 Antall 7 er: 8 Antall 8 er: 6 Antall 9 er: 7 Antall 10 er: 8 Lenke til kommentar
The Jackal Skrevet 23. januar 2009 Del Skrevet 23. januar 2009 Koden min funker helt perfekt den egentlig, bare at den er tilpasset console og ikke web. Her er outputen: 1: 24,42 2: 1,23,25,41 3: 20,22,26,40 4: 2,16,19,27,39 5: 3,11,13,18,21,28,38 6: 4,5,8,14,15,17,29,37 7: 0,6,9,12,30,36 8: 7,10,31,35 9: 32,34 ------------------------------ Uansett, din løsning fungerer ikke nesten egentlig. I den tallrekka forekommer 0 kun 1 gang, og skal dermed ikke skrives ut f.eks For å få til dette må du mellomlagre alle tallene i en egen liste som du etter for løkkene looper gjennom for å skrive ut. Lenke til kommentar
HDSoftware Skrevet 23. januar 2009 Del Skrevet 23. januar 2009 Takk for hjelpen the jackal. virker uansett ikke som det funka. Og det er skrevet på en helt annen måte enn en det vi lærer nå. Hva er skrevet på en annen måte egentlig? C# er C# enten du skriver sånn eller slik Tenker du kansje på at det ikke er klammeparanteser i IF testene hans? Det kommer i så fall at man kan forenkle koden sin hvis kunn en ting skal utføres i en IF. Du må huske på at { og } kunn markerer starten og sluttten på et SCOPE og har svert lite med IF å gjøre if (test == svar) { Heisan(); } er akklurat det samme som if (test == svar) Heisann(); Eneste forskjellen er at i det øverste eksemplet så kan du legge inn mere kode. I eksemplet under er det kunn Heisann() som blir kjørt. derfor: if (test == svar) Heisann(); Hoppsann(); Her vil Hoppsann() ALLTID bli kjørt, fordi det kunn er Heisann() som berøres av IF testen. Ut over dette så er koden hans rimelig lik din kode ;-) Lenke til kommentar
Bruno Mars Skrevet 23. januar 2009 Forfatter Del Skrevet 23. januar 2009 Tentke mer på begkrepene han bruker her. Vi har aldri brukt, og det står ikke noe i boka om det, begreper som; Dictionary, console.write, Stringbuilder ++ Lenke til kommentar
The Jackal Skrevet 23. januar 2009 Del Skrevet 23. januar 2009 Tentke mer på begkrepene han bruker her. Vi har aldri brukt, og det står ikke noe i boka om det, begreper som; Dictionary, console.write, Stringbuilder ++ Dictionary er bare en klasse, egentlig på lik linje som "Convert" som du bruker i originalkoden din bare at de brukes til forskjellige ting. Console og StringBuilder er forsåvidt også det, men brukes i litt forskjellige sammenhenger. Console brukes stort sett for å skrive ut til konsollet hvis du lager en konsoll applikasjon. Siden du lager en web applikasjon så vil ikke denne klassen være noe særlig brukelig for deg, men du kunne byttet ut denne linjen med "labHeltall = builder.ToString();" og du ville fått resultatet som jeg skrev i min forrige post. Grunnen til å bruke StringBuilder er fordi den er mer optimalisert for å bygge opp strenger. Det er blant annet fordi string klassen er såkalt immutable. Skal ikke gå innpå akkurat hva det er siden det sannsynligvis er et stykke utenfor ditt pensum. Alt i alt består .NET av massevis av hjelpeklasser. Dette er egentlig bare noen av dem og du vil helt sikkert lære å bruke dem etterhvert. Det kan spare deg for massevis av tid. Lenke til kommentar
GeirGrusom Skrevet 23. januar 2009 Del Skrevet 23. januar 2009 Litt off-topic: Er det noen som kan fortelle meg hvorfor så mange bruker Convert klassen i C#? Lenke til kommentar
HDSoftware Skrevet 24. januar 2009 Del Skrevet 24. januar 2009 Tentke mer på begkrepene han bruker her. Vi har aldri brukt, og det står ikke noe i boka om det, begreper som; Dictionary, console.write, Stringbuilder ++ Du, disse ordene du nevner har ingenting med C# å gjøre. Det er klasser i .NET biblioteket og dette biblioteket inneholder tusen vis av dem. Det betyr jo ikke at noe skrives på en annen måte en det dere lærer, men at svarene du får kansje er litt mere avanserte en nivået dere har kommet til på skolen. Mange av oss her på forumet programmerer C# som levebrød og jeg kan garantere deg at svarene du får her vil være basert på "the way it should be" og ikke de typpiske skoleeksemplene. Dette fordi .NET er et så rikt bibliotek av funksjoner at det mest sansynligvis finnes en støtte for problemstillinger der allerede. Derfor, når man stiller et spørsmål om "hvordan gjør jeg det..." så vil svarene i 9 av 10 tilfeller være en eller annen .NET løsning og ikke en programerings løsning. Eksempelvis vil et spørsmål om hvordan du deler opp en komma separert streng baseres på SPLIT metoden til string klassen, og ikke en løkke som søker igjennom strengen. fordelen ved dette er soleklar. Man lærer hvordan .NET fungerer. Ulempen er også soleklar. Man lærer ikke program logikk Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå