Sta Δημοσ. 25 Αυγούστου 2002 Δημοσ. 25 Αυγούστου 2002 Loipon, anarwtiemai an einai dynaton ston kwdika tou programmatos na oriso ena pinaka 2 diastasewn tou opoiou oi diastaseis na exartwntai apo input pou dinw otan trexw to programma. Diladi as poume na einai orizetai genika enas pinakas N x N kai otan trexw to programma na dinw N=100 as poume.
bandito Δημοσ. 25 Αυγούστου 2002 Δημοσ. 25 Αυγούστου 2002 Αυτό που ζητάς δεν γίνεται. Δεν μπορείς δηλαδή να δηλώσεις ένα πίνακα π.χ int record[][] μετα να του αλλάξεις διαστάσεις. Μπορείς όμως να κάνεις τα εξής: 1)Να δηλώσεις ένα pointer τον οποίον θα χρησιμοποιείς ώς τον πίνακα δηλ </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> int *k; int dim1=10; int dim2=10; //k[10][10] //fill array with zero's for (i=0; i<dim1; i++) for (n=0; n<dim2; n++) k[i*dim1+n]=0 [/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">2)Για καλύτερη διαχείρηση της μνήμης μπορείς να χρησιμοποιείσεις την malloc ώς εξής </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> k=malloc(dim1*dim2);[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">η ακόμα καλύτερα και την calloc αν θές να δώσεις και αρχικές τιμές.
Billman Δημοσ. 25 Αυγούστου 2002 Δημοσ. 25 Αυγούστου 2002 File bandito h prwth lysh pou edwses mhpws exei problhma? Ayto to lew giati o pointer k exei mia random diey8ynsh, opote na deixnei se asxeto xwro mnhmhs (allou programmatos pi8anws) kai etsi to programma na "xtyphsei". Just a thought. <small>[ 25-08-2002, 15:32: Το μήνυμα επεξεργάστηκε από: Billman ]</small>
bandito Δημοσ. 25 Αυγούστου 2002 Δημοσ. 25 Αυγούστου 2002 Εξαρτάται με τον τρόπο που το λειτουργικό δίνει τους pointers. Συνήθως ακόμα και οι random pointers, δείχνουν στο heap. ʼλλωστε το είπα, για καλύτερη διαχείρηση της μνήμης: malloc. Μάλλον το έγραψα έτσι επηρεασμένος απο την πλατφόρμα που χρησιμοποιώ (όπου η malloc είναι απαγορευμένη)
Sta Δημοσ. 26 Αυγούστου 2002 Μέλος Δημοσ. 26 Αυγούστου 2002 OK eyxaristw kai kati allo: Mporw na prospelaunw ta stoixeia ayta tou pinaka epeita me to k[j]?
bandito Δημοσ. 26 Αυγούστου 2002 Δημοσ. 26 Αυγούστου 2002 το k[j] δεν θα περάσει απο τον compiler γιατί δεν μπορεί να γνωρίζει κάθε στιγμή τη τιμή έχει η κάθε διάσταση του πίνακα. Αν οι τιμές αυτές δεν είναι πάρα πολλές (π.χ ό πινακάς θα ειναι είτε 8χ8 είτε 16χ16) τότε μπορείς να κάνεις cast σε array ως εξής: </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> if (dim1==8) int l=(int (*)[16]) &k; else int l=(int (*)[8]) &k;[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Τώρα το l[j] έχει νόημα.
Sta Δημοσ. 26 Αυγούστου 2002 Μέλος Δημοσ. 26 Αυγούστου 2002 Den ennoousa mallon akribws ayto. As to 8esw pio genika. An 8elw na orisw ena pinaka array[10][10] alla oxi me to : int array[10][10] alla me th dhlwsh arxika int **array kai meta me malloc gia katanomh mnhmhs, ginetai kati tetoio?
petros1815 Δημοσ. 26 Αυγούστου 2002 Δημοσ. 26 Αυγούστου 2002 </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">#include <stdio.h> #include <conio.h> #include <alloc.h> void Input(int &m, int &n) { printf("Rows and columns input\n"); printf("Give the number of rows:"); scanf("%d",&m); printf("\nGive the number of columns:"); scanf("%d",&n); } void FillArray(int m,int n,int *p) { int i,j; printf("Fill array\n"); for (i=0;i<m;i++) { for (j=0;j<n;j++) { printf("\nz[%d][%d]=",i+1,j+1); scanf("%d",&(p+i*n)[j]); } } } void PrintArray(int m, int n,int *p) { int i,j; printf("Print array\n"); for (i=0;i<m;i++) { for (j=0;j<n;j++) { printf("z[%d][%d]=% d ",i,j,(p+i*n)[j]); } printf("\n"); } getch(); } void main() { clrscr(); int m,n; Input(m,n); printf("m=%d, n=%d\n",m,n); int i; int *p=new int [m*n]; int **z=new int * [m]; for (i=0;i<m;i++) { z=p+i*n; } FillArray(m,n,p); PrintArray(m,n,p); delete []p; delete []z; } [/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Έχω φτιάξει ένα προγραμματάκι που νομίζω ότι μπορεί να σε βοηθήσει. Νομίζω ότι είναι σαφές τι κάνει το πιο πάνω προγραμματάκι. Αν κάποιος μπορεί να το τροποποιήσει ώστε να δουλεύει και με τρισδιάστατους πίνακες ας απαντήσει.
Billman Δημοσ. 26 Αυγούστου 2002 Δημοσ. 26 Αυγούστου 2002 Kwdikas se C++: </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> int **array, x = 10, y = 10; array = new int* [ x ]; for (int i = 0; i < y; ++i) array[ i ] = new int[ y ]; for (int i = 0; i < x; ++i) for (int j = 0; j < y; ++j) array[ i ][ j ] = i * j; // just fill[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">Me to parapapanw kommati kwdika mporeis na diaxeirizesai ton array san ena disdiastato pinaka. Me thn malloc pisteyw 8a 8elei kati analogo.
petros1815 Δημοσ. 27 Αυγούστου 2002 Δημοσ. 27 Αυγούστου 2002 Το προγραμματάκι που έχω στο post μου πιο πάνω είναι για C++. Για σκέτη C πρέπει να χρησιμοποιηθεί η malloc ως εξής: </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">#include <stdio.h> #include <conio.h> #include <alloc.h> void InputData(int m,int n) { int i,j,*p,**z; p=(int) malloc(m*n*sizeof(int)); z=(int*) malloc(m*sizeof(int)); for (i=0;i<m;i++) { z=p+i*n; } clrscr(); for (i=0;i<m;i++) { for (j=0;j<n;j++) { printf("z[%d][%d]= ",i,j); scanf("%d",&z[j]); } } getch(); printf("\n\n"); for (i=0;i<m;i++) { for (j=0;j<n;j++) { printf("z[%d][%d]= %3d ",i,j,z[j]); } printf("\n"); } getch(); free(p); free(z); } void main() { int m,n; m=2; n=2; InputData(m,n); }[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif">
Sta Δημοσ. 30 Αυγούστου 2002 Μέλος Δημοσ. 30 Αυγούστου 2002 Sas eyxaristw 8erma gia th boh8eia an kai ligo ka8usterhmena.Telika, katelhxa sthn exhs lush , h opoia katanemei mnhmh kai gia tous deiktes kai gia to xwro opou 8a deixnoun oi deiktes, diladi: </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> int **array; int i,k; array=(int **)malloc(n*sizeof(int *)); for (i=0;i<10;i++) array=(int *)malloc(n*sizeof(int));[/code]</blockquote><font size="2" face="Verdana, Helvetica, sans-serif"> <small>[ 29-08-2002, 19:10: Το μήνυμα επεξεργάστηκε από: Sta ]</small>
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.