Advertisement
wojtas626

[C] Macierz rzadka

Jan 17th, 2015
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.72 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define SIZE_X 4
  5. #define SIZE_Y 3
  6.  
  7.  
  8. struct Point
  9. {
  10.     double value;
  11.     int x;
  12.     int y;
  13.     struct Point *next;
  14. };
  15.  
  16.  
  17. void addElement(struct Point **headPointer, double matrixValue, int matrixX, int matrixY)
  18. {
  19.     struct Point *pointer;
  20.     pointer = *headPointer;
  21.  
  22.     if (matrixValue != 0)
  23.     {
  24.         if(pointer == NULL)
  25.         {
  26.             pointer = (struct Point*)malloc(sizeof(struct Point));
  27.             pointer->value = matrixValue;
  28.             pointer->x = matrixX;
  29.             pointer->y = matrixY;
  30.             pointer->next = NULL;
  31.             *headPointer = pointer;
  32.         }
  33.         else
  34.         {
  35.             while (pointer->next != NULL)
  36.             {
  37.                 pointer = pointer->next;
  38.             }
  39.             pointer->next = (struct Point*)malloc(sizeof(struct Point));
  40.             pointer = pointer->next;
  41.             pointer->value = matrixValue;
  42.             pointer->x = matrixX;
  43.             pointer->y = matrixY;
  44.             pointer->next = NULL;
  45.         }
  46.     }
  47.  
  48.  
  49. }
  50.  
  51.  
  52. void showAll(struct Point *head)
  53. {
  54.     if (head != NULL)
  55.     {
  56.         printf("%lf (%d,%d)\n", head->value, head->x, head->y);
  57.  
  58.         while(head->next != NULL)
  59.         {
  60.             head = head->next;
  61.             printf("%lf (%d,%d)\n", head->value, head->x, head->y);
  62.         }
  63.     }
  64. }
  65.  
  66.  
  67. void findMaxMin(struct Point *head, struct Point **max, struct Point **min)
  68. {
  69.     if (head != NULL)
  70.     {
  71.         *max = head;
  72.         *min = head;
  73.  
  74.         while (head->next != NULL)
  75.         {
  76.             head = head->next;
  77.             if (head->value > (*max)->value)
  78.             {
  79.                 *max = head;
  80.             }
  81.             if (head->value < (*min)->value)
  82.             {
  83.                 *min = head;
  84.             }
  85.         }
  86.     }
  87. }
  88.  
  89.  
  90. int main()
  91. {
  92.     int i, j;
  93.     double matrix[SIZE_X][SIZE_Y];
  94.     struct Point *head, *maxElement, *minElement;
  95.  
  96.     head = NULL;
  97.     maxElement = NULL;
  98.     minElement = NULL;
  99.  
  100.     // inicjalizacja macierzy
  101.     for(i = 0; i < SIZE_X; i++)
  102.     {
  103.         printf("Wprowadz elementy %d wiersza (%d):", (i+1), SIZE_Y);
  104.         for(j = 0; j < SIZE_Y; j++)
  105.         {
  106.             scanf("%lf", &matrix[i][j]);
  107.         }
  108.     }
  109.  
  110.     // dodawanie elemntow macierzy rzadkiej
  111.     for(i = 0; i < SIZE_X; i++)
  112.     {
  113.         for(j = 0; j < SIZE_Y; j++)
  114.         {
  115.             addElement(&head, matrix[i][j], (i+1), (j+1));
  116.         }
  117.     }
  118.  
  119.     showAll(head);
  120.  
  121.     findMaxMin(head, &maxElement, &minElement);
  122.     printf("\n\nMin: %lf (%d,%d)\n", minElement->value, minElement->x, minElement->y);
  123.     printf("Max: %lf (%d,%d)\n", maxElement->value, maxElement->x, maxElement->y);
  124.  
  125.  
  126.     return 0;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement