CD5250 - Objektorienterad programutveckling med C++, 5 poäng, period 3, 2002

Laboration 1

A. cin/cout

Skriv ett program som läser in namn och ålder på en person och sedan skriver ut detta på skärmen genom att använda de fördefinierade streamobjekten cin och cout.

I C++ finns ett standardbibliotek med bl.a. rutiner för in/utmatning från tangentbord och skärm. Dessa är tillgängliga genom 'iostream'. Stränghanteringen blir tillgängliga genom 'string'.

#include <iostream>
#include <string>
using namespace std; // Glöm ej denna!
Exempel 1.Förslag på början av filen.

Referensfilen för laborationen lab1a.exe.

B. strängar

I denna uppgift skall stränghanteringen i STL (standardbiblioteket) undersökas lite närmare. Skriv ett program tar emot två strängar och returnerar den första positionen där det finns en gemensam delsträng. Finn alltså första förekomsten av 'sträng 2' i 'sträng 1'.

Exempelvis så skall strängarna "Multiplikationstabellen" och "lik" ge värdet 6.

Referensfilen för laborationen lab1b.exe.

C. filer

Skapa ett program som läser in ord från tangentbordet och skriver ned dessa till en fil. Inmatningen stoppas genom att skriva ordet 'slut'. Programmet startar med att fråga efter det filnamn som filen skall sparas i.

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
Exempel 2.Dessa rader bör finnas med i början av källkodsfilen.

Referensfilen för laborationen lab1c.exe.
En referensfil för hur datafilen skall se ut lab1c.txt.

D. vektorer

I denna uppgift skall ni läsa filen med de ord ni skapade i föregående uppgift. Orden skall lagras i en (STL-) vektor, varefter användaren skall kunna skriva in en siffra och få ordet utskrivet som finns på motsvarande position i vektorn.

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;

void main()
{
	// Skapa en behållare för 'string'-objekt.
	vector<string> vektor;

	string filename;
	.
	.
	.
Exempel 3.Förslag på början av filen.

Referensfilen för laborationen lab1d.exe.

E. new/delete

Skriv ett program som dynamiskt allokerar plats för en heltalsarray av godtycklig längd, fyller dessa med slumpvis valda heltal från 0 till 100 samt beräknar summan av dessa. Programmet skall sedan friställa (avallokera) det minnesutrymme som allokerats. Använd de i språket C++ inbyggda operatorerna new och delete för att dynamiskt allokera och friställa minnesutrymmet. Hur man genererar slumptal framgår av följande exempel:

#include <stdlib.h>             // Innehåller funk. srand() och rand()
#include <time.h>               // Innehåller def. av strukturen time_t

time_t t;
srand(static_cast<unsigned>(time(&t)));      // Initiera slumptalsgeneratorn
cout << rand();                 // Skriv ut tal mellan 0 och RAND_MAX
cout << rand() % 6 + 1;         // Skriv ut tal mellan 1 och 6
Exempel 4.Kod för generering av slumptal. Kopiera in denna på lämplig plats i programmet.

Vad finns det för risker med att allokera utrymme på "heapen" (dynamisk allokering) kontra allokering på stacken?

F. referenser

Denna uppgift har till syfte att ge träning i att använda referenser istället för pekare.

Skriv om följande swapfunktion så att den använder referenser istället för pekarvariabler. Hur skall anropet till funktionen se ut i den nya versionen?

void swap(int * x, int * y)
{
   int temp = *x;
   *x = *y;
   *y = temp;
}

int main(void)
{
   int a = 5, b = 8;
   cout << "a = " << a << endl << "b = " << b << endl;
   swap(&a, &b);
   cout << "a = " << a << endl << "b = " << b << endl;
   return 0;
}
Exempel 5.

Fördelen med referenser istället för pekare i det här fallet är att det inte går att skicka in felaktiga referenser eftersom en referens alltid pekar ut ett konkret objekt. (Som pekarvärde är det helt möjligt att skicka in NULL (0) som argument, dock kommer swapfunktionen inte att kunna hantera detta korrekt. Detta fel kan aldrig uppstå med en referens)

G. överlagring

Implementera funkionen 'max'. Returvärdet skall vara det största av de inskickade värdena.

Denna funktion skall fungera för följande inparametrar:

  • Två heltal.
  • Två float.
  • Heltalsarray med längden n.
  • Använda er av funktionsöverlagring för att lösa detta (all kod skall finnas i samma fil!). Testa programmet med:

    void main()
    {
      int a = 4;	
      int b = 7;
      int c = max(a,b);
      float kalle = max(2.0f,123.4f);
      int myArr[100];
      // fill in some values here. . .
      int p = max(myArr,100);
    }
    Exempel 6.

    Observera "f" i slutet av flyttalen! I vanliga fall tolkar kompilatorn "2.0" som ett tal av typen double. Menar man att talet skall vara en float så kan man antingen göra en typkonvertering med float(2.0), eller genom att lägga till ett "f" i slutet av talet.

    Varför använder man inte alltid funktionsöverlagring?

    Aktuellt
    Utvärdering2
    Nyheter
    Föreläsning 14
    Laboration 6
    Projektuppgift
    CD5250
    Nyheter
    Kursinformation
    Föreläsningar
    Labbar
    Projektuppgift
    C --> C++
    STL-intro
    Size-klassen
    Utvärdering
    Utvärdering2
    Visual C++
    Kursplan
    Schema
    Underrubriker
    cin/cout
    strängar
    filer
    vektorer
    new/delete
    referenser
    överlagring
    Ansvarig lärare: Martin Skogevall - martin.skogevall@mdh.se
    Senast uppdaterad: Tue Mar 05 16:57:56 GMT+01:00 2002