Mittuniversitetet Institutionen för informationsteknologi och medier Nayeb Maleki 148853 Tentamen Introduktion till programmering i C++ Dag: Tid: 2007-04-21 5 timmar - Inga hjälpmedel Skriv tydligt ! Börja varje uppgift som kräver kod på nytt blad och skriv bara på ena sidan av papperet ! Numrera varje blad och ange kodnummer! - Tentamen omfattar 50 poäng För Godkänd krävs 25 poäng För Väl Godkänd krävs 38 poäng Lycka till !!!!! 1. (5p) Vad blir utskriften av följande program #include <iostream> using namespace std; // Returnerar det tecken som är pos steg ifrån symbol char nastaTecken(char symbol, int pos); int main() { int positioner[5] = {2,-15,9,6,-19}; char tecken = 'R'; int i; for( i = 0 ; i < 5 ; i++) { tecken = nastaTecken(tecken,positioner[i]); cout << tecken; } cout << endl; return 0; } char nastaTecken(char symbol, int pos) { return symbol + pos; } Till din hjälp finns ett utdrag ur ascii-tabellen 2 2. (7p) Skriv ett program som låter användaren skriva in namnet på en text fil. Programmet skall skriva ut filens innehåll samt hur många rader den innehåller. 3. (8p) Omvandla nedanstående if-else satser till en switch-sats if (1 <= dag && dag <= 7) { if (dag== 1 || dag == 7) cout << "veckslut"; else cout << "veckodag"; } else cout << "Inmatningen var inte gilltig"; 4. (4p) Rita ett enkelt flödesdiagram som beskriver följande programflöde: Användaren skall uppmanas att skriva in siffran 1 för ”Stor kopp kaffe”eller siffran 2 för ”Liten kopp kaffe”, därefter ska programmet ta emot valet. Därefter skall användaren uppmanans att välja 1 för ”Mörkrostat kaffe” och 2 för ”Mellanrostat kaffe”, och användarens val tas emot. Om en felaktig siffra matas in på någon fråga skall användaren få en felutskrift ”Du har matat in ett felaktigt val, försök igen”, varefter personen får mata in en siffra igen (detta skall pågå tills giltig siffra matas in). Efter att personen valt ”stor eller liten kopp”, samt ”mörkrostat eller mellanrostat kaffe” skall en utskrift ”Ditt kaffe bryggs, det är klart om 15 sekunder” skrivas ut varefter programmet skall avslutas. 3 6. (4p) Vad blir utskriften från detta program #include <iostream> using namespace std; int main() { char tab[]="zqbenrättnsknuldårewv"; int i=0; for (i=5;i<16;i++) { if(i<10||i>13) cout << tab[i]; if(i==8) cout << endl; } cout<<tab[i]; cout<<endl; return 0; } 7. (8p) Du skall skriva ett program som låter användaren skriva in ett valfritt antal tecken (dock max 100). Därefter ska programmet skriva ut alla tecken baklänges och ange vilket tecken som förekom flest gånger. Uppdelning i funktioner skall göras. Kör-exempel: Trallala vad detta är kul luk rä atted dav alallarT a förekom flest gånger! 8. (4p) Givet variablerna int tal; char tecken; Skriv ett uttryck som motsvarar följande villkor: a. b. c. d. 9. tal är mindre än eller lika med 7 men större än 1 tecken ligger mellan 'a' och 'z' men är inte 'n' tal ligger mellan 1 och 9, men är inte 5 tal ligger inte mellan 2 och 5 (6p) Jag läste en gång om tal som kallas för ”Armstrong tal”. För att avgöra om ett tal är ett ”Armstrong tal” eller ej, gör man på detta sätt: a) Ta siffersumman av talet b) Ta sifferprodukten av talet 4 Om siffersumman multiplicerad med sifferprodukten är samma som talet själv, ja då mina vänner är detta ett Armstrong tal! Nu skall du skriva ett litet program med minst en funktion som hittar ett antal sådana tal åt mig. 10. (4p) Skriv kod för detta dataflödesdiagram. 5 Okommenterad syntax i c++. while (villkor) block for(initiering ; villkor ; uppräkning) block do block while (villkor); if(villkor) block else if(villkor) block else block switch (vaiabelnamn) { case 1: block break; case 2: block break; osv default: } Filhantering finns i fstream ifstream interntfilnamn; ofstream interntfilnamn; interntfilnamn.open("filnamn",ios::typ); filtillägg ios::app interntfilnamn.read((char *)&inpost,sizeof(posttyp)); interntfilnamn.write((char *)&utpost,sizeof(posttyp)); interntfilnamn close(); interntfilnamn.eof(); interntfilnamn.is_open(); get(c) hämtar från strömmen put(c) skriver till strömmen 6 Strängfunktioner finns i cstring strcpy(s1ination,sändare); strcat(s1ination,sändare); strcmp(sträng1,sträng2); resultat: <0 om sträng1 < sträng2, = 0 om strängarna lika , > 0 om sträng1 > sträng2 strstr(sträng1,sträng2) söker efter sträng2 i sträng1 */ strlen(sträng) Slump mm som finns i cstdlib exit(int); rand(); srand((unsigned) time(& time_t)) Några matematiska funktioner och konstanter som finns i cmath sqrt(x),abs(x),fabs(x), sin(x), cos(x), tan(x), asin(x), atan(x), acos(x), sinh(x), cosh(x),tanh(x) exp(x), log(x), log10(x), pow(x,y) Tecken funktioner som finns i cctype islower(c) isupper(c) isalpha(c) isdigit(c) toupper(c) tolower(c) Datatyper i ctime time_t 7