Untitled
unknown
plain_text
2 years ago
3.4 kB
9
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
int validareCNP(const char *cnp) {
int lungimeCNP = strlen(cnp);
if (lungimeCNP != 13) {
return 0;
}
for (int i = 0; i < lungimeCNP; ++i) {
if (!isdigit(cnp[i])) {
return 0;
}
}
return 1;
}
void afisareCNP(const char *cnp) {
printf("CNP-ul este: %s\n", cnp);
}
void determinareSex(const char *cnp) {
int sex = cnp[0] - '0';
if (sex == 1 || sex == 3 || sex == 5 || sex == 7) {
printf("Persoana este de sex masculin.\n");
}
else if (sex == 2 || sex == 4 || sex == 6 || sex == 8) {
printf("Persoana este de sex feminin.\n");
}
else {
printf("Sexul nu este specificat corect.\n");
}
}
void afisareDataNasterii(const char *cnp) {
char an[3], luna[3], zi[3];
strncpy(an, cnp + 1, 2);
an[2] = '\0';
strncpy(luna, cnp + 3, 2);
luna[2] = '\0';
strncpy(zi, cnp + 5, 2);
zi[2] = '\0';
printf("Data de nastere este: %s.%s.19%s\n", zi, luna, an);
}
void calculVarsta(const char *cnp) {
char an[3], luna[3], zi[3];
strncpy(an, cnp + 1, 2);
an[2] = '\0';
strncpy(luna, cnp + 3, 2);
luna[2] = '\0';
strncpy(zi, cnp + 5, 2);
zi[2] = '\0';
int an_int = atoi(an);
int luna_int = atoi(luna);
int zi_int = atoi(zi);
time_t t = time(NULL);
struct tm *tm_curent = localtime(&t);
int varsta = tm_curent->tm_year + 1900 - (1900 + an_int);
if ((tm_curent->tm_mon + 1) < luna_int || ((tm_curent->tm_mon + 1) == luna_int && tm_curent->tm_mday < zi_int)) {
varsta--;
}
if (varsta < 0 || varsta > 120) {
printf("Varsta persoanei nu este realista.\n");
}
else {
printf("Varsta persoanei este: %d ani\n", varsta);
}
}
void calculSumaCifrelor(const char *cnp) {
int suma = 0;
for (int i = 0; i < 12; ++i) {
suma += cnp[i] - '0';
}
printf("Suma cifrelor din CNP este: %d\n", suma);
printf("Suma in baza 2: %o\n", suma); // Afisarea in baza 2 (octal)
printf("Suma in baza 8: %o\n", suma); // Afisarea in baza 8 (octal)
printf("Suma in baza 10: %d\n", suma); // Afisarea in baza 10 (zecimal)
printf("Suma in baza 16: %X\n", suma); // Afisarea in baza 16 (hexazecimal)
}
int main() {
char cnp[14];
int optiune;
do {
printf("\nAlegeti o optiune:\n");
printf("0. Iesire\n");
printf("1. Afisare CNP\n");
printf("2. Determinare sex\n");
printf("3. Afisare data de nastere\n");
printf("4. Calcul varsta\n");
printf("5. Calcul suma cifrelor din CNP\n");
printf("Optiune: ");
scanf("%d", &optiune);
switch (optiune) {
case 0:
printf("Iesire...\n");
break;
case 1:
printf("Introduceti CNP-ul: ");
scanf("%s", cnp);
if (validareCNP(cnp)) {
afisareCNP(cnp);
}
else {
printf("CNP-ul introdus nu este valid!\n");
}
break;
case 2:
if (validareCNP(cnp)) {
determinareSex(cnp);
}
else {
printf("Nu s-a introdus inca un CNP valid!\n");
}
break;
case 3:
if (validareCNP(cnp)) {
afisareDataNasterii(cnp);
}
else {
printf("Nu s-a introdus inca un CNP valid!\n");
}
break;
case 4:
if (validareCNP(cnp)) {
calculVarsta(cnp);
}
else {
printf("Nu s-a introdus inca un CNP valid!\n");
}
break;
case 5:
if (validareCNP(cnp)) {
calculSumaCifrelor(cnp);
}
else {
printf("Nu s-a introdus inca un CNP valid!\n");
}
break;
default:
printf("Optiune invalida. Reincercati.\n");
}
} while (optiune != 0);
return 0;
}
Editor is loading...
Leave a Comment