From jamian@palikka.jyu.fi Tue Nov 22 08:10 EET 1994
Received: from palikka.jyu.fi by tarzan.math.jyu.fi with SMTP
	(1.37.109.11/16.2) id AA252444626; Tue, 22 Nov 1994 08:10:26 +0200
Return-Path: <jamian@palikka.jyu.fi>
Received: by palikka.jyu.fi id AA08708
  (5.65c8/IDA-1.4.4 for vesal@tarzan.math.jyu.fi); Mon, 21 Nov 1994 18:03:42 +0200
Date: Mon, 21 Nov 1994 18:03:42 +0200
From: Jarno Mikael Antikainen <jamian@palikka.jyu.fi>
Message-Id: <199411211603.AA08708@palikka.jyu.fi>
To: vesal@jyu.fi
Subject: Jarno_Antikainen/Demo9/3,4
X-Charset: ISO_8859-1
X-Char-Esc: 29
Status: RO
X-Status: 

Teht.4 (2.23)
Ympyra ja nelio luokkiin pitaisi lisata funktiot, joka tarkistaa kolmion
mahtumisen ja painvastoin.
-------------------------------------------------------------------------------
Teht.3 (2.22)
Nelio pitaa olla maaritelty ennenkuin ympyra::mahtuuko(nelio &n) maaritellaan.
-------------------------------------------------------------------------------

From mesom@jytko.jyu.fi Tue Nov 22 10:14 EET 1994
Received: from cc.jyu.fi by tarzan.math.jyu.fi with SMTP
	(1.37.109.11/16.2) id AA199292074; Tue, 22 Nov 1994 10:14:34 +0200
Return-Path: <mesom@jytko.jyu.fi>
Received: from jytko.jyu.fi by cc.jyu.fi with SMTP id AA00554
  (5.67a/IDA-1.4.4 for vesal@tarzan.math.jyu.fi); Tue, 22 Nov 1994 10:14:47 +0200
Received: by jytko.jyu.fi
	(1.37.109.4/16.2) id AA15475; Tue, 22 Nov 94 10:11:46 +0200
X-Charset: ISO_8859-1
Date: Tue, 22 Nov 1994 10:11:46 +0200 (EET)
From: Marko Eerik Somppi <mesom@jyu.fi>
To: vesal@jyu.fi, mesom@jytko.jyu.fi, jmlu@jytko.jyu.fi,
        sajula@tarzan.math.jyu.fi
Subject: Marko Somppi, Janne Luoma, Sami Lahti/Demo 9/teht. 1-6
Message-Id: <Pine.HPP.3.91.941122100825.15340A-100000@jytko.jyu.fi>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Content-Transfer-Encoding: QUOTED-PRINTABLE
Status: RO
X-Status: 


Muutetaan pisteen piirtamisfunktiota siten, etta se voidaan periyttaa
suoraan ympyralle ja myoskin neliolle:
...
virtual int piirra() { printf("...",Tilat[nakyvissa()],nimi,x,y,r=0)}
...

Neli=94luokan lis=84ys

class nelio: public piste,public ympyra{
  protected:
    int e;
  public:
   nelio(char *s="nelio",int ix,int iy, int is=1) : piste(s,ix,iy){
     e = is
   }
   int ympyr=84::muuta_koko(int ns);
   int piste::piirra(nimi,x,y,is);
};



Teht2
esim kantaluokan(piste)h=84vitt=84j=84 ei virtuaalinen
class piste{
...
//h=84vitt=84j=84 ei virtuaalinen
  ~piste() {
  sammuta();
  }
};
int piste::sammuta()
  { nakyy = 0;
    return piirra();
  }

class ympyra;//perii pisteen ominaisuudet
...
class monikulmio;//perii ympyr=84n ominaisuudet (samalla my=94s pisteen)
virtual int piirra() {
  printf("...");
  }
  sammuta();
// h=84vitt=84j=84=84 kutsuttaessa se vaihtaa osoittimen osoittamaan luokan=
 moni-
// kulmio virtuaalitaulua, joka osoittaa monikulmio::piirra kohtaan.


Jos ei-virtuaallinen funktio m=84=84ritelt=84isiin uudelleen tulee funktiot=
a
kutsuttaessa ristiriita mit=84 funktiota oikeastaan itseasiassa tarkoitetaa=
n.


Teht3
ympyra::mahtuuko ei ole kirjoitettu inline-funktioksi koska funktion tulee
p=84=84st=84 k=84siksi sek=84 ympyr=84-luokan ett=84 neli=94-luokan alkioih=
in. Funktio
taytyy olla ilmeisesti esitelty niiden luokkien jalkeen, joita se kayttaa.



Teht4
Mik=84li haluttaisiin lis=84t=84 uusi luokka kolmio tulisi FRIEND.CPP:ss=84
tulisi luokan lis=84yksen lis=84ksi lis=84t=84 erikseen mahtuuko funktiot k=
olmion
mahtumiselle ympyr=94iden ja neli=94iden sis=84lle.  Lis=84ksi public yst=
=84viksi tulisi
lis=84t=84 friend mahtuuko(kolmio &k, nelio &n), friend mahtuuko(kolmio &k,
ympyra &y) jne...



Teht5

Sijoitus on tarpeellinen, koska esittelyn j=84lkeinen tila ei tunne uutta
p:n arvoa ilman piste=piste-m=84=84rittely=84


Teht6

piste &piste::operatorfabs(int i)
{
  piste t;
  if (i<0) return -i
  else return i;
}

piste &piste::operator==(piste &p2)
{
  piste t;
  if (i<0) return -i
  else return i;
}

piste &piste::operator+=(piste &p2)
{
 piste t;
 t.x = 1 + p2.x;
 t.y = 1 + p2.y;
 return t;
}


piste &piste::operator!(piste &p2)
{
 piste t;
 t.x = -p2.x;
 t.y = -p2.y;
 return t;
}

piste &piste::operator+++(piste &p2)
{
 piste t;
 if ( p2.x < 0 ) t.x = -p2.x;
 if ( p2.y < 0 ) t.y = -p2.y;
 return t;
}
Funktio on k=84yt=84nn=94ss=84 sama kuin itseisarvo.

From katumi@tukki.jyu.fi Tue Nov 22 12:05 EET 1994
Received: from tukki.jyu.fi by tarzan.math.jyu.fi with SMTP
	(1.37.109.11/16.2) id AA125878711; Tue, 22 Nov 1994 12:05:11 +0200
Return-Path: <katumi@tukki.jyu.fi>
X-Charset: ISO_8859-1
Received: by tukki.jyu.fi id AA01099
  (5.67a/IDA-1.4.4 for vesal@tarzan.math.jyu.fi); Tue, 22 Nov 1994 12:04:47 +0200
From: Tuomas Mikael Kautto <katumi@tukki.jyu.fi>
Message-Id: <199411221004.AA01099@tukki.jyu.fi>
Subject: Vesa Kankare,Tuomas Kautto/demovas/demo9/3,4
To: vesal@jyu.fi
Date: Tue, 22 Nov 1994 12:04:37 +0200 (EET)
X-Mailer: ELM [version 2.4 PL21]
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
Content-Length: 1245      
Status: RO
X-Status: 

Demo9 / 22.11.1994
Vesa Kankare & Tuomas Kautto

Demo 9.4

Joka luokkaan tulisi yhteens„ viisi metodia, eli olemassaoleviin kaksi
lis„„, ja jostain toisestakin luokasta pit„isi tehd„ eteenp„inviittaus.#include <stdio.h>
#include <math.h>

Demo 9.3
class nelio;

class ympyra{
  friend nelio;
  double r;
public:
  ympyra(double d=1.0) { r=d; }
  int mahtuuko(nelio &n);
  int mahtuuko(ympyra &y2)
  {
    return ( r < y2.r );
  }
};

class nelio{
  double s;
  friend ympyra;
public:
  nelio(double d=1.0) { s=d; }
  int mahtuuko(ympyra &y) {
    return (sqrt(2.0)*s/2 < y.r);
  }
  int mahtuuko(nelio &n2) {
    return ( s < n2.s );
  }
};

int ympyra::mahtuuko(nelio &n)
{
  return ( 2*r < n.s );
}

int main(void)
{
  nelio n1(2.1),n2(2.5);ympyra y1(0.9),y2(1.2);
  if ( n1.mahtuuko(y1) ) printf("Nelio 1 mahtuu ympyran 1 sisalle.\n");
  if ( y1.mahtuuko(n1) ) printf("ympyra 1 mahtuu nelion 1 sisalle.\n");
  if ( y1.mahtuuko(y2) ) printf("Ympyrat mahtuvat sis„kk„in.\n");
  if ( n1.mahtuuko(n2) ) printf("Neliot mahtuvat sisakkain.\n");
  printf("\n\n");
  return 0;

}
/* ympyra::mahtuuko metodia ei voi kirjoittaa inlineksi, koska kaantaja
   ei viel„ tunne nelio &n:n sis„lt”„.
*/

From juviju@tukki.jyu.fi Tue Nov 22 13:57 EET 1994
Received: from tukki.jyu.fi by tarzan.math.jyu.fi with SMTP
	(1.37.109.11/16.2) id AA063685440; Tue, 22 Nov 1994 13:57:20 +0200
Return-Path: <juviju@tukki.jyu.fi>
X-Charset: ISO_8859-1
Received: by tukki.jyu.fi id AA16943
  (5.67a/IDA-1.4.4 for vesal@tarzan.math.jyu.fi); Tue, 22 Nov 1994 13:56:57 +0200
Date: Tue, 22 Nov 1994 13:56:55 +0200 (EET)
From: Juha Ville Juntunen <juviju@tukki.jyu.fi>
To: Vesa Lappalainen <vesal@tukki.jyu.fi>
Subject: JuhaVilleJuntunen\demo9\tehtavat2_4+6_7.cpp (fwd)
Message-Id: <Pine.SOL.3.91.941122135445.16728A-100000@tukki>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=ISO-8859-1
Content-Transfer-Encoding: QUOTED-PRINTABLE
Status: O
X-Status: 




// GKO DEMO 9
// Juha-Ville Juntunen

//tehtava 2:
// Ilman virtual-m=84=84rittely=84 hahmon tulosta_paikka() fkt:_ssa, tulisi=
 pallon tuhoajan
// suorituksen yhteydess=84 ajettua v=84=84r=84 tulosta_paikka()funktio, ja=
 paikka olisi v=84=84r=84.
// Ilman virtualia paikka on 1 virtualin kanssa 2.

#include <stdio.h>
#include <fstream.h>
#include <iomanip.h>

class hahmo
{
private:
	int paikka;
public:
	hahmo() { printf("	hahmon rajentaja \n"); paikka=1;}
    ~hahmo() { printf( "	hahmon tuhoaja , paikka:%d\n",paikka );}
    virtual void tulosta_paikka() { printf("	pallon paikka:%d\n" ,paikka =
) ;}
    void missa_paikka() {	tulosta_paikka(); }


};

class pallo:hahmo
{
private:
int paikka;
public:
	pallo() { printf("	pallon rajentaja \n"); paikka=2;}
    ~pallo() { printf("	pallon tuhoaja \n" ); missa_paikka();}
	void tulosta_paikka() { printf("	pallon paikka:%d\n" ,paikka ) ;}

};

int main()
{
	printf("o Hahmon m=84=84rittely\n");
	hahmo *h = new hahmo();
    printf("o Pallon m=84=84rittely\n");
	pallo *p = new pallo();
    printf("o Pallon tuho\n");
	delete p;
    printf("o Hahmon tuho\n");
	delete h;
	return 0;
}

/*

tehtava3:

 Se ei ole inlinena, koska se ei tieda neliosta, etta silla on kentta s, ne=
lion
 maarittelyhan on vasta ympyran maarittelyn alapuolella. Niinpa ympyra::mah=
tuuko
 pitaa olla vasta nelion maarittelyn jalkeen, jotta se ( siis kaytannossa
 kaantaja ) tietaa nelion kentat.



tehtava 4.

 Kolmiolle pitaa myos kertoa alussa ystavat:
 			friend nelio;
 			friend ympyra;
 Ja myos nelion ja ympyran maarittelyissa pitaa olla
 			friend kolmio;
 Sitten voidaan tehda halutut funktiot public: osiin.
 Pitaa muistaa, etta jos kolmion maarittely on viimeisena ja ympyrassa tai =
neliossa on
 mahtuuko -vertailuja, kolmion suhteen, einiita taaskaan voida laittaa inli=
ne, vaan
 maarittelyt on vietava kolmion maarittelyn jalkeen.


tehtava 6:

// itseisarvo
piste piste::fabs(piste p)
{
	p.x = fabs(p.s); // kutsuu oikeaa fabsia, koska nyt parametri int eik=
=84 piste
	p.y = fabs(p.y);
	return p;
}

// vertailu
piste piste::operator==(piste p, piste k)
{
 	return (p.x == k.x && p.y == k.y);
}

// lisays
piste piste::operator+=(piste p, piste k)
{
	p.x += k.x;
	p.y += k.y;
	return p;

}

// etumerkinvihto
piste piste::operator-(piste p);
{
	p.x = -p.x;
	p.y = -p.y;
	return p;

}

//koordit positiivisiksi
// MITA ?? tamahan on sama kuin eka (itseisarvo)
// no okei..
piste piste::operator+(piste p)
{
	p.x = fabs(p.x);
	p.y = fabs(p.y);
	return p;
}



tehtava 7:

Koska kutsussa a[i]=3 [i] -operaattori on maaritelty siten, etta se palau=
ttaa
osoitteen ( muuttuja t) taulukon alkioon i ja jos se on < 0 tai suurempi ku=
in koko,
palauttaa se osoitteen viimeiseen alkioon, joten taulukon ohi ei viitata
*/


From pejysa@tukki.jyu.fi Tue Nov 22 15:22 EET 1994
Received: from tukki.jyu.fi by tarzan.math.jyu.fi with SMTP
	(1.37.109.11/16.2) id AA266130562; Tue, 22 Nov 1994 15:22:42 +0200
Return-Path: <pejysa@tukki.jyu.fi>
X-Charset: ISO_8859-1
Received: by tukki.jyu.fi id AA29030
  (5.67a/IDA-1.4.4 for vesal@tarzan.math.jyu.fi); Tue, 22 Nov 1994 15:22:22 +0200
Date: Tue, 22 Nov 1994 15:22:17 +0200 (EET)
From: Jyri Samuli Pekkola <pejysa@tukki.jyu.fi>
To: Lappalainen Vesa <vesal@jyu.fi>
Subject: demo 9 teht 1-8   Samuli Pekkola, Kimmo Wideroos, Pasi Kivinen
In-Reply-To: <Pine.SOL.3.91.941122141454.19781A-100000@tukki>
Message-Id: <Pine.SOL.3.91.941122143626.22403A-100000@tukki>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=ISO-8859-1
Content-Transfer-Encoding: QUOTED-PRINTABLE
Status: O
X-Status: 


teht 1.

/*		CIRCLE.CPP
 	tehd„„n ympyr„-luokka, josta perit„„n piste	*/



 #include <stdio.h>
 #include <string.h>

 char *Tilat[] = {"Sammutettu","Sytytetty"};

 class ympyra {
 	int nakyy;
 	int vaihda_paikka(int nx, int ny);
 protected:
 	char nimi[20];
 	int x,y;
 	int r;
 public:
 	ympyra(char *s="ympyra", int ix=0, int iy=0, int ir=0) {
 		nakyy = 0;
 			x=ix;y=iy;r=ir; strcpy(nimi,s);
 		}
 	virtual ~ympyra() { sammuta(); }
 	int nakyvissa() {
 		return nakyy;
 		}
 	int sammuta();
 	int sytyta();
 	int siirra(int nx = 0, int ny = 0);
 	int muuta_koko(int nr) {
 		if (!nakyvissa()) { r = nr; return 0; }
 		sammuta(); r = nr; return sytyta();
 	}
 	virtual int piirra() {
 		printf("Ympyra=84: %-10s %-10s:(%02d,%%d\n",
                         Tilat[nakyvissa()],nimi,x,y,r);
 		return nakyvissa();
 	}
 };

 int ympyra::vaihda_paikka(int nx, int ny) {
 	x = nx; y = ny; return nakyy;
 }

 int ympyra::sammuta()
 {
 	if (!nakyy) return 0;
 	nakyy = 0;
 	return piirra();
 }

 int ympyra::sytyta()
 {
 	if (nakyy) return 1;
 	nakyy=1;
 	return piirra();
 }

 int ympyra::siirra(int nx, int ny)
 {
 	if (!nakyy) return vaihda_paikka(nx,ny);
 	sammuta();
 	vaihda_paikka(nx,ny);
 	return sytyta();
 }

 class piste : public ympyra {

 public:
 	piste(char *s="piste",int ix = 0,int iy=0) :
          ympyra(s,ix,iy,0) {};
 	~piste() { sammuta(); }

 	int piste::piirra() {
 		printf("Piste : %-10s %-10s:(%02d,%02d); sade %d\n"
                                 ,Tilat[nakyvissa()],nimi,x,y,r);
 		return nakyvissa();
 	};
 };

 int main(void)
 {
 	printf("---------------------------------\n");
 	ympyra a("a",1,1,1),b("b",2,5);
 	piste y("y",3,3);
 	a.sytyta(); y.sytyta(); b.sytyta();
 	a.siirra(3,3); b.siirra(); a.muuta_koko(7);
 	return 0;
 }





***************************************************************************=
*
 teht 6

#include <stdio.h>
#include <math.h>

class piste {
  int x,y;
public:
  void tulosta() {printf("(%d,%d)\n",x,y);}
  void aseta(int nx,int ny) { x=nx; y=ny; }
  piste(int ix=0, int iy=0) {aseta(ix,iy);}

  piste fabs(piste p) {
    if ( x<0 ) x=-x;
    if ( y<0 ) y=-y;
    return p;
  }

  int operator==(piste p) {
    if ( x == p.x && y == p.y ) return 1;
    return 0;
  }

  piste &operator+=(piste p) {
    x += p.x;
    y += p.y;
    return *this;
  }

  piste &operator-(piste p1) {
    x=-x;
    y=-y;
    (void)p1;
    return *this;
  }

};

int main(void)
{
  piste p1(0,3),p2(3,33);
  p1.tulosta();
  p1.aseta(-3,-33);
  p1.fabs(p1);
  p1.tulosta();
  if ( p1==p2 ) printf("ok\n");
  p1+=p2;
  p1.tulosta();
  p1 = p1-p2;
  p1.tulosta();
  p2.tulosta();
  return 0;
}




***************************************************************************=
***
teht 8

#define LEFT       1
#define RIGHT      0

#define TYPE double

typedef struct linked_TYPE__ {
  TYPE elem;
  struct linked_TYPE__ *nxt;
  struct linked_TYPE__ *pre;
} linked_TYPE;


inline TYPE inside(linked_TYPE *a,linked_TYPE *x,linked_TYPE *b, int last) =
// x v=84lille [a,b], jos b<a niin a
  { return x ? x->elem : last == LEFT ? a->elem : b->elem; }


class list {
protected:
  int nelem;           // Alkioiden lukum=84=84r=84
  linked_TYPE *begin, *cursor, *end, *new_elem;
  int last_move;
public:
  list()           { nelem = 0;
		     begin = NULL;
		     tobegin();		    }
  ~list()          { dest(); nelem = 0;}
  void dest();

  int  out()       { return ( cursor == NULL );                        =
     }
  int  tobegin()   { cursor = begin;       last_move = LEFT;  return ou=
t(); }
  int  forward()   { cursor = cursor->nxt; last_move = RIGHT; return ou=
t(); }
  int  toend()     { cursor = end;         last_move = RIGHT; return ou=
t(); }
  TYPE current()   { return inside(begin,cursor,end,last_move);            =
 }
  TYPE first()     { tobegin(); return current();                          =
 }
  TYPE next()      { forward(); return current();                          =
 }
  TYPE last()      { toend();   return current();                          =
 }
  int  empty()     { return ( nelem == 0 );                            =
     }
  int  add(TYPE p) { if ( nelem >= MAX_ELEM ) return 1;
		     new_elem = new linked_TYPE;
		     new_elem->elem = p;
		     new_elem->nxt = NULL;

		     if ( !begin ) {
		       begin = new_elem;
		       new_elem->pre = NULL;
		     }
		     else {
		       end->nxt = new_elem;
		       new_elem->pre = end;
		     }

		     end = new_elem;

		     nelem++;
		     return 0;
		   }
}; /* list */

void list::dest(){
  while(cursor){
    cursor = begin->nxt;
    delete []begin;
    begin = cursor;
  }
  nelem = 0;
}

class list2 : public list {
public:
  int  backward()   { --cursor;         return out();           }

};



#define VIIVA "------------------------------------------------------------=
\n"
/**************************************************************************=
**/
int main(void)
{
  cout << VIIVA;

  list lc; lc.add(1.0); lc.add(1.1); lc.add(1.2); lc.add(1.3);

  for (char c=lc.first(); !lc.out(); c=lc.next() )
    cout << c << " ";

  cout << c << "\n" << VIIVA;

  for (lc.tobegin(); !lc.out(); lc.forward() )
    cout << lc.current() << " ";

  cout << lc.current() << "\n" << VIIVA;

  return 0;

}





***************************************************************************=
**
teht 2
  Jos on luokka piste ja luokka ympyra, ympyra perii pisteen.
Kutsuttaessa ympyran destructoria, se tuhoaa pisteen, mutta jattaa
ympyran koskematta.
  Koska silloin ei tiedeta kumpaa funktiota suoritetaan.




**************************************************************************
teht 3
  Koska nelioluokka maaritellaan vasta ympyra-luokan jalkeen.
Ei tiedeta, mita nelio-luokassa on.



***************************************************************************
teht 4
  Pitaa lisata 6 uutta friend-funktiota (jokaista mahtuuko-funktion
vastaava)



***************************************************************************=
*
teht 5
  Koska muuten piste-luokka ei tieda kumpaa =-operaattoria kaytetaan ( ku=
n
piste on muutettu int tai double ). Kaytetaanko
  piste &piste::operator=(int )
  vai
  piste &piste::operator=(piste )




***************************************************************************=
**
teht 7
  Koska [ ] on uudelleen maaritelty, ja se palauttaa referenssin oikeaan
alkioon.  ( Ja taulukko t on maaritelty (voi olla private))

From samaka@tukki.jyu.fi Tue Nov 22 15:23 EET 1994
Received: from tukki.jyu.fi by tarzan.math.jyu.fi with SMTP
	(1.37.109.11/16.2) id AA267020595; Tue, 22 Nov 1994 15:23:15 +0200
Return-Path: <samaka@tukki.jyu.fi>
X-Charset: ISO_8859-1
Received: by tukki.jyu.fi id AA29148
  (5.67a/IDA-1.4.4 for vesal@tarzan.math.jyu.fi); Tue, 22 Nov 1994 15:22:55 +0200
Date: Tue, 22 Nov 1994 15:22:52 +0200 (EET)
From: Sanna Marianne Karpale <samaka@tukki.jyu.fi>
To: vesal@jyu.fi
Subject: Sanna Karpale/demo9/3
Message-Id: <Pine.SOL.3.91.941122151714.28017A@tukki>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Status: O
X-Status: 

Teht{v{ 2.22

Ympyra::mahtuuko ei voi kirjoittaa inlineksi, koska s ei ole 'nelio':n 
j{sen funktiossa ympyra::mahtuuko(nelio &). s m{{ritelty vasta j{lkeen p{in.

From hianma@tukki.jyu.fi Tue Nov 22 15:47 EET 1994
Received: from tukki.jyu.fi by tarzan.math.jyu.fi with SMTP
	(1.37.109.11/16.2) id AA032192074; Tue, 22 Nov 1994 15:47:54 +0200
Return-Path: <hianma@tukki.jyu.fi>
X-Charset: ISO_8859-1
Received: by tukki.jyu.fi id AA02313
  (5.67a/IDA-1.4.4 for vesal@tarzan.math.jyu.fi); Tue, 22 Nov 1994 15:47:28 +0200
Date: Tue, 22 Nov 1994 15:47:23 +0200 (EET)
From: Anu Maarit Hillebrand <hianma@tukki.jyu.fi>
To: vesal@jyu.fi
Subject: Anu Hillerand/demo9/1,3,4,9
Message-Id: <Pine.SOL.3.91.941122154212.1592A-100000@tukki>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=ISO-8859-1
Content-Transfer-Encoding: QUOTED-PRINTABLE
Status: RO
X-Status: 


/***************/
/*  Teht1      */
#include <stdio.h>
#include <string.h>

//*************************************************************************=
***
char *Tilat[] = {"Sammutettu","Sytytetty"};

class kuvio_jolla_kp {
  int  nakyy;            // Sytytetty vai sammutettu
  int  vaihda_paikka(int nx, int ny);
  protected:             // Jos halutaan peri=84 luokka, pit=84=84 yht. osi=
en olla prot
  char nimi[20];         // Nimi, jotta ostataan tulostaa mist=84 oliosta k=
yse
  int x,y;               // Koordinaatit
public:
  kuvio_jolla_kp(char *s="kp",int ix=0,int iy=0) {
    nakyy=0;
    x=ix; y=iy; strcpy(nimi,s);
  }
  virtual ~kuvio_jolla_kp() { sammuta(); }// Poistetaan olio aina lopuksi.
  int nakyvissa() {      // Onko olio n=84kyviss=84
    return nakyy;
  }
  int sammuta();         // Poistaa olion n=84yt=94st=84
  int sytyta();          // Sytytt=84=84 olion n=84ytt=94=94n
  int siirra(int nx=0,int ny=0);
  virtual int piirra() { // Suorittaa olion todellisen piirt=84misen, oma j=
ok.
    printf("Kp : %-10s %-10s:(%02d,%02d)\n",Tilat[nakyvissa()],nimi,x,y);
    return nakyvissa();
  }
};

int kuvio_jolla_kp::vaihda_paikka(int nx, int ny) {
    x = nx; y = ny; return nakyy;
}

int kuvio_jolla_kp::sammuta()
{
  if ( !nakyy ) return 0;
  nakyy=0;
  return piirra();
}

int kuvio_jolla_kp::sytyta()
{
  if ( nakyy ) return 1;
  nakyy=1;
  return piirra();
}

int kuvio_jolla_kp::siirra(int nx, int ny)
{
  if ( !nakyy ) return vaihda_paikka(nx,ny);
  sammuta();
  vaihda_paikka(nx,ny);
  return sytyta();
}

class kuvio_jolla_kp_ja_sade : public kuvio_jolla_kp {
protected:
  int r;
public:
  kuvio_jolla_kp_ja_sade(char *s="kp&sade",int ix=0,int iy=0, int ir=
=1)
  : kuvio_jolla_kp(s,ix,iy) {;}
  virtual ~kuvio_jolla_kp_ja_sade() { sammuta(); }
  virtual int muuta_koko(int nr) {
    if ( !nakyvissa() ) { r = nr; return 0; }
    sammuta(); r = nr; return sytyta();
  }
};

class piste : public kuvio_jolla_kp {
public:
  piste(char *s="piste",int ix=0,int iy=0) : kuvio_jolla_kp(s,ix,iy){
  }
  ~piste() { sammuta(); }// Poistetaan olio aina lopuksi.
  int piste::piirra() {  // Suorittaa olion todellisen piirt=84misen, oma j=
ok.
    printf("Piste : %-10s %-10s:(%02d,%02d)\n",Tilat[nakyvissa()],nimi,x,y)=
;
    return nakyvissa();
  }
};

class ympyra : public kuvio_jolla_kp_ja_sade {
public:
  ympyra(char *s="ympyra",int ix=0,int iy=0, int ir=1)
  : kuvio_jolla_kp_ja_sade(s,ix,iy) {
    r = ir;
  }
  ~ympyra() { sammuta();}

  int ympyra::piirra() {  // Ympyr=84n todellinen piirt=84minen
    printf("Ympyr=84: %-10s %-10s:(%02d,%02d) r=%d\n",
                     Tilat[nakyvissa()],nimi,x,y,r);
    return nakyvissa();
  };
};

class nelio : public kuvio_jolla_kp_ja_sade {
public:
  nelio(char *s="nelio",int ix=0,int iy=0, int ir=1)
  : kuvio_jolla_kp_ja_sade(s,ix,iy) {
    r = ir;
  }
  ~nelio() { sammuta();}

  int nelio::piirra() {  // Ympyr=84n todellinen piirt=84minen
    printf("Nelio: %-10s %-10s:(%02d,%02d) r=%d\n",
                     Tilat[nakyvissa()],nimi,x,y,r);
    return nakyvissa();
  };
};

//*************************************************************************=
***
int main(void)
{
  printf("---------------------------------------------------------------\n=
");
  piste  a("a"),b("b",2,5);
  ympyra y("y",3,3); nelio n("n",10,10,11);
  a.sytyta(); y.sytyta(); n.sytyta(); b.sytyta();
  a.siirra(3,3); b.siirra(); y.muuta_koko(7); n.muuta_koko(1);
  return 0;
}

/**************/
/* Teht3      */
Jos ympyra::mahtuuko on kirjoitettu inline-funktioksi, niin kaantaja valitt=
aa
's' ei ole 'nelion' jasen. Funktio voidaan esitella vasta, kun 'nelio'- luo=
kka
on ensin esitelty.

/***************/
/* Teht4       */
Joudutaan muuttamaan ympyra- ja nelioluokkia , koska kolmion testaamiseen
tarvitaan myos keskipisteita.

/***************/
/* Teht9       */
#include <stdio.h>
#include <string.h>

class tiedosto {
  FILE *f;
  char nimi[13];     // tiedoston nimi
  int nro;           // tiedoston numero
public:
  tiedosto(char *s,int k) { strcpy(nimi,s); nro=k; luku=0; f = NULL; }
  int avaa() {
    f = fopen(nimi,"r");
    if (f == NULL) return nro;
    return 0;
  }
  int lue();
  int sulje() { if ( f ) fclose(f); }
  ~tiedosto() { sulje(); }
};

int tiedosto::lue()
{
  int luku;          // mika tiedoston kirjain luettiin
  while (!feof(f)) { luku = fgetc(f); if (luku) break; }
  return luku;
}

int tiedostot(tiedosto &a, tiedosto &b, tiedosto &*c)
{
  int i;
  int s;
  try {
    if ( ( s = a.avaa() ) != 0 ) throw;
    if ( ( s = b.avaa() ) != 0 ) throw;
    if ( ( s = c.avaa() ) != 0 ) throw;
    s =  a.lue() + b.lue() + c.lue(); throw;
  }
  catch (...) {
    c.sulje();
    b.sulje();
    a.sulje();
  }
  return s;
}

int main(void)
{
  int k;
  tiedosto a("tied1.txt",1), b("tied2.txt",2), c("tied3.txt",3);

  k = tiedostot(&a,&b,&c);
  printf("\n\n%d\n",k);

  return 0;
}




From mhjh@tukki.jyu.fi Tue Nov 22 15:54 EET 1994
Received: from tukki.jyu.fi by tarzan.math.jyu.fi with SMTP
	(1.37.109.11/16.2) id AA048282465; Tue, 22 Nov 1994 15:54:25 +0200
Return-Path: <mhjh@tukki.jyu.fi>
X-Charset: ISO_8859-1
Received: by tukki.jyu.fi id AA03125
  (5.67a/IDA-1.4.4 for vesal@tarzan.math.jyu.fi); Tue, 22 Nov 1994 15:54:03 +0200
Date: Tue, 22 Nov 1994 15:53:59 +0200 (EET)
From: Mika Harri Haverila <mhjh@tukki.jyu.fi>
To: Vesa Lappalainen <vesal@tukki.jyu.fi>
Subject: Mika Haverila/demo9/3,7
Message-Id: <Pine.SOL.3.91.941122155325.2793B-100000@tukki>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=ISO-8859-1
Content-Transfer-Encoding: QUOTED-PRINTABLE
Status: O
X-Status: 


/*

Teht 3.

 - inline ei onnistu, koska luokkaa nelio ei ole viel„ m„„ritelty...


Teht 7.

 - Uusi operaattori [] huolehtii, indeksirajojen tarkkailusta.
   Ja aina kun viitataan taulukkoon operaattori tarkistaa indeksirajat, ja
   palauttaa virhetapauksessa taulukon alkion t[koko].

*/


From kamava@tarzan.math.jyu.fi Tue Nov 22 14:31 EET 1994
Received: from cc.jyu.fi by tarzan.math.jyu.fi with SMTP
	(1.37.109.11/16.2) id AA133377468; Tue, 22 Nov 1994 14:31:08 +0200
Return-Path: <kamava@tarzan.math.jyu.fi>
Received: from tarzan.math.jyu.fi by cc.jyu.fi with SMTP id AA05843
  (5.67a/IDA-1.4.4); Tue, 22 Nov 1994 14:20:44 +0200
Received: by tarzan.math.jyu.fi
	(1.37.109.11/16.2) id AA111676810; Tue, 22 Nov 1994 14:20:10 +0200
From: Kari Varvikko <kamava@tarzan.math.jyu.fi>
Message-Id: <199411221220.AA111676810@tarzan.math.jyu.fi>
X-Charset: ISO_8859-1
Subject: Kari Varvikko/demo9/2-5,7
To: vesal@jyu.fi
Date: Tue, 22 Nov 1994 14:20:10 EET
X-Mailer: Elm [revision: 109.14]
Status: O
X-Status: 

Kari Varvikko 	Demo9

Teht 2.	Jos on abstrakti luokka shape, niin esim. piirtamisessa
	kaytetaan taman luokan virtuaalista funktiota. Silloin
	destructorin taytyy tietenkin olla virtuaalinen, jotta
	sita voidaan kayttaa alemmasta luokasta.

	Koodin luettavuus karsii ja jos destructori on virtuaalinen
	niin saattaapi tulla konflikti, kun kaytetaan vaaraa 
	desturctoria.

Teht 3. Kyseessa lienee ystavaluokan ominaisuus, ettei nain ole
	mahdollista tehda.

Teht 4. Jouduttaisiin kirjoittamaan hirmuisasti lisariveja. 
	Ystavafunktioiden avulla homma hoituisi jouhevasti.

Teht 5. Ilmeisesti virhe on se, etta ilman sijoituksen maarittelya
	tapahtuu muunnos doubleksi, ilman etta vasemman puoleisesta
	arvosta tulee missaan tapauksessa kyseisen luokan olio,
	joten arvo on talloin vain jotenkin saatu reaaliluku.

Teht 7. Heraa kysymys: miksei toimisi? Toimii ainakin siksi, etta
	on maaritelty operaattori, jolla voidaan kyseinen
	taulukkoon viittaus suorittaa ja paluuarvona saadaan
	referenssi kyseiseen taulukon kohtaan. Jos ei palautettaisi
	referennssia, niin sijoitus ei olisi mahdollista.


--
Kari Varvikko  -  kamava@jyu.fi

