Lösungstipps bei Anfängerbeispiel bitte



  • ok danke für den tipp ich probiers mal

    muss man bei definieren des feldes eigentlich angeben wie groß es is ( also wie viele einträge rein kommen??)??



  • Ja, das machst du ja schon mit i und j. Also wäre i die Zeilen und j die Anzahl der Spalten - oder andersrum, je nachdem, wie man es verwendet und interpretiert 🙂



  • ich hab grad erst mir c++ angefangen und will mich damit privat auseinander setzen .
    Wie kann man das 2 dimensionale feld definieren???



  • double feld[100][80]; oder so, Größe muss vorher feststehen oder du musst es dynamisch anlegen



  • Hallo

    Siehe zum Beispiel hier. Am besten gleich das ganze Tutorial durcharbeiten.

    bis bald
    akari



  • Ist folgender Code cool?

    #include <algorithm>    // copy
    #include <functional>   // plus
    #include <iostream>
    #include <iterator>     // ostream_iterator
    #include <numeric>      // adjacent_difference
    #include <vector>
    
    int main()
    {
        using namespace std;
        // Gibt ein Pascalsches Dreieck aus
        for( vector< int > pscl( 1, 1 ); pscl.size() <= 10
            ; adjacent_difference( pscl.begin(), pscl.end(), pscl.begin(), plus< int >() ),
                pscl.push_back( 1 ) )
        {
            copy( pscl.begin(), pscl.end(), ostream_iterator< int >( cout, " " ) );
            cout << endl;
        }
        return 0;
    }
    

    nach der Definition von pumuckl erfüllt er doch beide Kriterien (1.elegant; in wenigen Zeilen und 2.unlesbar) - oder? 🕶

    Gruß
    Werner



  • Ja, das ist wirklich "cool".
    Und "unlesbar" ist es für einen C++ Programmierer sicherlich nicht, sondern optimal. Schlimmer sind die Pseudo-C++ Codes...



  • Finde ich nicht so toll. Dann lieber nen normalen Zähle in die for-schleife. Warum sollte man die Stelle wo die Arbeit passiert im schleifenheader verstecken? Das verwirrt nur und bringt nichts.



  • und wie greif ich später auf eine zahl in diesem feld zu??

    also ich def mit

    int p[10][10];

    und dann:
    p[1][1]=1 oder geht das anders??



  • judith schrieb:

    und wie greif ich später auf eine zahl in diesem feld zu??

    also ich def mit

    int p[10][10];

    und dann:
    p[1][1]=1 oder geht das anders??

    Ich frage mich warum man seine Zeit opfern sollte jemandem zu helfen, der nichtmal selbst die Zeit hat einen Post zu verfassen, in dem man Gross- und Kleinschreibung beachtet und die Wörter ausschreibt.



  • was soll das heißen ?
    ich hab ne konstruktive frage gestellt und nicht so nen Spam wie du!!
    also kann mir das jemand bitte beantworten



  • Ich frage mich was an Fragen konstruktiv ist 🙂

    Was den Rest angeht:

    Judith schrieb:

    also kann mir das jemand bitte beantworten

    akari schrieb:

    Hallo

    Siehe zum Beispiel hier. Am besten gleich das ganze Tutorial durcharbeiten.

    bis bald
    akari



  • judith schrieb:

    und wie greif ich später auf eine zahl in diesem feld zu??

    also ich def mit

    int p[10][10];

    und dann:
    p[1][1]=1 oder geht das anders??

    Wenn du magst, kannst du das auch gerne ausprobieren 🙂 Bei so kleinen Sachen ist es schneller ausprobiert, als zu warten bis jemand geantwortet hat 😉



  • wie mach ich das mir das feld dann ausgegeben wird???

    mit cout<<p<<endl; funktionierts leider nicht 😞



  • Vielleicht nochmal das hier lesen:

    akari schrieb:

    Hallo

    Siehe zum Beispiel hier. Am besten gleich das ganze Tutorial durcharbeiten.

    bis bald
    akari

    😉 zum dritten Mal...



  • das problem ist das da nicht das drinsteht was ich brauche

    ich bauche ein 2.dimensionales FELD!!!!!!!!!!!!!!!!!

    und das sieht ´so aus p[10][10]
    aber wie kann ich da auf die einzelnen zahlen im feld zugreifen und beim ausgeben happerts auch noch



  • Du kannst so leider nicht das Feld am Stück ausgeben, sondern nur "native" Typen wie z.B. einen int, double oder float. Also solltest du nicht cout << p << endl; nehmen, sondern mit Schleifen jedes Element des Feldes einzeln ausgeben.



  • aber warum definier ich dann so ein 2 dimensionales feld wenn ich dann alles einzeln ausgebe????
    man muss doch das ganze feld auf einmal ausgeben können



  • so jetzt hab ichs
    glaub ich zumindest

    #include <iostream>

    int main()
    {
    int x[10][10],i,j;

    //Erste Zeile setzen
    x[0][0] = 1; // Erstes Element, Sonderbehandlung
    for (i = 1; i < 100; i++)
    {
    x[0][i] = 0;
    }

    //Zeilen aus ihren Vorgängern berechnen
    for (i = 1; i < 10; i++)
    {
    x[i][0] = 1;
    for (j = 1; j < 10; j++)
    {
    x[i][j] = x[i-1][j-1] + x[i-1][j];
    }
    }

    //Matrix ausgeben:
    for (int i = 0; i< 10; ++i)
    {
    for (int j = 0; j < 10; ++j)
    {
    cout<<setw(4);
    cout<<x[i][j];
    }
    cout<<"\n";
    }
    cin.get();cin.get();
    }

    aber ich hab ein problem mit dem ende

    1. was macht cin.get()?????
    2.was macht "/n"????
    3. was macht cout<<setw(4)
    4. Is in dem Programm sonst noch was falsch??



  • Jester schrieb:

    Finde ich nicht so toll. Dann lieber nen normalen Zähle in die for-schleife. Warum sollte man die Stelle wo die Arbeit passiert im schleifenheader verstecken? Das verwirrt nur und bringt nichts.

    Hallo Jester,

    Nun - mein 'Zähler' ist die Variable 'pscl'. Er wird im ersten Teil der for-Schleife angelegt, im zweiten auf den gültigen Bereich abgefragt und im dritten Teil hochgezählt. Die eigentliche Arbeit besteht in der Ausgabe der Zeile - also 'pscl' - und das befindet sich im Body der for-Schleife. Also doch ganz schulmäßig.
    Man könnte sich auch eine Struktur 'PascalZeile' vorstellen, mit der folgender Code möglich ist:

    for( PascalZeile pz; pz != 11; ++pz )
            cout << pz << endl;
    

    wobei sich hinter Konstruktor, Ungleich- und Inkrement-operator genau der Code verbirgt, der da jetzt schon steht.

    Das man solche Abstraktionen in C++ auch in Code gießen kann, ist genau der Grund warum ich gerne mit C++ arbeite.

    @Th: Danke

    judith schrieb:

    wie mach ich das mir das feld dann ausgegeben wird???

    mit cout<<p<<endl; funktionierts leider nicht 😞

    indem Du alle int-Werte in einer Schleife ausgibst. Dies ist auch der Grund ein solches Feld zu benutzen. Die Ausgabe des Dreiecks könnte etwa so aussehen:

    int p[10][10];
        // p[][] füllen
        for( int iZeile = 0; iZeile < 10; ++iZeile )
        {
            for( int iSpalte = 0; iSpalte <= iZeile; ++iSpalte )
                cout << p[iZeile][iSpalte] << " ";
            cout << endl;
        }
    

    Der Index in einem Feld beginnt übrigens immer bei 0 und endet bei N-1, also hier bei 9. Daher auch die Bedingung 'iZeile < 10'.

    Gruß
    Werner


Anmelden zum Antworten