Facebook
From Queen Macaque, 4 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 213
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. struct liczbaZ{ float reZ, imZ; };
  5. struct element { struct liczbaZ liczba; struct element *poprzedni; };
  6. int Pobierz_Dane(struct liczbaZ *liZ, char *zn);
  7. struct element* Poloz_na_stosie(struct element *gora, struct liczbaZ *liZ);
  8. struct element* Zdejmij_ze_stosu(struct element *gora, struct liczbaZ *liZ);
  9. void Pokaz_stos(struct element *gora);
  10. struct liczbaZ Dodaj(struct liczbaZ LZ1, struct liczbaZ LZ2);
  11. struct liczbaZ Odejmij(struct liczbaZ LZ1, struct liczbaZ LZ2);
  12. struct liczbaZ Pomnoz(struct liczbaZ LZ1, struct liczbaZ LZ2);
  13. int main()
  14. { struct liczbaZ lZ, LZ1, LZ2;
  15. char znak; //znak dzialania
  16. int er; //Kod bledu analizy ciagu znakow
  17. struct element *gora = 0; //wskaznik na gorny elekment stosu
  18. while (1)
  19. {
  20.     printf("Podaj liczbe lub znak\n");
  21.     er = Pobierz_Dane(&lZ, &znak);
  22. if (er > 0) { gora = Poloz_na_stosie(gora, &lZ); Pokaz_stos(gora); }
  23. else { switch (znak){ case '+': if (gora->poprzedni != 0) { gora = Zdejmij_ze_stosu(gora, &LZ1); gora = Zdejmij_ze_stosu(gora, &LZ2); lZ = Dodaj(LZ1, LZ2); gora = Poloz_na_stosie(gora, &lZ); } Pokaz_stos(gora); break;case '-': if (gora->poprzedni != 0) { gora = Zdejmij_ze_stosu(gora, &LZ1); gora = Zdejmij_ze_stosu(gora, &LZ2); lZ = Odejmij(LZ1, LZ2); gora = Poloz_na_stosie(gora, &lZ); } Pokaz_stos(gora); break;
  24. case '*': if (gora->poprzedni != 0) { gora = Zdejmij_ze_stosu(gora, &LZ1); gora = Zdejmij_ze_stosu(gora, &LZ2); lZ = Pomnoz(LZ1, LZ2); gora = Poloz_na_stosie(gora, &lZ); } Pokaz_stos(gora); break;
  25. default: printf("Czy zakonczyc program?\n"); return 0; break; } }
  26. //printf("reZ = %f, imZ = %f, znak = %c\n", lZ.reZ, lZ.imZ, znak);
  27. } system("pause"); return 0;
  28. }
  29.  
  30. int Pobierz_Dane(struct liczbaZ *liZ, char *zn) { char tab[100]; //tablica tymczasowa
  31. int err; //Kod bledu analizy ciagu znakow
  32. //Pobierz ciag znakow
  33. gets(tab);
  34. //analiza ciagu znakow
  35. err = sscanf(tab, "%f %f", &liZ->reZ, &liZ->imZ);
  36. if (err == -1 || err == 0) { *zn = tab[0]; } else if (err == 1) {
  37.  liZ->imZ = 0; } return err; }
  38.  
  39.  
  40. struct element* Poloz_na_stosie(struct element *gora, struct liczbaZ *liZ) { struct element *nowy = malloc(sizeof(struct element)); //alokacja pamiecia na nowy element
  41. nowy->liczba.reZ = liZ->reZ; nowy->liczba.imZ = liZ->imZ; nowy->poprzedni = gora; return nowy; }
  42. struct element* Zdejmij_ze_stosu(struct element *gora, struct liczbaZ *liZ) { liZ->reZ = gora->liczba.reZ; liZ->imZ = gora->liczba.imZ; struct element *tymczasowy = gora->poprzedni; free(gora); return tymczasowy; }
  43. void Pokaz_stos(struct element *gora) { struct element *tymczasowy; tymczasowy = gora; system("cls"); while (tymczasowy != 0) { printf("%f +i*%f\n", tymczasowy->liczba.reZ, tymczasowy->liczba.imZ); tymczasowy = tymczasowy->poprzedni; } printf("\n"); }
  44. struct liczbaZ Dodaj(struct liczbaZ LZ1, struct liczbaZ LZ2) { struct liczbaZ LZ; LZ.reZ = LZ1.reZ + LZ2.reZ; LZ.imZ = LZ1.imZ + LZ2.imZ; return LZ; }
  45. struct liczbaZ Odejmij(struct liczbaZ LZ1, struct liczbaZ LZ2) { struct liczbaZ LZ; LZ.reZ = LZ1.reZ - LZ2.reZ; LZ.imZ = LZ1.imZ - LZ2.imZ; return LZ; }
  46. struct liczbaZ Pomnoz(struct liczbaZ LZ1, struct liczbaZ LZ2)
  47. { struct liczbaZ LZ;
  48. LZ.reZ = LZ1.reZ * LZ2.reZ - LZ1.imZ * LZ2.imZ;
  49. LZ.imZ = LZ1.reZ * LZ2.imZ + LZ1.imZ * LZ2.reZ;
  50. return LZ; }
  51. struct liczbaZ Podziel(struct liczbaZ LZ1, struct liczbaZ LZ2)
  52. { struct liczbaZ LZ;
  53. LZ.reZ = (LZ1.reZ * LZ2.reZ + LZ1.imZ * LZ2.imZ)/(LZ1.imZ*LZ1.imZ+LZ2.imZ*LZ2.imZ);
  54. LZ.imZ = (LZ1.reZ * LZ2.imZ - LZ1.imZ * LZ2.reZ)/(LZ1.imZ*LZ1.imZ+LZ2.imZ*LZ2.imZ);
  55. return LZ; }