#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>


char* itoa(int luku, char*jono);
int LuvunSyotto(int Minimi,int Maksimi);
void SotunTarkastus(char*);

int main()

{
	char any;
    char Sotu[100];
    SotunTarkastus(Sotu);
    printf("Sotu on %s",Sotu);
    scanf("%c",&any);
return 1;

}

void SotunTarkastus(char* Sotu)
{
    int JarjNo;
    char Apu[100];
    char Merkki;
    int SyntAika,Indeksi,Paiva,Kk,Vuosi;
    char TarkJono[]="0123456789ABCDEFHJKLMNPRSTUVWXY";
    printf("\nAnna paiva: ");
    Paiva = LuvunSyotto(1,31);
    printf("\nAnna kuukausi: ");
    Kk = LuvunSyotto(1,12);
    printf("\nAnna vuosi: ");
    Vuosi = LuvunSyotto(0,99);
    printf("\nAnna vuoden jalkeiset KOLME numeroa: ");
    JarjNo = LuvunSyotto(1,999);
    printf("\nAnna viimeinen merkki huom! ISO KIRJAIN:\n ");
    scanf("%c",&Merkki);
    scanf("%c",&Merkki);
    SyntAika=Paiva*10000000+Kk*100000+Vuosi*1000+JarjNo;
    Indeksi=SyntAika%31;
    if(Merkki==TarkJono[Indeksi])
    {
        itoa(SyntAika,Apu);//Muutetaan luku merkkijonoksi
        if(SyntAika<100000000) strcpy(Sotu,"0");//jos päivä<10 lisätään 0 alkuun
        else strcpy(Sotu,"");//muuten tyhjennetään merkkijono
        strcat(Sotu,Apu);//lisätään merkkijonoon syntaika ja järjestysnumero
        Sotu[9]=Merkki;//laitetaan tarkastusmerkki loppuun
        Sotu[10]=0;//päätetäään merkkijono
        printf("\nOikein, sotu oli %s",Sotu);
    }
    else
    {
        printf("\nVÄÄRIN");
    }
}

int LuvunSyotto(int Minimi,int Maksimi)
{
	int luku;
	do
	{
	scanf("%d",&luku);
	if(luku>Minimi||luku<Maksimi) break;
	}while(1);
	return luku;

}

char* itoa(int luku, char*jono)
{
	int i=0;
	int apu,numero;
	i=log10((double)luku);//luvussa on i+1; numeroa
	jono[i+1]=0;//päätetään merkkijono eli 0 loppuun
	while(i>-1)
 {
 	apu=luku/10;
	apu=apu*10;
	numero=luku-apu; //luvun vähiten merkitsevä numero
	jono[i]=48+numero; //muutetaan numero ASCII-arvoksi
	i--;
	luku=luku/10;
 }
 	return jono;
}
  • No labels
You must log in to comment.