Pääteohjaustehtäviä 1 / 8.-9.9


1. Pääteohjaukset ja demot

1.1 Pääteohjausten paikka ja aika

Pääteohjaukset pidetään mikroluokassa AgB212.2 ja/tai AgB213.1 (tarkista Korpista). Ohjaukset alkavat xx.15.

1.2 Pääteohjausten pakollisuus

Pääteohjaukset ovat siinä mielessä pakollisia, että niistä voi olla pois korkeintaan 3 kertaa. Vuonna -01 ohjauksia oli 13 kertaa. 3:en poissaolon jälkeen vähennetään tentissä 1p/poissaolokerta. Eli jos ei tosita yhtään ohjausta, lähtee kokeeseen 10 pistettä muita huonommasta asemasta (tätä voi tietysti kompensoida vähän demoilla)!

1.3 Pääteohjausten palauttaminen sähköisesti

DemoWWW:llä. Katso kurssin WWW-sivut:

	http://www.mit.jyu.fi/~vesal/kurssit/winohj03/.  

Jos on ohjauksessa paikalla, sähköistä palautusta ei tarvita. Jos ei ole paikalla tai tehtävät jäävät pahasti kesken, silloin tarvitaan palautus DemoWWW:llä. Huom! DemoWWW on konsepti, ei mikään yksittäinen ohjelma, vaikka onkin olemassa DemoWWW.exe.

1.4 Demojen tai pääteohjausten tekeminen ryhmässä

Jos demot tai pääteohjukset tehdään ryhmässä, laittaa jokainen ryhmäläinen oman DemoWWW-hakemistonsa kuntoon. files.txt-tiedostoon tulee sitten kaikkien tekijöiden nimi:

	=--------------------
	= Demo 1
	= Vesa Lappalainen & Markku Vire
	=--------------------
	...

Samoin tietysti ohjelmien kommentteihin kaikkien tekijöiden nimet. Toisten vastausten kopiointi on kiellettyä (vaikka DemoWWW voikin tehdä kopioinnin "houkuttelevaksi").

2. Työskentely mikrolla ja harjoitustyön näyttäminen

2.1 Työskentele aina kovalevyllä tai verkon levyllä

Käytä työhakemistona AINA omaa hakemistoasi KOVALEVYLLÄ, jopa mieluummin kuin VERKON levyllä. Tämä nopeuttaa työskentelyä!

ÄLÄ KOSKAAN TYÖSKENTELE KORPULLA.

Töiden talletus oman korppusi/verkkolevyn ja kovalevyn välillä on helpointa hoitaa esim. KOPIOI-ohjelmalla tai siihen liitetyillä ajojonoilla (voi yrittää myös Windowsin matkalaukkua):

	kopioi *.c *.h a:: /s       - kopioi korpulle vastinpaikkaan
	kopioi *.c *.h u:: /s       - kopioi U:-levylle vastinpaikkaan
	kopioi *.c *.h a:: /q /s    - "tasaa" korpun ja kovalevyn vastaaviksi 

2.2 HT:n säilytys omassa WWW-hakemistossa

Kurssin sivuilla on ohjeet miten HT siirretään ja säilytetään WWW-muodossa.

3. C++

		// \kurssit\winohj\oop\cpp\luku.cpp
	#include <iostream.h>
	
	class cLuku {
	  int a;
	public:
	  void set(int n);
	  int get(void) const;
	};
	
	void cLuku::set(int n)
	{
	  a = n;
	}
	
	int cLuku::get(void) const
	{
	  return a;
	}
	
	int main(void)
	{
	  cLuku luku;
	  luku.set(3);
	  cout << "Luku = " << luku.get() << endl;
	  return 0;
	}

Seuraavat voi tehdä esim. BC 3.1:n Dos- versiolla, gcc:llä tai vaikka C++ Builder 6 :lla

1.
Käännä ja korjaa ohjelmassa olevat viat.
2.
Lisää edelliseen ohjelmaan set - metodiin tarkistus siitä, ettei luku voi olla alueen [0,10] ulkopuolella (esim. lukua ei aseteta lainkaan tai luvuksi asetetaan liian pienille 0 ja liian suurille 10, tai jopa set - funktio laitetaan palauttamaan sijoituksen onnistumista kuvaava arvo).
3.
Kokeile mitä tapahtuu jos luku on alustamaton (eli ei ole kutsua a.set). Kokeile myös dynaamisella ( cLuku *p = new(cLuku); ) muuttujalla.
4.
Lisää metodi lisaa(int i=1); , joka lisää lukua. Muista lukualue!
5.
Lisää luokkaan rakentajafunktio ( constructor), joka alustaa luvun 0:ksi tai rakentajan parametrina annetuksi. Muista edelleen lukualue!
6.
Kokeile voiko luokan muuttujaan (attribuuttiin) a viitata suoraan! Jollei voi, muuta public- sanan paikkaa ja kokeile uudelleen. Palauta lopulta public paikalleen.
7.
Kokeile kirjoittaa get ja set inline- funktioiksi kahdella eri tavalla.
8.
Kirjoita pinon käsittelyohjelma, jossa pinoa varten on seuraava luokka:
	const SIZE=10;
	class cPino {
	  char alkiot[SIZE];     // Pinoon talletetut alkiot
	  int top;               // Pinon pinnan "osoitin"
	public:
	  cPino();               // Pinon rakentaja (alustus)
	  void Push(char ch);    // Laittaa kirjaimen pinon päällimmäiseksi
	  char Pop(void);        // Palauttaa pinon päällimmäisne kirjaimen ja poistaa sen
	  int IsEmpty() const;   // Palauttaa tiedon siitä, onko pino tyhjä
	};

9.
Kirjoita pääohjelma jossa on kaksi pinoa ja laita pinoihin jotakin ja ota ne sitten pois tulostaen samalla.
10.
Mitä täytyisi muuttaa jos pino täytyisi tehdä toiselle tyypille (esim. double)?