Array erstellen



  • Hallo miteinander

    Falls meine Frage hier im falschen Bereich gestellt wird, möchte ich mich jetzt schon entschuldigen, da ich neu bin, kenne ich mich hier noch nicht so gut aus.

    Nun meine Frage ist, ich mus mit Hilfe eines C-Codes ein Array erstellen das wie folgt aussieht:

    0946827135
    9468271350
    4682713509
    6827135094
    8271350946
    2713509468
    7135094682
    1350946827
    3509468271
    5094682713

    Nun da ich ein völliger Anfänger bin im Programmierbereich, komme ich einfach nicht ans Ziel.
    Kan mir jemand von euch vielleicht weiter helfen?
    Vielen Dank



  • Hallo!

    Du wärst wohl im C-Forum besser aufgehoben. 🙂
    Und Hausaufgaben werden hier nicht gemacht. 🙄

    Für mich sieht das aus wie "Vorne wegnehmen und hinten anhängen". Viel Spaß beim Zeiger jonglieren.

    Hast du schon nen Ansatz? So ohne alles wird wohl keiner Lust haben, das für dich zu machen...



  • Also einen Ansatz habe ich schon einmal, glaube ich jedenfalls 🙂

    Folgenden Code habe ich schon einmal angefangen:

    #include <stdio.h>

    #define aa 10
    #define ab 10

    int main(void)
    {
    int a, b, c, d, e, f, g, h, i, j, x, y;
    int array[aa][ab];

    a = 0;
    b = 9;
    c = 4;
    d = 6;
    e = 8;
    f = 2;
    g = 7;
    h = 1;
    i = 3;
    j = 5;

    for (x=0; x<aa; x++)
    {
    for (y=0; y<1; y++)
    {
    array[x][y] = a;
    }
    for (y=1; y<2; y++)
    {
    array[x][y] = b;
    }
    for (y=2; y<3; y++)
    {
    array[x][y] = c;
    }
    for (y=3; y<4; y++)
    {
    array[x][y] = d;
    }
    for (y=4; y<5; y++)
    {
    array[x][y] = e;
    }
    for (y=5; y<6; y++)
    {
    array[x][y] = f;
    }
    for (y=6; y<7; y++)
    {
    array[x][y] = g;
    }
    for (y=7; y<8; y++)
    {
    array[x][y] = h;
    }
    for (y=8; y<9; y++)
    {
    array[x][y] = i;
    }
    for (y=9; y<10; y++)
    {
    array[x][y] = j;
    }
    }
    }

    Also ein Array steht ja da schon einmal, einfach sieht das ja erst so aus:

    0946827135
    0946827135
    0946827135
    0946827135
    0946827135
    0946827135
    0946827135
    0946827135
    0946827135
    0946827135

    Und ich bringe es jetzt einfach nicht hin, dass nach der ersten Zeile jede Zeile um eins nach links verschoben wird! Ich erwarte jetzt natürlich nicht, dass mir jemand den Code fertig schreibt! Sondern vielleicht einfach noch eine Idee hat oder so..



  • Hmm, ich habe da so eine Idee...

    Mach ein Array mit der ersten Zeile.

    Lass eine Schleife drüberlaufen und schreib den Teil in das Zielarray.
    Merk dir Element 0. Den Rest schiebst du nach vorne und hängst das gemerkte an.
    Jetzt wieder die Schleife. usw...

    Hast du den wirren Gedanken verstanden? 😃



  • So sollte es schon gehen:

    int digit[10];
    
    digit[0] = 0; 
    digit[1] = 9; 
    digit[2] = 4; 
    ...
    
    int** array = new int*[10];
    
    for (i = 0 bis 9) {
      array[i] = new int[10];
      for (j = i bis i+9) {
        array[i][j-i] = digit[j%10];
      }
    }
    


  • Boah, dazu hätte ich gerne eine Erklärung. 😮

    Aber kann man nicht:

    int digit[10] = {0,9,4,...};
    

    machen? 😕



  • estartu_de schrieb:

    Boah, dazu hätte ich gerne eine Erklärung. 😮

    Aber kann man nicht:

    int digit[10] = {0,9,4,...};
    

    machen? 😕

    Kannst du schon, ich nicht weil ich's immer vergesse 😉

    Erklärung 10 äussere Schleifendurchläufe für 10 Permutationen.
    Dann fängt er im i.ten durchlauf damit an, das i.te Element aus 'digit' als 0tes in den array[i] zu schreiben, dann noch alle anderen hinterher.



  • Adjip1 schrieb:

    for (y=0; y<1; y++)
    {
    array[x][y] = a;
    }

    Das ist übrigens das gleiche wie

    array[x][0] = a;
    

    Alte Programmierregel: Wenn du nur einmal durchläufst, brauchst du keine Schleife. 😉



  • Hmm, ich glaube dass muss ich mir aufmalen - das kriege ich im Kopf nicht hin.



  • Das ist der ganze (lauffähige) Zauber:

    using namespace std;
    
    int main()
    {
    
    	int digit[10] = {0,9,4,6,8,2,7,1,3,5};
    	int array[10][10];
    
    	for (int i = 0; i <= 9; i++)
    		for (int j = i; j <= (i+9); j++)
    			array[i][j-i] = digit[j%10]; 
    
    	// Ausgabe
    	for (int i = 0; i <= 9; i++) {
    		for (int j = 0; j <= 9; j++)
    			cout << array[i][j] << " ";
    
    		cout << endl;
    	}
    	return 0;
    }
    

    Ausgabe:

    0 9 4 6 8 2 7 1 3 5
    9 4 6 8 2 7 1 3 5 0
    4 6 8 2 7 1 3 5 0 9
    6 8 2 7 1 3 5 0 9 4
    8 2 7 1 3 5 0 9 4 6
    2 7 1 3 5 0 9 4 6 8
    7 1 3 5 0 9 4 6 8 2
    1 3 5 0 9 4 6 8 2 7
    3 5 0 9 4 6 8 2 7 1
    5 0 9 4 6 8 2 7 1 3
    


  • int sesamstrasse[] = {0, 9, 4, 6, 8, 2, 7, 1, 3, 5};
        int warum[10][10];
        for(int wieso=0; wieso<10; ++wieso)
            for(int weshalb=0; weshalb<10; ++weshalb)
                warum[wieso][weshalb] = sesamstrasse[(wieso+weshalb)%10];
    


  • estartu_de schrieb:

    Hmm, ich glaube dass muss ich mir aufmalen - das kriege ich im Kopf nicht hin.

    Genau, mal einfach mal die ersten beiden Schleifendurchläufe von 'i'.



  • @Gast221212
    Vielen Dank für deine Hilfe! Jedoch lauft dein Code bei mir immer noch nicht 😞 , ist das echt weil ich mit einem anderen Compiler arbeite? Ich arbeite mit Visual Studio...

    Kannst du mir echt sagen, was "using namespca std;" bedeutet? Ist das eine Art Bibliothek?
    Und was folgende zwei Befehlszeilen bewirken?
    cout << array[i][j] << " ";

    cout << endl;

    Es tut mir leid, wenn ich solche Fragen stelle, aber ich bin halt wirklich noch ein richtiger Neuling 🙄



  • Windows, VC++ .NET 2003,

    Datei -> Neu -> Projekt -> VC++ Projekt -> Win32 Konsolenprojekt.

    Dann cpp durch folgendes ersetzen:

    // cmdline_test.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    using namespace std;
    
    int main()
    {
    
    	int digit[10] = {0,9,4,6,8,2,7,1,3,5};
    	int array[10][10];
    
    	for (int i = 0; i <= 9; i++)
    		for (int j = i; j <= (i+9); j++)
    			array[i][j-i] = digit[j%10]; 
    
    	// Ausgabe
    	for (int i = 0; i <= 9; i++) {
    		for (int j = 0; j <= 9; j++)
    			cout << array[i][j] << " ";
    
    		cout << endl;
    	}
    	return 0;
    }
    


  • Adjip1 schrieb:

    @Gast221212
    Vielen Dank für deine Hilfe! Jedoch lauft dein Code bei mir immer noch nicht 😞 , ist das echt weil ich mit einem anderen Compiler arbeite? Ich arbeite mit Visual Studio...

    Kannst du mir echt sagen, was "using namespca std;" bedeutet? Ist das eine Art Bibliothek?
    Und was folgende zwei Befehlszeilen bewirken?
    cout << array[i][j] << " ";

    cout << endl;

    Es tut mir leid, wenn ich solche Fragen stelle, aber ich bin halt wirklich noch ein richtiger Neuling 🙄

    cout ist printf("") in C++, wenn du C machen willst, kannst du auch die Bildschirmausgabe mit printf machen.

    cout << array[i][j] << " ";
    

    ist (quasi) dasselbe wie

    printf("%d ", array[i][j]);
    

    endl ist (quasi) dasselbe wie '\n'

    damit du cout und endl verwenden kannst musst du

    "using namespace std" machen, sonst weis der Compiler nicht wo er's suchen soll.

    Unter VC musst du übrigens mit Strg+F5 ausführen, nicht mit F5 allein!



  • @Gast221212
    Ok, vielen Dank für die Erklärung und Hilfe. 🙂


Anmelden zum Antworten