------------------------HEADER------------------------------------------------------------------------ #pragma once struct MY_VERT { double * crd; //crd[0] – x; crd[1] – y }; struct MY_LINE { MY_VERT pt[2]; //pt[0] – początek odcinku, pt[1] – koniec odcinku }; void MY_LINE_Init(MY_LINE* line, MY_VERT* P1, MY_VERT* P2); //Wykonuje wszystkie czynności po inicjowaniu . // Ustala punkty A i B jako punkty początku i końca odcinku AB void MY_LINE_Print(MY_LINE* line); //Drukujemy na monitor punkty początku i końca odcinku AB void MY_LINE_Inverse(MY_LINE* line); //Wymieniamy pomiędzy sobą punkty początku i końca odcinku void MY_LINE_Free(MY_LINE* line); //Wykonuje wszystkie czynności po de-alokowaniu AB. void MY_VERT_Free(MY_VERT* vert); MY_VERT* MY_VERT_Init(double x, double y); void MY_LINE_Copy(MY_LINE* source, MY_LINE* destination); ----------------------------------------------------.CPP-------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------- // NaukaNaFialko.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include "MY_structs.h" int main() { MY_VERT *vA = MY_VERT_Init(0.0, 1.0); //Przekazujemy współrzędne przez listę argumentów MY_VERT *vB = MY_VERT_Init(1.0, -1.0); MY_LINE AB, CD; MY_LINE_Init(&AB, vA, vB); //Wykonuje wszystkie czynności po inicjowaniu . // Ustala punkty A i B jako punkty początku i końca odcinku AB MY_LINE_Init(&CD, NULL, NULL); MY_LINE_Print(&AB); //Drukujemy na monitor punkty początku i końca odcinku AB MY_LINE_Print(&CD); //CD = AB; MY_LINE_Copy(&AB, &CD); MY_LINE_Inverse(&CD); //Wymieniamy pomiędzy sobą punkty początku i końca odcinku MY_LINE_Print(&CD); MY_LINE_Free(&AB); //Wykonuje wszystkie czynności po de-alokowaniu AB. MY_LINE_Free(&CD); MY_VERT_Free(vA); vA = NULL; MY_VERT_Free(vB); vB = NULL; return 1; } void MY_LINE_Init(MY_LINE* line, MY_VERT* P1, MY_VERT* P2) { line->pt[0].crd = (double*)malloc(2 * sizeof(double)); line->pt[1].crd = (double*)malloc(2 * sizeof(double)); if (P1 == NULL) { line->pt[0].crd[0] = 0; line->pt[0].crd[1] = 0; } else { line->pt[0].crd[0] = P1->crd[0]; line->pt[0].crd[1] = P1->crd[1]; } if (P2 == NULL) { line->pt[1].crd[0] = 0; line->pt[1].crd[1] = 0; } else { line->pt[1].crd[0] = P2->crd[0]; line->pt[1].crd[1] = P2->crd[1]; } } MY_VERT* MY_VERT_Init(double x, double y) { MY_VERT* Tmp = (MY_VERT*)malloc(sizeof(MY_VERT)); if (!Tmp) { exit(1); } Tmp->crd = (double*)malloc(2 * sizeof(double)); Tmp->crd[0] = x; Tmp->crd[1] = y; return Tmp; } void MY_LINE_Print(MY_LINE* line) { printf("Punkt X\n"); printf("%lf %lf\n", line->pt[0].crd[0], line->pt[0].crd[1]); printf("Punkt Y\n"); printf("%lf %lf\n", line->pt[1].crd[0], line->pt[1].crd[1]); } void MY_LINE_Inverse(MY_LINE* line) { MY_LINE TMP; TMP.pt[0].crd = (double*)malloc(2 * sizeof(double)); TMP.pt[1].crd = (double*)malloc(2 * sizeof(double)); MY_LINE_Copy(line, &TMP); line->pt[0].crd[0] = TMP.pt[1].crd[0]; line->pt[0].crd[1] = TMP.pt[1].crd[1]; line->pt[1].crd[0] = TMP.pt[0].crd[0]; line->pt[1].crd[1] = TMP.pt[0].crd[1]; MY_LINE_Free(&TMP); } void MY_LINE_Free(MY_LINE* line) { for (size_t i = 0; i < 2; i++) { if (line->pt[i].crd) { free(line->pt[i].crd); line->pt[i].crd = NULL; } else { exit(1); } } } void MY_VERT_Free(MY_VERT* vert) { if (vert->crd) { free(vert->crd); vert->crd = NULL; } } void MY_LINE_Copy(MY_LINE* source, MY_LINE* destination) { destination->pt[0].crd[0] = source->pt[0].crd[0]; destination->pt[0].crd[1] = source->pt[0].crd[1]; destination->pt[1].crd[0] = source->pt[1].crd[0]; destination->pt[1].crd[1] = source->pt[1].crd[1]; }