Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <cstdio>
- //#include<iostream>
- //using namespace std;
- struct tory;
- typedef struct obrot {
- struct tory* wszystkie;
- int wagony[10];
- int top;
- int liczbaTorow;
- int aktualnyTor;
- }obrotnica;
- typedef struct wag {
- struct wag* prev;
- int id;
- }wagon;
- typedef struct tory {
- wagon*wierzch;
- int liczbaWagonow;
- }tor;
- void push(wagon** wierzch, int newID) {
- wagon* nowy= new wagon;
- nowy->prev = *wierzch;
- nowy->id = newID;
- *wierzch = nowy;
- }
- int pop(wagon**wierzch) {
- wagon*temp;
- int Id;
- if (*wierzch) {
- temp = *wierzch;
- *wierzch = temp->prev;
- Id = temp->id;
- delete temp;
- return Id;
- }
- return -1;
- }
- int rozmiar(wagon* tab) {
- wagon*temp = tab;
- int size = 0;
- while (temp) {
- size++;
- temp = temp->prev;
- }
- return size;
- }
- void wczytywanieWagonow(obrotnica& glowna) {
- int liczbaWagonow, noweId;
- wagon* nowy;
- scanf("%i", &(glowna.liczbaTorow));
- glowna.wszystkie = new tor[glowna.liczbaTorow];
- for (int i = 0; i < glowna.liczbaTorow; i++) {
- glowna.wszystkie[i].wierzch = nullptr;
- scanf("%i", &liczbaWagonow);
- for (int j = 0; j < liczbaWagonow; j++) {
- scanf("%i", &noweId);
- nowy = new wagon;
- nowy->prev = 0;
- nowy->id = noweId;
- if (glowna.wszystkie[i].wierzch == nullptr) {
- glowna.wszystkie[i].wierzch = nowy;
- }
- else {
- wagon*temp = glowna.wszystkie[i].wierzch;
- while (temp->prev) {
- temp = temp->prev;
- }
- temp->prev = nowy;
- }
- }
- }
- }
- void wypisywanieWagonow(obrotnica& glowna);
- void wczytywanieRozkazow(obrotnica& glowna) {
- int liczbaRozkazow, liczba, temp;
- char rozkaz;
- scanf("%i", &liczbaRozkazow);
- while(liczbaRozkazow) {
- scanf("%c %i", &rozkaz, &liczba);
- switch (rozkaz) {
- case 'z':
- if (glowna.liczbaTorow > 1) {
- glowna.aktualnyTor += liczba;
- if (glowna.aktualnyTor >= glowna.liczbaTorow)
- glowna.aktualnyTor = glowna.aktualnyTor % (glowna.liczbaTorow );
- }
- liczbaRozkazow--;
- //cout << glowna.aktualnyTor << endl;
- break;
- case 'o':
- if (glowna.liczbaTorow > 1) {
- glowna.aktualnyTor -= liczba%glowna.liczbaTorow;
- if (glowna.aktualnyTor < 0) {
- glowna.aktualnyTor = glowna.liczbaTorow + glowna.aktualnyTor;
- }
- }
- liczbaRozkazow--;
- //cout << glowna.aktualnyTor << endl;
- break;
- case 'w':
- while (liczba--) {
- if (glowna.top < 9) {
- temp = pop(&glowna.wszystkie[glowna.aktualnyTor].wierzch);
- if (temp == -1) {
- break;
- }
- else {
- glowna.top++;
- glowna.wagony[glowna.top] = temp;
- }
- }
- }
- //wypisywanieWagonow(glowna);
- liczbaRozkazow--;
- break;
- case 'j':
- int i = 0;
- while (liczba--&&glowna.top > -1) {
- push(&glowna.wszystkie[glowna.aktualnyTor].wierzch, glowna.wagony[glowna.top--]);
- }
- //wypisywanieWagonow(glowna);
- liczbaRozkazow--;
- break;
- }
- }
- }
- void wypisywanieWagonow(obrotnica& glowna) {
- printf("%i ", glowna.top+1);
- for (int i = glowna.top; i >= 0; i--) {
- printf("%i ", glowna.wagony[i]);
- }
- printf("\n");
- int i = glowna.aktualnyTor, j=0;
- while (j < glowna.liczbaTorow){
- if (i >= glowna.liczbaTorow)
- i = 0;
- printf("%i ", rozmiar(glowna.wszystkie[i].wierzch));
- wagon*temp = glowna.wszystkie[i].wierzch;
- while (temp) {
- printf("%i ", temp->id);
- temp = temp->prev;
- }
- printf("\n");
- i++; j++;
- }
- }
- int main() {
- obrotnica glowna;
- glowna.top = -1; glowna.aktualnyTor = 0;
- wczytywanieWagonow(glowna);
- wczytywanieRozkazow(glowna);
- wypisywanieWagonow(glowna);
- //system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement