Arrays



  • initialisiere ich das mehrdimensionale array in der schleife genauso,
    wie bei eindimensionalen arrays?

    int main(void)

    {
    int i,j;
    double Kunde[6][2];

    for(i=0; i<j; ++i);

    system("pause");
    return 0;
    }


  • Mod

    Zu a) ist zu bemerken, dass die Initialisierungsliste nicht alle Elemente des Arrays explizit aufführen muss. Alle Ellemente, die nicht aufgeführt sind, werden dabei mit 0 initialisiert.
    foo_t array[100][1000] = { 0 };
    Das ist weitaus bequemer als c) - wir sparen uns eine zusätzliche fehleranfällige Zeile Code - bei dem zudem der Einwand steht, dass memset nicht zwingend das Richtige tut (je nach Architektur ggf. bei Zeigern).



  • super, besten dank.
    ich denke jetzt komme ich erstmal selber weiter.



  • Wie bekomme ich jetzt den wert aus der koordinate[0][0]
    also der 34 in meine ausgabe? kann mir da jemand helfen?

    int main(void)

    {
    int i,j;
    double Kunde;
    double Kategorie;
    float profil[6][2]={{34,4},{55,6},{12,3},{78,9},{46,5},{23,4}};
    printf("Das ist ein Kunden\n");

    {
    for(i=0;i<=0;i++)
    {
    printf("Kunde: \n",i+1);
    scanf("%lf",&profil[i]);
    }
    for(j=0;j<=0;j++)
    {
    printf("Kategorie:\n",j+1);
    scanf("%lf",&profil[j]);
    }
    }
    system("pause");
    return 0;
    }



  • gosi schrieb:

    Wie bekomme ich jetzt den wert aus der koordinate[0][0]
    also der 34 in meine ausgabe? kann mir da jemand helfen?

    ... 
    printf ("Kunde %d: %f\n", i + 1, profil[0][0]);
    ...
    

    Ich weiß nicht, warum du für die Ausgabe scanf verwendest, da diese Funktion für die Eingabe zuständig ist. Außerdem hast du bei der 2. und 3. printf -Anweisung zwar zusätzliche Argumente angegeben, diese aber nicht im Formatstring (1. Argument) miteinbezogen. Wie es aussehen sollte, siehst du oben.



  • Und bitte nutze cpp-Tags (links unter den Smileys), dann sieht dein Code gleich viel schöner aus, nämlich so:

    int main(void)
    {
    	int i,j;
    	double Kunde;
    	double Kategorie;
    	float profil[6][2]={{34,4},{55,6},{12,3},{78,9},{46,5},{23,4}};
    	printf("Das ist ein Kunden\n");
    
    	{
    		for(i=0;i<=0;i++)
    		{
    			printf("Kunde: \n",i+1);
    			scanf("%lf",&profil[i]);
    		}
    		for(j=0;j<=0;j++)
    		{
    			printf("Kategorie:\n",j+1);
    			scanf("%lf",&profil[j]);
    		}
    	}
    	system("pause");
    	return 0;
    }
    

    Zu scanf: Erstens liest man damit vom Benutzer ein (du willst ausgeben, richtig?), wie schon erwähnt wurde, zweitens solltest du nicht auf ein zweidimensionales Array zugreifen wie auf ein eindimensionales. Was glaubst du, welches Element profil[7] ist?

    Drittens sind deine Schleifenköpfe Quatsch. Mit dieser Notation

    for(i=0;i<=0;i++)
    

    kriegst du genau einen Schleifendurchlauf hin, mehr nicht. Du sagst hier: "setze i auf 0; mache solange weiter, wie i<=0 ist; erhöhe i nach jedem Durchlauf um 1". Dir leuchtet nun sicher ein, wieso die Bedingung nur beim ersten Durchlauf erfüllt ist.



  • ich habe bei den einmaligen durchläufen gedacht, das ich immer nur einen "kunden"
    aufrufe, damit ich erste einen unden, und dann eine kategoriewählen kann.
    sorry, mache gerade meinen techniker und dies ist nicht unbedingt mein paradefach 😃



  • gosi schrieb:

    ich habe bei den einmaligen durchläufen gedacht, das ich immer nur einen "kunden"
    aufrufe, damit ich erste einen unden, und dann eine kategoriewählen kann.
    sorry, mache gerade meinen techniker und dies ist nicht unbedingt mein paradefach 😃

    Ich verstehe zwar nicht ganz, was du sagen willst (das solltest du nochmal näher erläutern), aber deine Schleifen sind im Moment so, dass du die Schleifen auch genausogut weglassen kannst.

    //das hier
    
    for(i=0;i<=0;i++)
    {
      printf("Kunde: \n",i+1);
      scanf("%lf",&profil[i]);
    }
    
    //ist genau das gleiche wie das hier
    printf("Kunde: \n",i+1);
    scanf("%lf",&profil[i]);
    
    //kein Unterschied...
    


  • ich dachte ich gebe so die "koordinaten"(i und j) meiner arrays ein.



  • gosi schrieb:

    ich dachte ich gebe so die "koordinaten"(i und j) meiner arrays ein.

    Was du hier machst, ist Folgendes:

    for(i=0;i<=0;i++)
            {
                printf("Kunde: \n",i+1);
                scanf("%lf",&profil[i]);
            }                  //die erste Schleife ist hier beendet!
            for(j=0;j<=0;j++)  //erst jetzt beginnt die zweite Schleife
            {
                printf("Kategorie:\n",j+1);
                scanf("%lf",&profil[j]);
            }
    

    Was du willst, ist eher sowas hier:

    for(i=0;i<6;i++)  //hier i die Anzahl der Elemente der ersten Dimension des Arrays durchlaufen lassen (von 0-5, also nicht "<=", sondern "<" benutzen)
            {
                for(j=0;j<2;j++)  //hier j die Anzahl der Elemente der zweiten Dimension des Arrays durchlaufen lassen (von 0-1)
                {
                    printf("(was auch immer in deinem Array steht, hab ich bis jetzt nicht so richtig begriffen): %f\n",profile[i][j]);
                } 
            }
    

    Damit gehst du alle Elemente durch und gibst sie aus. Zuerst (0,0), dann (0,1), dann (1,0), dann (1,1) usw. Falls du was vom Benutzer einlesen willst (scanf lässt das vermuten, andererseits initialisierst du das Array vollständig mit irgendwelchen Werten... 😕 ), kannst du das mit einem ähnlichen Konstrukt machen.

    Übrigens ist float ein Fließkomma-Typ. Du scheinst aber Ganzzahlenwerte nutzen zu wollen. Wieso nimmst du da nicht int?

    Kleiner Tip: hör auf, einfach ohne Vorwissen drauf loszuprogrammieren. Das bringt nix. Such dir im Internet ein kleines, schönes Anfängertutorial und lies zumindest die ersten Seiten durch. Dann kommst du bei zukünftigen Aufgaben auch eher (bzw. überhaupt) ans Ziel. 🙂



  • du hast voll kommen recht, mein problem ist nur, dass ich es mir fast komplett
    selber beibringen muss, da mein doc(lehrer) nicht im stande ist das vernünftig
    rüber zu bringen.
    aber besten dank für die hinweise, das hat mir in meinem verständniss sehr weitergeholfen.
    mit dem "profil" versuche ich kundendaten einzulesen und sie nach zwei kategorien einzuteilen.



  • gosi schrieb:

    du hast voll kommen recht, mein problem ist nur, dass ich es mir fast komplett
    selber beibringen muss, da mein doc(lehrer) nicht im stande ist das vernünftig
    rüber zu bringen.

    So einen Lehrer hat wohl jeder schon mal gehabt...

    gosi schrieb:

    mit dem "profil" versuche ich kundendaten einzulesen und sie nach zwei kategorien einzuteilen.

    Hm, ich hab deinen Code mal ein wenig geändert. Vielleicht ist es schon so halbwegs, was du willst. Versuche auf jeden Fall, den Code auch zu verstehen.

    int main(void)
    {
    	int i,j;
    	double Kunde;
    	double Kategorie;
    	float profil[6][2]={0};
    	printf("Dateneingabe:\n");
    	printf("-------------\n");
    	for(i=0;i<6;i++)
    	{
    		printf("Kunde %d: \n",i+1);
    		for(j=0;j<2;j++)
    		{
    			printf("Wert %d eingeben:",j+1);
    			scanf("%f",&profil[i][j]);
    		}
    	}
    	printf("\nDatenausgabe:\n");
    	printf(  "-------------\n");
    	for(i=0;i<6;i++)
    	{
    		printf("Kunde %d: ",i+1);
    		for(j=0;j<2;j++)
    		{
    			printf("Wert %d = %f   ",j+1,profil[i][j]);
    		}
    		printf("\n");
    	}
    	system("pause");
    	return 0;
    }
    


  • supi,
    versuche es jetzt zu verstehen.

    dankeschön


Anmelden zum Antworten