From f9fb7110616cd9436b18acd56d58eab411be6880 Mon Sep 17 00:00:00 2001 From: Miloslav Macko Date: Thu, 7 Mar 2024 12:40:31 +0100 Subject: [PATCH] 7.3 --- cv3/program.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 cv3/program.c diff --git a/cv3/program.c b/cv3/program.c new file mode 100644 index 0000000..ba4e622 --- /dev/null +++ b/cv3/program.c @@ -0,0 +1,132 @@ +#include +#include +#include +#include +#define MAX_LENGTH 10 //Definícia maximálnej dĺžky reťazca +bool check(int d, int m, int y); + + int main() +{ + char input[MAX_LENGTH]; //deklarácia vstupneho reťazca + scanf("%s", input); //načítanie vstupu + int d,m,y; //deklarácia premenných deň, mesiac, rok + + sscanf(input,"%d.%d.%d",&d,&m,&y);//Prevod reťazca zo vstupu na celočíselné hodnoty + //Ak sa vo vstupe nachádzaju neplatné znaky, v premenných d,m,y sa objavia nuly, ktoré funkcia check vyhodnotí ako nesprávne + + if(!check(d,m,y) || d == 0 || m < 1 || y < 1 || m > 12){ //Overenie vstupu + printf("Nespravny datum\n"); + return 0; + } + + switch(m){ + case 1: //Mesiace s počtom dní 31 + case 3: + case 5: + case 7: + case 8: + case 10: + if(d > 24){ //Ak je vstupný deň väčší ako 24 znamená to že o týždeň je ďalší mesiac + m++; + d = (d+7)-31; + }else{ + d+=7; //Ak by nenastal prechod mesiacom, zvýši sa len hodnota deň + } + break; + + case 2: //Špeciálny prípad február + if(y%4==0){ //Overenie prestupného roka + if(d > 22){ + m++; + d = (d+7)-29; + }else{ + d+=7; + } + }else{ + if(d > 21){ + m++; + d = (d+7)-28; + }else{ + d+=7; + } + } + break; + + case 12: //Špeciálny prípad december; ak je deň väčší ako 24, znamená to ďalší rok + if(d > 24){ + y++; + m = 1; + d = (d+7)-31; + }else{ + d+=7; + } + break; + + case 4: //Mesiace s počtom dní 30 + case 6: + case 9: + case 11: + if(d > 23){ + m++; + d = (d+7)-30; + }else{ + d+=7; + } + break; + } + if(d < 10){ //Výpis dátumu posunutého o týždeň + if(m < 10){ + printf(" %d.0%d.%d\n\n", d,m,y); + return 0; + } + printf(" %d.%d.%d\n\n", d,m,y); + return 0; + } + if(m < 10){ + printf("%d.0%d.%d\n\n", d,m,y); + return 0; + } + printf("%d.%d.%d\n\n", d,m,y); + return 0; +} + +bool check(int d, int m, int y){ //Funkcia na overenie platnosti vstupu (napr.: 31.4 <- neplatný dátum) + bool a = true; +switch(m){ + case 1: + case 3: + case 5: + case 7: + case 8: + case 10: + case 12: + if(d < 1 || d > 31){ + a = false; + } + break; + case 4: + case 6: + case 9: + case 11: + if(d < 1 || d > 30){ + a = false; + } + break; + case 2: + if(y%4 == 0){ + if(d < 1 || d > 29){ + a = false; + break; + } + }else{ + if(d < 1 || d > 28){ + a = false; + break; + } + } + } + return a; +} + + +