From 2bb84babfcdb0f6d1267ed4fde89c0da6749a83f Mon Sep 17 00:00:00 2001 From: flavis Date: Sun, 24 Nov 2019 23:57:43 +0100 Subject: [PATCH] add uebung5 programs --- ws2019/ipi/uebungen/perfectShuffle.cpp | 77 +++++++++++++++++++++++++ ws2019/ipi/uebungen/readSortedArray.cpp | 59 +++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 ws2019/ipi/uebungen/perfectShuffle.cpp create mode 100644 ws2019/ipi/uebungen/readSortedArray.cpp diff --git a/ws2019/ipi/uebungen/perfectShuffle.cpp b/ws2019/ipi/uebungen/perfectShuffle.cpp new file mode 100644 index 0000000..a2f529b --- /dev/null +++ b/ws2019/ipi/uebungen/perfectShuffle.cpp @@ -0,0 +1,77 @@ +#include "cpp_headers/fcpp.hh" + +bool deck_check(int deck[], int n) { + for (int i = 0; i < n; i++) { + // compare deck with number at this position + // because initial deck is [0,1,2,3,..., n-1] + if (deck[i] != i) { + // if a difference is found, return false + return false; + } + } + // if no problem was found, deck is the original deck + return true; +} + +int main() { + // query the amount of cards that should be shuffled + int size = enter_int("How many cards do you want to be shuffled? "); + // only shuffle even number of cards + if (size <= 0, size % 2 != 0) { + print("Invalid input, please enter an even number >= 2"); + return 0; + } + // initialize the deck of cards + int deck[size]; + for (int i = 0; i "); + // quit on -1 + if (input == -1) { + break; + // print the array on 0 + } else if (input == 0) { + printf("Array = ["); + for (int n = 0; n < 10; n++) { + // last number is printed with trailing bracket and newline + if (n == 9) { + printf("%d]\n", numbers[n]); + // print out a single number with trailing space + } else { + printf("%d ", numbers[n]); + } + } + break; + // if already full, quit + } else if (i >= 10) { + print("array already full, terminating"); + break; + // quit on invalid input + } else if (input < -1) { + print("input not allowed, terminating"); + break; + // otherwise insert new input + } else { + // set last number to new input + numbers[i] = input; + // sort numbers from 0 to i + for (int k = 0; k < i; k++) { + // whenever we see a wrong ordered number + if (numbers[k] > numbers[k+1]) { + int smaller = numbers[k+1]; + int bigger = numbers[k]; + // flip the numbers + numbers[k] = smaller; + numbers[k+1] = bigger; + // and step back to compare with previous numbers + if (k <= 1) { + // there is no number before the first one + k = 0; + } else { + // step back 2, because we are adding 1 each time + k = k-2; + } + } + } + } + } +}