Probleme mit Arrays



  • Huhu,

    ich habe erst mit C angefangen und habe ein paar Schwierigkeiten, vorallem bzgl. Arrays. Ich habe versucht 2 Programme zu schreiben, aber läuft es nicht so, wie ich es gerne hätte.

    Zum ersten Programm: Ziel ist es, dass das Wort einmal gespiegelt wird. Die Funktion sizeof() gibt mir hier an, dass nur 4 Elemente in dem Array sind, obwohl es ja nicht der Fall ist.

    #include <stdio.h>
    int umkehr(char string[]){
    	int elemente = sizeof(string);
    	int i = 1;
    	int n = 0;
    	char merk;
    	while(elemente>n){
    		while(elemente>i+n){
    			merk = string[i-1];
    			string[i-1]=string[i];
    			string[i]=merk;
    			i++;
    		}
    		n++;
    		i=1;
    	}
    	for( i = 0; string[i]; i = i + 1 )
    		printf( "%c", string[i] );
    }
    
    int main(){
    	char zeichenfolge[] = "frosch";
    	umkehr(zeichenfolge);
    	return 0;
    }
    

    Das zweite Programm soll ein magisches Quadrat n-ter Ordnung für ungerade n erzeugen. Aber anscheinend darf ich Arrays keine Variablen zuweisen. Jedenfalls kommt nich raus, was rauskommen soll. Wie soll ich denn sonst die Felder befüllen? Problem ist auch, dass ich nichts anwenden darf, was wir in den Vorlesungen noch nicht besprochen haben.

    #include <stdio.h>
    
    int aufgabe1(int n){
    	int maqua[n][n];
    	int z = 0;
    	int s = (n-1)/2;
    	int zahl=1;
    
    	do{
    		maqua[s][z] = zahl;
    		zahl++;
    		z-1; s+1;
    		if(z<0) z-=n;
    		if(s>n) s=0;
    		if(maqua[s][z]!=0)z--;
    	}while(n*n>zahl);
    
        for (z = 0; z != 3; ++z){
    		for (s = 0; s != 4; ++s)
    			printf("%d ", maqua[s][z]);
    		printf("\n");
        }
    }
    
    int main(){
    	aufgabe1(5);
    	return 0;
    }
    

    Wenn ihr sonst noch Verbesserungsvorschläge habt, bitte immer raus damit.
    LG



  • Zu deinem ersten Problem:
    Eine Funktion kann nicht feststellen, wie groß das Array ist, das ihr übergeben wurde, da nur die Anfangsadresse (Pointer) übergeben wird.
    Ein Pointer ist auf deinem System demnach 4 Byte groß (32-Bit System)

    Du willst aber auch nicht die Größe von dem Array haben sondern die Länge von dem String.
    Wie man die ermitteln kann, weißt du. Zumindest machst du das in Zeile 18.

    Außerdem ist dein Vorgehen zu kompliziert.

    Zum zweiten Problem:
    Variable Length Arrays (VLA) gibt es seit C99 im Standard. Aber z.B. Visual Studio unterstützt nur C89.
    Lokale Variablen werden nicht implizit auf einen bestimmten Wert gesetzt. Da steht das drin, was vorher an der Stelle war.

    Und deine Indexvariablen dürfen niemals die Grenzen erreichen.
    Wenn s==n ist, schreibst du schon über die Grenzen des Arrays hinaus.



  • Oh, ach so. Ich habe auch die Funktion strlen(string) getestet. Aber da ändert sich auch nichts. Aber ich werde dann eben einfach alles einzeln hochzählen, danke schonmal für den Tipp.

    Ja, kompliziert. Ich versuche, irgendwie zurecht zu kommen 😉

    Okay, das zweite versteh ich nicht ganz. Heißt das jetzt, das mein Compiler veraltet ist?
    s wird nie n. Jedenfalls sehe ich nicht, wo der Fall bei mir eintritt.



  • strlen muss aber funktionieren. Zumindest die richtige Länge ermitteln.
    Überleg mal ob du mit dem i-1 richtig liegst.

    MiuMiu schrieb:

    Ich versuche, irgendwie zurecht zu kommen 😉

    Spiel das ganze mal mit Fingern auf einem Blatt Papier durch und merke dir dein Vorgehen. (oder mit Scrabblesteinen)

    Das z-1; s+1; hat keinen Effekt. Da passiert nichts (das Ergebnis wird keiner Variablen zugewiesen).

    MiuMiu schrieb:

    s wird nie n. Jedenfalls sehe ich nicht, wo der Fall bei mir eintritt.

    Warum hast du denn Zeile 14?

    Du kannst den Debugger benutzen oder auch ein paar Kontrollausgaben mit printf machen, um zu sehen welche Werte die Variablen gerade haben.



  • Ohje, das hab ich nicht mal gemerkt. Ja, du hast vollkommen Recht! Mein Hirn hat schon so geraucht von den ganzen anderen Aufgaben. Danke nochmals!


Anmelden zum Antworten