Benötige Hilfe mit Arrays



  • Boah...um das zu verstehen habe ich auch etwas gebraucht, ich hab hier die Aufgabenstellung und da wirds erklärt, hoffe ist verständlich^^

    http://rapidshare.com/files/335408424/Aufgabe.pdf



  • #include <stdio.h>
    #include <stdlib.h>
    
    void clearStdIn()
    {
    	char buffer[1024];
    	fgets(buffer,1024,stdin);
    }
    
    int readIntFromStdIn()
    {
    	int d;
    	scanf("%d",&d);
    	clearStdIn();
    	return d;
    }
    
    void matrix_read(unsigned int *matrix, unsigned n);
    void matrix_write(unsigned int *matrix, unsigned n);
    
    int main(void)
    {
        int n;
        unsigned int *matrix;
    
        //read size
        printf("matrix size: ");
        n = readIntFromStdIn();
        if(n<2)
        	return 1;
        //get memory for matrix
        matrix = malloc(sizeof(int)*n*n);
        if(matrix==NULL)
        	return 1;
    
        //read values
        matrix_read(matrix,n);
    
        //plot values
        matrix_write(matrix,n);
    
        return 0;
    }
    
    void matrix_read(unsigned int *matrix, unsigned n)
    {
        int i, j;
        i = 0;
        do
        {
        	j = 0;
        	printf("row %d:\n",i);
        	do
        	{
    	        printf("\tcol %d: ",j);
    	        matrix[i*n+j] = readIntFromStdIn();
        	}while(++j<n);
        }while(++i<n);
    }
    
    void matrix_write(unsigned int *matrix, unsigned n)
    {
        int i, j;
        i = 0;
        do
        {
        	j = 0;
        	printf("row %d:\n",i);
        	do
        	{
    	        printf("\tcol %d: %d\n",j,matrix[i*n+j]);
        	}while(++j<n);
        }while(++i<n);
    }
    

    was ich mich ja schon immer frage was sind zeilen und was sind spalten, hoffe das hilft ein bischen 😉



  • void matrix_read(unsigned int *matrix, unsigned n)
    {
        int i = n*n -1;
        do
        {
            matrix[i] = readIntFromStdIn();
        }while(i--);
    }
    void matrix_write(unsigned int *matrix, unsigned n)
    {
        int i = n*n -1;
        do
        {
        	printf("%d\n",matrix[i]);
        }while(i--);
    }
    

    ach so gehts natürlich auch 😞



  • hey danke schön....aber das problem dabei ist, dass wir es reihen weise es eingeben muss...

    es muss exact so aussehen -.-

    Ausgabe: Bitte gib die Anzahl der Knoten ein:
    Eingabe: 4
    Ausgabe: Bitte gib die Adjazenzmatrix zeilenweise ein:
    Eingabe: 0 1 0 1
    1 0 0 1
    0 0 0 1
    0 0 1 0



  • #include <stdio.h>
    #include <stdlib.h>
    
    void clearStdIn(){
    	char buffer[1024];
    	fgets(buffer,1024,stdin);
    }
    
    int readIntFromStdIn(){
    	int d;
    	scanf("%d",&d);
    	clearStdIn();
    	return d;
    }
    
    int matrix_read(unsigned *matrix, unsigned n){
        int i,z,j,c;
        i=z=0;
        do
        {
            j = 0;
            do
            {
            	c = getchar();
            	if(c=='1' || c=='0')
            	{
    	        	if(j==n-1 || getchar()==' ')
    	        		matrix[z++] = c-'0';
    	        	else
    	        		return 0;
            	}
            	else
            		return 0;
            }while(++j<n);
            c = getchar();
            if(c!='\n')
            	return 0;
            if(i!=n-1)
            	printf("        \t");
        }while(++i<n);
        printf("\n");
        return 1;
    }
    
    void matrix_write(unsigned *matrix, unsigned n){
        int i,j,z;
        i=z=0;
        printf("Ausgabe: Wegematrix:\n        \t");
        do
        {
            j = 0;
            do
            {
            	printf("%d",matrix[z++]);
            	if(j!=n-1)
            		putchar(' ');
            	else
            		putchar('\n');
            }while(++j<n);
            printf("        \t");
        }while(++i<n);
    }
    
    void matrix_copy(unsigned *a, unsigned *b, unsigned n){
    	n*=n;
    	while(n--)
    		b[n] = a[n];
    }
    void matrix_mult(unsigned *a, unsigned *b, unsigned *c, unsigned n){
    	n*=n;
    	while(n--)
    		c[n] = a[n] * b[n];
    }
    void matrix_add(unsigned *a, unsigned *b, unsigned *c, unsigned n){
    	n*=n;
    	while(n--)
    		c[n] = a[n] + b[n];
    }
    void matrix_sign(unsigned *a, unsigned n){
    	n*=n;
    	while(n--)
    		if(a[n]!=0)
    			a[n]=1;
    }
    void matrix_addRow(unsigned *a, unsigned *row, unsigned n, unsigned r){
    	int off = r*n;
    	while(n--)
    		a[off+n] += row[n];
    }
    void matrix_copyRow(unsigned *a, unsigned *row, unsigned n, unsigned r){
    	int off = r*n;
    	while(n--)
    		row[n] = a[off+n];
    }
    void matrix_createWay(unsigned *a, unsigned n){
    	int r = -1,c;
    	int len = n*n-1;
    	unsigned *row = malloc(sizeof(int)*n);
    
    	while(++r<n){
    		matrix_copyRow(a,row,n,r);
    		c = r;
    		len = (n*r)-1;
    		while(c--){
    			if(a[len-(n-r-1)]!=0)
    				matrix_addRow(a,row,n,c);
    			len-=n;
    		}
    		c = r;
    		len = (n*(r+1))+n-1;
    		while(++c<n){
    			if(a[len-(n-r-1)]!=0)
    				matrix_addRow(a,row,n,c);
    			len+=n;
    		}
    	}
    }
    
    int main(void){
        int n;
        unsigned int *matrix;
    
        printf("Ausgabe:\tBitte gib die Anzahl der Knoten ein:\nEingabe:\t");
        n = readIntFromStdIn();
        if(n<2){
        	printf("matrix size < 2");
        	return 1;
        }
    
        matrix = malloc(sizeof(int)*n*n);
        if(matrix==NULL)
        	return 1;
    
        printf("Ausgabe:\tBitte gib die Adjazenzmatrix zeilenweise ein:\nEingabe:\t");
        if(matrix_read(matrix,n)==0){
        	printf("error on matrix input");
        	return 0;
        }
    
        matrix_createWay(matrix,n);
        matrix_sign(matrix,n);
        matrix_write(matrix,n);
    
        return 0;
    }
    

    noobLolo aka codeMonkey 😉



  • #include <stdio.h>
    #include <stdlib.h>
    
    int matrix_read(unsigned *matrix, unsigned n){
        int i,z,j,c;
        i=z=0;
        do
        {
            j = 0;
            do
            {
            	c = getchar();
            	if(c=='1' || c=='0')
            	{
    	        	if(j==n-1 || getchar()==' ')
    	        		matrix[z++] = c-'0';
    	        	else
    	        		return 0;
            	}
            	else
            		return 0;
            }while(++j<n);
            c = getchar();
            if(c!='\n')
            	return 0;
            if(i!=n-1)
            	printf("        \t");
        }while(++i<n);
        printf("\n");
        return 1;
    }
    
    void matrix_write(unsigned *matrix, unsigned n){
        int i,j,z;
        i=z=0;
        printf("Ausgabe: Wegematrix:\n        \t");
        do
        {
            j = 0;
            do
            {
            	printf("%d",matrix[z++]);
            	if(j!=n-1)
            		putchar(' ');
            	else
            		putchar('\n');
            }while(++j<n);
            printf("        \t");
        }while(++i<n);
    }
    
    void matrix_copy(unsigned *a, unsigned *b, unsigned n){
    	n*=n;
    	while(n--)
    		b[n] = a[n];
    }
    
    void matrix_mult(unsigned *a, unsigned *b, unsigned *c, unsigned n){
    	n*=n;
    	while(n--)
    		c[n] = a[n] * b[n];
    }
    
    void matrix_add(unsigned *a, unsigned *b, unsigned *c, unsigned n){
    	n*=n;
    	while(n--)
    		c[n] = a[n] + b[n];
    }
    
    void matrix_sign(unsigned *a, unsigned n){
    	n*=n;
    	while(n--)
    		if(a[n]!=0)
    			a[n]=1;
    }
    
    int main(void){
        int p,r,c,offT,offF,nn,len,y;
        unsigned *a;
        r=-1;
    
        //read size
        printf("Ausgabe:\tBitte gib die Anzahl der Knoten ein:\nEingabe:\t");
        scanf("%d",&p);
        while((y = getchar()) != EOF && y != '\n');
        if(p<2){
        	printf("matrix size < 2");
        	return 1;
        }
        len=p*p-1;
    
        //get memory for matrix
        a = malloc(sizeof(int)*p*p);
        if(a==NULL)
        	return 1;
    
        //read values
        printf("Ausgabe:\tBitte gib die Adjazenzmatrix zeilenweise ein:\nEingabe:\t");
        if(matrix_read(a,p)==0){
        	printf("error on matrix input");
        	return 0;
        }
    
        //create way
    	while(++r<p){
    		c = r;
    		len = (p*r)-1;
    		while(c--){
    			if(a[len-(p-r-1)]!=0){
    				offT = c*p;
    				offF = r*p;
    				nn = p;
    				while(nn--)
    					a[offT+nn] += a[offF+nn];
    			}
    			len-=p;
    		}
    		c = r;
    		len = (p*(r+1))+p-1;
    		while(++c<p){
    			if(a[len-(p-r-1)]!=0){
    				offT = c*p;
    				offF = r*p;
    				nn = p;
    				while(nn--)
    					a[offT+nn] += a[offF+nn];
    			}
    			len+=p;
    		}
    	}
    
        //fix with sig
        matrix_sign(a,p);
    
        //plot values
        matrix_write(a,p);
    
        return 0;
    }
    

    so sollte das schon eher stimmen, immer schön rein in die main... 😉



  • noobLolo schrieb:

    was ich mich ja schon immer frage was sind zeilen und was sind spalten, hoffe das hilft ein bischen

    Fragst du dich das immer noch? Heißt das, du weißt gar nicht, was du da tust? *fg*
    😃



  • codeMonkey schrieb:

    bau dir da mal kurz ein beispiel wenn du mir erklärst was eine "Adjazenzmatrix" ist

    frag wicky: http://de.wikipedia.org/wiki/Adjazenzmatrix
    🙂



  • Big Brother schrieb:

    Heißt das, du weißt gar nicht, was du da tust? *fg*
    😃

    leider nein, ich weiß nicht so genau was ich da mache, ich freu mich wenn es am ende das macht was ich will, ob ich dann weiß was es macht ist mir eigentlich auch egal :p

    meistens check ichs nicht mehr wenn in dem text 10.000 ägyptische hieroglyphen vorkommen z.b.

    ƒΓΔΘΛΠΣΦΨΩαβγδεζηθικλμνοπρςστυφχψω‾™←↑→↓↔∂∏∑∞∩∫≈≠≡≤≥

    ein paar davon hab ich schon entziffert aber 95% fehlen noch 😉



  • Hey vielen dank, ist seid die besten....war schon am verzweifeln...wusste nicht, wo ich sonst hilfe bekommen könnte... 👍 👍 👍


Anmelden zum Antworten