Jump to content



Πρόβλημα με sin στην C


Thodoris21

Recommended Posts

Δημοσιεύτηκε

Προσπαθώ να υλοποιήσω τον τύπο (K+(sin(7t)*3)) mod 6 αλλά όταν βάζω μέσα στο sin το t σαν μεταβλητή χτυπάει,ενώ αν το βάλω σαν αριθμό το υπολογίζει.Το t όμως παίρνει τιμές από 1-24 οπότε πρέπει να μπει σαν μεταβλητή.Τι συμβαίνει;

αν και δεν έχω ασχοληθεί με την c...

μήπως ήθελες να γράψεις Κ +(sin((7*t)*3)))

ή επί της ουσίας sin(7*t*3)

Το πρόβλημα δεν είναι ότι βγάζει λάθος αποτέλεσμα αλλά το ότι δεν του αρέσει το t.Το σφάλμα που βγάζει είναι "undefined reference to `sin'"

Δοκίμασε να θέσεις το 7t σε μια μεταβλητή,πχ float y=7t;

Δείξε τον κώδικά σου μήπως βγάλουμε καμιά άκρη

Έπρεπε να το αναφέρεις ότι κάνεις compile by default.

Έχε το υπόψη σε περίπτωση που ασχοληθείς και με threads(χρήση του διακόπτη -lpthread κατά το compile) και γενικά βλέπε το manual συναρτήσεων

Ναι οκ.Κάτι άλλο τώρα πώς μπορώ να δημιουργώ αρχεία με δυναμικά ονόματα?Δηλαδή ανάλογα το t (1-24) να δημιουργεί αρχεία.

Για παράδειγμα:

για t=1

mapk00[t]=fopen("map.k-001.dat","w");

θέλω όμως το όνομα του αρχείου να εξαρτάται και αυτό απο το t,δηλαδή "map.k-00[t].dat"

Μέσω ενός buffer απ'όπου θα λαμβάνεις κάθε φορά το pointer του t.

Μετά λογικά με ένα for θα αντιστοιχίζεις τα t σε κάθε νέο αρχείο που είναι να δημιουργηθεί(αν δεν δώσεις πλήρη εκφώνηση δεν μπορώ να καταλάβω τι ακριβώς πρέπει να γίνει)

Δεν έχει σημασία τι θα γράφεται σε κάθε αρχείο.Αυτό που πρέπει να κάνω είναι να δημιουργήσω 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;

}

Το μόνο που μου 'ρχεται είναι ένας παρόμοιος τρόπος με αυτόν της δημιουργίας των fd(και το λογικό αυτό είναι)

Με συνένωση 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;
}

Ξέρει κανείς πως μπορώ να ορίσω έναν διδιάστατο πίνακα με 4096 στοιχειά?

Με int A[4096][4096] χτυπάει όταν το τρέχω...

Πιάνει κανονικά το int A[4096][4096], όμως πάλι δεν γίνεσαι σαφής στο πρόβλημά σου.

Εκτός κι αν εννοείς συνολικά 4096 στοιχεία, οπότε ο πίνακας πρέπει να είναι 64*64

Θέλω να γεμίσω έναν πίνακα με 4096 γραμμές και 4096 στήλες με κάποιους αριθμούς.Όταν δηλώνω τον πίνακα με [512][512] γραμμές και στήλες παίζει κανονικά.Όταν τον δηλώνω [4096][4096] κάνει compile χωρίς λάθη,αλλά όταν το τρέχω μου βγάζει segmentation fault.

Αυτό σημαίνει ότι δεν έχει πρόσβαση στη διεύθυνση μνήμης που του ορίζεις να αποκτήσει πρόσβαση και συνήθως έχεις κάνει κάποιο λογικό λάθος εσύ, πχ αν έχεις έναν πίνακα 10χ10 και προσπαθείς να τον αρχικοποιήσεις θέτοντάς του όρια για το i,j το 1000, τότε έχεις Segmentation fault, επειδή τα όρια του πινακα είναι 10x10 ενώ οι μεταβλητές i,j προσπαθούν να προσπελάσουν αυτόν τον πίνακα σε στοιχεία τα οποία δεν υπάρχουν για i < 1000

και j < 1000.

Παραθέτω τον κώδικα μου:


#define dim1 4096
#define dim2 4096

int 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;
}

Δεν νομίζω ότι υπάρχει λογικό λάθος κάπου.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.