Facebook
From Que, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 228
  1. ------------------------HEADER------------------------------------------------------------------------
  2. #pragma once
  3.  
  4. struct MY_VERT
  5. {
  6.         double * crd;   //crd[0] – x; crd[1] – y
  7. };
  8.  
  9.  
  10. struct MY_LINE
  11. {
  12.         MY_VERT pt[2];  //pt[0] – początek odcinku, pt[1] – koniec odcinku
  13. };
  14.  
  15. void MY_LINE_Init(MY_LINE* line, MY_VERT* P1, MY_VERT* P2);       //Wykonuje wszystkie czynności po inicjowaniu .
  16.                                                                  // Ustala punkty A i B jako punkty początku i końca odcinku AB
  17. void MY_LINE_Print(MY_LINE* line);       //Drukujemy na monitor punkty początku i końca odcinku AB
  18.  
  19. void MY_LINE_Inverse(MY_LINE* line);   //Wymieniamy pomiędzy sobą punkty początku i końca odcinku
  20.  
  21. void MY_LINE_Free(MY_LINE* line);     //Wykonuje wszystkie czynności po de-alokowaniu AB.
  22.  
  23. void MY_VERT_Free(MY_VERT* vert);  
  24.  
  25. MY_VERT* MY_VERT_Init(double x, double y);
  26.  
  27. void MY_LINE_Copy(MY_LINE* source, MY_LINE* destination);
  28.  
  29.  
  30.  
  31.  
  32.  
  33. ----------------------------------------------------.CPP--------------------------------------------------------------
  34. --------------------------------------------------------------------------------------------------------------------------
  35. // NaukaNaFialko.cpp : Defines the entry point for the console application.
  36. //
  37.  
  38. #include "stdafx.h"
  39. #include <stdio.h>
  40. #include <stdlib.h>
  41. #include <malloc.h>
  42. #include "MY_structs.h"
  43.  
  44.  
  45. int main()
  46. {
  47.         MY_VERT *vA = MY_VERT_Init(0.0, 1.0); //Przekazujemy współrzędne przez listę argumentów
  48.         MY_VERT *vB = MY_VERT_Init(1.0, -1.0);
  49.  
  50.         MY_LINE AB, CD;
  51.         MY_LINE_Init(&AB, vA, vB);       //Wykonuje wszystkie czynności po inicjowaniu .
  52.                                                                          // Ustala punkty A i B jako punkty początku i końca odcinku AB
  53.         MY_LINE_Init(&CD, NULL, NULL);
  54.         MY_LINE_Print(&AB);       //Drukujemy na monitor punkty początku i końca odcinku AB
  55.         MY_LINE_Print(&CD);
  56.         //CD = AB;
  57.         MY_LINE_Copy(&AB, &CD);
  58.         MY_LINE_Inverse(&CD);   //Wymieniamy pomiędzy sobą punkty początku i końca odcinku
  59.         MY_LINE_Print(&CD);
  60.  
  61.         MY_LINE_Free(&AB);     //Wykonuje wszystkie czynności po de-alokowaniu AB.
  62.         MY_LINE_Free(&CD);
  63.  
  64.         MY_VERT_Free(vA);   vA = NULL;
  65.         MY_VERT_Free(vB);   vB = NULL;
  66.  
  67.         return 1;
  68. }
  69.  
  70. void MY_LINE_Init(MY_LINE* line, MY_VERT* P1, MY_VERT* P2)
  71. {
  72.         line->pt[0].crd = (double*)malloc(2 * sizeof(double));
  73.         line->pt[1].crd = (double*)malloc(2 * sizeof(double));
  74.         if (P1 == NULL)
  75.         {
  76.                 line->pt[0].crd[0] = 0;
  77.                 line->pt[0].crd[1] = 0;
  78.         }
  79.         else
  80.         {
  81.                 line->pt[0].crd[0] = P1->crd[0];
  82.                 line->pt[0].crd[1] = P1->crd[1];
  83.         }
  84.         if (P2 == NULL)
  85.         {
  86.                 line->pt[1].crd[0] = 0;
  87.                 line->pt[1].crd[1] = 0;
  88.         }
  89.         else
  90.         {
  91.                 line->pt[1].crd[0] = P2->crd[0];
  92.                 line->pt[1].crd[1] = P2->crd[1];
  93.         }
  94. }
  95.  
  96. MY_VERT* MY_VERT_Init(double x, double y)
  97. {
  98.         MY_VERT* Tmp = (MY_VERT*)malloc(sizeof(MY_VERT));
  99.         if (!Tmp)
  100.         {
  101.                 exit(1);
  102.         }
  103.         Tmp->crd = (double*)malloc(2 * sizeof(double));
  104.         Tmp->crd[0] = x;
  105.         Tmp->crd[1] = y;
  106.  
  107.         return Tmp;
  108. }
  109.                                                                                                                                          
  110. void MY_LINE_Print(MY_LINE* line)
  111. {
  112.         printf("Punkt X\n");
  113.         printf("%lf      %lf\n", line->pt[0].crd[0], line->pt[0].crd[1]);
  114.         printf("Punkt Y\n");
  115.         printf("%lf      %lf\n", line->pt[1].crd[0], line->pt[1].crd[1]);
  116. }
  117.  
  118. void MY_LINE_Inverse(MY_LINE* line)
  119. {
  120.         MY_LINE TMP;
  121.         TMP.pt[0].crd = (double*)malloc(2 * sizeof(double));
  122.         TMP.pt[1].crd = (double*)malloc(2 * sizeof(double));
  123.         MY_LINE_Copy(line, &TMP);
  124.  
  125.         line->pt[0].crd[0] = TMP.pt[1].crd[0];
  126.         line->pt[0].crd[1] = TMP.pt[1].crd[1];
  127.         line->pt[1].crd[0] = TMP.pt[0].crd[0];
  128.         line->pt[1].crd[1] = TMP.pt[0].crd[1];
  129.         MY_LINE_Free(&TMP);
  130. }
  131.  
  132. void MY_LINE_Free(MY_LINE* line)
  133. {
  134.         for (size_t i = 0; i < 2; i++)
  135.         {
  136.                 if (line->pt[i].crd)
  137.                 {
  138.                         free(line->pt[i].crd);
  139.                         line->pt[i].crd = NULL;
  140.                 }
  141.                 else
  142.                 {
  143.                         exit(1);
  144.                 }
  145.         }
  146. }
  147.  
  148. void MY_VERT_Free(MY_VERT* vert)
  149. {
  150.         if (vert->crd)
  151.         {
  152.                 free(vert->crd);
  153.                 vert->crd = NULL;
  154.         }
  155. }
  156.  
  157. void MY_LINE_Copy(MY_LINE* source, MY_LINE* destination)
  158. {
  159.         destination->pt[0].crd[0] = source->pt[0].crd[0];
  160.         destination->pt[0].crd[1] = source->pt[0].crd[1];
  161.         destination->pt[1].crd[0] = source->pt[1].crd[0];
  162.         destination->pt[1].crd[1] = source->pt[1].crd[1];
  163. }