mikronik24

Untitled

Nov 28th, 2021
756
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <time.h>
  4.  
  5. //time_t poczatek;
  6. //time_t koniec;
  7.  
  8. clock_t begin;
  9. clock_t end;
  10.  
  11. int charToInt(char *c)
  12. {
  13.     int wynik = 0;
  14.     int i = 0;
  15.     int k = strlen(c);
  16.  
  17.     while(i < k)
  18.     {
  19.         wynik *= 10;
  20.         wynik += (c[i] - '0');
  21.         i++;
  22.     }
  23.  
  24.     return wynik;
  25. }
  26.  
  27. long double wyk_rek(long double liczba)
  28. {
  29.     if(liczba < 2)
  30.         return 1;
  31.     else return liczba * wyk_rek(liczba-1);
  32. }
  33.  
  34. long double wyk_ite(long double liczba)
  35. {
  36.     long double wynik = 1;
  37.  
  38.     while(liczba > 1){
  39.         wynik *= liczba;
  40.         liczba--;
  41.     }
  42.  
  43.     return wynik;
  44. }
  45.  
  46.  
  47. void wybierz_rodzaj(char rodzaj, int liczba)
  48. {
  49.  
  50.  
  51.     if(rodzaj == 'r')
  52.     {
  53.         printf("Wybrano rekurencyjny sposob obliczenia silni. \n");
  54.         //poczatek = time(NULL);
  55.         begin = clock();
  56.         printf("%Lf\n", wyk_rek(liczba));
  57.         //koniec = time(NULL);
  58.         end = clock();
  59.         double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
  60.         printf("Czas obliczenia wyniku za pomoca metody rekurencyjnej dla liczby %d wyniosl %f sekund\n", liczba, time_spent);
  61.     }
  62.     else if(rodzaj == 'i')
  63.     {
  64.         printf("Wybrano iteracyjny sposob obliczenia silni. \n");
  65.         //poczatek = time(NULL);
  66.         begin = clock();
  67.         printf("%Lf\n", wyk_ite(liczba));
  68.         //koniec = time(NULL);
  69.         end = clock();
  70.         double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
  71.         printf("Czas obliczenia wyniku za pomoca metody iteracyjnej dla liczby %d wyniosl %f sekund\n", liczba, time_spent);
  72.     }
  73.     else
  74.     {
  75.         printf("Podano niepoprawny format wykonania! Mozesz uruchomic ponowni program z odpowiednim parametrami, lub wpisac teraz (r - wykonanie rekurencyjne, i - wykonanie iteracyjne, q - zakonczenie programu) : \n");
  76.         scanf("%c", &rodzaj);
  77.         if(rodzaj == 'q'){
  78.             return;
  79.         }else {
  80.             wybierz_rodzaj(rodzaj, liczba);
  81.         }
  82.     }
  83. }
  84.  
  85.  
  86.  
  87. int main(int argc, char *Argv[]) {
  88.     int liczba;
  89.     char rodzaj;
  90.  
  91.     rodzaj = *Argv[1];
  92.     liczba = charToInt(Argv[2]);
  93.     wybierz_rodzaj(rodzaj, liczba);
  94.  
  95.     return 0;
  96. }
RAW Paste Data