Informatică, întrebare adresată de scoicadelac, 9 ani în urmă

Nu stiu ce mi lipseste din codul c++ ptr aceasta problema ................ajutor va rog
Cerinţa
Se citesc 3 numere naturale z l a. Să se decidă dacă reprezintă o dată calendaristică corectă, în format zi luna an.

Date de intrare
Programul citește de la tastatură numerele z l a.

Date de ieşire
Programul afișează pe ecran mesajul DA, dacă cele trei numere formează o dată calendaristică corectă, respectiv NU în caz contrar.

Restricţii şi precizări
1850 ≤ a ≤ 2500
0 ≤ z,l ≤ 100
codul meu c++:
#include

using namespace std;

int main ()
{
int z, l, a;
cin >> z >> l >> a;
if ( z > 0 && l > 0 && z <= 31 && l <= 12 && a >= 1850 && a <= 2500)
{
cout << "DA";
}
if ( z == 0 || l == 0 || a == 0)
{
cout << "NU";
}

return 0;
}
PRIMESC DOAR 60 DE PUNCTE


AntiEaglesDavids: 31 februarie nu exista :). Indiciu asta ar trebui sa te ajute destul ;)
artur99: <u>te</u>st
AntiEaglesDavids: =)))
artur99: ??

Răspunsuri la întrebare

Răspuns de sfechisalin
12
Rezolvarea de 100p. :D:D
Anexe:

sfechisalin: sau http://ideone.com/21Ilg5
Răspuns de artur99
4
C++:

#include <iostream>
using namespace std;
int main(){
  int z, l, a, chk1, chk2, chk3;
  cin>>z>>l>>a;
  chk1 = (l>0 && l<13 && a>0 && z>0 && z<=31);
  //Prima verificare - verificam daca luna si anul e ok, si daca ziua se incadreaza in limitele max si min
  chk2 = ( (l==1||l==3||l==5||l==7||l==8||l==10||l==12) && z<=31 || (l==2||l==4||l==6||l==9||l==11) && z<=30 );
  //Aci verificam fiecare luna in parte daca nu cumva depaseste limita de zile
  chk3 = ( l!=2 || ( (a%400==0 || a%4==0 && a%100!=0) && z<=29 || !(a%400==0 || a%4==0 && a%100!=0) && z<=28 ));
  //Aci verificam luna februarie, cu anul bisect si toate chestiile
  if(chk1 && chk2 && chk3) cout<<"DA";
  else cout<<"NU";
}

//++ Atasat


Regex: 
(probably you won't need it, but it's the best way)

^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

PHP:

<?php
$z = $_GET['z'];
$l = $_GET['l'];
$a = $_GET['a'];
echo checkdate($l, $z, $a)?"DA":"NU";
Anexe:

artur99: aaau
sfechisalin: poi ce ai,vrut sa pun una in C++ si una in pascal/java *
artur99: am uitat sa pun in php
artur99: stai sa mai dau un edit
artur99: :D
sfechisalin: ok :))
artur99: no, gata =)))
AntiEaglesDavids: are la rezolvari de acum de se plictiseste :))
artur99: :)))
scoicadelac: MULTUMESC!!
Alte întrebări interesante