Jump to content



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


Thodoris21

Recommended Posts

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

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

για t=1

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

}

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

και j < 1000.

Link to comment
Share on other sites

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


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

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

Link to comment
Share on other sites

Archived

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

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

Important Information

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