/**
* @file laba5_1.c
* @author Нездоймишпка А.О., гр. 515б
* @date 21 лютого 2023
* @brief Лабораторна робота № 5
*
* Застосування вказівників. Завдання 1
*/
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include "your_serial_number_transform_function.h"
int main() {
setlocale(LC_ALL, "ukr");
int serialNumber;
printf("Введіть серійний номер акумулятора (6 цифр): ");
if (scanf("%d", &serialNumber) != 1) {
printf("Невірний ввід. Будь ласка, введіть 6-значний серійний номер.\n");
return 1;
}
int conveyor, year, month, day;
int status = transformSerialNumber(serialNumber, &conveyor, &year, &month, &day);
if (status == 1) {
printf("Успішно розшифровано:\n");
printf("Номер конвеєру: %d\n", conveyor);
printf("Рік: %d\n", year);
printf("Місяць: %d\n", month);
printf("День: %d\n", day);
} else {
printf("Не вдалося розшифрувати серійний номер.\n");
}
return 0;
}
/**
* @file your_serial_number_transform_function.h
* @author Нездоймишпка А.О., гр. 515б
* @date 21 лютого 2023
* @brief Лабораторна робота № 5
*
* Застосування вказівників. Завдання 1
*/
#ifndef YOUR_SERIAL_NUMBER_TRANSFORM_FUNCTION_H
#define YOUR_SERIAL_NUMBER_TRANSFORM_FUNCTION_H
// Оголошення функції для перетворення серійного номеру
int transformSerialNumber(int serialNumber, int* conveyor, int* year, int* month, int* day);
#endif
/**
* @file your_serial_number_transform_function.с
* @author Нездоймишпка А.О., гр. 515б
* @date 21 лютого 2023
* @brief Лабораторна робота № 5
*
* Застосування вказівників. Завдання 1
*/
#include <stdlib.h>
#include "your_serial_number_transform_function.h"
// Функція для перетворення серійного номеру акумулятора
// Параметри:
// serialNumber - вхідний параметр, серійний номер акумулятора
// conveyorNumber - вказівник на номер конвеєру
// year - вказівник на рік випуску акумулятору
// month - вказівник на місяць випуску акумулятору
// Повертає:
// 1, якщо перетворення було успішним
// 0, якщо перетворення було неуспішним
int transformSerialNumber(int serialNumber, int* conveyor, int* year, int* month, int* day) {
if (serialNumber < 100000 || serialNumber > 999999) {
return 0; // серійний номер має бути шестицифровим
}
if (conveyor == NULL || year == NULL || month == NULL || day == NULL) {
return 0; // перевірка на null для вказівників
}
*conveyor = serialNumber / 100000; // отримання першої цифри
// Розшифровка останньої цифри року
int lastDigitOfYear = (serialNumber / 10000) % 10;
// Розшифровка року випуску
*year = 2010 + lastDigitOfYear;
// Розшифрування місяця
*month = (serialNumber % 10000) / 100;
// Перевірка коректності місяця
if (*month < 1 || *month > 12) {
return 0;
}
// Розшифрування дня
*day = serialNumber % 100;
// Перевірка коректності дня
if (*day < 1 || *day > 31) {
return 0;
}
return 1; // перетворення пройшло успішно
}