Mr.Anki Skrevet 9. mai 2010 Del Skrevet 9. mai 2010 (endret) Hei, Driver å ser på noen tidligere eksamensoppgaver som forberedelse til tentamen. Skal lage et program hvor man kan gjette avstanden mellom to steder, oppgaven lyder slik: Lag et lite program der brukerne kan gjette på avstand (målt i nautiske mil) mellom Langesund og noen andre kjente havner:- Kragerø (14 nautiske mil fra Langesund) - Lyngør (32 nautiske mil fra Langesund) - Kristiansand (85 nautiske mil fra Langesund) - Sandefjord (23 nautiske mil fra Langesund) - Strömstad (46 nautiske mil fra Langesund) - Göteborg (109 nautiske mil fra Langesund) Fra en liste skal brukeren velge den havna han vil gjette avstanden til. Etter at brukeren har gjettet, skal han få melding om han gjettet for mange nautiske mil eller for få. Brukeren skal kunne gjette til han får riktig svar, med en feilmargin på 10 %. En grafikk (f.eks. i form av en liggende eller stående søyle) skal hele tiden vise hvor mange forsøk han har brukt. Til slutt skal det komme opp en kommentar om resultatet, avhengig av hvor mange forsøk som ble brukt. Det beste her er vel å bruke en RadioButtonList også et enkelt tekstfelt hvor en kan skrive inn antall mil? Men hvordan får jeg til å koble valget fra RadioButtonListen og tekstfeltet? Endret 7. mars 2011 av Mr.Anki Lenke til kommentar
SkyFish Skrevet 9. mai 2010 Del Skrevet 9. mai 2010 (endret) Tror du vil få problemer med å få noen til å skrive ei heilside med kode uten å vise om du har prøvd engang Men ja, det du sier tror jeg jeg ville gjort også, og bruke if setninger for å sjekke svaret. 1 liste med destinasjonene, 1 textbox og 1 button så trenger du bare å legge koden i button om du bruker visual studio. og legge inn enten med case (det har jeg ikke så mye erfaring med) eller en rekke if setninger. du sjekker rett og slett hver greie nedover om det er rett, og helt nederst om den kommer helt dit betyr det at rett svar ikke ble angitt så da plusser du på 1 på et felt som holder styr på antall forsøk brukt. Jeg har bare brukt C# dette halvåret, men denne oppgava virka ikke så veldig vanskelig, så det er bare å prøve deg frem og spørre igjen om du står fast. Nå har jeg aldri brukt Radiobutton, men regner med det å hente ut info fra det er ganske basic, bare å google det så finner du det sikkert. et eksempel på en if setning kunne vært if ( innholdet i radiobutton == "Kragerø" && int.Parse(textBox1.Text) == 14) { Rett svar, skriv ut til en evt textbox osv. anntallForsøk = 1; // om du har et felt som heter antallForsøk som holder styr på antall forsøk brukt kan du resette det til 1 hver gang de tar riktig svar, og plusse på 1 hver gang de gjør feil. sålenge du starter det på 1 siden ingen bruker 0 forsøk } Endret 9. mai 2010 av SkyFish Lenke til kommentar
Mr.Anki Skrevet 9. mai 2010 Forfatter Del Skrevet 9. mai 2010 (endret) Har det grafiske på plass, men det som jeg sliter med er koblingen av RadioButtonList og tekstboksen. Og hvordan jeg skal sjekke om svaret er riktig med feilmargin på 10%? Her er en liten start: { int nautiske = Convert.ToInt32(txtNautiskeMil.Text); int antall = 0; { if (RadioButtonList1.SelectedValue == "0") if (nautiske == 14) labResultat.Text = "Riktig"; } } Endret 9. mai 2010 av Mr.Anki Lenke til kommentar
Mr.Anki Skrevet 9. mai 2010 Forfatter Del Skrevet 9. mai 2010 (endret) Har kommet noe lengre nå, men får ikke helt til opptellingen, nå telles det bare om man skriver rett svar... Noen tips? using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnBeregn_Click(object sender, EventArgs e) { labResultat.Text = RadioButtonList1.SelectedValue; int nautiske = Convert.ToInt32(txtNautiskeMil.Text); int antall = 0; { if (RadioButtonList1.SelectedValue == "0") if (nautiske == 14) antall++; } { if (RadioButtonList1.SelectedValue == "1") if (nautiske == 32) antall++; } { if (RadioButtonList1.SelectedValue == "2") if (nautiske == 85) antall++; } { if (RadioButtonList1.SelectedValue == "3") if (nautiske == 23) antall++; } { if (RadioButtonList1.SelectedValue == "4") if (nautiske == 46) antall++; } { if (RadioButtonList1.SelectedValue == "5") if (nautiske == 109) antall++; } int maksBredde = 300; { int soyleBredde = (int)(maksBredde * (1.0 * antall)); labResultat.Text = "Antall forsøk: " + antall + "<img src=\"roed.jpg\" height=\"5\"width=\"" + soyleBredde + "\">" + "<br />"; } } } Endret 9. mai 2010 av Mr.Anki Lenke til kommentar
Mr.Anki Skrevet 9. mai 2010 Forfatter Del Skrevet 9. mai 2010 Har lagt på litt mer kode, men finner ikke ut hvor jeg skal plassere antall++ for å telle opp. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnBeregn_Click(object sender, EventArgs e) { labTeller.Text = RadioButtonList1.SelectedValue; int nautiske = Convert.ToInt32(txtNautiskeMil.Text); int antall = 0; { if (RadioButtonList1.SelectedValue == "0") if (nautiske == 14) labResultat.Text = "Korrekt!"; else if (nautiske < 13) labResultat.Text = "Du gjettet for lavt"; else if (nautiske > 15) labResultat.Text = "Du gjettet for høyt"; } { if (RadioButtonList1.SelectedValue == "1") if (nautiske == 32) labResultat.Text = "Korrekt!"; else if (nautiske < 31) labResultat.Text = "Du gjettet for lavt"; else if (nautiske > 33) labResultat.Text = "Du gjettet for høyt"; } { if (RadioButtonList1.SelectedValue == "2") if (nautiske == 85) labResultat.Text = "Korrekt!"; else if (nautiske < 84) labResultat.Text = "Du gjettet for lavt"; else if (nautiske > 86) labResultat.Text = "Du gjettet for høyt"; } { if (RadioButtonList1.SelectedValue == "3") if (nautiske == 23) labResultat.Text = "Korrekt!"; else if (nautiske < 22) labResultat.Text = "Du gjettet for lavt"; else if (nautiske > 24) labResultat.Text = "Du gjettet for høyt"; } { if (RadioButtonList1.SelectedValue == "4") if (nautiske == 46) labResultat.Text = "Korrekt!"; else if (nautiske < 45) labResultat.Text = "Du gjettet for lavt"; else if (nautiske > 47) labResultat.Text = "Du gjettet for høyt"; } { if (RadioButtonList1.SelectedValue == "5") antall++; if (nautiske == 109) labResultat.Text = "Korrekt!"; else if (nautiske < 108) labResultat.Text = "Du gjettet for lavt"; else if (nautiske > 110) labResultat.Text = "Du gjettet for høyt"; } { int soyleBredde = 1 * antall; labTeller.Text = "Antall forsøk: " + antall + "<img src=\"roed.jpg\" height=\"5\"width=\"5\"" + soyleBredde + "\">" + "<br />"; } } } Lenke til kommentar
GeirGrusom Skrevet 9. mai 2010 Del Skrevet 9. mai 2010 Et hint: Mange if setninger som dette er som regel unødvendig, eller mer komplisert enn nødvendig. Lenke til kommentar
Mr.Anki Skrevet 9. mai 2010 Forfatter Del Skrevet 9. mai 2010 Det ble mange if setninger ja, men ser ikke helt hvor jeg skal kutte ned på det. Jeg har ikke lært noen andre koder for valgsetninger enn dette. Det største problemet slik jeg ser det nå er å få telt opp hvor mange forsøk som er brukt. Lenke til kommentar
tom waits for alice Skrevet 9. mai 2010 Del Skrevet 9. mai 2010 Jeg har aldri skrevet en linje i C#, så de som kan det får eventuelt arrestere meg på det følgende: Jeg ville laget en array med to kolonner. En for radioknappnummeret og en for korrekt distanse. Så ville jeg laget en subrutine for sammenligningen som tok to parametere: En for korrekt distanse og en for gjettet distanse. Da trenger du ikke alle if-ene dine. Du kan bruke RadioButtonList1.SelectedValue til å slå opp i arrayen for å finne korrekt distanse og sende den til subrutinen sammen med brukerens input. Den har også ansvaret for å telle opp antall forsøk. Jeg antar at antall skal telles for hvert spørsmål, og nulstilles i det man svarer riktig. Merk ellers at oppgaven sier at svarene skal være riktig med inntil 10% feilmargin, så subrutinen må regne ut det lovlige intervallet (om riktig svar er 50km, så er lovlig intervall 45-55), og sammenligne med det. Ser også at du skriver f. eks.: if (nautiske == 14) labResultat.Text = "Korrekt!"; else if (nautiske < 13) Om du ser nærmere på det så ser du at du ikke fanger opp 13 der, bare det som er mindre enn 13. Det bør stå nautiske < 14. Geir Lenke til kommentar
Mr.Anki Skrevet 9. mai 2010 Forfatter Del Skrevet 9. mai 2010 (endret) Takk skal du ha Har aldri brukt to kolonner i en array før og parameter kan jeg heller ikke, så da vil jeg tro at jeg greier med uten det på prøven. Men ser at dette ville vært mye kortere å skrive. Er det noen måte å få telt opp antall forsøk på den måten jeg har skrevet koden nå, eller må det meste skrives om? Må få lagt inn den feilmarginen ja, men hvordan skriver man det når korrekt svar er innenfor flere tall? Om 50 nm er riktig: if (nautiske >45 && <55 ) labResultat.Text = "Korrekt!"; ? Endret 9. mai 2010 av Mr.Anki Lenke til kommentar
tom waits for alice Skrevet 9. mai 2010 Del Skrevet 9. mai 2010 Nå bare gjetter jeg men: if (nautiske >45 && nautiske <55 ) Geir Lenke til kommentar
Mr.Anki Skrevet 9. mai 2010 Forfatter Del Skrevet 9. mai 2010 Stemmer nok det der ja, stod vist slik i boken også Noen andre som vet hvordan jeg kan få til opptelling med mine IF setninger? Lenke til kommentar
Kiff Skrevet 11. mai 2010 Del Skrevet 11. mai 2010 (endret) Stemmer nok det der ja, stod vist slik i boken også Noen andre som vet hvordan jeg kan få til opptelling med mine IF setninger? Hva med å trekke ut denne blokken i en egen metode, f.eks sjekkGrense, som returnerer true (og fremdeles setter labResultat.Text) hvis brukeren gjettet rett? if (nautiske == 14) labResultat.Text = "Korrekt!"; else if (nautiske < 13) labResultat.Text = "Du gjettet for lavt"; else if (nautiske > 15) labResultat.Text = "Du gjettet for høyt"; Jeg ser for meg en test ca slik: if(sjekkGrense(grense, nautiske)){ antall = 0; //korrekt, teller nullstilles } else { antall++; } Endret 11. mai 2010 av Kiff Lenke til kommentar
Salt kjeks Skrevet 18. mai 2010 Del Skrevet 18. mai 2010 (endret) Har aldri brukt to kolonner i en array før og parameter kan jeg heller ikke, så da vil jeg tro at jeg greier med uten det på prøven. Men ser at dette ville vært mye kortere å skrive. Du trenger ikke bruke mer enn én kolonne i arrayen. Du kan lage en en-kolonners array der "cellenummeret" er i samsvar med RadioButton-listen slik at første RadioButton tilsvarer første celle i arrayen. (Edit: Ble brått litt usikker på dette med RadioButton. Jeg har gjort oppgaven før, og brukte en DropDownList i stedet for RadioButton, og egenskapen "SelectedIndex", men en RadioButton-gruppe har vel ingen tilsvarende egenskap? Da må du kanskje ha én if-setning for hver RadioButton, som gir en tallverdi for om det er den første, andre, tredje osv. som er krysset av.) De tre første avstandene var: - Kragerø (14 nautiske mil fra Langesund) - Lyngør (32 nautiske mil fra Langesund) - Kristiansand (85 nautiske mil fra Langesund) Da blir verdiene i arrayen (her kalt "avstand") slik: avstand[0] må være 13 avstand[1] må være 32 avstand[2] må være 85 Nå bare gjetter jeg men: if (nautiske >45 && nautiske <55 ) Geir Si at k her er en variabel med den korrekte verdien til det valgte stedet. Da kan vi skrive: if (nautiske > (k*0,9) && nautiske < (k*1,1)) Da slipper vi å ha en if-setning for hvert eneste sted. Endret 18. mai 2010 av grizzlyx Lenke til kommentar
Giggsy11 Skrevet 20. mai 2010 Del Skrevet 20. mai 2010 Hei! Fant du noe mer ut av hvordan du teller forsøkene? Sliter med samme oppgave nemlig! Lenke til kommentar
Mr.Anki Skrevet 20. mai 2010 Forfatter Del Skrevet 20. mai 2010 Bruk en sesjonsvariabel til tellingen. Lenke til kommentar
Salt kjeks Skrevet 22. mai 2010 Del Skrevet 22. mai 2010 Dersom du lager et program som kjøres lokalt på maskinen, trenger du ikke sesjonsvariabler (det jeg gjorde). Det gjelder også f.eks. Silverlight-applikasjoner (som vi har brukt en del på skolen). Lager du en nettside som kjøres fra en server trenger du sesjonsvariabler for å unngå at den "glemmer" alt for hver gang du trykker på knappen. Lenke til kommentar
SkyFish Skrevet 23. mai 2010 Del Skrevet 23. mai 2010 Hei igjen, akkurat det med opptellingen kan jeg ikke forstå er så vanskelig. Sånn som vi gjør på skolen er det iallefall bare å bruke en egen variabel som holder styr på det sånn som du har gjort nå, men du må såklart telle opp antall forsøk når han skriver feil. Ikke når han skriver riktig. Endret litt på det som såg ut som den nyeste koden din, håper det hjelper: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { private int antall 1; protected void Page_Load(object sender, EventArgs e) { } protected void btnBeregn_Click(object sender, EventArgs e) { labTeller.Text = RadioButtonList1.SelectedValue; int nautiske = Convert.ToInt32(txtNautiskeMil.Text); { if (RadioButtonList1.SelectedValue == "0") if (nautiske == 14) labResultat.Text = "Korrekt! Du brukte " +antall +" forsøk!"; antall = 1; else if (nautiske < 13) labResultat.Text = "Du gjettet for lavt"; antall++; else if (nautiske > 15) labResultat.Text = "Du gjettet for høyt"; antall++; } { if (RadioButtonList1.SelectedValue == "1") if (nautiske == 32) labResultat.Text = "Korrekt! Du brukte " +antall +" forsøk!"; antall = 1; else if (nautiske < 31) labResultat.Text = "Du gjettet for lavt"; antall++; else if (nautiske > 33) labResultat.Text = "Du gjettet for høyt"; antall++; } { if (RadioButtonList1.SelectedValue == "2") if (nautiske == 85) labResultat.Text = "Korrekt! Du brukte " +antall +" forsøk!"; antall = 1; else if (nautiske < 84) labResultat.Text = "Du gjettet for lavt"; antall++; else if (nautiske > 86) labResultat.Text = "Du gjettet for høyt"; antall++; } { if (RadioButtonList1.SelectedValue == "3") if (nautiske == 23) labResultat.Text = "Korrekt! Du brukte " +antall +" forsøk!"; antall = 1; else if (nautiske < 22) labResultat.Text = "Du gjettet for lavt"; antall++; else if (nautiske > 24) labResultat.Text = "Du gjettet for høyt"; antall++; } { if (RadioButtonList1.SelectedValue == "4") if (nautiske == 46) labResultat.Text = "Korrekt! Du brukte " +antall +" forsøk!"; antall = 1; else if (nautiske < 45) labResultat.Text = "Du gjettet for lavt"; antall++; else if (nautiske > 47) labResultat.Text = "Du gjettet for høyt"; antall++; } { if (RadioButtonList1.SelectedValue == "5") if (nautiske == 109) labResultat.Text = "Korrekt! Du brukte " +antall +" forsøk!"; antall = 1; else if (nautiske < 108) labResultat.Text = "Du gjettet for lavt"; antall++; else if (nautiske > 110) labResultat.Text = "Du gjettet for høyt"; antall++; } { int soyleBredde = 1 * antall; labTeller.Text = "Antall forsøk: " + antall + "<img src=\"roed.jpg\" height=\"5\"width=\"5\"" + soyleBredde + "\">" + "<br />"; } } } Merket nå at jeg la til antall forsøk når de gjettet riktig, så merka jeg du hadde det på slutten, men det er bare å forandre teksten som du vil selv. Kan hende jeg har skrevet litt feil nå, men mener på at det her skal bli riktig. Du hadde antall = 0; når du trykkte på knappen, det vil si den resatte seg hver gang du trykkte. Nå settes den bare til 1 når klassen instansieres og deretter kun etter folk har gjettet riktig. Det kan føre til at den nederste delen av koden din viser feil antall når de har gjettet riktig though. Grunnen til at jeg setter antall = 1 og ikke 0 er fordi man aldri kan bruke 0 forsøk, det første forsøket er jo forsøk 1 uansett. Er fortsatt første året jeg holder på med C# så som sagt kan det være lettere måter å gjøre det på, og det kan hende det ikke virker i det hele tatt Men tror det er rett. Lenke til kommentar
TeisL Skrevet 23. mai 2010 Del Skrevet 23. mai 2010 if (nautiske == 14) labResultat.Text = "Korrekt! Du brukte " +antall +" forsøk!"; antall = 1; else if (nautiske < 13) labResultat.Text = "Du gjettet for lavt"; antall++; else if (nautiske > 15) labResultat.Text = "Du gjettet for høyt"; antall++; } Hei, Hvis ikke jeg tenker helt feil her nå, så vil du her ikke få med deg 13 og 15. nautiske == 14 nautiske < 14 nautiske > 14 evt. nautiske <= 13 og nautiske >= 15 Bare sånn just in case... Lenke til kommentar
Degeim Skrevet 23. mai 2010 Del Skrevet 23. mai 2010 (endret) Dessuten må du bruke krøllparenteser hvis det er mer enn én linje inne i en if/else if: if (nautiske == 14){ labResultat.Text = "Korrekt! Du brukte " +antall +" forsøk!"; antall = 1; }else if(nautiske < 14){ labResultat.Text = "Du gjettet for lavt"; antall++; }else if(nautiske > 14){ labResultat.Text = "Du gjettet for høyt"; antall++; } Endret 23. mai 2010 av Degeim Lenke til kommentar
Giggsy11 Skrevet 25. mai 2010 Del Skrevet 25. mai 2010 (endret) Jeg skrev heller inn verdiene i en DropDownListe. Gjorde dette ganske kjapt nå, men tror dette er den enkleste måten å gjøre det på. Mangler en label til søylen som teller. int antallForsok = 0; protected void Page_Load(object sender, EventArgs e) { if (Session["antallForsok"] != null) { antallForsok = (int)Session["antallForsok"]; } } protected void Page_Unload(object sender, EventArgs e) { Session["antallForsok"] = antallForsok; } protected void Button1_Click(object sender, EventArgs e) { int riktigSvar = Convert.ToInt32(ddlByer.SelectedItem.Value); int gjetteTall = Convert.ToInt32(txtAvstand.Text); antallForsok++; if (gjetteTall > (0.9 * riktigSvar) && gjetteTall < (1.1 * riktigSvar)) { labMelding.Text = "Korrekt! Du gjettet riktig med en margin på 10% mellom Langesund og " + ddlByer.SelectedItem.Text + " på " + antallForsok + " forsøk. Gratulerer!<br /><br />"; } else if (gjetteTall < (0.9 * riktigSvar)) { labMelding.Text = "Beklager, du gjettet for lavt mellom Langesund og " + ddlByer.SelectedItem.Text + " Prøv igjen!<br /><br />"; } else if (gjetteTall > (1.1 * riktigSvar)) { labMelding.Text = "Beklager, du gjettet for høyt mellom Langesund og " + ddlByer.SelectedItem.Text + " Prøv igjen!<br /><br />"; } } Endret 25. mai 2010 av Giggsy11 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å