previous next Up Title Contents Index

22.4.4 tee_avain


Seuraava on hahmotelma siitä, miten cJasen voisi alustaa avaimensa. Jos on käytössä "viisaat kenttä- luokat", niin silloin tietenkin kukin kenttä itse osaa muuttua avaimeksi.
	/****************************************************************************/
	void cJasen::tee_avain(int kentan_nro)    
	{
	  void *p; char s[20]; unsigned char *a; 
	  int i; double d; 
	  int tyyppi;
	
	  i = sizeof(avain);
	  if ( i < 20 ) {
	    printf("TEE AVAIN: Liian pieni avainkenttä!\n");
	    return;
	  }
	
	  tyyppi = kentan_tyyppi(kentan_nro);
	  p      = kentan_osoite(kentan_nro);
	
	  switch (tyyppi) {
	    case Tjono:
	      kopioi_jono(N_S(avain),p);
	      poista_tyhjat(avain);
	      for (a=(unsigned char *)avain; *a; a++) {
	        *a = JARJESTYS.avainarvo[*a];
	      }
	      poista_tyhjat(avain);
	      return; 
	
	    case Tsotu:
	      kopioi_jono(N_S(s),p); liita_jono(N_S(s),"      ");
	      kopioi_jono(N_S(avain),s);
	      avain[0] = s[4];  /* Vaihdetaan pv ja vuosi keskenään! */
	      avain[1] = s[5];
	      avain[4] = s[0];
	      avain[5] = s[1];
	      return;
	
	    case Tint: 
	      i = *(int *)p;
	      sprintf(avain,"%+05d",i);
	      if ( avain[0] == '- ' ) avain[0]='+'- 1; /* jotta -  < + */
	      return;
	
	    case Tdouble: 
	      d = *(double *)p;
	      sprintf(avain,"%+015.7lf",d);
	      if ( avain[0] == '- ' ) avain[0]='+'- 1; /* jotta -  < + */
	      return;
	
	    default:
	      printf("TEE AVAIN: Ei ole kenttää %d!\n",kentan_nro); 
	      return;
	      
	  }
	}

Tehtävä 22.182 tee_avain

Miksi kokonais- ja reaaliluvut käsiteltiin kuten edellä eikä käyttäen aliohjelmaa kentta_jonoksi?
"Kommentoi" (eli miksi tehdään?) tee_avain aliohjelman jokainen rivi.
Miten MacAnkka ja McAnkka käsiteltäisiin?
Miten käsiteltäisiin Gauß?


previous next Up Title Contents Index