Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
3.4 kB
2
Indexable
Never
#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;
}
Leave a Comment