Thodoris21 Δημοσιεύτηκε Μάϊος 26, 2012 #1 Δημοσιεύτηκε Μάϊος 26, 2012 Προσπαθώ να υλοποιήσω τον τύπο (K+(sin(7t)*3)) mod 6 αλλά όταν βάζω μέσα στο sin το t σαν μεταβλητή χτυπάει,ενώ αν το βάλω σαν αριθμό το υπολογίζει.Το t όμως παίρνει τιμές από 1-24 οπότε πρέπει να μπει σαν μεταβλητή.Τι συμβαίνει;
shattered Μάϊος 26, 2012 #2 Μάϊος 26, 2012 αν και δεν έχω ασχοληθεί με την c...μήπως ήθελες να γράψεις Κ +(sin((7*t)*3)))ή επί της ουσίας sin(7*t*3)
Thodoris21 Μάϊος 26, 2012 Author #3 Μάϊος 26, 2012 Το πρόβλημα δεν είναι ότι βγάζει λάθος αποτέλεσμα αλλά το ότι δεν του αρέσει το t.Το σφάλμα που βγάζει είναι "undefined reference to `sin'"
Thodoris21 Μάϊος 26, 2012 Author #7 Μάϊος 26, 2012 Το βρήκα παιδιά.Χρειάζεται και το -lm στο compile!
theoamd Μάϊος 26, 2012 #8 Μάϊος 26, 2012 Έπρεπε να το αναφέρεις ότι κάνεις compile by default. Έχε το υπόψη σε περίπτωση που ασχοληθείς και με threads(χρήση του διακόπτη -lpthread κατά το compile) και γενικά βλέπε το manual συναρτήσεων
Thodoris21 Μάϊος 26, 2012 Author #9 Μάϊος 26, 2012 Ναι οκ.Κάτι άλλο τώρα πώς μπορώ να δημιουργώ αρχεία με δυναμικά ονόματα?Δηλαδή ανάλογα το t (1-24) να δημιουργεί αρχεία.Για παράδειγμα:για t=1mapk00[t]=fopen("map.k-001.dat","w");θέλω όμως το όνομα του αρχείου να εξαρτάται και αυτό απο το t,δηλαδή "map.k-00[t].dat"
theoamd Μάϊος 26, 2012 #10 Μάϊος 26, 2012 Μέσω ενός buffer απ'όπου θα λαμβάνεις κάθε φορά το pointer του t.Μετά λογικά με ένα for θα αντιστοιχίζεις τα t σε κάθε νέο αρχείο που είναι να δημιουργηθεί(αν δεν δώσεις πλήρη εκφώνηση δεν μπορώ να καταλάβω τι ακριβώς πρέπει να γίνει)
Thodoris21 Μάϊος 26, 2012 Author #11 Μάϊος 26, 2012 Δεν έχει σημασία τι θα γράφεται σε κάθε αρχείο.Αυτό που πρέπει να κάνω είναι να δημιουργήσω 24 αρχεία όσες δηλαδή και οι τιμές του t(0-23).Αυτό που έχω καταφέρει είναι να δημιουργώ δυναμικά τα file descriptors αλλά όχι και τα ονόματα.int main () { FILE * mapk00[24]; int t=0; while (t<24) { mapk00[t]=fopen("map.k-00[t].dat","w"); //θέλω το όνομα του αρχείου να σχετίζεται και αυτό με το t. t++; }return 0; }
theoamd Μάϊος 26, 2012 #12 Μάϊος 26, 2012 Το μόνο που μου 'ρχεται είναι ένας παρόμοιος τρόπος με αυτόν της δημιουργίας των fd(και το λογικό αυτό είναι)
Thodoris21 Μάϊος 26, 2012 Author #13 Μάϊος 26, 2012 Ναι αλλά το θέμα είναι το πώς;Μήπως με την sprintf;
nucleus Μάϊος 26, 2012 #14 Μάϊος 26, 2012 Με συνένωση string θα το κάνειςint main () {FILE * mapk00[24];int t=0;while (t<24) {mapk00[t]=fopen("map.k-00" & t & ".dat","w"); //θέλω το όνομα του αρχείου να σχετίζεται και αυτό με το t.t++;}return 0;}
Thodoris21 Μάϊος 27, 2012 Author #16 Μάϊος 27, 2012 Ξέρει κανείς πως μπορώ να ορίσω έναν διδιάστατο πίνακα με 4096 στοιχειά?Με int A[4096][4096] χτυπάει όταν το τρέχω...
theoamd Μάϊος 27, 2012 #17 Μάϊος 27, 2012 Πιάνει κανονικά το int A[4096][4096], όμως πάλι δεν γίνεσαι σαφής στο πρόβλημά σου.Εκτός κι αν εννοείς συνολικά 4096 στοιχεία, οπότε ο πίνακας πρέπει να είναι 64*64
Thodoris21 Μάϊος 27, 2012 Author #18 Μάϊος 27, 2012 Θέλω να γεμίσω έναν πίνακα με 4096 γραμμές και 4096 στήλες με κάποιους αριθμούς.Όταν δηλώνω τον πίνακα με [512][512] γραμμές και στήλες παίζει κανονικά.Όταν τον δηλώνω [4096][4096] κάνει compile χωρίς λάθη,αλλά όταν το τρέχω μου βγάζει segmentation fault.
theoamd Μάϊος 27, 2012 #19 Μάϊος 27, 2012 Αυτό σημαίνει ότι δεν έχει πρόσβαση στη διεύθυνση μνήμης που του ορίζεις να αποκτήσει πρόσβαση και συνήθως έχεις κάνει κάποιο λογικό λάθος εσύ, πχ αν έχεις έναν πίνακα 10χ10 και προσπαθείς να τον αρχικοποιήσεις θέτοντάς του όρια για το i,j το 1000, τότε έχεις Segmentation fault, επειδή τα όρια του πινακα είναι 10x10 ενώ οι μεταβλητές i,j προσπαθούν να προσπελάσουν αυτόν τον πίνακα σε στοιχεία τα οποία δεν υπάρχουν για i < 1000και j < 1000.
Thodoris21 Μάϊος 27, 2012 Author #20 Μάϊος 27, 2012 Παραθέτω τον κώδικα μου:#define dim1 4096#define dim2 4096int main (int argc, char *argv[]) { int prevkMap[dim1][dim2],num,i,j; for (i=0; i<dim1; i++) { for (j=0; j<dim2; j++) { num=rand() % 6; prevkMap[i][j]=num; } }return 0;}Δεν νομίζω ότι υπάρχει λογικό λάθος κάπου.
Recommended Posts
Archived
This topic is now archived and is closed to further replies.