Advertisement
Zjonn

Figury

Feb 27th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.90 KB | None | 0 0
  1. /*
  2.  * BST.h
  3.  *
  4.  *  Created on: 25.02.2017
  5.  *      Author: danie_000
  6.  */
  7.  
  8. #ifndef FIGURY_H_
  9. #define FIGURY_H_
  10.  
  11. struct punkt {
  12.     float x, y;
  13. };
  14.  
  15. struct kolo {
  16.     float x, y;
  17.     float r;
  18. };
  19.  
  20. struct kwadrat {
  21.     float x1, y1;
  22.     float x2, y2;
  23. };
  24.  
  25. enum typFig{PUNKT = 1,KWADRAT = 2, KOLO = 3};
  26.  
  27. typedef struct Fig *Figura;
  28.  
  29. //Wymagany standard c11! Anonimowe unie są fajne to dlatego :D
  30. struct Fig {
  31.     int typfig;
  32.     union {
  33.         struct punkt punkt;
  34.         struct kolo kolo;
  35.         struct kwadrat kwadrat;
  36.     };
  37. };
  38.  
  39. void narysuj(Figura f);
  40. void przesun(Figura f, float x, float y);
  41.  
  42. int zawiera(Figura f, float x, float y);
  43.  
  44. Figura newPunkt(float x, float y);
  45. Figura newKolo(float x, float y, float r);
  46. Figura newKwadrat(float x1, float y1, float h);
  47.  
  48.  
  49.  
  50. #endif /* FIGURY_H_ */
  51.  
  52.  
  53. ---------------------------------------------------------------------------------------------------------------------------
  54.  
  55.  
  56. /*
  57.  * Figury.c
  58.  *
  59.  *  Created on: 25.02.2017
  60.  *      Author: danie_000
  61.  */
  62. #include "Figury.h"
  63. #include <stdlib.h>
  64. #include <stdarg.h>
  65. #include <stdio.h>
  66.  
  67. void narysuj(Figura f) {
  68.     switch (f->typfig) {
  69.     case 1:
  70.         printf("Rysuję punkt o wspolrzednych x=%0.1f y=%0.1f\n", f->punkt.x,
  71.                 f->punkt.y);
  72.         break;
  73.     case 2:
  74.         printf(
  75.                 "Rysuję kwadrat o wspolrzednych x1=%0.1f y1=%0.1f x2=%0.1f y2=%0.1f\n",
  76.                 f->kwadrat.x1, f->kwadrat.y1, f->kwadrat.x2, f->kwadrat.y2);
  77.         break;
  78.     case 3:
  79.         printf(
  80.                 "Rysuję kolo o wspolrzednych x=%0.1f y=%0.1f i promieniu r=%0.1f\n",
  81.                 f->kolo.x, f->kolo.y, f->kolo.r);
  82.         break;
  83.     default:
  84.         printf("Nie znam figury o id: %d :(\n", f->typfig);
  85.         break;
  86.     }
  87. }
  88.  
  89. void przesun(Figura f, float x, float y) {
  90.     switch (f->typfig) {
  91.     case PUNKT:
  92.         f->punkt.x += x;
  93.         f->punkt.x += y;
  94.         break;
  95.     case KWADRAT:
  96.         f->kwadrat.x1 += x;
  97.         f->kwadrat.y1 += y;
  98.         f->kwadrat.x2 += x;
  99.         f->kwadrat.y2 += y;
  100.         break;
  101.     case KOLO:
  102.         f->kolo.x += x;
  103.         f->kolo.y += y;
  104.         break;
  105.     default:
  106.         printf("Nie znam figury o id: %d :(\n", f->typfig);
  107.     }
  108. }
  109.  
  110. int zawiera(Figura f, float x, float y) {
  111.     switch (f->typfig) {
  112.     case PUNKT:
  113.         if (f->punkt.x == x && f->punkt.y == y)
  114.             return 1;
  115.         break;
  116.     case KWADRAT:
  117.         if (f->kwadrat.x1 <= x && f->kwadrat.x2 >= x && f->kwadrat.y1 <= y
  118.                 && f->kwadrat.y2 >= y)
  119.             return 1;
  120.         break;
  121.     case KOLO:
  122.         if ((f->kolo.x - x * f->kolo.x - x) + (f->kolo.y - y * f->kolo.y - y)
  123.                 <= (f->kolo.r * f->kolo.r))
  124.             return 1;
  125.         break;
  126.     default:
  127.         printf("Nie znam figury o id: %d :(\n", f->typfig);
  128.         return 0;
  129.     }
  130.     return 0;
  131. }
  132.  
  133. Figura newPunkt(float x, float y) {
  134.     Figura f = malloc(sizeof(Figura*));
  135.     f->typfig = 1;
  136.     f->punkt.x = x;
  137.     f->punkt.y = y;
  138.     return f;
  139. }
  140.  
  141. Figura newKolo(float x, float y, float r) {
  142.     Figura f = malloc(sizeof(Figura*));
  143.     f->typfig = 3;
  144.     f->kolo.x = x;
  145.     f->kolo.y = y;
  146.     f->kolo.r = r;
  147.     return f;
  148. }
  149.  
  150. Figura newKwadrat(float x1, float y1, float h) {
  151.  
  152.     Figura f = malloc(sizeof(Figura*));
  153.     f->typfig = 2;
  154.     f->kwadrat.x1 = x1;
  155.     f->kwadrat.y1 = y1;
  156.     f->kwadrat.x2 = x1 + h;
  157.     f->kwadrat.y2 = y1 + h;
  158.     return f;
  159. }
  160. ---------------------------------------------------------------------------------------------------------------------------
  161.  
  162. /*
  163.  * Zespolone.h
  164.  *
  165.  *  Created on: 25.02.2017
  166.  *      Author: danie_000
  167.  */
  168.  
  169. #ifndef ZESPOLONE_H_
  170. #define ZESPOLONE_H_
  171.  
  172. typedef struct zes *Number;
  173.  
  174. struct zes {
  175.     double real;
  176.     double imaginary;
  177. };
  178.  
  179. Number add_new(Number a, Number b);
  180. Number sub_new(Number a, Number b);
  181. Number mult_new(Number a, Number b);
  182. Number div_new(Number a, Number b);
  183.  
  184. void add(Number a, Number b);
  185. void sub(Number a, Number b);
  186. void mult(Number a, Number b);
  187. void divn(Number a, Number b);
  188. void print(Number n);
  189.  
  190. Number newNumber(int real, int imaginary);
  191.  
  192. #endif /* ZESPOLONE_H_ */
  193.  
  194. ---------------------------------------------------------------------------------------------------------------------------
  195.  
  196.  
  197. /*
  198.  * Zespolone.c
  199.  
  200.  *
  201.  *  Created on: 25.02.2017
  202.  *      Author: danie_000
  203.  */
  204. #include <stdlib.h>
  205. #include <stdio.h>
  206. #include "Zespolone.h"
  207.  
  208. Number add_new(Number a, Number b) {
  209.     return newNumber(a->real + b->real, a->imaginary + b->imaginary);
  210. }
  211.  
  212. Number sub_new(Number a, Number b) {
  213.     return newNumber(a->real - b->real, a->imaginary - b->imaginary);
  214. }
  215.  
  216. Number mult_new(Number a, Number b) {
  217.     return newNumber(a->real * b->real - a->imaginary * b->imaginary,
  218.             a->imaginary * b->real + a->real * b->imaginary);
  219. }
  220.  
  221. Number div_new(Number a, Number b) {
  222.     if (b->real == 0 && b->imaginary == 0) {
  223.         printf("Nie wolno dzielic przez zero!");
  224.         return NULL;
  225.     }
  226.     return newNumber(
  227.             (a->real * b->real + a->imaginary + b->imaginary)
  228.                     / (b->real * b->real + b->imaginary * b->imaginary),
  229.             (a->imaginary * b->real - a->real * b->imaginary)
  230.                     / (b->real * b->real + b->imaginary * b->imaginary));
  231. }
  232.  
  233. void add(Number a, Number b) {
  234.     b->real += a->real;
  235.     b->imaginary += a->imaginary;
  236. }
  237.  
  238. void sub(Number a, Number b) {
  239.     b->real = a->real - b->real;
  240.     b->imaginary = a->imaginary - b->imaginary;
  241. }
  242.  
  243. void mult(Number a, Number b) {
  244.     int br = b->real;
  245.     int bi = b->imaginary;
  246.     b->real = a->real * br - a->imaginary * bi;
  247.     b->imaginary = a->imaginary * br + bi * a->real;
  248. }
  249.  
  250. void divn(Number a, Number b) {
  251.     if (b->real == 0 && b->imaginary == 0) {
  252.         printf("Nie wolno dzielic przez zero!");
  253.         return;
  254.     }
  255.     int br = b->real;
  256.     int bi = b->imaginary;
  257.     b->real = (a->real * br + a->imaginary + bi) / (br * br + bi * bi);
  258.     b->imaginary = (a->imaginary * br - a->real * bi) / (br * br + bi * bi);
  259. }
  260.  
  261. void print(Number n) {
  262.     if (n->imaginary == 0)
  263.         printf("%0.1f\n", n->real);
  264.     else if (n->imaginary == 1)
  265.         printf("%0.1f + i\n", n->real);
  266.     else
  267.         printf("%0.1f + %0.1fi\n", n->real, n->imaginary);
  268.  
  269. }
  270.  
  271. Number newNumber(int real, int imaginary) {
  272.     Number w = malloc(sizeof(Number*));
  273.     w->imaginary = imaginary;
  274.     w->real = real;
  275.     return w;
  276. }
  277.  
  278.  
  279. ---------------------------------------------------------------------------------------------------------------------------
  280.  
  281.  
  282. /*
  283.  ============================================================================
  284.  Name        : Zespolone.c
  285.  Author      : Daniel Dubiel
  286.  Version     :
  287.  Copyright   : PizzaWare licence
  288.  Description : Hello World in C, Ansi-style
  289.  ============================================================================
  290.  */
  291.  
  292. #include <stdio.h>
  293. #include <stdlib.h>
  294. #include "Figury.h"
  295. #include "Zespolone.h"
  296.  
  297. void zespolone();
  298. void figury();
  299.  
  300. int main(void) {
  301.     zespolone();
  302.     figury();
  303.     puts(""); /* prints  */
  304.     return EXIT_SUCCESS;
  305. }
  306.  
  307. void zespolone() {
  308.     Number n1 = newNumber(12, 10);
  309.     Number n2 = newNumber(191, 1);
  310.     print(n1);
  311.     print(n2);
  312.     mult(n1, n2);
  313.     print(n2);
  314.     divn(n2,n1);
  315.     print(n1);
  316. }
  317.  
  318. void figury() {
  319.     Figura kolo = newKolo(9, 27, 0.5);
  320.     Figura k = newKwadrat(5, 4, 2);
  321.     Figura p = newPunkt(5, 5);
  322.     narysuj(kolo);
  323.     narysuj(k);
  324.     narysuj(p);
  325.     przesun(kolo, 5, 2);
  326.     narysuj(kolo);
  327.     if (zawiera(k, 5, 5))
  328.         puts("Zawiera");
  329.  
  330. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement