- ------------------------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 <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- #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];
- }