// PESEL 0.5 // patryk.gradys@gmail.com // ©2015 Patryk Gradys // #include#include const short biezacyRok = 2015; // metoda na liczenie "enterow" int ileRekordow() { FILE * pFile = fopen ("plik.txt","r");; char c; int n = 0; do { c = fgetc(pFile); if (c == '\n') { n++; } } while (c != EOF); n += 1; // ostatni rekord pliku nie ma "entera" na koncu fclose (pFile); printf ("Ilosc rekordow w pliku: %d\n", n); return n; } bool zbadajPesel(char* nrPesel) { char pesel[11]; if (strlen(nrPesel) != 11) { return false; } else { int i; for(i = 0; i < 11; i++) { pesel[i] = nrPesel[i] - '0'; } // a+3b+7c+9d+e+3f+7g+9h+i+3j+k int suma = pesel[0] + 3 * pesel[1] + 7 * pesel[2] + 9 * pesel[3] + pesel[4] + 3 * pesel[5] + 7 * pesel[6] + 9 * pesel[7] + pesel[8] + 3 * pesel[9] + pesel[10]; if (suma % 10 == 0) { return true; } else { return false; } } } short obliczWiek(char* nrPesel) { char pesel[11]; int i; for(i = 0; i < 11; i++) { pesel[i] = nrPesel[i] - '0'; } short wiek; short rokUrodzenia = 10 * pesel[0] + pesel[1]; // w formacie RR short miesiacUrodzenia = 10 * pesel[2] + pesel[3]; // w formacie MM if (miesiacUrodzenia >= 81 && miesiacUrodzenia <= 92){ wiek = biezacyRok - (rokUrodzenia + 1800); } else if (miesiacUrodzenia >= 1 && miesiacUrodzenia <= 12){ wiek = biezacyRok - (rokUrodzenia + 1900); } else if (miesiacUrodzenia >= 21 && miesiacUrodzenia <= 32){ wiek = biezacyRok - (rokUrodzenia + 2000); } else if (miesiacUrodzenia >= 41 && miesiacUrodzenia <= 52){ wiek = biezacyRok - (rokUrodzenia + 2100); } else if (miesiacUrodzenia >= 61 && miesiacUrodzenia <= 72){ wiek = biezacyRok - (rokUrodzenia + 2200); } return wiek; } int main() { FILE * fileIn = fopen ("plik.txt", "r"); FILE * fileOut = fopen ("data_out.txt", "w"); fseek(fileOut, 0, SEEK_SET); if (fileIn != NULL) { int n = ileRekordow(); char imie[30], nazwisko[30], pesel[12]; int i, wzrost, wiek; for(i = 0; i < n; i++) { fscanf(fileIn, "%s %s %s %d", &imie, &nazwisko, &pesel, &wzrost); if (zbadajPesel(pesel)) { wiek = obliczWiek(pesel); fprintf(fileOut, "%s %s %d\n", imie, nazwisko, wiek); } } fclose (fileIn); fclose (fileOut); } else { printf("Blad odczytu pliku"); } return 0; }