Kap 6: Lista, stack och kö

Storlek: px
Starta visningen från sidan:

Download "Kap 6: Lista, stack och kö"

Transkript

1 Kap 6: Lista, stack och kö Vi har använt vector en hel del i boken. Det finns andra liknande konstruktioner, som också har tillkommit under senare år. I det här kapitlet ska vi lära oss använda: list, stack och queue, dvs lista, stack och kö. Vi går igenom dessa i tur och ordning och bygger exempelprogram, som visar hur de används. Vi ska också diskutera skillnader och likheter och ge exempel på användning. 1. Funktioner i list och jämförelse med vector Vi börjar med att skapa ett instruktivt program, som visar hur list används och vilka funktioner som finns. Skapa en ny mapp Kap 06 med projektet Ex01_06 och cpp-filen Ex01. Lägg in koden: // Ex01_06. Genomgång av funktioner till list #include <iostream> #include <list> #include <conio+.h> // Räcker med conio.h i Builder using namespace std; #include svtecken.h void pos_text(int& x, int& y, string s, int nya_rader=2); void skriv(list<double> lista); int main() teckenbyt(); list<double> lista; int x, y, i; lista.push_back(3.6); lista.push_back(4.5); lista.push_back(2.9); pos_text(x, y, Tryck tangent för att skriva ut listan:, 1); gotoxy(x,y); clreol(); cout << Listan från början: ; skriv(lista); pos_text(x, y, Tryck för att lägga till 1.1 i listans början: ); lista.push_front(1.1); gotoxy(x,y); clreol(); cout << Listan med 1.1 tillagt i början: ; skriv(lista); pos_text(x, y, Tryck för att lägga till 2.2 i listans slut: ); lista.push_back(2.2); gotoxy(x,y); clreol(); cout << Listan med 2.2 tillagt i slutet: ; skriv(lista); pos_text(x, y, Tryck för att lägga in 3.3 på 4:e plats: ); list<double>::iterator it = lista.begin(); for (i=1; i<4; i++) it++; lista.insert(it, 3.3); gotoxy(x,y); clreol(); cout << Listan med 2.2 på 4:e plats: ; skriv(lista); cout << \n\n\n ; cout << Tryck tangent ; getch(); return 0;

2 void pos_text(int& x, int& y, string s, int nya_rader) cout << \n ; if (nya_rader>1) cout << \n ; x=wherex(); y=wherey(); cout << s; getch(); void skriv(list<double> lista) list<double>::iterator it = lista.begin(); for (unsigned int j=0; j<lista.size(); j++) cout << *it++ << ; Kör programmet. Som du ser finns det många funktioner som är lika i list och vector. Man lägger till element med push_back() men kan också lägga till element ned push_front() i list. En lista kan inte indexeras och kräver en speciell konstruktion, iterator, för att adressera en lista: list<double>::iterator it = lista.begin(); Ovan deklareras en iterator it, som sätts att peka på listans första element. Iteratorn kan också enkelt sättas till ett steg efter sista elementet med lista.end, men för övrigt måste man iterera, exempelvis med en for-loop, för att ge iteratorn it rätt värde. Följande sats skriver listans värde: for (unsigned int j=0; j<lista.size(); j++) cout << *it++ << ; Som du ser används it++ för att öka iteratorn it med 1. Det värde som iteratorn pekar på anges med *it. Man sätter alltså tecknet * framför iteratorn för att komma åt själva värdet. Koden cout << it++ skriver ut värdet av elementet it och ökar sedan iteratorn med 1. Även vector kan använda iteratorer men det finns inte samma behov där som i list. Mycket verkar annars vara lika i vector och list. Som konstruktioner är de dock mycket olika. I en vector lagras elementen i minnet efter varandra, men en listas element kan ligga på helt olika minnesplatser. Fördelen med list jämfört med vector är, att det tar kortare tid att ta bort eller lägga till ett element vilket som helst. I vector går det endast snabbt att radera eller lägga till element i slutet av vektorn. Hur är elementen uppbyggda i list? Jo, de består av två delar: en datadel och en adressdel. Första elementet innehåller adressen till det andra elementet, som i sin tur innehåller adressen till nästa o s v. Bilden nedan visar en lista bestående av fem element. Den vänstra delen av varje element symboliserar där datadelen och den högra adressdelen: Element i en lista kan tas bort genom att enbart flytta adresser. Exempelvis tas element tre bort om dess adress, som pekar på element fyra, istället flyttas till element två. Det som tidigare var fjärde elementet blir nu tredje. Adresserna till listans kvarstående element är dock samma som förut

3 Så är det inte i vector. Raderas ett element kommer alla element till höger om det raderade att ändra adress. Motsvarande gäller om element läggs till i en vektor utom på slutet. Läggs element till i slutet kan tidigare element behålla sina adresser. Vi ska fortsätta med fler funktioner i vårt program. Lägg in resten av koden nu: pos_text(x, y, Tryck för att sortera listan: ); lista.sort(); gotoxy(x,y); clreol(); cout << Listan sorterad: ; skriv(lista); pos_text(x, y, Tryck för att vända på listan: ); lista.reverse(); gotoxy(x,y); clreol(); cout << Listan vänd: ; skriv(lista); pos_text(x, y, Tryck för att ta bort 3:e talet: ); it = lista.begin(); for (i=1; i<3; i++) it++; lista.erase(it); gotoxy(x,y); clreol(); cout << Listan med talet nr 3 raderat: ; skriv(lista); pos_text(x, y, Tryck för att ta bort 3:e och 4:e talet: ); it = lista.begin(); for (i=1; i<3; i++) it++; list<double>::iterator it2 = lista.begin(); for (i=1; i<5; i++) it2++; lista.erase(it,it2); gotoxy(x,y); clreol(); cout << Listan med tal nr 3 och 4 raderat: ; skriv(lista); pos_text(x, y, Tryck för att kopiera listan: ); list<double> lista2=lista; gotoxy(x,y); clreol(); cout << Listan kopierad: ; skriv(lista); cout << Kopia: ; skriv(lista2); pos_text(x, y, Tryck för att radera listans 1:a tal och jämföra: ); lista.erase(lista.begin()); gotoxy(x,y); clreol(); if (lista!=lista2) cout << Listorna är olika! ; skriv(lista); cout << Kopian: ; skriv(lista2); pos_text(x, y, Tryck för att radera listan: ); lista.clear(); gotoxy(x,y); clreol(); cout << Listan: ; skriv(lista); if (lista.empty()) cout << Listan är tom! ; Kör programmet igen. Som du ser finns en funktion sort(), som sorterar en lista i stigande ordning, och genom att vända på listan med reverse() kan listan också sorteras fallande. Om listan innehåller string-strängar fungerar dock inte sortering av svenska tecken. Man raderar element med erase() men måste då använda en iterator liksom när insert() används. Om flera element ska raderas måste två iteratorer användas. En fördel med vector är att iteratorer inte behövs direkt men kan användas. Många av skillnaderna märker man inte mycket av som användare. Det är enkelt att kopiera en lista

4 liksom en vektor och det är också lätt att radera hela listan eller vektorn. Funktionen empty() finns både i list och vector. Man kan sätta samman listor med merge(), infoga en lista i en annan på valfri plats med splice() och ta bort lika element med unique(). Men det leder för långt att gå in på allt detta. I tabellen nedan, som visar funktioner i list och vector, finns inte dessa sista funktioner med. Funktionens namn Gör följande Finns i assign(antal, varde) Ger platserna 0 till antal-1 värdet varde vector size() Returnerar längden vector, list begin() Ger platsen för första elementet vector, list end() Ger platsen för sista elementet+1 vector, list push_back(element) Lägger till element i slutet vector, list push_front(element) Lägger till element i början lista insert(it, element) Lägger in element på plats som anges av it vector, list erase(it) Raderar elementet som plats som anges av it vector, list sort() Sorterar elementen i stigande ordning list reverse() Vänder på ordningsföljden list clear() Raderar alla element vector, list empty() Returnerar true om inga element finns vector, list = Tilldelar en vektor eller lista till en annan vector, list ==!= <= > >= Används för jämförelse vector, list Uppgift 1, Uppgift 2 2. En lista med struct Vi ska skriva ett program med en lista av struct för att visa hur list fungerar med strukturer. Skapa ett nytt projekt Ex02_06 med cpp-filen Ex02. Programmet ska vara meny- och funktionsuppbyggt. Koden nedan implementerar funktionerna mata_in() och skriv_ut(), men fler funktioner kommer att läggas in. Lägg in följande kod i cpp-filen: // Ex02_06. Program som visar en lista med struct #include <iostream> // För Visual #include <fstream> #include <list> #include <conio+.h> // Räcker med conio.h i Builder using namespace std; #include svtecken.h #include egna_funktioner.h struct Konto string namn;

5 string nr; double kapital; ; void meny(char& ch); void mata_in(list<konto>& kontolista); void skriv_ut(list<konto> kontolista); int main() teckenbyt(); list<konto> kontolista; char ch; meny(ch); while (ch!='0') switch (ch) case '1': mata_in(kontolista); break; case '2': skriv_ut(kontolista); break; case '3': break; case '4': break; case '5': break; case '6': break; case '7': break; case '8': break; case '9': break; meny(ch); cout << \n\n ; return 0; void meny(char& ch) clrscr(); cout << \n Meny ; cout << \n\n 1. Mata in konto\n 2. Skriv ut alla konton << \n 3. Radera konto\n 4. Infoga konto\n 5. Radera alla konton << \n 6. Sortera konton\n 7. Söka efter konto\n << 8. Spara konton som fil\n 9. Hämta konton från fil\n << 0. Avsluta ; cout << \n\n Välj genom att trycka siffertangent: ; ch=getch( ); void mata_in(list<konto>& kontolista) Konto konto; clrscr(); cout << \n Inmatning av konton:\n ; cout << \n Mata in namn (sluta - mata in tomsträng): ;

6 while (getline(cin, konto.namn) && konto.namn!= ) cout << Mata in kontonummer: ; getline(cin, konto.nr); cout << Mata in kapital: ; cin >> konto.kapital; cin.ignore(1000,'\n'); kontolista.push_back(konto); cout << \n Mata in namn (sluta - mata in tomsträng): ; void skriv_ut(list<konto> kontolista) clrscr(); cout << \n Kontolistan:\n\n ; list<konto>::iterator it; Konto konto; for (it=kontolista.begin(); it!=kontolista.end(); it++) konto=*it; cout << << konto.namn << << konto.nr << << konto.kapital << endl; cout << \n Tryck tangent ; getch(); Kör programmet. Som du ser av strukturen Konto ska programmet använda bankkonton med datamedlemmarna namn, nr och kapital. De första två är string-variabler och kapital en double. Menyn kommer att innehålla nio alternativ när programmet är färdigt. Som framgår av switch-satsen har endast de två första implementerats i koden hittills. I funktionen meny() skrivs menyn ut och tecken för att välja i menyn matas in av användaren. Parametern ch är referensparameter och överför tecknet till main(), där det tas om hand av switch-satsen. I meny() används den överlagrade getch() från Övning 5 i föregående kapitel. Har du inte lagt in den i egna_funktioner.h bör du göra det nu eller byta till vanlig getch(). I mata_in() sker inmatning tills konto.namn matas in som tomtecken. Det sköts om av whilevillkoret (getline(cin, konto.namn) && konto.namn!= ) som är true så länge som konto.namn inte är en tomsträng. Vi har inte använt oss av just den här konstruktionen tidigare. Det innebär att read ahead-teknik, som ofta använts tidigare, inte behövs. I skriv_ut() används iterator för att skriva ut kontolistan. Den konstruktionen känner du igen från föregående avsnitt. Vi ska implementera fil_skriv() och fil_hamta(), vilket delvis blir repetition från kapitel 3: Prototyper: void fil_skriv(list<konto>& kontolista); void fil_hamta(list<konto>& kontolista); Funktionsdefinitioner: void fil_skriv(list<konto>& kontolista) clrscr(); cout << \n Skrivning till fil\n ; list<konto>::iterator it = kontolista.begin(); Konto konto;

7 string filnamn; cout << \n Mata in filnamn: ; getline(cin,filnamn); if (filnamn!= ) if (filnamn.find('.')==-1) filnamn=filnamn+.txt ; ofstream fout(filnamn.c_str()); if (!fout) cout << \n Filen går ej att öppna. Tryck tangent ; getch(); exit(1); for (it; it!=kontolista.end(); it++) konto=*it; fout << konto.namn << endl << konto.nr << endl << konto.kapital << endl; cout << \n Skriver filen... ; delay(2000); fout.close(); void fil_hamta(list<konto>& kontolista) clrscr(); cout << \n Hämtning från fil\n ; string filnamn; cout << \n Mata in filnamn: ; getline(cin,filnamn); if (filnamn!= ) if (filnamn.find('.')==-1) filnamn=filnamn+.txt ; ifstream fin(filnamn.c_str()); if (fin) cout << \n Läser filen... ; delay(2000); kontolista.clear(); Konto konto; while (getline(fin, konto.namn) &&!fin.eof()) getline(fin, konto.nr); fin >> konto.kapital; kontolista.push_back(konto); fin.ignore(1000,'\n'); fin.close(); else cout << Hittar inte filen. Tryck tangent ; getch(); skriv_ut(kontolista); I switch-satsen i main() byts raderna med case-fall '8' och '9' mot: case '8': fil_skriv(kontolista); meny(ch); break; case '9': fil_hamta(kontolista); meny(ch);

8 Kör programmet. I fil_skriv() måste iterator användas vid skrivning till filen med fout. Se koden nedan. Observera att struct-medlemmarna inte kan kommas åt med *it.namn, *it.nr och *it.kapital utan en struct-variabel av typ Konto måste tilldelas det värde som iteratorn pekar på. Sedan kan skrivning till textfilen ske. for (it; it!=kontolista.end(); it++) konto=*it; fout << konto.namn << endl << konto.nr << endl << konto.kapital << endl; I fil_hamta() har, liksom i mata_in(), använts ett while-villkor som gör read ahead-teknik överflödig. while (getline(fin, konto.namn) &&!fin.eof()) Inläsning från filen sker så länge som getline() läser en sträng till konto.namn och läsningen inte resulterar i att eof() returnerar false. Funktionen delay() i egna_funktioner.h har använts för att ge en illusion av arbete under 2 sekunder. Spara allt. Uppgift 3, Uppgift 4 3. Sortering av struct-listan Skapa ett nytt projekt, Ex03_06, med samma innehåll i cpp-filen Ex03 som i föregående projekt, som nu ska utökas. Vi ska ordna så att kontolistan kan sorteras i programmet. Det är ju bara att använda sort(), tänker man först. Men det fungerar inte i en struct-lista. Hur ska man kunna ange, vad som ska sorteras. Det finns ju tre medlemmar i strukturen Konto. Vilken ska bestämma sorteringsordningen. Vi får skrinlägga planer på användning av sort() och istället skriva en egen funktion. Naturligtvis kan en av sorteringsalgoritmerna från kapitel 4 användas. Det kan göras om minst två iteratorer används. I praktiken visar det sig dock vara krångligt och resulterar i relativt lång kod. Det beror på att iteratorerna måste stegas upp igen efter varje erase() och insert(). Att byta konto på ett ställe i listan innebär att ett element raderas och det nya läggs in på dess plats. Först måste alltså erase()och sedan insert() användas med fungerande iteratorer. Vi ska använda en annan teknik, som är en variant av sorteringsalgoritmerna. Först kommer vi att skaffa oss en kopia av kontolistan och radera allt i originalet. Därefter ska listan genomsökas för att bestämma det konto, som har ett namn först i bokstavsordning. Det kontot ska placeras i det tomma originalet och kontot ska raderas i kopian. Sedan bestäms på nytt vilket konto, som innehåller ett namn först i bokstavsordning. Även det läggs in i kontolistan efter det föregående och raderas från kopian. Om det här får pågå tills kopian är tom måste kontolistan innehålla alla konton sorterade i stigande ordning. Lägg in ändringen i switch-satsen: case '6': sortera(kontolista); meny(ch); break;

9 Lägg in prototypen: void sortera(list<konto>& kontolista); Lägg också in koden till funktionen: void sortera(list<konto>& kontolista) clrscr(); cout << \n\n Sorterar listan... ; delay(2000); list<konto> lista=kontolista; kontolista.clear(); list<konto>::iterator it; Konto konto; string min; while (!lista.empty()) it=lista.begin(); konto=*it; min=konto.namn; for (++it; it!=lista.end(); it++) konto=*it; if (konto.namn<min) min=konto.namn; for (it=lista.begin(); it!=lista.end(); it++) konto=*it; if (konto.namn==min) kontolista.push_back(konto); lista.erase(it); break; skriv_ut(kontolista); Kör programmet och pröva att sortera kontolistan. Här är funktionens längd acceptabel och programmet också relativt enkelt. Först kopieras kontolistan till en lokalt deklarerad lista, kontolistan töms och nödvändiga deklarationer görs. Därefter följer en while-loop. Två for-loopar har placerats inuti while-kroppen. I den första loopen jämförs kontonas namn i tur och ordning med första kontots namn. Slingan börjar alltså med andra kontot: for (++it; it!=lista.end(); it++) Om ++ placeras före it läggs ju först 1 till värdet på it, vilket gör att slingan startar med konto nummer 2. Då ett namn hittas, som är före min i bokstavsordning, läggs det in i variabeln min. Efter loopen innehåller min därför det namn, som är först i bokstavsordning. I den andra forloopen genomsöks listan och när det konto.namn hittas, vars värde tidigare placerades i min, läggs kontot in i den från början tomma kontolistan. Därefter raderas kontot från den kopierade listan innan while-kroppen genomlöps på nytt. Efter det finns nästa konto också i kontolista och är raderad från lista. Då funktionen empty() returnerar true bryts while-loopen. Då är sorteringen klar. Spara allt. Uppgift 5, Uppgift 6

10 4. Typerna stack och queue Vi har använt vector och list en hel del så här långt. Det är ganska komplicerade konstruktioner med många möjliga funktioner, även om vissa används sällan. Ibland finns behov av enklare strukturer. Därför har stack och queue skapats. Översättning av ordet stack till svenska blir naturligtvis stack och queue betyder kö på engelska. De här datastrukturerna beter sig, som man kan förvänta sig. När heltal läggs på en stack är det som att lägga något på hög: hö på en höstack, tallrikar på en tallriksstapel. Tar man en tallrik tar man den översta och när den har tagits från stapeln är nästa tallrik den översta. Allra sist tar man den understa tallriken och ska en tallrik läggas på högen av tallrikar läggs den överst, vilket medför att högen (stacken) växer igen. Det innebär att den tallrik som först lades på högen (stacken) kommer att tas bort sist av alla. För en stack gäller principen: först in sist ut. Också en kö, queue, fungerar som köer i praktiska livet. I en biografkö står personer, som expedieras en efter en i biljettluckan. Nya personer, som ställer sig i kö, för att köpa biljett måste ställa sig längst bak och på så sätt växer kön. Den som först ställde sig i kön kan också lämna kön först. För en kö gäller principen först in först ut. Både stackar och köer är vanliga i datavärlden. Då funktioner anropas placeras funktionskod på stacken i minnet. Det innebär att minnesadresserna där ökar ju mer kod funktionen innehåller. Det finns pekare, som vi kan kalla startpekare och exekveringspekare. Startpekaren visar var funktionen börjar och exekveringspekaren håller reda på vilken rad som står i tur att exekveras. När funktionen har exekverat färdig, flyttas exekveringspekaren ner till startpekaren igen. Koden på stacken används inte mer och det som lagrats där är inte åtkomligt från den anropande funktionen. Nästa gång funktionen anropas läggs koden på stacken igen. Finns parametervariabler i funktionsanropet placeras de också på stacken. Om vi tänker oss att funktionen anropas från main() kan inte main() känna till variabelvärden som lagrats på stacken. Har exempelvis en int-parameter fått ett värde på stacken känner inte main() till vilket värde det är. Men om funktionen är av returnerande typ överförs naturligtvis variabelns värde till main(). Genom att använda referensparametrar kan flera värden återföras. Då är det inte variablerna, som läggs på stacken, utan istället referenser till dem. En referens är som en instruktion, som talar om var variabeln finns. Referenserna kastas när funktionen returnerar, men på grund av referenserna har koden på stacken ändrat variabler i main() och de ändringarna är naturligtvis kvar i main(). Köer i datavärlden är också vanliga. När du använder datorn ger du kommandon med mus, tangentbord etc. Alla dessa kommandon utgör händelser som läggs på kö av operativsystemet för att sedan utföras i tur och ordning. Du kan exempelvis klicka i texten i ditt ordbehandlingsprogram, trycka en tangent, klicka i fönsterlisten och klicka på en knapp i verktygsfältet. Dessa händelser läggs in i en kö och utförs sedan i tur och ordning. Deklarationer av stack och queue liknar deklarationer av vector och list och allra först måste naturligtvis inkluderingar av stack och queue göras i programmet. Deklarationen stack<int> talserie deklarerar en stack med heltal, där heltal kan placeras på hög. Deklarationen queue<string> strlista deklarerar en kö av strängar av typ string. Liksom med vector och list växer stacken eller kön efter hand och man behöver inte veta eller ange hur många tal, strängar etc, som ska rymmas. Datastrukturen anpassar sig automatiskt efter antalet. Skapa ett nytt projekt så att vi kan bygga ett program, som använder stack och queue. Ge projektet namnet Ex04_06 och spara cpp-filen som Ex06. Lägg in koden på nästa sida i ccp-filen:

11 // Ex04_06. Program som visar skillnad på stack och kö #include <iostream> #include <stack> #include <conio+.h> // Behövs ju ej i Builder men använd ändå! using namespace std; #include svtecken.h int main() teckenbyt(); stack<int> talserie; int i; cout << \nstack\n\n ; for (i=0; i<10; i++) talserie.push(i); while (!talserie.empty()) cout << talserie.top() << ; talserie.pop(); cout << \n\ntalen \ poppas\ i omvänd ordning.\n\n\n ; cout << \n\n\n ; cout << Tryck tangent ; getch(); return 0; Headerfilen stack inkluderas och en stack stack<int> deklareras och ges namnet talserie. Först skrivs talen 0 9 till stacken med push(), där heltalet som ska läggas på stacken skrivs i parentesen. Sedan följer en while-loop som pågår tills funktionen empty() resulterar true. Det har vi använt med vector och list förut, så det känns igen. I while-kroppen skrivs stackens översta värde ut med hjälp av funktionen top(), som returnerar det översta värdet, som pushades dit senast. Det är endast detta värde, som kan läsas i en stack. En stack är alltså betydligt enklare att handha än vector och list. För att kunna skriva ut även de andra värdena i stacken måste stackens översta element först poppas med pop(). Det är som att poppa popcorn. Popcornen vill gärna flyga iväg. När element poppas i en stack är de därmed borta från stacken. Men då kan nästa värde läsas med top(). Detta sker tills stacken inte har några fler element. Kör programmet. Vi ska bygga ut programmet, som vi ofta gör, genom att lägga in kod också för en kö. Vi måste då först inkludera queue. Det gör vi efter stack: #include <queue> I Builder behövs inte conio+.h inkluderas men vi gör det här ändå, då vi vill påvisa en bugg där, nödvändig att känna till. Kompilera programmet genom att exempelvis försöka köra det. Kompilatorn rapporterar fel i winbase.h, som är en header-fil som inkluderas av windows.h, som i sin tur inkluderas i conio+.h. Det verkar alltså som om inte både queue och conio+.h kan inkluderas i Builder samtidigt. Om vi inte kan åtgärda detta, är det allvarligt eftersom KgData färghantering förutsätter inkludering av conio+.h. Varför det då så här? Det vet vi inte när den här boken skrivs. Men av en slump upptäckte vi hur det kan åtgärdas: inkludera fstream också (eller i istället för iostream).

12 Lägg in header-filen fstream så ska vi pröva igen: #include <fstream> Pröva att kompilera igen. Det går utmärkt, eller hur? Används KgDatas conio+.h måste också fstream inkluderas om queue ska användas. Används conio.h behövs däremot inte fstream. Då fungerar det ändå! Fortsätt med att lägga in följande kod: int x=wherex(), y=wherey(); cout << Tryck tangent ; getch(); queue<int> talserie_2; gotoxy(x,y); clreol(); cout << Kö\n\n ; for (i=0; i<10; i++) talserie_2.push(i); while (!talserie_2.empty()) cout << talserie_2.front() << ; talserie_2.pop(); cout << \n\ntalen \ poppas\ i den ordning de lades in. ; Koden är nästan lika den föregående. Skillnaden är att front() används istället för top() för att läsa element. Då läses det elements värde, som ligger främst i kön och är det element som matades in först. Man kan också läsa sista elementet i en kö, dvs det som matades in sist. Det görs med funktionen back(). Innan fler element kan läsas med front() måste främsta elementet poppas bort. Det är vad som sker här tills kön är tom. Som du ser kommer nu talen ut ur kön i den ordning de matades in. Spara. Uppgift 7 5. Ett program som använder stack Ibland är stack speciellt lämplig att använda. Det gäller ofta då ordningsföljd i något sammanhang ska kastas om. Ett exempel är instruktioner vid demontering / montering. Efter demontering kan ofta montering ske igen efter samma instruktioner bara de följs i omvänd ordning. Ett moderkortsbyte på en dator utförs genom att chassit tas bort, moderkortet lokaliseras, olika kablar lossas, processorn tas bort etc. Efter moderkortsbytet sätts datorn ihop igen efter samma instruktionerna men i motsatt ordning. Med en stack, där instruktionerna lagts in, är det lätt att vända dem så att instruktionerna kommer i omvänd ordning. Något liknande behöver göras i vårt programexempel här. Vi ska skriva ett program som kan avgöra om en textsträng är ett palindrom eller inte. Ett palindrom är en textsträng som är likadan fram- och baklänges. Exempelvis är kåk och anna exempel på korta palindrom. Då kan det vara lämpligt att använda en stack med vars hjälp vi enkelt kan vända på ordningsföljden hos bokstäverna i strängen. Om bokstäverna läggs in i en stack i följd tecken för tecken kan dessa sedan läsas i omvänd ordning. Programmet ska låta användaren mata in en sträng. Vid kontrollen av om strängen är ett

13 palindrom ska stora eller små bokstäver inte ha någon betydelse. Inte heller ska mellanslag göra någon skillnad. Exempelvis ska strängen Ni talar bra latin godkännas som palindrom. Nu till programexemplet! Skapa projektet Ex05_06 med cpp-filen Ex06. Lägg in följande kod i cpp-filen: // Ex05_06. Program som avgör om en sträng är ett palindrom eller inte #include <iostream> #include <string> // Behövs i Visual #include <stack> #include <conio.h> using namespace std; #include svtecken.h string bak_och_fram(string str); int main() teckenbyt(); stack<char> teckenstack; string str, str2; unsigned int i; cout << \nmata in en sträng (bryt med tomsträng): ; while (getline(cin,str) && str!= ) cout << endl << \' << str << \' är ; str2=bak_och_fram(str); for (i=0; i<str.size()/2; i++) if (str[i]!=str2[i]) break; if (i<str.size()/2) cout << inget palindrom ; else cout << ett palindrom ; cout << \n\nmata in en ny sträng (bryt med tomsträng): ; cout << \n\n ; cout << Tryck tangent ; getch(); return 0; string bak_och_fram(string str) stack<char> teckenstack; unsigned int j; for (j=0; j<str.size(); j++) teckenstack.push(str[j]); for (j=0; j<str.size(); j++) str[j]=teckenstack.top(); teckenstack.pop(); return str;

14 Kör programmet och testa olika ord. Om du använder blandat små och stora bokstäver eller mellanslag märker du att programmet inte klarar det ännu. Det intressanta händer i funktionen bak_och_fram() där ord som kommer in vänds. En stack deklareras och tecken efter tecken i ordet läggs på stacken med push(). Sedan läses tecknen med top() och poppas med pop(). Poppning är nödvändig för att kunna läsa nästa tecken. Observera att det är samma string-ord som används hela tiden och som returneras när vändningen är klar. Vi ska fortsätta programmet, så att även strängar med mellanslag och både små och stora bokstäver kan kontrolleras med framgång. Utöka programmet med funktionen ta_bort_och_byt_tecken(); med följande prototyp: void ta_bort_och_byt_tecken(string& str); och definition: void ta_bort_och_byt_tecken(string& str) string str2; for (unsigned int j=0; j<str.size(); j++) if (str[j]>64&&str[j]<96) str[j]=str[j]+32; else if (str[j]=='å') str[j]='å'; else if (str[j]=='ä') str[j]='ä'; else if (str[j]=='ö') str[j]='ö'; if (str[j]!=' ') str2=str2+str[j]; str=str2; Här läggs först 32 till ASCII-tecknet om tecknen är versaler. Då blir versalerna gemena tecken. Fast eftersom detta inte gäller för de svenska tecknen kontrolleras och ändras dessa separat. Tecknet läggs till den lokala variabeln str2 som på slutet tilldelas str. I main() läggs en rad till där anrop till ta_bort_och_byt() görs två gånger först med str och sedan med str2 som parameter: while (getline(cin,str) && str!= ) cout << endl << \' << str << \' är ; str2=bak_och_fram(str); ta_bort_och_byt_tecken(str); ta_bort_och_byt_tecken(str2); for (i=0; i<str.size(); i++) if (str[i]!=str2[i]) break; if (i<str.size()) cout << inget palindrom ; else cout << ett palindrom ; cout << \n\nmata in en ny sträng (bryt med tomsträng): ; Kör programmet och testa strängar som kanske är palindromer. Även strängar med de svenska tecknen kan nu kontrolleras. Uppgift 7

15 6. Ett program som använder queue Vi ska skriva ett program som implementerar en kö och simulerar en kö-situation. Vi väljer en telefonkö, som högst fungerar för 20 samtal. Den här begränsningen läggs in av praktiska skäl eftersom kön ska symboliseras med tal i fönstret och det inte finns plats att skriva ut fler samtal än 20, om det ska bli snyggt och enkelt. I Builder måste vi tänka på att också inkludera fstream, eftersom det behövs om conio+.h inkluderas. Men vi lägger alltså inte in fstream för att skriva eller läsa någon fil utan det beror på buggen som påtalades tidigare. Funktionerna meny(), som skriver menyn och läser menyval, samtal_in(), som låter ett samtal ställas i kön och skriv_ut(), som skriver ut telefonkön, är de funktioner som deklareras och implementeras i programmet. Lägg in projektet Ex06_06 med cpp-filen Ex06, där nedanstående kod läggs in: // Ex06_06. Program som simulerar en telefonkö #include <iostream> #include <queue> #include <conio+.h> using namespace std; #include svtecken.h #include egna_funktioner.h void meny(char& ch); void samtal_in(queue<int>& lista, int& samtalsnr); void skriv_ut(queue<int> lista); int main() teckenbyt(); queue<int> lista; char ch; int samtalsnr=1; gotoxy(20,24); cout << Telefonkön kan högst innehålla 20 samtal ; meny(ch); while (ch!='0') switch(ch) case '1': samtal_in(lista, samtalsnr); break; case '2': break; case '3': break; case '4': break; meny(ch); cout << \n\n ; return 0; void meny(char& ch) gotoxy(1,1); cout << \n Meny:\n\n 1. Nytt inkommande samtal\n\n

16 << 2. Expediera ett samtal\n\n 3. Skriv ut det samtal som är först << \n\n 4. Skriv ut det samtal som är sist\n\n 0. Avsluta ; cout << \n\n\n Ange alternativ genom att trycka siffra: ; ch=getch( ); void samtal_in(queue<int>& lista, int& samtalsnr) if (lista.size()<20) lista.push(samtalsnr); skriv_ut(lista); samtalsnr++; if (samtalsnr==100) samtalsnr=1; void skriv_ut(queue<int> lista) gotoxy(1,22); clreol(); int x=42+lista.size()*2; while (!lista.empty()) x-=4; gotoxy(x, 22); cout << lista.front(); lista.pop(); Kör programmet och använd menyalternativen. I funktionen samtal_in() ovan skrivs nya samtal in i kön med push() som vi kan förvänta oss. Det som skrivs i den här simuleringen är ett heltal, som börjar med 1 och högst kan bli 99. Därefter börjar numreringen om igen med 1 som du ser i koden. Förutsättningen för att samtal ska gå att lägga in i kön är att den inte är full, dvs att antalet tidigare samtal i kön inte är större än 19. Funktionen anropar skriv_ut() för att simuleringen av inlagt samtal ska skrivas ut. I funktionen skriv_ut() rensas först eventuell tidigare utskrift på rad 22 med clreol(), positionen för utskrift av första samtalet läggs in i variabeln x. Sedan skrivs telefonkön ut centrerat på skärmen med hjälp av gotoxy(). Utskriften av samtalsnumren skrivs åt vänster så att det samtal som ligger först i kön skrivs längst åt höger. Efter utskrift av element måste de poppas. Nu ska även funktionen samtal_ut() läggas in. Lägg in: prototypen: void samtal_ut(queue<int>& lista); och implementeringen: void samtal_ut(queue<int>& lista) if (!lista.empty()) lista.pop(); skriv_ut (lista);

17 Koden i samtal_ut() är enkel. Först poppas främsta elementet och sedan visas det med skriv_ut(). Lägg in aktivering av menyvalet i main(): case '2': samtal_ut(lista); break; Kör programmet och prova även att beta av samtal i listan. Även de två resterande menyalternativen ska implementeras genom funktioner som läggs in: Prototyper: void skriv_ut_forsta(queue<int> lista); void skriv_ut_sista(queue<int> lista); Definitioner: void skriv_ut_forsta(queue<int> lista) int x=38+lista.size()*2; gotoxy(2,18); cout << Först kön: << lista.front(); setcolor(lightgreen); gotoxy(x,22); cout << lista.front(); delay(1000); setcolor(lightgray); gotoxy(2,18); clreol(); void skriv_ut_sista(queue<int> lista) int x=42+lista.size()*2-lista.size()*4; gotoxy(2,18); cout << Sist i kön: << lista.back(); setcolor(yellow); gotoxy(x,22); cout << lista.back(); delay(1000); setcolor(lightgray); gotoxy(2,18); clreol(); Aktivera alternativen i menyn: case '3': skriv_ut_forsta(lista); break; case '4': skriv_ut_sista(lista); Kör programmet och pröva även de två nyinlagda alternativen. I funktionerna ovan, som är mycket lika, skrivs de nummer som ligger först respektive sist i kön ut. Först bestäms rätt x-koordinat och därefter skrivs text med nummer ut på rad 18. Texten raderas efter en kort stund. Dessutom färgas numret i kösimuleringen på rad 22. Det nummer som är först färgas grönt och det nummer som är sist färgas gult. Spara. Uppgift 8 7. Glosträningsprogram med stack och queue Låt oss avsluta kapitlet med ett program, som använder både stack och queue. Det är frestande att använda stack och queue i program eftersom det ofta är så enkelt. I det program vi ska bygga i det här avsnittet skulle kanske hellre vector eller list ha använts, men vi ska använda queue

18 och stack. Eftersom programmet ska ha vit bakgrund med svart textfärg men även lite grön och röd textfärg inkluderas conio+.h. Skapa projektet Ex07_06 med cpp-filen Ex06. Lägg in koden nedan i cpp-filen: // Ex07_06. Glosträningsprogram #include <iostream> #include <string> // Behövs i Visual #include <fstream> // Behövs i Builder för att köra programmet #include <stack> #include <queue> #include <conio+.h> using namespace std; #include svtecken.h #include egna_funktioner.h struct Ordpar string sv_ord; string en_ord; ; void mata_in(queue<ordpar>& ordlista); void skriv_ut(queue<ordpar> ordlista); int main() teckenbyt(); queue<ordpar> ordlista; srand(time(0)); setcolor(black, BACKGROUND_WHITE); clrscr(); mata_in(ordlista); cout << \n\nföljande svenska och engelska ord matades in:\n\n ; skriv_ut(ordlista); cout << \n\n ; cout << Tryck tangent ; getch(); return 0; void mata_in(queue<ordpar>& ordlista) Ordpar ordpar; cout << \n Mata in det svenska ordet: ; getline(cin, ordpar.sv_ord); while (ordpar.sv_ord!= ) cout << Mata in det engelska ordet: ; getline(cin, ordpar.en_ord); ordlista.push(ordpar); cout << \n Mata in det svenska ordet: ; getline(cin, ordpar.sv_ord); void skriv_ut(queue<ordpar> ordlista)

19 Ordpar ordpar; while (!ordlista.empty()) ordpar=ordlista.front(); ordlista.pop(); cout << ordpar.sv_ord << << ordpar.en_ord << endl; Kör programmet och mata in samhörande svenska och engelska ord. Det här programmet använder en kö av struct. Strukturen definieras i programmets början och heter Ordpar och består av string-variablerna sv_ord och en_ord. I början av main() deklareras en queue-variabel av Ordpar, ordlista, som ska innehålla de ordpar som matas in. I funktionen mata_in() matar användaren in ordparen som pushas in i kön. Funktionen skriv_ut() fungerar som tidigare skriv_ut-funktioner. Så länge ordlistkön inte är tom läses främsta ordparet med front() och skrivs ut. Efter att ordparet poppats bort med pop() kan nästa ordpar läsas och skrivas. Eftersom ingen referensparameter finns sker poppningen lokalt. Ordlistan är helt intakt i main(). Tanken inställer sig osökt, att det här programmet enkelt skulle kunna utvecklas till ett enkelt glosprogram. Man matar in samhörande ord på svenska och engelska och sparar dem i en fil. Det ordpar som är främst i kön läses, det svenska ordet skrivs ut och användaren ska då försöka översätta det. Svaret läses och rättas. Ordparet tas bort med pop() och nästa kan läsas. När kön är slut presenteras resultatet och om man vill ska man kunna göra om eller fortsätta med en ny övning. Men helst ska ordlistan förstås blandas först. Det är inte lätt att använda gängse metoder där element slumpas och sedan får byta plats, eftersom ingen indexering kan göras i en kö. Men en bra start skulle kunna vara att först byta ordningsföljd på ordparen i ordlista med hjälp av en stack, sedan använda slumpfunktionen rand() för att pusha ordparen antingen till en hjälpkö eller tillbaka in i ordlistan igen. Ordpar efter ordpar läggs alltså slumpvis in i hjälpkön eller ordlistan. Detta får pågå tills ordlistan är tom och alla ordpar har flyttats över till hjälpkön. Då borde ordparen i hjälpkön ha fått en sådan oordning att det i alla fall räcker för vårt ändamål. Avslutningsvis tilldelas hjälpkön till ordlista och vi kan kontrollera om det fungerat så bra, att funktionen verkligen kan ges namnet blanda(). Låt oss göra ett försök! Vi lägger in prototypen till funktionen: void blanda(queue<ordpar>& ordlista); Funktionen implementeras enligt nedan. Lägg in funktionen: void blanda(queue<ordpar>& lista) Ordpar ordpar; queue<ordpar> kopia; stack<ordpar> stk; while (!lista.empty()) stk.push(lista.front()); lista.pop(); while (!stk.empty()) lista.push(stk.top()); stk.pop(); while (!lista.empty()) ordpar=lista.front(); lista.pop(); if (rand()%2==0) lista.push(ordpar); else kopia.push(ordpar); lista=kopia;

20 Lägg in anrop till funktionen efter inmatningen i main():...kod som tidigare mata_in(ordlista); blanda(ordlista); cout << \nföljande svenska och engelska ord matades in:\n\n ; skriv_ut(ordlista); kod som tidigare... Kör programmet. I funktionen blanda() deklareras en lokal kö kopia och stack stk. Först läggs alla ordparen i ordlista på stacken stk och sedan tillbaka igen i ordlista. Det medför att ordningen i ordlista nu är den motsatta. Därefter följer en while-sats där ordparen antingen läggs in i kopia eller i ordlista igen. Detta pågår tills ordlista är tom. Satsen: ordlista = kopia; ordnar så att alla ordparen läggs tillbaka i ordlista igen - fast nu blandade förhoppningsvis! För att testa resultatet av blandningen kan exempelvis 10 ordpar matas in och en heltalsvektor med 10 element deklareras och nollställas. Därefter kan slumpningar göras och resultatet läggas in i vektorn. Om vektorn ges namnet slumptal läggs antalet gånger första elementet har slumpats först in i slumptal[0], antalet gånger andra elementet har slumpats först in i slumptal[1] osv. Efter slumpningarna skrivs elementen i slumptal ut och resultatet kan studeras på skärmen. Dessutom kan ordparen skrivas ut i följd ett antal gånger så, att man ser att ändring sker varje gång. Vi lämnar en kontroll enligt ovan till läsaren, men resultatet ger troligtvis som resultat att slumpningen i funktionen blanda() kan anses tillfredställande. Vi ger ett utkast till funktionen kor_ovning(), där översättningen ska göras. Lägg in prototypen: void kor_ovning(queue<ordpar> ordlista); och implementeringen: void kor_ovning(queue<ordpar> ordlista) Ordpar ordpar; string svar; int x, y, antal_ratt=0; clrscr(); while (!ordlista.empty()) ordpar=ordlista.front(); ordlista.pop(); cout << \n Översätt \' << ordpar.sv_ord << \' till engelska: ; x=wherex(); y=wherey(); getline(cin, svar); gotoxy(x+svar.size()+2,y); if (svar==ordpar.en_ord) setcolor(green, BACKGROUND_WHITE); cout << Rätt ; antal_ratt++; else setcolor(lightred, BACKGROUND_WHITE); cout << Fel. Rätt ord: << ordpar.en_ord; setcolor(black, BACKGROUND_WHITE);

21 Komplettera med anrop av kor_ovning() i main(). Lägg in kod enligt följande: int main() teckenbyt(); queue<ordpar> ordlista; srand(time(0)); setcolor(black, BACKGROUND_WHITE); clrscr(); mata_in(ordlista); blanda(ordlista); kor_ovning(ordlista); cout << \n\n ; cout << Tryck tangent ; getch(); return 0; Kör programmet och testa det. I kor_ovning() används en while-slinga tills ordlista är tom. I varje varv poppas nämligen det främsta ordet. Före getline() används funktionerna wherex() och wherey() för att lagra inmatningspositionen. Sedan bestäms utskriftspositionen med gotoxy() så att Rätt eller Fel skrivs på samma rad som inmatningen skett på och i rätt position. Före utskriften sätts textfärg och bakgrundsfärg med den överlagrade setcolor() från kapitel 5 och efter utskriften sätts textfärgen tillbaka till svart igen. Bilden nedan visar körning av programmet. Här ses hur programmet ser ut då KgDatas setcolor() med både textfärg och bakgrundsfärg används. Uppgift 9, Uppgift 10

22 Nedan har de få funktioner som finns i stack och queue samlats i en tabell: Funktionens namn Gör följande Finns i size() Returnerar längden stack, queue push(element) Lägger till element stack, queue top() Läser element som är överst på stacken stack front() Läser element som är först i kön queue back() Läser element som är sist i kön queue empty() Returnerar true om inga element finns stack, queue = Tilldelar en hel stack eller kö stack, queue ==!= <= > >= Används för jämförelse stack, queue Sammanfattning av kapitel 6: Vi har: testat funktioner till list i ett program jämfört list med vector använt skrivit ett funktionsuppbyggt program där struct använts i en lista sorterat lista med struct diskuterat stack och kö och givit exempel på användning skrivit program med stack och queue använt queue i program för att vända på en ordningsföljd simulerat en kö i ett program använt stack och queue för att skriva början till ett glosträningsprogram sammanfattat funktioner i vector och list och i stack och queue

23 Uppgifter: 1. Skriv ett program, som deklarerar en list av int, och där ett antal sådana läggs in i listan. Utskrift av listan ska ske. Därefter ska ytterligare tre tal läggas till listan: ett i början, ett i slutet och ett på en plats mitt i listan. Ny utskrift av talen ska ske. 2. Skriv ett program där string-strängar ska matas in till en lista. När inmatningen är klar ska listan sorteras i fallande ordning. Sortering av svenska tecknen behöver inte fungera. Efter sortering ska listan skrivas ut. 3. Skriv funktioner så att alternativen 3 och 5, Radera konto och Radera alla konton, fungerar i Ex02_ En funktion, som saknas i Ex02_06, är void infoga(list<konto>& kontolista). Den behövs för att menyalternativ 4 ska fungera. Skriv funktionen och se till att den fungerar i programmet. 5. Sorteringen i Ex03_06 fungerar inte för de speciella svenska tecknen. Ändra funktionen sortera() så att sorteringen även fungerar på svenska. Det kan exempelvis göras genom att tecknen i strängar före jämförelser byts enligt följande: å, ä och ö byts mot tecken 123, 124 och 125 och tecken Å, Ä och Ö mot tecknen 91, 92 och 93. Byte tillbaka måste naturligtvis också göras där det behövs. Liknande byte av tecken har tidigare gjorts i Uppgift 6 i Kapitel Komplettera programmet Ex03_06 så att även menyalternativ 7 fungerar. Sökning på ett namn ska ge utskrift av den personens konto. 7. Då Olle från Västerås skulle göra en Göteborgsresa, beställde han hotellrum på Internet. Han kunde då skriva ut en vägbeskrivning för bil, som till hans förtjusning tog hand om alla problem med att hitta till Göteborg och till hotellet. Så här stod det: 1. Kör Vasagatan ungefär 2 km 2. Ta av vid Rocklundamotet 3. Kör E18 ungefär 10 mil 4. Ta av i Örebro 5. Kör E20 ungefär 25 mil 6. Ta av vid Källtorpsmotet 7. Kör Härlandagatan 200 m Skriv ett program, som vänder på vägbeskrivningen. Den ska Olle kunna använda för hemfärden. Använd en stack. 8. Använd filen med text om Pippi Långstrump, som användes första gången i uppgift 5 i Kap 3. Texten har lagts in på nytt på nästa sida. Skriv ett program som läser filen och lagrar de ord i texten som har en viss längd eller är längre. Programmet ska läsa filen och lagra orden i en kövariabel efter att först ha frågat efter hur långa orden minst ska vara. Orden ska skrivas ut först då lagringen är klar. Gör programmet upprepningsbart.

24 Efter honom kom Pippi. Hon bar hästen. Då gick det ett sus genom alla kurrekurredutterna. Visserligen hade de hört talas om Pippi och hennes kolossala styrka, men det var någonting helt annat att se det i verkligheten. Tommy och Annika traskade beskedligt i land de också, och det gjorde hela besättningen med, men just då hade kurrekurredutterna inte ögon för någon annan än Pippi. Kapten Långstrump lyfte upp henne och ställde henne på sina axlar, för att de riktigt skulle kunna se henne, och då gick det om igen ett sus genom folkhopen. Men strax efteråt lyfte Pippi upp kapten Långstrump på sin ena axel och hästen på den andra, och då steg suset nästan till en orkan. Hela Kurrekurreduttöns befolkning uppgick inte till mer än 126 människor. "Det är ungefär lagom många undersåtar att ha", sa kung Efraim. "Fler kan man inte hålla reda på." Allihop bodde i små hemtrevliga hyddor bland palmerna. Den största och finaste hyddan tillhörde kung Efraim. Besättningsmännen på 'Hoppetossa' låg för ankar i den lilla viken. Det gjorde hon förresten nästan jämt numera. Bara ibland blev det nödvändigt med en expedition till en ö 50 mil norrut. Där fanns nämligen en affär, i vilken man kunde köpa snus åt kapten Långstrump En mycket fin, nybyggd liten hydda under en kokospalm var avsedd för Pippi. Tommy och Annika fick god plats där också. Men innan de fick gå in i hyddan och tvätta resdammet av sig, ville kapten Långstrump visa dem en sak. Han grep Pippi i armen och förde henne ner till stranden igen 9. Förbättra Ex07_06 så att programmet blir mer användarvänligt. Lägg in meny och filfunktioner för läsning och skrivning av ordlistor. En pågående övning ska kunna avbrytas eller köras på nytt om användaren så vill. Möjlighet att träna på de ord man inte klarat av ska finnas då en övning är slut. Det ska även vara möjligt att välja olika ordlistor. 10. Per och Lisa vill bjuda sina vänner på ett party med bjudningskort och allt. De ber dig, som kan programmera, att skriva ett program där de ska kunna mata in varsin lista med namn på personer de vill bjuda. Programmet ska slå samman listorna och skriva ut namnet på de personer som ska bjudas. Listan, som ska vara sorterad efter förnamn, ska kunna användas för att skriva ut inbjudningskort och bör därför inte innehålla samma person mer än en gång. Det händer annars lätt eftersom de har en del gemensamma vänner. Det finns två användbara funktioner som du kan använda: merge(), som sätter samman den lista som anropar funktionen med listan i parentesen. Ex: lista_1.merge(lista_2); sätter ihop lista_1 med lista_2, som töms. unique(), som tar bort dubbletter ur den lista som anropar funktionen, som är av typ void. Ex: lista_1.unique(); tar bort dubbletter från lista_1. Observera att om funktionerna endast fungerar med sorterade listor. Gör programmet i första hand så att det fungerar utan svenska tecken. I andra hand ordnar du dessutom sortering efter svenska tecken.

Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret 2014-2015. Lektion 3

Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret 2014-2015. Lektion 3 Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret 014-015 Lektion 3 Denna lektion är temat hur man effektivt ska organisera den data som en algoritm använder för att åtkomsten till datan

Läs mer

Skizz till en enkel databas

Skizz till en enkel databas Skizz till en enkel databas Data: Register En vektor Funktioner: Databas Initiera huvudloop Avsluta Poster (struct( struct) val Mata in Skriv ut Spara Hämta Ändra Radera Enligt diskussion 1999-11-23 Bertil

Läs mer

Att använda pekare i. C-kod

Att använda pekare i. C-kod Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta

Läs mer

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110.

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Denna tenta kommer att vara färdigrättad On 14/1-04 och kan då hämtas på mitt

Läs mer

4 Sammansatta datatyper

4 Sammansatta datatyper 4 Sammansatta datatyper De enkla datatyper som vi hittills använt är otillräckliga när man ska hantera stora datamängder. Vill man exempelvis läsa in 100 reella mätvärden, som man tillfälligt vill spara

Läs mer

C++ Lektion Tecken och teckenfält

C++ Lektion Tecken och teckenfält C++ Lektion Tecken och teckenfält Teori Hittills har alla variabler du jobbat med varit olika typer av tal, men du kan också deklarera variabler som håller bokstavstecken. Denna variabeltyp kallas för

Läs mer

Övningar Dag 2 En första klass

Övningar Dag 2 En första klass Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt

Läs mer

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010 Föreläsning 6 Kapitel 5 5.1 switch-satsen Vi ser på ett par exempel ur boken: int a; srand(time(0)); a=rand()%6+1; if(a==1) printf("hej Du glade\n"); else if(a==2) printf("god dag\n"); else if(a==3) printf("är

Läs mer

TDIU01 (725G67) - Programmering i C++, grundkurs

TDIU01 (725G67) - Programmering i C++, grundkurs . TDIU01 (725G67) - Programmering i C++, grundkurs Program, datatyper och IO Eric Elfving Institutionen för datavetenskap 7 oktober 2015 Översikt 2/14 Struktur på ett C++-program Köra ett program Variabler

Läs mer

E-post för nybörjare

E-post för nybörjare E-post för nybörjare Innehåll: Inledning 1 E-post 2 Att skapa ett e-postkonto 3 Skicka och ta emot e-post 5 Övningar 7 Söderköpings stadsbibliotek sep. 2012 2 Inledning Välkommen till Nyfiken på nätet

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 20 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 20 Internminne

Läs mer

C++ Slumptalsfunktioner + switch-satsen

C++ Slumptalsfunktioner + switch-satsen C++ Slumptalsfunktioner + switch-satsen Veckans avsnitt består av ett antal lite udda funktioner man kan ha nytta av när man skriver program. Det är en slumptalsgenerator och lite annat smått och gott.

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga

Läs mer

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen C++ Funktioner 1 Teori När programmen blir större och mer komplicerade är det bra att kunna dela upp programmet i olika delar som gör specifika saker, vilket kan göra programmet mer lättläst. Ett sätt

Läs mer

Föreläsning 3.1: Datastrukturer, en översikt

Föreläsning 3.1: Datastrukturer, en översikt Föreläsning.: Datastrukturer, en översikt Hittills har vi i kursen lagt mycket fokus på algoritmiskt tänkande. Vi har inte egentligen ägna så mycket uppmärksamhet åt det andra som datorprogram också består,

Läs mer

Kap 4: Mer om char och stränghantering

Kap 4: Mer om char och stränghantering Kap 4: Mer om char och stränghantering Vi fortsätter med teckenvariabler, char, och skapar ett program, som skriver ut ASCII-tabellen. Sedan gör vi ett program, som skriver ut en char på slumpvis plats

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Underprogram - Funktioner Eric Elfving Institutionen för datavetenskap 18 september 2014 Översikt 2/22 Återblick till satsblocken Funktioner - Namngivna satsblock

Läs mer

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet.

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet. 2. Komma igång Skapa grupper och elever Börja med att läsa texten nedan om hur man börjar jobba med programmet efter installationen. Skriv gärna ut sidan och ha bredvid dig tills du känner att du behärskar

Läs mer

Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar

Läs mer

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) Grundläggande programmering med C# Provmoment: Ladokkod: Tentamen ges för: 7,5 högskolepoäng TEN1 NGC011 Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) (Ifylles av student) (Ifylles av student)

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I 2001-01-20

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I 2001-01-20 LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I 2001-01-20 Betygsgränser: 3 16 poäng 4 23 poäng 5 30 poäng Maxpoäng: 36 poäng Hjälpmedel: inga Lycka till Per Ekeroot Uppgift 1 Kortfrågor

Läs mer

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4 Modul 2 Byggstenar PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4 Byggstenar 4 Nyckelord 4 Tecken 4 Syntax 5 Standardbibliotek 5 Vårt första program 5 Variabler 6 Konstanter 9 Operatorer 9 Övningar 9 Mer operatorer

Läs mer

PROGRAMMERING A VC# 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL C#

PROGRAMMERING A VC# 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL C# PROGRAMMERING A VC# 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL C# Vi gör ett enkelt glosförhör Allt det du gör idag ska ligga i samma projekt (och mapp). Du kan om du tycker det behövs använda flera forms

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser Föreläsning 1 Innehåll Introduktion till objektorientering OOP (objektorienterad programmering) Objekt, instanser, klasser C++ OO i C++ Standardbibliotek Utökningar från C (syntaktiskt socker) Introduktion

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 21 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 21 Internminne

Läs mer

19. Skriva ut statistik

19. Skriva ut statistik 19. Skiva ut statistik version 2006-05-10 19.1 19. Skriva ut statistik Den här dokumentationen beskriver hur man skriver ut statistik från SPFs medlemsregister via Internet. Observera att bilderna är exempel

Läs mer

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...

Läs mer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i

Läs mer

Objektorienterad programmering D2

Objektorienterad programmering D2 Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste

Läs mer

Introduktion till arv

Introduktion till arv Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering

Läs mer

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet 1 Texthantering I detta avsnitt tas det upp två sätt att arbeta med text i C++ program. Det första sättet som behandlas är hanteringen av textfält. Texter i C++ består utav en serie med enstaka tecken

Läs mer

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1, 040607.

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1, 040607. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Denna tenta kommer att vara färdigrättad On 9/6 och kan då hämtas på mitt tjänsterum,

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public

Läs mer

Tentamen på kursen DA7351, Programmering 1. 051102, kl 08.15-12.15. Malmö högskola Teknik och samhälle. DA7351, Programmering 1 1 051102

Tentamen på kursen DA7351, Programmering 1. 051102, kl 08.15-12.15. Malmö högskola Teknik och samhälle. DA7351, Programmering 1 1 051102 Tentamen på kursen DA7351, Programmering 1 051102, kl 08.15-12.15 Tillåtna hjälpmedel: Valfri bok om Java. Vid bedömning av lösningarna tas hänsyn till om dessa uppfyller de krav på programkvalitet (strukturering,

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Grundläggande satser och uttryck Eric Elfving Institutionen för datavetenskap 5 augusti 2014 Översikt Uttryck Litteraler Operatorer Satser Villkor Upprepning Teckenhantering

Läs mer

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom: 6 Rekursion 6.1 Rekursionens fyra principer Problem löses genom: 1. förenkling med hjälp av "sig själv". 2. att varje rekursionssteg löser ett identiskt men mindre problem. 3. att det finns ett speciellt

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Strömmar, externa filer och kommandoradsargument Eric Elfving Institutionen för datavetenskap 7 oktober 2015 Översikt 2/32 Strömmar Kommandoradsargument Jämförelseoperatorer

Läs mer

Grundläggande programmering med C# 7,5 högskolepoäng

Grundläggande programmering med C# 7,5 högskolepoäng Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)

Läs mer

1 Funktioner och procedurell abstraktion

1 Funktioner och procedurell abstraktion 1 Funktioner och procedurell abstraktion Det som gör programkonstruktion hanterlig och övergripbar och överhuvudtaget genomförbar är möjligheten att dela upp program i olika avsnitt, i underprogram. Vår

Läs mer

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap TDP004 Minne och pekare Eric Elfving Institutionen för datavetenskap 1 / 23 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 23 Internminne - RAM Datorns internminne (RAM,

Läs mer

C++ - En introduktion

C++ - En introduktion C++ - En introduktion De imperativa grunderna för dig som kan programmera Eric Elfving Institutionen för datavetenskap 1 / 72 Översikt 1 Grunderna 2 Uttryck och satser 3 Funktioner 4 Poster 1 Grunderna

Läs mer

Textsträngar från/till skärm eller fil

Textsträngar från/till skärm eller fil Textsträngar från/till skärm eller fil Textsträngar [Kapitel 8.1] In- och utmatning till skärm [Kapitel 8.2] Rekursion Gränssnitt Felhantering In- och utmatning till fil Histogram 2010-10-25 Datorlära,

Läs mer

SMD 134 Objektorienterad programmering

SMD 134 Objektorienterad programmering SMD 134 Objektorienterad programmering Dagens agenda: Typer i Java: primitiva datatyperna, referenstyper Variabler och variabeltilldelningar med primitiva typer Konstanter av de olika typerna. Heltalsräkning

Läs mer

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm. Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs . TDIU01 - Programmering i C++, grundkurs Datalagring - poster och vektorer Eric Elfving Institutionen för datavetenskap 7 oktober 2015 Poster 2/17 struct Book string title; string author; int pages; ;

Läs mer

TAIU07 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med Matlab TAIU07 Matematiska beräkningar med Matlab Datorlektion 2. Villkor och Repetition 1 Logiska uttryck Uppgift 1.1 Låt a=3 och b=6 Vad blir resultatet av testerna ab? Uppgift 1.2 Låt a, b,

Läs mer

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= Nils; // längd = 5 bytes Tecken EDAF30 Programmering i C++ 2. Tecken och texter char char ch = A ; Sven Gestegård Robertz Datavetenskap, LTH 2015 sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char c1, c2; c1 = A ; c2

Läs mer

Chapter 3: Using Classes and Objects

Chapter 3: Using Classes and Objects Chapter 3: Using Classes and Objects I dessa uppgifter kommer du att lära dig om hur man använder klasser och metoder från java biblioteket. Du kommer inte att förstå allt som händer bakom metod anrop

Läs mer

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Innehållsförteckning. Exempel. Åtkomst & användarhandledning Framsidan Framsidan på din labrapport kan du utforma ganska fritt. Tänk bara på att den ska vara läsbar, och innehålla (minst) följande information: Ditt namn Din e-mail adress här på CS! Kursens namn

Läs mer

LÄSLANDET - BOKSTÄVER OCH ORD

LÄSLANDET - BOKSTÄVER OCH ORD LÄSLANDET - BOKSTÄVER OCH ORD Programmet består av 21 övningar som övar förmågan att känna igen bokstäver och ord. Här tränas såväl läsning som stavning och bokstavsordning. Du får hela tiden stöd av inspelat

Läs mer

Övningar i JavaScript del 2

Övningar i JavaScript del 2 Övningar i JavaScript del 2 Genm dessa övningar frtsätter intrduktinen av JavaScript. Vi tar nu upp if-satser ch lite mer m funktiner. Vi kmmer ckså in på tillämpningar sm att byta en bild på webbsidan

Läs mer

E-POST3 Ett lättanvänt e-postprogram med stöd för talsyntes

E-POST3 Ett lättanvänt e-postprogram med stöd för talsyntes E-POST3 Ett lättanvänt e-postprogram med stöd för talsyntes Sida 2 av 2 Innehållsförteckning INNEHÅLLSFÖRTECKNING...3 REKOMMENDERAD UTRUSTNING...5 INSTALLATION...5 ANVÄNDARLÄGE I E-POST3...6 STARTSIDA...7

Läs mer

5 Grundläggande in- och utmatning

5 Grundläggande in- och utmatning 5 Grundläggande in- och utmatning För att användaren skall kunna kommunicera med programmet krävs att man inkluderar ett eller flera bibliotek med rutiner. I Ada finns det ett antal paket som gör detta

Läs mer

Björn Abelli Programmeringens grunder med exempel i C#

Björn Abelli Programmeringens grunder med exempel i C# Björn Abelli Programmeringens grunder med exempel i C# Övningshäfte (bearbetning pågår) Senaste uppdatering: 2004-12-12 I denna version finns övningar för de mest centrala avsnitten. Häftet kommer att

Läs mer

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

Läs mer

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012 1 of 6 Örebro universitet Akademin för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Tentamen i Programmering C, Fri, Kväll, 041211.

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Tentamen i Programmering C, Fri, Kväll, 041211. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Denna tenta kommer att vara färdigrättad Ti 14/12 och kan då hämtas på mitt tjänsterum,

Läs mer

RödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: 40-120 minuter beroende på variant Material: TI-82/83/84 samt tärningar

RödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: 40-120 minuter beroende på variant Material: TI-82/83/84 samt tärningar Aktivitetsbeskrivning Denna aktivitet är utformat som ett spel som spelas av en grupp elever. En elev i taget agerar Gömmare och de andra är Gissare. Den som är gömmare lagrar (gömmer) tal i några av räknarens

Läs mer

Kapitel 15: Data/Matrix Editor

Kapitel 15: Data/Matrix Editor Kapitel 15: Data/Matrix Editor 15 Översikt över Data/Matrix Editor... 226 Översikt över list-, data- och matrisvariabler... 227 Starta en Data/Matrix Editor-session... 229 Mata in och visa cellvärden...

Läs mer

TDIU01 - Datortenta (DAT2)

TDIU01 - Datortenta (DAT2) TDIU01 - Datortenta (DAT2) 2013-03-25 Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan

Läs mer

Läs detta innan du fortsätter, eller skriv ut det, klicka runt lite och läs samtidigt.

Läs detta innan du fortsätter, eller skriv ut det, klicka runt lite och läs samtidigt. Bruksanvisning Installera CubeBiz... 2 Välj språk... 2 När du vill köra testversionen i 15 dagar... 3 När du köper en CubeBiz-licens... 3 Registrera en giltig licensnyckel... 3 Starta ett nytt projekt...

Läs mer

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Tentaupplägg denna gång

Tentaupplägg denna gång Några tips på vägen kanske kan vara bra. Tentaupplägg denna gång TIPS 1: Läs igenom ALLA uppgifterna och välj den du känner att det är den lättaste först. Det kan gärna ta 10-20 minuter. Försök skriva

Läs mer

Datorsystem Laboration 2: Minnesmappade bussar

Datorsystem Laboration 2: Minnesmappade bussar Datorsystem Laboration 2: Minnesmappade bussar Senast uppdaterad: 14 oktober 2012 Version 1.2 Student: Lärare: Underskrift: Underskrift: Datum: Datorsystem Laboration 2 1 Innehåll 1 Inledning 2 1.1 Introduktion..................................

Läs mer

Får jag be om ordet!

Får jag be om ordet! Får jag be om ordet! Får jag be om ordet är ett datorprogram för läs- och skrivutveckling, utvecklat av logoped Bitte Rydeman. Det innehåller åtta olika delprogram, där man på olika sätt arbetar med ordbilder,

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer C++ - en introduktion Eric Elfving Institutionen för datavetenskap 1 / 72 Översikt 1 Grunderna 2 Uttryck och satser 3 Funktioner 4 Poster 1 Grunderna Ett första

Läs mer

Föreläsningsanteckningar 3. Mikroprogrammering II

Föreläsningsanteckningar 3. Mikroprogrammering II Föreläsningsanteckningar 3. Mikroprogrammering II Olle Seger 2012 Anders Nilsson 2016 1 Inledning Datorn, som vi byggde i förra föreläsningen, har en stor brist. Den saknar I/O. I denna föreläsning kompletterar

Läs mer

Föreläsning 13 och 14: Binära träd

Föreläsning 13 och 14: Binära träd Föreläsning 13 och 14: Binära träd o Binärträd och allmänna träd o Rekursiva tankar för binärträd o Binära sökträd Binärträd och allmänna träd Stack och kö är två viktiga datastrukturer man kan bygga av

Läs mer

Enkla datatyper minne

Enkla datatyper minne Enkla datatyper minne 143.56 sant Sonja A falskt 18 1999-10-29 Bertil Gralvik, KTH Ingenjörsskolan 1 Addera två tal Algoritmen Summera tal Mata in två tal Beräkna Skriv ut resultat Mata in tal 1 Mata in

Läs mer

Digital Display VDS / Bus2

Digital Display VDS / Bus2 3-7449 Digital Display & 3-7447 Digital Knappsats (ref.99622) Se hemsida / support för senaste manualerna. http://www.axema.se/ Ver. 1.2 axema Sida 1 Ändra språk till Svenska. Tryck 0 och efter det ange

Läs mer

Datorövningar. Grunderna i C/C++

Datorövningar. Grunderna i C/C++ Datorövningar Grunderna i C/C++ övning 1 Innehåll: Editering, kompilering, länkning och exekvering av C++-program. Något om funktioner/procedurer. 1. Ett program är ett antal rader text som beskriver lösningen

Läs mer

B = Bokad tid. T = Tillfälligt bokad tid. L = Ledig tid. X = Spärrad tid

B = Bokad tid. T = Tillfälligt bokad tid. L = Ledig tid. X = Spärrad tid 3 Elev När eleven har loggat in får eleven upp denna bild, ett schema över sin lärares körtider och en gul meny som visas högst upp. Här nedan, under funktionsbeskrivning, kommer alla funktioner som eleven

Läs mer

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19 Programmering i C++ EDA623 Strömmar och filer EDA623 (Föreläsning 9) HT 2013 1 / 19 Strömmar och filer Innehåll Klassen ios Läsning av strömmar Utskrift av strömmar Koppling av filer till strömmar Direktaccess

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

Referens till. WeavePoint 6 Mini

Referens till. WeavePoint 6 Mini Referens till WeavePoint 6 Mini Arkiv Öppna Välj Arkiv Öppna eller klicka på snabbknappen Öppna för att komma till dialogrutan Öppna. Du kan öppna ett av de senaste mönstren du arbetat med genom att klicka

Läs mer

Redovisning av inlämningsuppgifter

Redovisning av inlämningsuppgifter Bilaga B Redovisning av inlämningsuppgifter 1 Rapportens innehåll Varje inlämningsuppgift ska redovisas med en skriftlig rapport. Rapporten ska vara häftad och försedd med ett försättsblad med uppgiftens

Läs mer

Rolladministration i PaletteArena 5.3

Rolladministration i PaletteArena 5.3 SLU Rolladministration i PaletteArena 5.3 Jenny Kjellström 2012-03-16 Beskriver hur man lägger upp och inaktiverar en mottagare, hur man flyttar/styr om fakturor från/till andras inkorgar samt hur man

Läs mer

16 Programmering TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5

16 Programmering TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5 16 Programmering Skriva program till TI-86... 214 Köra program... 221 Arbeta med program... 223 Hämta och köra assemblerprogram... 226 Arbeta med strängar... 227 TI -86 M1 M2 M3 M4 M5 F1 F2 F3 F4 F5 214

Läs mer

Projektarbete 2: Interaktiv prototyp

Projektarbete 2: Interaktiv prototyp Projektarbete 2: Interaktiv prototyp Jonatan Hilmarch (Grupp 13) 880427-5595 hilmarch@skip.chalmers.se Kurs: Människa-Datorinteraktion TIG061 HT 2010 Projekt 1 - en tillbakablick Enligt projektets systemdefinition

Läs mer

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13. 1(9) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13. Denna tenta kommer att vara färdigrättad Fr 28/1 och kan då hämtas på

Läs mer

Användarmanual flexconnect.se Administratör

Användarmanual flexconnect.se Administratör Användarmanual flexconnect.se Administratör Innehållsförteckning 1 HJÄLP TILL TDC MOBILFLEX CONNECT (ADMINISTRATÖR)... 3 2 TELEFONBOK... 3 3 FÖRETAGSINFORMATION... 4 4 LÄGGA TILL EXTRA FÄLT TILL PROFILER...

Läs mer

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)

Läs mer

Programmering Grundkurs (6H2950) Grundläggande Programmering (6A2001)

Programmering Grundkurs (6H2950) Grundläggande Programmering (6A2001) Programmering Grundkurs (6H2950) Grundläggande Programmering (6A2001) Skrivtid: 8:15-13:15 Datum: Måndagen 2005-03-07 Tentamen består av 7 sidor Hjälpmedel: Förutom dator med installerad Borland C++ 5.02,

Läs mer

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I 2002-03-18 Betygsgränser: 3 14 poäng 4 20 poäng 5 27 poäng Maxpoäng: Hjälpmedel: 32 poäng Bilagd ASCII-tabell Lycka till Per Ekeroot

Läs mer

Färgklövern. Färgklövern är gjord 1998 i samarbete mellan Datateket i Linköping och Hargdata AB i Linköping.

Färgklövern. Färgklövern är gjord 1998 i samarbete mellan Datateket i Linköping och Hargdata AB i Linköping. Färgklövern I Färgklövern kan du leka med färger, på lite olika sätt i de olika delprogrammen. Bestäm själv vilka och hur många färger du vill färglägga med. Alla dina målade bilder kan även skrivas ut

Läs mer

Konfigurera Xenta från Point

Konfigurera Xenta från Point Konfigurera Xenta från Point Nedan följer en instruktion hur du konfigurerar din nya Xenta terminal från Point med JobOffice Kassa. Om du känner dig osäker på det här, kontakta någon lokal data- och nätverkstekniker.

Läs mer

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION Föreläsning 1 & 2 INTRODUKTION Denna föreläsning Vad händer under kursen? praktisk information Kursens mål vad är programmering? Skriva små program i programspråket Java Skriva program som använder färdiga

Läs mer

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa Lena Kallin Westin 2005-08-22 Institutionen för datavetenskap Umeå universitet TENTAMEN Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa Inlämnad Poäng Kurs : Programmeringsteknisk

Läs mer

Med CW DoorDesign registreras all beslagning på dörren. För att hantera låsning och låsning mot dörr se manualen för CW KeyDesign.

Med CW DoorDesign registreras all beslagning på dörren. För att hantera låsning och låsning mot dörr se manualen för CW KeyDesign. CW Door Design Med CW DoorDesign registreras all beslagning på dörren. För att hantera låsning och låsning mot dörr se manualen för CW KeyDesign. Programdelar CW DoorDesign innehåller två delar: Låssystem

Läs mer

En kort text om programmering i C.

En kort text om programmering i C. En kort text om programmering i C C skapades 1972 av Brian Ritchie och Dennis Kerighan på Bell Labs i USA Det blev det språk som är mest använt genom tiderna Det finns många olika språk Pascal, FORTH,

Läs mer

Administration - Skapa och administrera användare. Din roll som administratör 1. Meny och huvudfunktioner 2-4. Skapa en användare...

Administration - Skapa och administrera användare. Din roll som administratör 1. Meny och huvudfunktioner 2-4. Skapa en användare... myschenker.se Administration - Skapa och administrera användare Din roll som administratör 1 Meny och huvudfunktioner 2-4 Skapa en användare.... 5-8 Lägga till/ta bort kundnummer och e-tjänster för användare..

Läs mer

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 - Inbyggda system - Analog till digital signal - Utvecklingssystem, målsystem - Labutrustningen - Uppbyggnad av mikrokontroller - Masinkod, assemblerkod

Läs mer

Flexibel meny i Studentportalen

Flexibel meny i Studentportalen Guide Flexibel meny i Studentportalen Via en flexibel meny kan lärare och administratörer skapa en menystruktur som består av menyblock och funktioner i valfri ordning. På så sätt kan menyn spegla kursens

Läs mer