//steffen Linssen
#include <algorithm> //hier ist random_shuffle zu finden
#include <iostream> //cin, cout und endl
#include <string>
#include <cstring>
#include <iterator>
#include <array>
#include <stdio.h>
#include <random>
#define dimArray 9
#define arrayH 9
#define arrayL 9
using namespace std;
string str ="425319786"; // string beispiel
// zwei Arten Arrays zu definieren
//int intArray[dimArray] = {4, 2, 5, 3, 1, 9, 7, 8, 6}; --> nicht verwenden
//----------------------------------------------------------------------------------------------------------------
// array ausgabe
void array_ausgabe(char (&ref_array)[arrayH][arrayL]){
for(int h = 0; h < arrayH; h++){
for(int l = 0; l <arrayL; l++){
cout << ref_array[h][l] << " ";
}
cout << endl;
}
}
//----------------------------------------------------------------------------------------------------------------
// string sotieren
/*
void sort_string_auto(){
string sortstr = str;
sort(sortstr.begin(), sortstr.end());
cout << str << endl << endl << sortstr << endl << endl; // erst ausgabe vom alten string
}
*/
//----------------------------------------------------------------------------------------------------------------
// array sortieren
void copy_array_auto(char (&ref_array)[arrayH][arrayL], char (&ref_copy)[arrayH][arrayL]){
for(int h = 0; h < arrayH; h++){
for(int l = 0; l < arrayL; l++){
ref_copy[h][l] = ref_array[h][l];
}
}
array_ausgabe(ref_copy);
}
//----------------------------------------------------------------------------------------------------------------
// random_shuffle array, string, etc.
void random_shuffle(){
int v[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //beispiel mit array
string st ="123456789"; // string beispiel
random_shuffle(&st[0], &st[5]); // funktion, bereich definierbar in klammern
cout << endl << endl << st << endl << endl; //ausgabe für string
for (size_t i = 0; i < 10; ++i){ // ausgabe vom array
cout << v[i];
}
}
//----------------------------------------------------------------------------------------------------------------
//string zu array kopieren
/*
void append_to_string(){
// fuer lediglich ein Zeichen beispiel
/*
int i;
i = rand() % 10 +1;
string text = "Random Number ";
text += std::to_string(i);
cout << endl << endl << text << endl;
// fuer mehrere Zeichen
// /*
int i;
string text = "test text: ";
for(int z = 0; z <= 5; z++){ // immer +1 bedenken!!!
i = rand() % 20;
text += to_string(i);
text += " "; // leerzeichen hinzufuegen dazwischen
}
cout << endl << endl << "ausgabe append to string :" <<text << endl; // ausgabe
}
*/
//----------------------------------------------------------------------------------------------------------------
// scan ein array
void scan_array(const char object, bool start){ // objekt nachdem man scannt, startpunkt --> vorne == 0, hinten == 1
int found = 0; // hochzaehler
// 1-d array
/*
char v[dimArray] = {'1', '5', '3', '4', '5', '6', '7', '5', '9'}; //beispiel array
if(start == 0){ // von vorne zaehlen
for(int i = 0; i < dimArray; i++){
if(v[i] == object) found++;
}
}
if(start == 1){
for(int i = dimArray; i >= 0; i--){
if(v[i] == object) found++;
}
}
cout << endl << "anzahl gefunden: " << found << endl;
*/
// 2-d char array scannen und anzahl an gefundenen stellen ausgeben:
char two[dimArray][dimArray] = {
{'1', '2', '3', '4', '5', '6', '7', '5', '6'},
{'1', '2', '3', '5', '2', '6', '7', '1', '0'}
};
for (int h = 0; h < dimArray; h++)
{
for (int l = 0; l < dimArray; l++)
{
if (two[h][l] == object)
{
found++;
}
}
}
cout << endl << "anzahl gefunden: " << found << endl;
// 2-d char array scannen fuer spezifischen wert einfach
int h = dimArray; //NOCH MIT DIMARRAY!!!!!
int l = dimArray;
int hei = 0;
int len = 0;
int count = 0;
int count_num = 2; // veraendern fuer naechsten wert
for (h = dimArray; h >= 0; h--)
{
for (l = dimArray; l >= 0; l--)
{
if (two[h][l] == object)
{
if(count == count_num){
hei = h;
len = l;
}
count++;
}
}
}
// pos gespeichert in hei und len
cout << "pos: " << endl << endl << "hoehe: " << hei << endl << "breite: " << len << endl;
// groessten wert in 2D array finden
char b = '1';
for(int h = 0; h < dimArray; h++){
for(int l = 0; l < dimArray; l++){
if(two[h][l] >= b) b = two[h][l];
}
}
cout << endl << endl << "groesster Wert im Array: " << b << endl << endl;
// Histogramm:
int int_array[arrayH][arrayL];
int bereich = 3;
int area_h = bereich -1;
int area_w = bereich -1;
int pre_area_h = 0;
int pre_area_w = 0;
int count_hist = 0;
bool end = false;
int b_count = 1;
while(end == false){
for(h = pre_area_h = 0; h <= area_h; h++){
for(l = pre_area_w; l <= area_w; l++){
count_hist = count_hist + int_array[h][l];
}
}
cout << "Bereich " << b_count << ": " << count_hist << endl;
pre_area_h = area_h;
area_h = area_h + bereich; //bereich einstellbar
if(area_w >= arrayL-1 && area_h >= arrayH) end = true;
if(area_h >= arrayH){
pre_area_h = 0;
area_h = bereich -1;
area_w = area_w + bereich;
pre_area_w = area_w;
}
b_count++;
}
}
//----------------------------------------------------------------------------------------------------------------
// koordinatensystem zeichnen
void coordinate_system(const int pos, char (&ref_array)[arrayH][arrayL]){ // pos == 0 --> linker rand, unterer rand
// pos == 1 --> mitte, mitte
// pos == 2 --> linker rand, mitte
// pos == 3 --> mitte, unten
// array mit Punkten initialisieren
/*
for(int h = 0; h < arrayH; h++){
for(int l = 0; l <arrayL; l++){
ref_array[h][l] = '.';
}
}
*/
// pos == 0 --> linker rand, unterer rand
if(pos == 0){
for(int h = 0; h < arrayH; h++){
for(int l = 0; l <arrayL; l++){
if(l == 0){
ref_array[h][l] = '+';
}
else if(h == (arrayH-1)){
ref_array[h][l] = '+';
}
else{
ref_array[h][l] = '.';
}
}
}
}
// pos == 1 --> mitte, mitte
if(pos == 1){
for(int h = 0; h < arrayH; h++){
for(int l = 0; l <arrayL; l++){
if(l == (arrayL/2)){
ref_array[h][l] = '+';
}
else if(h == (arrayH/2)){
ref_array[h][l] = '+';
}
else{
ref_array[h][l] = '.';
}
}
}
}
// pos == 2 --> linker rand, mitte
if(pos == 2){
for(int h = 0; h < arrayH; h++){
for(int l = 0; l <arrayL; l++){
if(l == 0){
ref_array[h][l] = '+';
}
else if(h == (arrayH/2)){
ref_array[h][l] = '+';
}
else{
ref_array[h][l] = '.';
}
}
}
}
// pos == 3 --> mitte, unten
if(pos == 3){
for(int h = 0; h < arrayH; h++){
for(int l = 0; l <arrayL; l++){
if(l == (arrayL/2)){
ref_array[h][l] = '+';
}
else if(h == (arrayH-1)){
ref_array[h][l] = '+';
}
else{
ref_array[h][l] = '.';
}
}
}
}
//array_ausgabe(ref_array);
}
void funktionen(char (&ref_array)[arrayH][arrayL], int type){
if(type == 0){ //x^2 funktion
coordinate_system(3, ref_array);
float val;
float y;
int ypos;
int shift;
cout << "stauchung/streckung der parabel: "; cin >> val; cout << endl;
for(int x = -arrayL; x < arrayL; x++)
{
y = val*(-x)*(x);
ypos = y +(arrayH-1);
shift = x + (arrayL/2);
if(ypos < arrayL && ypos > 0) ref_array[ypos][shift]= '#';
}
}
array_ausgabe(ref_array);
}
int main ( ) {
// rand funktion!!!!
char test_array[arrayH][arrayL];
char two[arrayH][arrayL] = {
{'1', '5', '3', '4', '5', '6', '7', '5', '9'},
{'1', '5', '3', '4', '5', '3', '7', '5', '9'}
};
char copy_of_two[arrayH][arrayL]; // hier hin wird das hin kopiert
copy_array_auto(two, copy_of_two);
random_shuffle();
scan_array('5', 0);
//coordinate_system(3, test_array);
funktionen(test_array, 0);
return 0;
}