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 a. Skriv en if-sats som på skärmen skriver ut strängen Talet är OK om ett heltal ligger i intervallet 20 25 (inklusive gränserna). if(20 <= talet && talet <=25) cout << "Talet är OK"; (2p) b. Beräkna följande uttryck enligt C++ prioriteringsregler: 2.1*5/2-(15+3)/(7+3-5%3) (1p) Svar: 3,25 c. Skriv om följande programavsnitt med while- istället för for-loopen. for(int i=3; i<=5; i++) cout << i << endl; int i=3; while(i<=5) cout << i << endl; i++; (1p) d. Deklarera en heltalsvariabel med namnet tal. Deklarera sedan en pekare till heltal med namnet talpek. Låt sedan talpek peka på minnesutrymmet där tal lagras. (2p) int tal; int *talpek; talpek = &tal; e. Utgå från följande kod fstream minfil; Skriv sedan koden som kopplar ihop filobjektet minfil med filen minadata.dat som ligger i aktuell katalog på hårdisken, och öppnar den för läsning. minadata.dat är en binärfil. (2p) minfil.open("minadata.dat", ios::in ios::binary);
Per Ekeroot 2 Uppgift 2 (4p) Skriv ett programavsnitt i vilket användaren matar in två strängar, förnamn och efternamn. De två första tecknen i varje sträng ska sedan bilda en signatur som skrivs ut på skärmen. Du behöver inte skapa en ny sträng för signaturen. Du får använda string-klassen eller tecken-vektorer för att hantera strängarna. /* // Alternativ med teckenvektor const SIZE =20; char firstname[size], lastname[size]; */ // //Alternativ med string-klassen string firstname, lastname; // Mata in förnamn och efternamn cout << "Förnamn : "; cin >> firstname; cout << "Efternamn: "; cin >> lastname; // Skriv signatur på skärmen cout << "Signatur= " << firstname[0]<<firstname[1]<<lastname[0]<<lastname[1];
Per Ekeroot 3 Uppgift 3 Skriv ett programavsnitt som utför växling av valuta. Man ska kunna växla från svenska kronor till dollar eller från dollar till svenska kronor (SEK). En växlingsavgift på 30 SEK tas ut vid valutaväxlingen. Kravspecifikation:?? Programutformning: 1. Låt användaren välja om växling ska göras från SEK till dollar eller tvärtom 2. Utför beräkningen av beloppet i den nya valuta. Glöm inte att dra ifrån växlingsavgiften. 3. Skriv ut det beräknade beloppet med lämplig ledtext.?? Valutakursen ska anges med en konstant. Antag att en dollar kostar 9,83 svenska kronor?? Utskrift av belopp ska göras med två decimaler const float dollartoskr = 9.83; const avgift = 30.0; // avgift = 30 Skr cout << "****** MONEY EXCHANGE ******" << endl << endl; cout << " 1. Svenska kronor till dollar" << endl; cout << " 2. Dollar till svenska kronor" << endl<<endl; char ch; float belopp; ch = cout << setiosflags(ios::fixed)<<setprecision(2); if (ch == '1') // Svenska kronor till dollar cout << "Ange belopp i SEK: "; cin >> belopp; cout << "Belopp i dollar : " << (belopp-avgift)/dollartoskr; else if( ch=='2') // Dollar till svenska kronor cout << "Ange belopp i dollar: "; cin >> belopp; cout << "Belopp i SEK : " << belopp*dollartoskr-avgift; else cout << "Otillåtet val!";
Per Ekeroot 4 Uppgift 4 Vad skrivs ut från följande program? Skriv på ett rutat papper, ett tecken i varje ruta. #include <iostream> #include <conio> #include <iomanip> using namespace std; int main() cout << "Programstart" << endl; const char ch = 'A'; // ASCII-värde = 65 const int tal = 100; const float nr = 5; int chvalue = int (ch); cout << "Tecknet " << ch << " = " << chvalue << endl; chvalue++; cout << "Tecknet " << char (chvalue) << " = " << chvalue ; for(int i=0; i<9; i++) gotoxy(i/3*3+1, i%3+4); cout << setw(3) << i; float diff = tal / 3 + nr / 2; cout << endl << "Differensen = " << diff << endl; int loopa; for(loopa=tal/2; loopa>tal/5; loopa=loopa/2) cout << loopa << endl; cout << loopa << endl; Lösning:
Per Ekeroot 5 Uppgift 5 Skriv ett programavsnitt som slumpar heltal i intervallet 1 1000 (inkl. gränserna) och sedan presenterar statistik över de slumpade talen. Kravspecifikation:?? Programutformning 1. Fråga användaren hur många tal som ska slumpas. 2. Skapa en vektor dynamiskt med plats för antalet tal enl. föregående fråga. 3. Anropa en funktion som slumpar tal till vektorn (se nedan). 4. Anropa en funktion som beräknar de slumpade talens medelvärde (se nedan). Funktionen ska returnera medelvärdet som skrivs ut från huvudprogrammet.?? Skriv en funktion som slumpar heltal till en vektor. Parametrar till funktionen ska vara vektorn med slumptal och antalet slumptal.?? Skriv en funktion som beräknar slumptalens medelvärde. Parametrar till funktionen ska vara vektorn med slumptal och antalet slumptal. Funktionen ska returnera talens medelvärde. //---------------------------------------------------------------------- // Funktionsprototyper void Slumptal(int *talvektor, int antal); float SlumpMedel(const int *talvektor, int antal); int main() randomize(); cout <<"Hur många tal vill du slumpa?" << endl; int antaltal; cin >> antaltal; int *slumpvektor = new int[antaltal]; Slumptal(slumpVektor,antalTal); cout << "De " << antaltal << " slumptalens" << endl; cout << "medelvärde = " << SlumpMedel(slumpVektor, antaltal) << endl; delete [] slumpvektor; // Funktionsdefinitioner void Slumptal(int *talvektor, int antal) for(int i=0; i<antal; i++) talvektor[i] = random(1000)+1; float SlumpMedel(const int *talvektor, int antal) int summa = 0; for(int i=0; i<antal; i++) summa += talvektor[i]; return float(summa)/antal;
MITTHÖGSKOLAN Tentamen objektorienterad programmering i C++ I ht-2000 Per Ekeroot 6 Uppgift 6 Skriv ett programavsnitt som beräknar tid uttryckt i timmar minuter och sekunder mellan två tidpunkter inom samma dygn. Kravspecifikation:?? Skapa en struktur som har timmar, minuter och sekunder som medlemsvariabler.?? Skriv en funktion som beräknar tidsskillnaden mellan två tidpunkter som ligger inom samma dygn. Indata: tid1 och tid2 uttryckta med strukturen enl. ovan. Utdata: tid2 tid1?? Programutformning: 1. Användaren matar i de två tidpunkterna (tim, min & sek). 2. Anropa funktionen som beräknar tidsskillnaden tid2 tid1. 3. Skriv resultatet på skärmen. Utskriften ska göras från huvudprogrammet.?? Skriv lämpliga ledtexter. // Strukturdefinition struct TTime int hour; int min; int sec; ; // Funktionsprototyp TTime TimeDiff(TTime t1, TTime t2); // Huvudprogram int main() TTime time1, time2; // Mata in tider cout << "Mata in tid 1 " << endl; cout << "Timme : "; cin >> time1.hour; cout << "Minut : "; cin >> time1.min; cout << "Sekund: "; cin >> time1.sec; cout << endl; cout << "Mata in tid 2 " << endl; cout << "Timme : "; cin >> time2.hour; cout << "Minut : "; cin >> time2.min; cout << "Sekund: "; cin >> time2.sec; // Beräkna difftid TTime td = TimeDiff(time1, time2);
Per Ekeroot 7 // Skriv resultatet på skärmen cout << endl; cout << "Från tid 1 till tid 2 är det " << td.hour << " timmar " << td.min << " minuter "<< td.sec << " sekunder"; // Funktionsdefinition TTime TimeDiff(TTime t1, TTime t2) // Räkna om tiderna till sekunder long time1 = t1.hour*3600 + t1.min*60 + t1.sec; long time2 = t2.hour*3600 + t2.min*60 + t2.sec; long time = time2 - time1; TTime temp; // Omvandla från sekunder till tim, min och sek temp.hour = time / 3600; temp.min = time % 3600 / 60; temp.sec = time %60; return temp;