Advertisement
Guest User

Untitled

a guest
Jul 17th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.38 KB | None | 0 0
  1. #include <cstdlib>
  2. #include<stdio.h>
  3. #include <stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7. int requiredStepsToStop(int actualSpeed, int accelleration);
  8.  
  9. int main(int argc, char** argv) {
  10.  
  11.     FILE *PLIK;
  12.     int AktualnaPredkosc = 0;
  13.     int MaxPredkosc = 0;
  14.     int MaxKroki = 0;
  15.     int Przyspieszenie = 0;
  16.     int i;
  17.     int brakujaceKroki = 0;
  18.     bool dzialaj = true;
  19.     int kroki = 0;
  20.     int pozostaleKroki = 0;
  21.     int przewidywaneKroki = 0;
  22.     int poprzednieKroki = 0;
  23.  
  24.     //int tab[11][2] = { {1, 200}, {2, 400}, {3, 600}, {4, 800}, {5, 1000}, {6, 1200}, {7, 1400}, {8, 1600}, {9, 1800}, {10, 2000}, {11, 2200},};
  25.  
  26.     PLIK = fopen("plik.txt", "w");
  27.     printf("Zadaj kroki: ");
  28.     scanf("%d", &MaxKroki);
  29.     printf("Zadaj predkosc: ");
  30.     scanf("%d", &MaxPredkosc);
  31.     printf("Zadaj przyspieszenie: ");
  32.     scanf("%d", &Przyspieszenie);
  33.     pozostaleKroki = MaxKroki - 1;
  34.  
  35.  
  36.     AktualnaPredkosc += 1;
  37.     // kroki += 1;
  38.     fprintf(PLIK, "Kroki  PrÄ™d.\n");
  39.     fprintf(PLIK, "%5d\t%4d\n", kroki, AktualnaPredkosc);
  40.     int idx=0;
  41.     while (dzialaj)
  42.     {
  43.         printf("iter: %5d krok:%4d",idx++ , kroki);
  44.         if (pozostaleKroki > requiredStepsToStop(AktualnaPredkosc, Przyspieszenie)) // sprawdzenie czy pozostala liczba krokow jest wieksza od wymaganych do zatrzymania
  45.         {
  46.             if (AktualnaPredkosc != MaxPredkosc) //jesli aktualna predkosc jest rozna od max
  47.             {
  48.                 przewidywaneKroki = AktualnaPredkosc + Przyspieszenie; //przewidywane kroki do wykonania do przyspieszenia
  49.                 if (MaxKroki - (kroki + przewidywaneKroki) >= requiredStepsToStop(AktualnaPredkosc + Przyspieszenie, Przyspieszenie)) //jesli po wykonaniu przewidywanych krokow pozostanie krokow do hamowania
  50.                 {
  51.                     AktualnaPredkosc += Przyspieszenie;
  52.                     if (AktualnaPredkosc > MaxPredkosc)
  53.                     {
  54.                         AktualnaPredkosc = MaxPredkosc;
  55.                     }
  56.                     pozostaleKroki -= AktualnaPredkosc;
  57.                     kroki += AktualnaPredkosc;
  58.  
  59.                 }
  60.                 else //jesli po wykonaniu przewidywanych krokow zabrakloby do hamowania
  61.                 {
  62.                     if (pozostaleKroki - MaxPredkosc >= requiredStepsToStop(AktualnaPredkosc, Przyspieszenie)) // aktualna predkosc jest maksymalna, sprawdzenie czy mozna wykonac kroki
  63.                     {  
  64.                         kroki += MaxPredkosc;
  65.                         pozostaleKroki -= MaxPredkosc;
  66.  
  67.                     }
  68.                     else
  69.                     {
  70.                         brakujaceKroki = pozostaleKroki - requiredStepsToStop(AktualnaPredkosc, Przyspieszenie); //przy utrzymaniu dodanie brakujacych krokow
  71.                         kroki += brakujaceKroki;
  72.                         pozostaleKroki -= brakujaceKroki;
  73.                         dzialaj = false;
  74.                     }
  75.                 }
  76.             }
  77.             else
  78.             {
  79.                 if (pozostaleKroki - MaxPredkosc >= requiredStepsToStop(AktualnaPredkosc, Przyspieszenie)) // aktualna predkosc jest maksymalna, sprawdzenie czy mozna wykonac kroki
  80.                 {      
  81.                     kroki += MaxPredkosc;
  82.                     pozostaleKroki -= MaxPredkosc;
  83.  
  84.                 }
  85.                 else
  86.                 {
  87.                     brakujaceKroki = pozostaleKroki - requiredStepsToStop(AktualnaPredkosc, Przyspieszenie); //przy utrzymaniu dodanie brakujacych krokow
  88.                     kroki += brakujaceKroki;
  89.                     pozostaleKroki -= brakujaceKroki;
  90.                     dzialaj = false;
  91.                 }
  92.             }
  93.         }
  94.         else
  95.         {
  96.             dzialaj = false;
  97.         }
  98.        
  99.         for(int i = poprzednieKroki + 1; i <= kroki; i++)
  100.         {
  101.             fprintf(PLIK, "%5d\t%4d\n", i, AktualnaPredkosc);
  102.         }
  103.         poprzednieKroki = kroki;
  104.     }
  105.     if (AktualnaPredkosc > 0) //jesli nie jest zatrzymany hamujemy
  106.     {
  107.         bool stopped = false;
  108.         int przewidywanaPredkosc = 0;
  109.         while (!stopped) //dopoki nie jest zatrzymany
  110.         {
  111.             przewidywanaPredkosc = AktualnaPredkosc - Przyspieszenie;
  112.             if (przewidywanaPredkosc >= 0) {
  113.                 AktualnaPredkosc = przewidywanaPredkosc;
  114.             }
  115.             else
  116.             {
  117.                 AktualnaPredkosc = 0;
  118.             }
  119.  
  120.             kroki += AktualnaPredkosc;
  121.  
  122.             for(int i = poprzednieKroki + 1; i <= kroki; i++)
  123.             {
  124.                 fprintf(PLIK, "%5d\t%4d\n", i, AktualnaPredkosc);
  125.             }
  126.             poprzednieKroki = kroki;
  127.  
  128.             if (AktualnaPredkosc == 0)
  129.             {
  130.                 stopped = true;
  131.             }
  132.         }
  133.     }
  134.  
  135.     fprintf(PLIK, "%d %d\n", kroki + 1, AktualnaPredkosc);
  136.     fclose(PLIK);
  137.     return 0;
  138. }
  139.  
  140. int requiredStepsToStop(int actualSpeed, int accelleration) {
  141.     int diff = 0;
  142.     int speed = actualSpeed;
  143.     int acc = accelleration;
  144.     int requiredSteps = 0;
  145.     bool stopped = false;
  146.     int n=0;
  147.     while (!stopped)
  148.     {
  149.         diff = speed - acc;
  150.         if (diff > 0)
  151.         {
  152.             requiredSteps += diff;
  153.             speed = diff;
  154.         }
  155.         else
  156.         {
  157.             stopped = true;
  158.         }
  159.         n++;
  160.     }
  161.     printf("iteracje %d\n",n);
  162.     return requiredSteps;
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement