@lodarletarn:
Jag har skrivit detta i flera trådar, men vi tar det väl en gång till
Som ovan programmerare måste du ha klart för dig hur du skall lösa problemet innan du sätter dig vid tangentbordet. Som nybörjare behöver du ha tre verktyg i din mentala verktygslåda för att angripa problem: sekvens, selektion och iteration. Om vi tar dem ett verktyg i taget:
Sekvens: Gör först A sedan B. Detta kan tyckas självklart att man först skall göra en sak och sedan nästa, men det är den vanligaste uppdelningen av ett problem i mindre delar. Först gör vi en sak och sedan gör vi nästa sak.
Selektion: Gör antingen A eller B beroende på ett villkor.
Iteration: Gör A tills ett villkor är uppfyllt. Detta är typiskt en loop. Man kan köra ett fixt antal varv eller tills ett visst villkor blir uppfyllt, exempelvis att du hittar en nolla i en array.
Dessa kan kombineras i det oändliga och selektionen kan välja mellan en sekvens och en iteration, man itererar typiskt över en sekvens av operationer och sekvensen kan innehålla både iterationer och selektioner. Som en hjälp att tänka i dessa former kan man använda forna tiders flödesscheman.
Stäng nu editorn och hämta penna och papper. Fundera på hur du skulle lösa platsbokningen för hand. Hur skulle du göra? Utan dator!
När du har mer rutin kommer du undermedvetet bryta ner problemet i sekvens, selektion och iteration och du kommer kunna ta lite genvägar, men jag tycker fortfarande att hjälper att ställa mig vid whiteboarden och rita lite när det är komplexa problem att lösa.
Först och främst handlar det om att bryta ner problemet i mer behändiga delar. Hur skulle du göra om du satt bakom en disk och folk kom och ville boka platser på buss?
1) Jag tror att du skulle göra en tabell med alla platser där du höll reda på om platsen var bokad eller inte.
2) När någon kommer fram till disken skulle du presentera dig och förklara vilka tjänster du erbjuder. Besökaren kan list lediga platser, boka plats, avboka plats, eller göra ingenting.
3) Du frågar vad besökaren vill göra.
4a) Om hen ville se vilka platser som fanns att boka, lista lediga platser.
4b) Om hen ville boka en plats, hantera detta.
4c) Om hen ville avboka en plats, hantera detta.
5) Så länge bussen inte har gått hoppa tillbaka till punkt 2
Nu har vi brutit ner problemet i lite mer behändiga bitar. I högnivålösningen har vi exempel på
Iteration: Punkt 2 till 5 upprepas till bussen går eller du stänger för kvällen.
Selektion: Beroende på besökarens val väljer du antingen 4a, 4b eller 4c.
Sekvens: Här har du två fall av sekvens, först skapar du din tabell (1) och sedan körs iterationen (2-5) och inuti iterationen gör du först 2, sedan 3, sedan selektionen 4 och till sist 5.
Verkar detta vettigt? Nästa steg är att titta på de olika delmomenten och bryta ner dessa i mindre operationer och göra dessa steg för steg och sedan bryta ner dessa steg i ännu mindre steg. "Hantera bokning" låter som ett stort steg, vad består det av?
Låt oss säga att Pelle Petterson vill boka plats nummer Plats på rad Rad.
1) Kolla om bokningen är rimlig. Om besökaren försöker boken en plats som inte finns (rad 12 i din 10-radiga buss) skulle du säga till.
2) Om platsen redan är bokad,
2a) Säg att platsen är upptagen
2) annars
2b) Notera att säte[Rad][Plats] är bokat av Pelle Petterson och säg att bokningen gick bra.
När du har så detaljerade instruktioner så att din polares korkade lillebrorsa skulle kunna sitta bakom disken och hantera bokningen, då är det oftast en lätt sak att översätta dessa till programkod. Nu är det dags att öppna editorn och översätta instruktionerna till polarens lillebror till ett program.
TL;DR Du måste själv veta hur du skulle lösa problemet innan du försöker skriva ett program som skall lösa problemet.