Agenda Introducera det individuella projekt Multipla C-filer H-filer Introducera uppgifterna
Projektupptakt I kursen ingår PRO1, enskild programmeringsuppgift En större programmeringsuppgift som ni löser individuellt Slutförs bäst då du läst om och övat på structer och filer Kan påbörjas redan nu
Vad kan du göra nu? Bestäm dig för en uppgift Skissa på en lösning till problemet Papper och penna Diskutera med någon handledare på kursen Skriv koden till de funktioner som där din kunskap hittills är tillräcklig Testa funktionerna
CB-projekt med flera C-filer Hittills: flera funktioner Återanvändning: kopiera funktioner från en fil till en annan Ej helt tillfredsställande: bättre är att använda en och samma fil till flera program! För att förstå hur det kan vara möjligt tittar vi på bygg-processen.
Att bygga ett program Troligen använder du build i Code::Blocks för att sen kunna köra programmet som byggs C-fil Build exe-fil (program) Detta kommer att involverar en rad av program och programdelar Vi tittar nu närmare på detaljerna
Byggstegen med en C-fil C-fil Kompilator preprocess compiler o-fil (binär, ej exe) Länkare exe-fil (program) std-lib (printf etc.)
Övning Rätta felet i exempel 11 (hemsidan)
Byggstegen med flera C-filer C-fil Kompilator o-fil (binär, ej exe)...... C-fil Kompilator o-fil (binär, ej exe) Länkare exe-fil (program) std-lib (printf etc.)
Bygga med flera C-filer Som tidigare gäller att programmet måste innehålla exakt en funktion med namnet main Dvs. en av dina filer måste innehålla din main-funktion, de andra får inte göra det
Övning Ta fram koden till din inlupp2 Dela upp den så att det finns en funktion per C-fil Ignorera ev. varningar till att börja med Provkör För kommandoradsanvändare: gcc *.c
H-filer Vi vill inte ha några varningar! För att uppnå det använder vi header-filer (filer med ändelsen.h) En h-fil innehåller typiskt: Funktionsdeklaration för en viss h-fil Inkluderas i c-filer: den som den hör till Deklaration vs. definition? de som anropar den funktion som har deklarationen i h-filen använd #include slump.h (ej <slump.h>)
Övning (1) Gör en h-fil för var och en av c-filerna till din modifierade inlupp2. Inkludera resp. i rätt fil Funktionsdeklarationerna ska finnas bara i h- filer. Funktionsdefinitioner ska finnas bara i c-filer.
Övning (2) Funktionsnamnet till din summeringsfunktion finns nu i 3 filer: Deklaration i h-fil Definition i c-fil Anrop i annan c-fil Låtsas att du behöver lägga till en intparameter (som inte används) till summeringsfunktionen, men glöm att införa den ändringen i en av de tre filerna (testa alla 3 möjligheterna) och kompilera. Slutsats?
Projektuppgifterna Videobutiken (standardprojekt) Tetris-klon Masken-klon Egna ideer
Projekt videobutiken Data: För varje film: titel, år, längd För filmer inne: hylla För uthyrda filmer: låntagarens namn+telefonnummer; återlämningstid För butikens räkenskaper: Saldo. Filminköp 500kr, uthyrning 50kr Funktionalitet (tänk igenom innan: det ska vara lätt för användaren): Lista filmerna som är inne, resp. lista de uthyrda. Svara på var en film finns resp. när den väntas in igen. Efter att programmet stängts av och sedan sätts på ska alla tidigare tillägg och ändringar finnas kvar Rimlig hantering av indata som är så felaktiga att de kan skada registret eller krascha programmet (gäller data från användare och fil) Lägga in och ta bort film Registrera/avregistrera uthyrning Visa saldot Option: Implementera som länkad lista istället för fix storlek data
Projekt videobutiken Gör ett menybaserat program. En programkörning kan visa följande meny (den kan också se annorlunda ut, och det kan finnas undermenyer): 1. Skriva in ny film 2. Ta bort film 3. Spara hela filmregistret till fil 4. Hämta filmregister från fil 5. Registrera uthyrning 6. Avregistrera uthyrning 7. Lista uthyrda filmer 8. Lista tillgängliga filmer 9. Ändra filmtitel 10. Visa detaljer om en film med visst namn 11. Firmans saldo. 12. Avsluta Ditt val:
Projekt videobutiken Visa ditt förslag och förklara dina tankar till någon av oss handledare. Detta ska göras innan du börjar koda
Meny-styrt program Hittills: Ledtext till användaren (med printf) Vänta på input från användaren (med scanf) Använd indata i någon beräkning Repetera Menybaserat: Skriv ut en uppradning av numrerade alternativ till användaren Vänta på ett input från användaren (med scanf) Låt input utgöra ett val bland de uppradade alternativen Repetera
Menystyrt program Välkommen till pressbyrån! 1 - Köpa tidning 2 - Lämna in tips 3 - Hämta ut paket 4 - Köpa telefonkort 5 - Avsluta Ditt val:
Menystyrt program - kod printf( Välkommen till pressbyrån!\n ); printf( 1 - Köpa tidning\n ); printf( 2 - Lämna in tips\n ); printf( 3 - Hämta ut paket\n ); printf( 4 - Köpa telefonkort\n ); printf( 5 - Avsluta\n ); printf( Ditt val: );
Menystyrt program - kod scanf( %d, &choice); switch(choice) { case 1: // Tidning buy(some_data); break; case 2: // Tipset pools_coupon(some_data); break; case 3: // Paket get_parcel(some_data); break; case 4: // Mobile card buy(some_other_data); break; case 5: // Stop break; }
Menystyrt program Om man låter bli att belamra casen med en massa kod så utgör menyhanteringen en bra översikt över ditt program - använd funktioner! Ibland kan det finnas behov av ytterligare indata från användaren efter att ett val har gjorts Ev. kan ett sådan hanteras med en undermeny (som ev. kan repeteras).
Tetris Ny kloss faller med visst tidsintervall Slumpen styr klosstyp och rotation T.ex. piltangenter för att rotera, sidförflytta, eller släppa ner klossen Om fullt lager tas detta bort och ger poäng När det inte längre finns plats att lägga ut en ny kloss är spelet slut. Använd Allegro för grafiken Kan även göras textbaserad (curses) Extra: Olika nivåer
Masken Styrs med tangenter (t.ex. piltangenter) Växer med tiden Äter äpplen (slumvis placerade och värde) Dör om den biter sig själv eller krockar med kanten Kan inte åstadkommas med standard-c Du behöver använda ett tilläggsbibliotek, t.ex. Allegro eller curses Allegro om du vill göra riktig grafik curses för att istället simulera grafik med text
curses Ett tilläggsbibliotek för bättre textbaserad I/O Bättre textutskrift (färger, positionering mm) Bättre tangentbordsinput Windows: pdcurses finns på nätet Linux: ncurses finns vanligen förinstallerat Div. Howtos på nätet. En beskrivning på svenska för just masken och för Dev-C++ (bör kunna härledas till Code::Blocks). Finns på hemsidan.
Allegro Ett tilläggsbibliotek för spelrelaterad multimediautveckling Finns på nätet, inkluderar docs Är installerad på linux i labbsalarna Christer kommer att ge en introducerande föreläsning (gemensam för alla grupper) Bevaka hemsidan om du är intresserad Efter structer
Egen ide Föreslå en egen ide till handledare Efter en ev. diskussion avgörs om det är rimligt Lämna in en kort beskrivning som bekräftas efter ev. iteration
Varför ta upp projektet nu? Du behöver ta ställning till vad du vill göra När nya saker tas upp: försök tänk på hur detta relaterar till det projekt du tänker göra! Du kan börja tänka ut funktionaliteten redan nu (skriv!!) Beroende på uppgift kan du skriva delar av koden (funktioner kan testas i isolering!!!)