Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Brauche Hilfe bei der Bool Funktion

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 <
020
02.02.2019, 15:10 Uhr
f.-th.



Da in der Aufgabenstellung etwas von vector <int>
und standard int Arrays der Länge ANZ_ELEM steht, hatte ich vermutet das doch eine Lösung mit Containern erwartet wurde?


Zitat von fastlife:


...
Aufgabe:

1. Erstellen einer vector <int> Liste bzw. eines standard int Arrays der Länge ANZ_ELEM
-> 1.3 von Zufallszahlen, jeweils aus dem Bereich [0 ... ANZ_ELEM]

...


Wie das mit dem vector <int> etwa aussehen kann hatte ich ja mit dem 6 aus 49 Beispiel angedeutet.

Nun noch etwas zu std::array<int, Anz_Elemente im Array>:

array-container in cpp Stand 2018/19

bisher ist bei C++ zwar der std::array-container verfügbar aber die Lösungen sind,
gemessen an einem guten C++ Stil, noch nicht ganz gelungen.

C++:
#include <array>
#include <algorithm>
#include <iostream>

int main()
{
    const int arraysize = 10;
    std::array <int, arraysize> a;    // ORACLE c-array-containers-2252536.html
    for (int i = 0; i < arraysize; i++)
    {
        a[i] = ((i * 32315 ^ 393) &15);
    }
    for (auto n : a)
        std::cout << n << std::endl;
}


Bis hierher sieht das ja elegant aus.

Als nächsten Schritt lagern wir die Ausgabe in eine Funktion aus.
In sehr vielen Tutorials oder Beispielen im Netz hat man für die
Länge des std::array oft eine feste Zahl genommen und das ist dann
nicht mehr so elegant:

C++:
void gib_array_aus(std::array<int, 15> &Array);

int main()
{
    std::srand(time(NULL ));    
    std::array <int, 15> a;
    for (int i = 0; i < 15; i++)
    {
        a[i] = std::rand() % (15 + 1);
    }
    gib_array_aus(a);
}

    
void gib_array_aus(std::array<int, 15> &Array)
{
    std::cout << "{\n";
    for (auto n : Array)
        std::cout << n << std::endl;
    std::cout << "}" << std::endl;
}



Plan B, das Ganze global ist auch nicht so ganz das Rechte:

C++:
const int Anz_Elem = 10;    // global? ==> const?

void gib_array_aus(std::array<int, Anz_Elem> &Array);

int main()
{
    std::srand(time(NULL ));    
    std::array <int, Anz_Elem> a;
    for (int i = 0; i < Anz_Elem; i++)
    {
        a[i] = std::rand() % (Anz_Elem + 1);
    }
    gib_array_aus(a);
}

    
void gib_array_aus(std::array<int, Anz_Elem> &Array)
{
...


dann gibt es zu dem Thema noch verschiedene Lösungswege mit Config-Datein oder mit einem Template


Es gibt Überlegungen in C++20 folgende Lösung zu ermöglichen:

C++:
#include <array>
#include <algorithm>
#include <iostream>
#include <ctime>    // rand()

void gib_array_aus(auto &Array);

int main()
{
    const int Anz_Elem = 10;
    std::srand(time(NULL ));    
    std::array <int, Anz_Elem> a;
    for (int i = 0; i < Anz_Elem; i++)
    {
        a[i] = std::rand() % (Anz_Elem + 1);
    }
    gib_array_aus(a);
}

    
void gib_array_aus(auto &Array)
{
    std::cout << "{\n";
    for (auto n : Array)
        std::cout << n << std::endl;
    std::cout << "}" << std::endl;
}


Die letzte Lösung ist noch nicht im Cpp Standard!
Halbwegs aktuelle g++ Compiler übersetzen den Quelltext als C++14 oder höher/neuer. Andere Compiler (noch?) nicht.


Ich hoffe mal dieser Beitrag ist im Sinn des Forums.

Die Quelltexte sind nicht alle komplett. Aber, das erkennt ihr ja, das da ein paar Zeilen fehlen.

Quellen:
https://www.learncpp.com/cpp-tutorial/6-15-an-introduction-to-stdarray/
https://stackoverflow.com/questions/
bei letzterer mehrere Beispiele.
Es wurden auch noch andere Texte zu dem Thema gelesen.

MfG
f.-th.

Dieser Post wurde am 02.02.2019 um 15:37 Uhr von f.-th. editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
08.02.2019, 07:13 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wenn du schon modernes C++ (> C++11) vorschlägst, solltest du evtl für random numbers auch in diesem Fall https://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution verwenden.

Auch Variablennamen ("Array") sollten prinzipiell immer klein geschrieben sein (auch wenn das natürlich immer Ansichtssache ist). Gängige Coding-Style Regeln sind meist: Variablen klein "foo" oder camelCase ("fooBar") und Klassen Kapitälchen (FooBar). So kann man Typen und variablen besser auseinanderhalten, und es gibt weniger Fehler (stell dir vor jemand hat nun noch eine Klasse "Array" definiert ...)
--
class God : public ChuckNorris { };

Dieser Post wurde am 08.02.2019 um 07:16 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
08.02.2019, 10:33 Uhr
ao

(Operator)



Zitat von f.-th.:

Plan B, das Ganze global ist auch nicht so ganz das Rechte:

C++:
const int Anz_Elem = 10;    // global? ==> const?



Mit static const int ist es nicht mehr global.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
08.02.2019, 10:57 Uhr
ao

(Operator)



Zitat von FloSoft:
Auch Variablennamen ("Array") sollten prinzipiell immer klein geschrieben sein (auch wenn das natürlich immer Ansichtssache ist). Gängige Coding-Style Regeln sind meist: Variablen klein "foo" oder camelCase ("fooBar") und Klassen Kapitälchen (FooBar). So kann man Typen und variablen besser auseinanderhalten, und es gibt weniger Fehler (stell dir vor jemand hat nun noch eine Klasse "Array" definiert ...)

Viel wichtiger als solche formalen Styleguides ist, die Bezeichner treffend zu wählen. Es ist völlig egal, ob die Variable array, Array, ARRAY oder sonstwie heißt, sie sind alle gleich nichtssagend und damit kacke. Der Bezeichner muss die Bedeutung der Variablen beschreiben, nicht ihren Typ.

Passender wäre z.B. "randomNumbers", wobei auch das noch sehr unspezifisch ist. Wenn es sich um die Gewinnzahlen einer Lotterie handelt, würde ich vielleicht "winningSet" schreiben, um das ganz klar zu stellen (wobei Set nichts über die Art des Containers aussagt, sondern einfach nur "Satz von Zahlen" meint).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
08.02.2019, 20:40 Uhr
f.-th.



Bei einer gegebenen Aufgabe kann man sicher all das berücksichtigen was ihr anregt.

Meine Idee war es den Container array in C++ zu beschreiben und das relativ aktuell. Deshalb wurde für array a und Array gewählt. Z.B. bei einem Karten- oder Würfelspiel sollte man für ein array sicher bessere zum Spiel passende Bezeichner finden. Das sollte auch für andere Aufgaben so sein.


Es soll keine copy&paste Lösung für einfache Hausaufgaben sein, deshalb hab ich ja schon geschrieben, da geht noch etwas oder da fehlt noch etwas.


In C++ führen oft mehrere Wege zum Ziel und nicht in allen Punkten sind die Programmierer exakt einer Meinung. Das soll aber jetzt keine Aufforderung sein einen besonders chaotischen C++ Quelltext zu schreiben.

MfG
f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
11.02.2019, 10:08 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von ao:

Passender wäre z.B. "randomNumbers", wobei auch das noch sehr unspezifisch ist. Wenn es sich um die Gewinnzahlen einer Lotterie handelt, würde ich vielleicht "winningSet" schreiben, um das ganz klar zu stellen (wobei Set nichts über die Art des Containers aussagt, sondern einfach nur "Satz von Zahlen" meint).


Ja da hast du natürlich vollkommen Recht. Gut gewählte Variablennamen machen das Leben einfacher.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: