Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include<stdio.h>
- #include <stdlib.h>
- using namespace std;
- int requiredStepsToStop(int actualSpeed, int accelleration);
- int main(int argc, char** argv) {
- FILE *PLIK;
- int AktualnaPredkosc = 0;
- int MaxPredkosc = 0;
- int MaxKroki = 0;
- int Przyspieszenie = 0;
- int i;
- int brakujaceKroki = 0;
- bool dzialaj = true;
- int kroki = 0;
- int pozostaleKroki = 0;
- int przewidywaneKroki = 0;
- int poprzednieKroki = 0;
- //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},};
- PLIK = fopen("plik.txt", "w");
- printf("Zadaj kroki: ");
- scanf("%d", &MaxKroki);
- printf("Zadaj predkosc: ");
- scanf("%d", &MaxPredkosc);
- printf("Zadaj przyspieszenie: ");
- scanf("%d", &Przyspieszenie);
- pozostaleKroki = MaxKroki - 1;
- AktualnaPredkosc += 1;
- // kroki += 1;
- fprintf(PLIK, "Kroki Pręd.\n");
- fprintf(PLIK, "%5d\t%4d\n", kroki, AktualnaPredkosc);
- int idx=0;
- while (dzialaj)
- {
- printf("iter: %5d krok:%4d",idx++ , kroki);
- if (pozostaleKroki > requiredStepsToStop(AktualnaPredkosc, Przyspieszenie)) // sprawdzenie czy pozostala liczba krokow jest wieksza od wymaganych do zatrzymania
- {
- if (AktualnaPredkosc != MaxPredkosc) //jesli aktualna predkosc jest rozna od max
- {
- przewidywaneKroki = AktualnaPredkosc + Przyspieszenie; //przewidywane kroki do wykonania do przyspieszenia
- if (MaxKroki - (kroki + przewidywaneKroki) >= requiredStepsToStop(AktualnaPredkosc + Przyspieszenie, Przyspieszenie)) //jesli po wykonaniu przewidywanych krokow pozostanie krokow do hamowania
- {
- AktualnaPredkosc += Przyspieszenie;
- if (AktualnaPredkosc > MaxPredkosc)
- {
- AktualnaPredkosc = MaxPredkosc;
- }
- pozostaleKroki -= AktualnaPredkosc;
- kroki += AktualnaPredkosc;
- }
- else //jesli po wykonaniu przewidywanych krokow zabrakloby do hamowania
- {
- if (pozostaleKroki - MaxPredkosc >= requiredStepsToStop(AktualnaPredkosc, Przyspieszenie)) // aktualna predkosc jest maksymalna, sprawdzenie czy mozna wykonac kroki
- {
- kroki += MaxPredkosc;
- pozostaleKroki -= MaxPredkosc;
- }
- else
- {
- brakujaceKroki = pozostaleKroki - requiredStepsToStop(AktualnaPredkosc, Przyspieszenie); //przy utrzymaniu dodanie brakujacych krokow
- kroki += brakujaceKroki;
- pozostaleKroki -= brakujaceKroki;
- dzialaj = false;
- }
- }
- }
- else
- {
- if (pozostaleKroki - MaxPredkosc >= requiredStepsToStop(AktualnaPredkosc, Przyspieszenie)) // aktualna predkosc jest maksymalna, sprawdzenie czy mozna wykonac kroki
- {
- kroki += MaxPredkosc;
- pozostaleKroki -= MaxPredkosc;
- }
- else
- {
- brakujaceKroki = pozostaleKroki - requiredStepsToStop(AktualnaPredkosc, Przyspieszenie); //przy utrzymaniu dodanie brakujacych krokow
- kroki += brakujaceKroki;
- pozostaleKroki -= brakujaceKroki;
- dzialaj = false;
- }
- }
- }
- else
- {
- dzialaj = false;
- }
- for(int i = poprzednieKroki + 1; i <= kroki; i++)
- {
- fprintf(PLIK, "%5d\t%4d\n", i, AktualnaPredkosc);
- }
- poprzednieKroki = kroki;
- }
- if (AktualnaPredkosc > 0) //jesli nie jest zatrzymany hamujemy
- {
- bool stopped = false;
- int przewidywanaPredkosc = 0;
- while (!stopped) //dopoki nie jest zatrzymany
- {
- przewidywanaPredkosc = AktualnaPredkosc - Przyspieszenie;
- if (przewidywanaPredkosc >= 0) {
- AktualnaPredkosc = przewidywanaPredkosc;
- }
- else
- {
- AktualnaPredkosc = 0;
- }
- kroki += AktualnaPredkosc;
- for(int i = poprzednieKroki + 1; i <= kroki; i++)
- {
- fprintf(PLIK, "%5d\t%4d\n", i, AktualnaPredkosc);
- }
- poprzednieKroki = kroki;
- if (AktualnaPredkosc == 0)
- {
- stopped = true;
- }
- }
- }
- fprintf(PLIK, "%d %d\n", kroki + 1, AktualnaPredkosc);
- fclose(PLIK);
- return 0;
- }
- int requiredStepsToStop(int actualSpeed, int accelleration) {
- int diff = 0;
- int speed = actualSpeed;
- int acc = accelleration;
- int requiredSteps = 0;
- bool stopped = false;
- int n=0;
- while (!stopped)
- {
- diff = speed - acc;
- if (diff > 0)
- {
- requiredSteps += diff;
- speed = diff;
- }
- else
- {
- stopped = true;
- }
- n++;
- }
- printf("iteracje %d\n",n);
- return requiredSteps;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement