Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma warning (disable : 4996)
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <malloc.h>
- struct pomiar {
- unsigned int nr_pomiaru;
- unsigned int nr_czujnika;
- char data_i_czas[20];
- double temp;
- struct pomiar *next = NULL;
- struct pomiar *previous = NULL;
- };
- struct glowyList
- {
- pomiar *pomiar1[4] = { NULL };
- };
- pomiar* plik(char nazwa[]);
- void ilePomiarow(pomiar* head);
- glowyList utworzenieList(pomiar* head);
- void zwolnieniePamieci(pomiar *head);
- pomiar* plik(char nazwa[])
- {
- FILE* plik;
- // otwarcie pliku
- if ((plik = fopen(nazwa, "r")) == NULL)
- {
- printf("Nie moge otworzyc pliku\n");
- exit(0);
- }
- unsigned int nr_pomiaru;
- unsigned int nr_czujnika;
- char data_i_czas[20];
- double temp;
- pomiar *head = NULL, *wsk = NULL;
- // uzupelnienie głównej listy
- while ((fscanf(plik, "%u %u %s %lf", &nr_pomiaru, &nr_czujnika, data_i_czas, &temp)) == 4)
- {
- if (head == NULL)
- {
- wsk = head = (pomiar*)malloc(sizeof(pomiar));
- }
- else
- {
- wsk = wsk->next = (pomiar*)malloc(sizeof(pomiar));
- }
- wsk->nr_pomiaru = nr_pomiaru;
- wsk->nr_czujnika = nr_czujnika;
- strcpy(wsk->data_i_czas, data_i_czas);
- wsk->temp = temp;
- wsk->next = NULL;
- }
- fclose(plik);
- if (head == NULL)
- {
- return NULL;
- }
- return head;
- }
- void ilePomiarow(pomiar* head)
- {
- if (head != NULL)
- {
- int ile = 1; // liczba pomiarow zapisanych w liscie
- pomiar *wsk = NULL;
- wsk = head;
- printf("Pierwszy element listy:\n%u %u %s %.2lf\n", wsk->nr_pomiaru, wsk->nr_czujnika, wsk->data_i_czas, wsk->temp);
- while (wsk->next!= NULL)
- {
- ++ile;
- wsk = wsk->next;
- }
- printf("Ostatni element listy:\n%u %u %s %.2lf\n", wsk->nr_pomiaru, wsk->nr_czujnika, wsk->data_i_czas, wsk->temp);
- printf("W liscie zapisanych jest %d pomiarow\n\n", ile);
- }
- else
- {
- printf("Brak pomiarow\n");
- }
- }
- glowyList utworzenieList(pomiar* head)
- {
- int i;
- glowyList Listy;
- pomiar *wsk = head;
- pomiar *glowy[4] = { NULL };
- pomiar *wsk2[4] = { NULL };
- //skopiowanie wskaźników z listy głównej do 4 wyjściowych
- while (wsk != NULL)
- {
- if (wsk->nr_czujnika == 1)
- {
- i = 0;
- if (glowy[i] == NULL)
- {
- wsk2[i] = glowy[i] = (pomiar*)malloc(sizeof(pomiar));
- }
- else
- {
- wsk2[i] = wsk2[i]->next = (pomiar*)malloc(sizeof(pomiar));
- }
- wsk2[i]->nr_pomiaru = wsk->nr_pomiaru;
- wsk2[i]->nr_czujnika = wsk->nr_czujnika;
- strcpy(wsk2[i]->data_i_czas, wsk->data_i_czas);
- wsk2[i]->temp = wsk->temp;
- wsk2[i]->next = NULL;
- wsk = wsk->next;
- }
- else if (wsk->nr_czujnika == 2)
- {
- i = 1;
- if (glowy[i] == NULL)
- {
- wsk2[i] = glowy[i] = (pomiar*)malloc(sizeof(pomiar));
- }
- else
- {
- wsk2[i] = wsk2[i]->next = (pomiar*)malloc(sizeof(pomiar));
- }
- wsk2[i]->nr_pomiaru = wsk->nr_pomiaru;
- wsk2[i]->nr_czujnika = wsk->nr_czujnika;
- strcpy(wsk2[i]->data_i_czas, wsk->data_i_czas);
- wsk2[i]->temp = wsk->temp;
- wsk2[i]->next = NULL;
- wsk = wsk->next;
- }
- else if (wsk->nr_czujnika == 3)
- {
- i = 2;
- if (glowy[i] == NULL)
- {
- wsk2[i] = glowy[i] = (pomiar*)malloc(sizeof(pomiar));
- }
- else
- {
- wsk2[i] = wsk2[i]->next = (pomiar*)malloc(sizeof(pomiar));
- }
- wsk2[i]->nr_pomiaru = wsk->nr_pomiaru;
- wsk2[i]->nr_czujnika = wsk->nr_czujnika;
- strcpy(wsk2[i]->data_i_czas, wsk->data_i_czas);
- wsk2[i]->temp = wsk->temp;
- wsk2[i]->next = NULL;
- wsk = wsk->next;
- }
- else if (wsk->nr_czujnika == 4)
- {
- i = 3;
- if (glowy[i] == NULL)
- {
- wsk2[i] = glowy[i] = (pomiar*)malloc(sizeof(pomiar));
- }
- else
- {
- wsk2[i] = wsk2[i]->next = (pomiar*)malloc(sizeof(pomiar));
- }
- wsk2[i]->nr_pomiaru = wsk->nr_pomiaru;
- wsk2[i]->nr_czujnika = wsk->nr_czujnika;
- strcpy(wsk2[i]->data_i_czas, wsk->data_i_czas);
- wsk2[i]->temp = wsk->temp;
- wsk2[i]->next = NULL;
- wsk = wsk->next;
- }
- else
- {
- wsk = wsk->next;
- }
- for (int i = 0; i < 4; ++i)
- {
- Listy.pomiar1[i] = glowy[i];
- }
- }
- return Listy;
- }
- pomiar* najwyzszaTemperatura(pomiar* pomiar1)
- {
- double max = INT_MIN;
- pomiar* wsk1 = pomiar1, *tempMax = pomiar1;
- while (wsk1 != NULL)
- {
- if (wsk1->temp > max)
- {
- max = wsk1->temp;
- tempMax = wsk1;
- }
- wsk1 = wsk1->next;
- }
- printf("Najwyzsza temperatura zanotowana za pomoca %d czujnika wynosi %lf stopni Celsjusza, zanotowano ja %s byl to %d pomiar\n", tempMax->nr_czujnika, tempMax->temp, tempMax->data_i_czas, tempMax->nr_pomiaru);
- // dolaczenie elementu listy przed glowe
- pomiar* pomiar2 = (pomiar*)malloc(sizeof(pomiar));
- pomiar2->nr_pomiaru = tempMax->nr_pomiaru;
- pomiar2->nr_czujnika = tempMax->nr_czujnika;
- strcpy(pomiar2->data_i_czas, tempMax->data_i_czas);
- pomiar2->temp = tempMax->temp;
- pomiar2->next = pomiar1;
- return pomiar2;
- }
- void zwolnieniePamieci(pomiar *head)
- {
- pomiar *wsk = head;
- while (wsk != NULL)
- {
- wsk = wsk->next;
- free(head);
- head = wsk;
- }
- }
- pomiar* listaDwukierunkowa(pomiar* pomiar1)
- {
- pomiar *wsk = pomiar1;
- pomiar *glowa = NULL, *wskg = NULL;
- while (wsk != NULL)
- {
- if (glowa == NULL)
- {
- wskg = glowa = (pomiar*)malloc(sizeof(pomiar));
- wskg->previous = NULL;
- }
- else
- {
- wskg->next = (pomiar*)malloc(sizeof(pomiar));
- wskg->next->previous = wskg;
- wskg = wskg->next;
- }
- wskg->nr_czujnika = wsk->nr_czujnika;
- wskg->nr_pomiaru = wsk->nr_pomiaru;
- wskg->temp = wsk->temp;
- strcpy(wskg->data_i_czas, wsk->data_i_czas);
- wsk = wsk->next;
- }
- return glowa;
- }
- int main()
- {
- char nazwa[40] = "pomiary.txt";
- pomiar *head = NULL, *wsk = NULL;
- head = plik(nazwa);
- printf("Glowna lista:\n\n");
- ilePomiarow(head);
- glowyList Listy = utworzenieList(head);
- // zwolnienie pamięci głownej listy
- zwolnieniePamieci(head);
- // alokacja tablicy dwukierunkowej
- pomiar *dwukierunkowa = NULL;
- dwukierunkowa = listaDwukierunkowa(Listy.pomiar1[0]);
- // wypisanie informacji o listach
- int i = 0;
- printf("Pierwsza Lista:\n\n");
- ilePomiarow(Listy.pomiar1[i]);
- printf("Druga Lista:\n\n");
- ilePomiarow(Listy.pomiar1[++i]);
- printf("Trzecia Lista:\n\n");
- ilePomiarow(Listy.pomiar1[++i]);
- printf("Czwarta Lista:\n\n");
- ilePomiarow(Listy.pomiar1[++i]);
- printf("Pierwsza Lista(lista dwukierunkowa)\n");
- ilePomiarow(dwukierunkowa);
- // dodanie elementu listy na poczatek
- for (i = 0; i < 4; ++i)
- {
- Listy.pomiar1[i] = najwyzszaTemperatura(Listy.pomiar1[i]);
- }
- dwukierunkowa = najwyzszaTemperatura(dwukierunkowa);
- // ponowne wypisanie informacji o listach
- i = 0;
- printf("\nPierwsza Lista po zmianie:\n\n");
- ilePomiarow(Listy.pomiar1[i]);
- printf("Druga Lista po zmianie:\n\n");
- ilePomiarow(Listy.pomiar1[++i]);
- printf("Trzecia Lista po zmianie:\n\n");
- ilePomiarow(Listy.pomiar1[++i]);
- printf("Czwarta Lista po zmianie:\n\n");
- ilePomiarow(Listy.pomiar1[++i]);
- printf("Pierwsza Lista(lista dwukierunkowa) po zmianie\n");
- ilePomiarow(dwukierunkowa);
- // zwolnienie pamięci 4 list
- for (int i = 0; i < 4; ++i)
- {
- zwolnieniePamieci(Listy.pomiar1[i]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement