Benötige Hilfe mit Arrays
-
Hallo Leute,
brauche dringend hilfe mit mehrdimensionalen Arrays, besser gesagt mit Matrizen und noch genauer mit Adjazenzmatrix
Also ich bekomme es nicht hin eine unbestimmte Anzahl an "Knotenpunkten" anzugeben und dann die Werte sollen dann auch vom Benutzer angegeben werden.
Ich habe das hier bis jetzt:
#include <stdio.h> #include "matrix_func.h" #include "matrix_io.h" main() { int n, matrix1[n][n]={0}; matrix_read(&matrix1[0][0],n); } int matrix_read(unsigned *a, unsigned n) { int i, j; do { printf("Gebe die Adjazenmatrix zeilenweise an \n"); scanf("%d", &i)
und ab da brauche ich Hilfe
Ich bedanke mich.
-
bau dir da mal kurz ein beispiel wenn du mir erklärst was eine "Adjazenzmatrix" ist
-
Boah...um das zu verstehen habe ich auch etwas gebraucht, ich hab hier die Aufgabenstellung und da wirds erklärt, hoffe ist verständlich^^
-
#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...