kotopoulos Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 εχω μια εργασια για ενα μαθημα κ εχω φτιαξει ενα κωδικα για μια μαθηματικη μεθοδο για να μην τα εχω ολα σε ενα αρχειο εχω το header που εχει μεσα μια συναρτηση που την καλω 3 φορες.. πρεπει να περασω σαν παραμετρους 3πινακες κ ενα ακεραιο.. ο ενας πινακας ειναι δυο διαστασεων κ οι αλλοι απο μια ο καθενας.. πως θα πρεπει να ορισω τη συναρτηση κ πως να την καλεσω μεσα στην μαιν? να σημειωσω οτι το μεγεθος του πινακα δεν το γνωριζουμε κ οριζεται απο το χρηση...
nspyrou Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 εχω μια εργασια για ενα μαθημα κ εχω φτιαξει ενα κωδικα για μια μαθηματικη μεθοδο για να μην τα εχω ολα σε ενα αρχειο εχω το header που εχει μεσα μια συναρτηση που την καλω 3 φορες.. πρεπει να περασω σαν παραμετρους 3πινακες κ ενα ακεραιο.. ο ενας πινακας ειναι δυο διαστασεων κ οι αλλοι απο μια ο καθενας.. πως θα πρεπει να ορισω τη συναρτηση κ πως να την καλεσω μεσα στην μαιν? να σημειωσω οτι το μεγεθος του πινακα δεν το γνωριζουμε κ οριζεται απο το χρηση... Αν κατάλαβα καλά, έχεις ορίσει την function και θέλεις απλώς να την καλέσεις?? Έστω πίνακες Array1, Array2, Array3 ακέραιος IntNum και όνομα function Func Τότε: > int main( void ) { .... Func( &Array1, &Array2, &Array3, IntNum ); .... } Άν φυσικά κατάλαβα καλά το ερώτημά σου ...
kotopoulos Δημοσ. 25 Νοεμβρίου 2010 Μέλος Δημοσ. 25 Νοεμβρίου 2010 θελω κ τον ορισμο.. ο ενας πινακας ειναι δυο διαστασεων κ εκει καπου κολλαω..οχι στους μονοδιαστατους
pinball_elf Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 θελω κ τον ορισμο.. ο ενας πινακας ειναι δυο διαστασεων κ εκει καπου κολλαω..οχι στους μονοδιαστατους > #include <stdio.h> #define N 5 int function (int **a, int *b, int *c, int n); int main (void) { int a[N][N]; int b[N], c[N]; function (&a, b ,c, N); system("pause"); exit(0); } int function (int **a, int *b, int *c, int n) { int i,j; for (i=0; i <n; i++) { for (j=0; j<n; j++) printf("a[%d][%d] ", i, j); printf("\n"); } printf("\n\n\n"); for (i=0; i <n; i++) printf("b[%d] ", i); printf("\n\n\n"); for (i=0; i <n; i++) printf("c[%d] ", i); printf("\n\n\n"); return (n); }
nspyrou Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 > #include <stdio.h> #define N 5 int function (int **a, int *b, int *c, int n); int main (void) { int a[N][N]; int b[N], c[N]; function (&a, b ,c, N); system("pause"); exit(0); } int function (int **a, int *b, int *c, int n) { int i,j; for (i=0; i <n; i++) { for (j=0; j<n; j++) printf("a[%d][%d] ", i, j); printf("\n"); } printf("\n\n\n"); for (i=0; i <n; i++) printf("b[%d] ", i); printf("\n\n\n"); for (i=0; i <n; i++) printf("c[%d] ", i); printf("\n\n\n"); return (n); } Είσαι εντάξει?? > #include <stdio.h> #define N 5 int function (int a[N][N], int b[N], int c[N], int n); int main (void) { int a[N][N]; int b[N], c[N]; function (a, b ,c, N); system("pause"); exit(0); } int function (int a[N][N], int b[N], int c[N], int n) { int i,j; for (i=0; i <n; i++) { for (j=0; j<n; j++) printf("a[%d][%d] ", i, j); printf("\n"); } printf("\n\n\n"); for (i=0; i <n; i++) printf("b[%d] ", i); printf("\n\n\n"); for (i=0; i <n; i++) printf("c[%d] ", i); printf("\n\n\n"); return (n); }
pinball_elf Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Είσαι εντάξει?? Συγνώμη αλλά δεν κατάλαβα, αν αναφέρεσαι σε μένα!
nspyrou Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Συγνώμη αλλά δεν κατάλαβα, αν αναφέρεσαι σε μένα! Σου παρέθεσα τον κώδικα διορθωμένο και τρέχει ... ρώτησα αν είναι αυτό που θες ...
pinball_elf Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Σου παρέθεσα τον κώδικα διορθωμένο και τρέχει ... ρώτησα αν είναι αυτό που θες ... Σε ευχαριστώ πάντως, αλλά τοv έχω ήδη δοκίμασει, τουλάχιστον στο DevC++.
nspyrou Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Σε ευχαριστώ πάντως, αλλά τοv έχω ήδη δοκίμασει, τουλάχιστον στο DevC++. Εννοείς το κομμάτι που σου παρέθεσα δεν τρέχει? Γιατί στο CodeGear C++ Builder 2010 που το τρέχω, τρέχει μια χαρά!
kotopoulos Δημοσ. 25 Νοεμβρίου 2010 Μέλος Δημοσ. 25 Νοεμβρίου 2010 ωραια ολα αυτα απλα το Ν το οριζω στο προγραμμα μεσα κ δεν ξερω ποσο μεγεθος θα εχουν οι πινακες(το Ν δεν το εχω define) οταν το τρεχω φτανει μεχρι το κομματι που δινω τις τιμες κ μολις παει να καλεσει την συναρτηση πεταει αυτο: >/cygdrive/C/Program Files/NetBeans 6.9/ide/bin/nativeexecution/dorun.sh: line 33 : 4140 Segmentation fault (core dumped) sh "${SHFILE}" >#include <stdio.h> #include <stdlib.h> #include "Gauss.h" void Gauss(double **aa, int n, double *bb, double *tmp); int main(int argc, char** argv) { int i, j,N; double **a; double **help; double *help1; double *b; double *x; double *y; double *z; printf("Δωσε Το Μεγεθος Του Πινακα\n"); scanf("%d", &N); a = (double **) malloc(N * sizeof (double *)); help = (double **) malloc(N * sizeof (double *)); if (NULL == a) { free(a); printf("Memory allocation failed while allocating for a[].\n"); exit(-1); } for (i = 0; i < N + 1; i++) { a[i] = (double *) malloc(N * sizeof (double)); help[i] = (double *) malloc(N * sizeof (double)); if (NULL == a[i]) { free(a[i]); printf("Memory allocation failed while allocating for a[i][].\n"); exit(-1); } } b = (double *) malloc(N * sizeof (double *)); x = (double *) malloc(N * sizeof (double *)); y = (double *) malloc(N * sizeof (double *)); z = (double *) malloc(N * sizeof (double *)); help1 = (double *) malloc(N * sizeof (double *)); for (i = 0; i < N; i++) { printf("\nΔωσε τιμες για τη γραμμη Α[%d] \n", i + 1); for (j = 0; j < N; j++) { scanf("%lf", &a[i][j]); help[i][j] = a[i][j]; } printf("\nΔωσε τιμες για το Β[%d] \n", i + 1); scanf("%lf", &b[i]); help1[i] = b[i]; } Gauss(&a[N], N, b, x); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { a[i][j] = help[i][j]; } b[i] = help1[i]; } Gauss(&a[N], N, b, y); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { a[i][j] = help[i][j]; } b[i] = help1[i]; } Gauss(&a[N], N, b, z); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { a[i][j] = x[i]; a[i][j] = y[i]; a[i][j] = z[i]; } } for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { printf("%lf\n", &a[i][j]); } } return (EXIT_SUCCESS); } >#include <stdio.h> #include <math.h> #include <stdlib.h> void Gauss(double **aa, int n, double *bb, double *tmp) { int i, j, k, r, thesi, swap = 0, z, zz; double sum, ao, max, temp; double *x; for (i = 0; i < n; i++) { for (z = 0; z < n; z++) { printf("%5.2lf ", aa[zz][z]); } printf("%5.2lf%5.2lf\n", bb[zz], x[zz]); } // Απαλοιφη Gauss for (i = 0; i < n - 1; i++) { max = fabs(aa[i][i]); thesi = i; for (j = i + 1; j < n; j++) { if (max < fabs(aa[j][i])) { max = fabs(aa[j][i]); thesi = j; } } if (thesi > i) { swap += 1; for (j = i; j < n; j++) { temp = aa[thesi][j]; aa[thesi][j] = aa[i][j]; aa[i][j] = temp; } temp = bb[thesi]; bb[thesi] = bb[i]; bb[i] = temp; } for (j = i + 1; j < n; j++) { ao = aa[j][i] / aa[i][i]; for (k = 0; k < n; k++) { aa[j][k] = aa[j][k] - ao * aa[i][k]; } bb[j] = bb[j] - ao * bb[i]; } } //Πισω Αντικατασταση printf("\n\t\tΠισω Αντικατασταση\n\n"); x[n - 1] = bb[n - 1] / aa[n - 1][n - 1]; for (i = n - 1; i>-1; i--) { x[i] = (bb[i]-(aa[i][n] * x[n])) / aa[i][i]; sum = 0; for (j = i + 1; j < n; j++) { sum = sum + aa[i][j] * x[j]; } x[i] = (bb[i] - sum) / aa[i][i]; } }
pinball_elf Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Εννοείς το κομμάτι που σου παρέθεσα δεν τρέχει? Γιατί στο CodeGear C++ Builder 2010 που το τρέχω, τρέχει μια χαρά! Όλα είναι ΟΚ, απλά έφτιαξα ένα χαζό πρόγραμμα για να δείξω στο παλικάρι πως το χρησιμοποιώ εγώ.
kotopoulos Δημοσ. 25 Νοεμβρίου 2010 Μέλος Δημοσ. 25 Νοεμβρίου 2010 ο κωδικας απο το header εχει ενα λαθος αλλα δεν εχει να κανει με το προβλημα... απλα ξεχασα να σβησω τον πινακα χ κ στην θεση τ να βαλω τον tmp.. αλλα κ παλι δεν τρεχει..
pinball_elf Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 ο κωδικας απο το header εχει ενα λαθος αλλα δεν εχει να κανει με το προβλημα... απλα ξεχασα να σβησω τον πινακα χ κ στην θεση τ να βαλω τον tmp.. αλλα κ παλι δεν τρεχει.. ο κώδικας σου σκάει σε αυτό το σημείο της συνάρτησης Gauss: > for (i = 0; i < n; i++) { for (z = 0; z < n; z++) { printf("%5.2lf ", aa[zz][z]); } printf("%5.2lf%5.2lf\n", bb[zz], x[zz]); } Στη μεταβλητή zz δεν έχεις αναθέσει ποτέ τιμή, και έχει μια τυχαία. Οπότε βγάινεις συνήθως εκτός ορίων του πίνακα. Επίσης χρησιμοποιείς τον πίνακα x, χωρίς να έχεις δεσμεύσει καθόλου μνήμη απο πριν.
kotopoulos Δημοσ. 25 Νοεμβρίου 2010 Μέλος Δημοσ. 25 Νοεμβρίου 2010 το ζζ καπου μου εχει ξεφυγει αλλα δεν ειναι προβλημα γιατι το συγκεκριμενω απλα μια εκτυπωση τον τιμων κανει(+ οτι το εχω σβησει απο τον κωδικα μ τωρα) οπως κ τον πινακα χ γιατι στη θεση του χρησιμοποιω των tmp.. τωρα ετσις οπως το εχω δουλευει εκτος του οτι οι τιμες των πινακαων χ,Υ,ζ δεν περνιουνται στον πινακα στο τελος .. για να γινω πιο ξεκαθαρος!καλω την συναρτηση τρεις φορες με την μονη διαφορα τον τελευταιο πινακα(χ,Υ,ζ) που ειναι κενοι κ στην συναρτηση αυτοι οι πινακες περνουν τιμες στο τελος της τελευταιας κλησεις περναω τις τιμες των τριων αυτων πινακων στον α κ τον εμφανιζω..αλλα απο οτι βλεπω εχει παρει μηδενικες τιμες οπως δηλαδη ειχαν οι πινακες απο τον ορισμο τους(το κανω στην αρχη του κωδικα)
kotopoulos Δημοσ. 25 Νοεμβρίου 2010 Μέλος Δημοσ. 25 Νοεμβρίου 2010 εκανα επεξεργασια το τελευταιο μ ποστ για να μην το βαζω παλι κ γεμιζει τσαμπα... το βρηκα επιτελους κ ολα δουλευουν ρολοι το προβλημα που δεν εμφανιζε σωστα τις τιμες ηταν ενα "&" στην πριντφ που δεν επρεπε να ηταν εκει ευχαριστω οσους βοηθησαν.. ο κωδικας ειναι για να βρισκει τον αντιστροφο ενος πινακα με χρηση της απαλοιφης Gauss για οποιον τον θελει μπορει να τον παρει κ να τον χρησιμοποιηση αλλα ας πει κ ενα ευχαριστω για τον κοπο μ >#include <stdio.h> #include <stdlib.h> #include <math.h> #define N 3 void Gauss(double aa[N][N], int n, double tmp[N], int stp); int main(int argc, char** argv) { int i, j, step = 0; double a[N][N], help[N][N],b[N], x[N], y[N], z[N]; /*double **a; double **help; double *x; double *y; double *z; printf("Δωσε Το Μεγεθος Του Πινακα\n"); scanf("%d", &N); a = (double **) malloc(N * sizeof (double *)); help = (double **) malloc(N * sizeof (double *)); if (NULL == a) { free(a); printf("Memory allocation failed while allocating for a[].\n"); exit(-1); } for (i = 0; i < N + 1; i++) { a[i] = (double *) malloc(N * sizeof (double)); help[i] = (double *) malloc(N * sizeof (double)); if (NULL == a[i]) { free(a[i]); printf("Memory allocation failed while allocating for a[i][].\n"); exit(-1); } } x = (double *) malloc(N * sizeof (double *)); y = (double *) malloc(N * sizeof (double *)); z = (double *) malloc(N * sizeof (double *)); help1 = (double *) malloc(N * sizeof (double *)); */ for (i = 0; i < N; i++) { printf("\nΔωσε τιμες για τη γραμμη Α[%d] \n", i + 1); for (j = 0; j < N; j++) { scanf("%lf", &a[i][j]); help[i][j] = a[i][j]; } x[i] = 0; y[i] = 0; z[i] = 0; } Gauss(a, N, x, step); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { a[i][j] = help[i][j]; } } step++; Gauss(a, N, y, step); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { a[i][j] = help[i][j]; } } step++; Gauss(a, N, z, step); for (i = 0; i < N; i++) { a[i][0] = x[i]; a[i][1] = y[i]; a[i][2] = z[i]; } for (i = 0; i < N; i++) { //printf("%lf\n",x[i]); for (j = 0; j < N; j++) { printf("%lf\t", a[i][j]); } printf("\n"); } return (EXIT_SUCCESS); } void Gauss(double aa[N][N], int n, double tmp[N], int stp) { int i, j, k, r, thesi, swap = 0, z, num = 0; double sum, ao, max, temp; double bb[N]; while (num < N) { if (stp == num) { bb[num] = 1; } else { bb[num] = 0; } num++; } /*for (i = 0; i < n; i++) { for (z = 0; z < n; z++) { printf("%5.2lf ", aa[i][z]); } printf("%5.2lf%5.2lf\n", bb[i], tmp[i]); } */ // Απαλοιφη Gauss for (i = 0; i < n - 1; i++) { max = fabs(aa[i][i]); thesi = i; for (j = i + 1; j < n; j++) { if (max < fabs(aa[j][i])) { max = fabs(aa[j][i]); thesi = j; } } if (thesi > i) { swap += 1; for (j = i; j < n; j++) { temp = aa[thesi][j]; aa[thesi][j] = aa[i][j]; aa[i][j] = temp; } temp = bb[thesi]; bb[thesi] = bb[i]; bb[i] = temp; } for (j = i + 1; j < n; j++) { ao = aa[j][i] / aa[i][i]; for (k = 0; k < n; k++) { aa[j][k] = aa[j][k] - ao * aa[i][k]; } bb[j] = bb[j] - ao * bb[i]; } } //Πισω Αντικατασταση tmp[n - 1] = bb[n - 1] / aa[n - 1][n - 1]; for (i = n - 1; i>-1; i--) { tmp[i] = (bb[i]-(aa[i][n] * tmp[n])) / aa[i][i]; sum = 0; for (j = i + 1; j < n; j++) { sum = sum + aa[i][j] * tmp[j]; } tmp[i] = (bb[i] - sum) / aa[i][i]; } }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.