This commit is contained in:
Macko 2024-03-07 12:40:31 +01:00
parent d22428779d
commit f9fb711061

132
cv3/program.c Normal file
View File

@ -0,0 +1,132 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#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;
}