scoobydoo Δημοσιεύτηκε Απρίλιος 17, 2012 #1 Κοινοποίηση Δημοσιεύτηκε Απρίλιος 17, 2012 Γεια σας, θέλω να διαβάσω κάποια δεδομένα από ένα txt αρχείο και μετά αυτά να τα βάλω σε έναν πίνακα, όπου οι 2 πρώτες γραμμές του αρχείο να είναι και οι δύο πρώτες γραμμές του πίνακα και οι επόμενες 2 γραμμές του αρχείο να είναι οι 2 στήλες του πίνακα, οι οποίες θα ξεκινούν κάτω από τις 2 γραμμές. θέλω έτσι να είναι ο πίνακας μου, ώστε μετά να κάνω συγκρίσεις των στοιχείων της δεύτερης στήλης με την πρώτη γραμμή. Δεν ξέρω πως να το φτιάξω. Διαφορετικά να φτιάξω 2 πίνακες στον έναν τα στοιχεία που είναι οριζόντια και στον άλλο τα στοιχεία που είναι κάθετα.///////// 0 100 200 300 400///////// 1 0,8 0,5 0,2 017 0,119 121 0,523 0,225 028 030 032 0Ευχαριστώ πολύ. Link to comment Share on other sites More sharing options...
nucleus Απρίλιος 18, 2012 #2 Κοινοποίηση Απρίλιος 18, 2012 Σε 1 πίνακα μόνο αν είναι δισδιάστατος με στήλες όσες είναι το μέγιστο πλήθος των στοιχείων που περιέχονται στις 2 πρωτες γραμμές του txt και γραμμές όσες είναι οι γραμμές και του txt.Καλύτερα να το κάνεις με 2 πίνακες. Link to comment Share on other sites More sharing options...
Tsoureki Απρίλιος 18, 2012 #3 Κοινοποίηση Απρίλιος 18, 2012 Η διατύπωση σου δεν βοηθάει πολύ. Το παρακάτω είναι μια ενδεικτική μορφή του αρχείου;///////// 0 100 200 300 400///////// 1 0,8 0,5 0,2 017 0,119 121 0,523 0,225 028 030 032 0Προφανώς θέλεις δύο δισδιάστατους πίνακες (?) γιατί καταλαβαίνω ότι είναι διαφορετικών διαστάσεων. Δεν είπες επίσης τι είδους συγκρίσεις θέλεις να κάνεις. Για παράδειγμα κάποιος αλγόριθμος sort μπορεί να σε βοηθούσε; Θέλεις να βρίσκεις το μέγιστο από δύο στοιχεία των πινάκων;Aφού ανοίξεις το stream μπορείς να πάρεις τα δεδομένα με αρκετούς τρόπους (fscanf ή strtok και fseek) ανάλογα με το layout του αρχείου. Με τα αντίστοιχα loops γεμίζεις τους πίνακες και τέλος κάνεις τις συγκρίσεις που θέλεις. Θα μπορούσα να σου γράψω ένα κορμό αν είχα μια καλύτερη εικόνα, π.χ. στείλε ένα ενδεικτικό αρχείο και το πως θα είναι ταξινομημένα τα δεδομένα του στους πίνακες. Link to comment Share on other sites More sharing options...
scoobydoo Απρίλιος 18, 2012 Author #4 Κοινοποίηση Απρίλιος 18, 2012 Η διατύπωση σου δεν βοηθάει πολύ. Το παρακάτω είναι μια ενδεικτική μορφή του αρχείου;Προφανώς θέλεις δύο δισδιάστατους πίνακες (?) γιατί καταλαβαίνω ότι είναι διαφορετικών διαστάσεων. Δεν είπες επίσης τι είδους συγκρίσεις θέλεις να κάνεις. Για παράδειγμα κάποιος αλγόριθμος sort μπορεί να σε βοηθούσε; Θέλεις να βρίσκεις το μέγιστο από δύο στοιχεία των πινάκων; Aφού ανοίξεις το stream μπορείς να πάρεις τα δεδομένα με αρκετούς τρόπους (fscanf ή strtok και fseek) ανάλογα με το layout του αρχείου. Με τα αντίστοιχα loops γεμίζεις τους πίνακες και τέλος κάνεις τις συγκρίσεις που θέλεις. Θα μπορούσα να σου γράψω ένα κορμό αν είχα μια καλύτερη εικόνα, π.χ. στείλε ένα ενδεικτικό αρχείο και το πως θα είναι ταξινομημένα τα δεδομένα του στους πίνακες. Στον πίνακα που βλέπεις κάτι τέτοιο θέλω να κάνω. Τα στοιχεία στο κίτρινο και το ροζ θα τα εισάγω από το αρχείο, είναι όπως τα στοιχεία που ανέφερα παραπάνω. Μετά θα έχω συγκρίσεις των στοιχείων που είναι στα ροζ κουτάκια. Δηλαδή όπως είναι ο πίνακας το 0 με το 0 και βρίσκω το ελάχιστο και μπαίνει στο πρώτο άσπρο κουτάκι, μετά το 0 με το 0,2 και μπαίνει το 0 και πάει έτσι και συμπληρώνεται ο πίνακας. Ευχαριστώ πολύ! Link to comment Share on other sites More sharing options...
Tsoureki Απρίλιος 18, 2012 #5 Κοινοποίηση Απρίλιος 18, 2012 Fuzzy Logic μου μυρίζεται και δεν μπορώ ακόμα να κατάλαβω αν αυτό είναι άσκηση για τη C ή για τεχνητή νοημοσύνη. Δλδ σας είπανε να το κάνετε αποκλειστικά σε πρόγραμμα C; Μια παρουσίαση με Excell δεν θα ήταν πολύ πιο βολική;Τέσπα, όπως το βλέπω τελικά, θέλει τρεις δισδιάστατους πίνακες (όπως θέλεις γίνεται απλά εγώ έτσι θα το κανα - αν έπρεπε να χρησιμοποιήσω αναγκαστικά πίνακες). Ένα για τα δεδομένα T και τα βάρη τους, έναν για τα δεδομένα D και τα βάρη τους και ο τρίτος για να αποθηκεύονται τα αποτελέσματα από το Mandani Min.To πρόβλημα σου είναι ότι δεν μπορείς να ανοίξεις το αρχείο και να περάσεις τις τιμές στους πίνακες;ΥΓ. Το μέγεθος των πινάκων είναι σταθερό ή άγνωστο (π.χ. εξαρτάται από το πλήθος των δεδομένων στο αρχείο);EDIT: για αυτό που το θες μπορεί να γίνει μόνο με αποθήκευση των βαρών σε ένα δισδιάστατο, σύγκριση τους και αποθήκευση των αποτελεσμάτων σε δευτερο πίνακα... Link to comment Share on other sites More sharing options...
nucleus Απρίλιος 18, 2012 #6 Κοινοποίηση Απρίλιος 18, 2012 Arrays - C++ Documentationδιαβάζεις εκει που λέει Multidimensional arrays Link to comment Share on other sites More sharing options...
scoobydoo Απρίλιος 18, 2012 Author #7 Κοινοποίηση Απρίλιος 18, 2012 Fuzzy Logic μου μυρίζεται και δεν μπορώ ακόμα να κατάλαβω αν αυτό είναι άσκηση για τη C ή για τεχνητή νοημοσύνη. Δλδ σας είπανε να το κάνετε αποκλειστικά σε πρόγραμμα C; Μια παρουσίαση με Excell δεν θα ήταν πολύ πιο βολική;Τέσπα, όπως το βλέπω τελικά, θέλει τρεις δισδιάστατους πίνακες (όπως θέλεις γίνεται απλά εγώ έτσι θα το κανα - αν έπρεπε να χρησιμοποιήσω αναγκαστικά πίνακες). Ένα για τα δεδομένα T και τα βάρη τους, έναν για τα δεδομένα D και τα βάρη τους και ο τρίτος για να αποθηκεύονται τα αποτελέσματα από το Mandani Min.To πρόβλημα σου είναι ότι δεν μπορείς να ανοίξεις το αρχείο και να περάσεις τις τιμές στους πίνακες;ΥΓ. Το μέγεθος των πινάκων είναι σταθερό ή άγνωστο (π.χ. εξαρτάται από το πλήθος των δεδομένων στο αρχείο);EDIT: για αυτό που το θες μπορεί να γίνει μόνο με αποθήκευση των βαρών σε ένα δισδιάστατο, σύγκριση τους και αποθήκευση των αποτελεσμάτων σε δευτερο πίνακα...Fuzzy Logic είναι. Δεν μας είπαν αποκλειστικά να χρησιμοποιήσουμε C. Με όποια γλώσσα προγραμματισμού θέλουμε να το κάνουμε. Γίνεται με κάποια άλλη γλώσσα πιο εύκολα?Υπάρχει κάτι έτοιμο για να χρησιμοποιήσω?Σκέφτηκα με πίνακες στη c, γιατί έχω περισσότερη εξοικείωση. Αυτό που με δυσκολεύει είναι το πως θα διαβάσω από το αρχείο τα δεδομένα μου και θα τα περάσω σε πίνακες. Στο αρχείο τα δεδομένα μου standar θα είναι. Όταν λες παρουσίαση σε excel τι εννοείς?Ευχαριστώ Link to comment Share on other sites More sharing options...
nucleus Απρίλιος 18, 2012 #8 Κοινοποίηση Απρίλιος 18, 2012 Για αναγνωση γραμμών απο txt αρχειοCode: Reading a Text File One Line at a Time (Visual C#)Διαχωρισμός ενός string με βάση ένα χαρακτήρα για να παρεις τα δεδομένα απο τις γραμμές του αρχειου που τα έχουν οριζόντιαString.Split Method (System)Δομή δεδομένων με ζεύγη της μορφής (Κey,Value) μεταβλητού μεγέθουςDictionary(TKey, TValue) Class (System.Collections.Generic)Αναδρομήforeach, in (C#)Είναι σε C# Link to comment Share on other sites More sharing options...
Theos Απρίλιος 18, 2012 #9 Κοινοποίηση Απρίλιος 18, 2012 Mήπως μπορείς να μου στείλεις κάτι για να ξεκινήσω?Γιατί έχω δυσκολευτεί αρκετά με αυτό και δεν μπορώ να βρω κάτι για να ξεκινήσω...Αυτό θα με βοηθούσε πάρα πολύ..Ευχαριστώ[C] thelabbbbb - Pastebin.comΕνδεικτικό αρχείο (με όνομα test.txt!):1 2 3 45 6 7 8 9 102.5 3.204 115Και το αντίστοιχο output:-----------LINE 1------------READ NUMBER 1.000000 !READ NUMBER 2.000000 !READ NUMBER 3.000000 !READ NUMBER 4.000000 !-----------LINE 2------------READ NUMBER 5.000000 !READ NUMBER 6.000000 !READ NUMBER 7.000000 !READ NUMBER 8.000000 !READ NUMBER 9.000000 !READ NUMBER 10.000000 !-----------LINE 3------------READ NUMBER 2.500000 !READ NUMBER 3.204000 !READ NUMBER 1.000000 !-----------LINE 4------------READ NUMBER 1.000000 !-----------LINE 5-----------------------LINE 6------------READ NUMBER 5.000000 !-----------LINE 7-----------------------LINE 8------------ Link to comment Share on other sites More sharing options...
scoobydoo Απρίλιος 18, 2012 Author #10 Κοινοποίηση Απρίλιος 18, 2012 [C] thelabbbbb - Pastebin.comΕνδεικτικό αρχείο (με όνομα test.txt!):1 2 3 45 6 7 8 9 102.5 3.204 115Και το αντίστοιχο output:-----------LINE 1------------READ NUMBER 1.000000 !READ NUMBER 2.000000 !READ NUMBER 3.000000 !READ NUMBER 4.000000 !-----------LINE 2------------READ NUMBER 5.000000 !READ NUMBER 6.000000 !READ NUMBER 7.000000 !READ NUMBER 8.000000 !READ NUMBER 9.000000 !READ NUMBER 10.000000 !-----------LINE 3------------READ NUMBER 2.500000 !READ NUMBER 3.204000 !READ NUMBER 1.000000 !-----------LINE 4------------READ NUMBER 1.000000 !-----------LINE 5-----------------------LINE 6------------READ NUMBER 5.000000 !-----------LINE 7-----------------------LINE 8------------Ευχαριστώ πολυ. Θέλω επίσης, αυτά τα δεδομένα που διαβάζω να μπαίνουν σε πίνακες και θέλω σε 2 χωριστούς πίνακες. Αυτό πως θα το υλοποιήσω?Μπορείς να φτιάξεις κάτι τέτοιο να δω πως γίνεται?Σε ευχαριστώ πάρα πολύ για τη βοήθεια! Link to comment Share on other sites More sharing options...
Theos Απρίλιος 18, 2012 #11 Κοινοποίηση Απρίλιος 18, 2012 Ευχαριστώ πολυ. Θέλω επίσης, αυτά τα δεδομένα που διαβάζω να μπαίνουν σε πίνακες και θέλω σε 2 χωριστούς πίνακες. Αυτό πως θα το υλοποιήσω?Μπορείς να φτιάξεις κάτι τέτοιο να δω πως γίνεται?Σε ευχαριστώ πάρα πολύ για τη βοήθεια!Δεν ξέρω πως ακριβώς θες να κατανέμονται τα στοιχεία, αλλά δες αυτόPrivate Paste ID: bPqyZfP7όπου στο παρακάτω σημείο..if (1){ puts("Stored number in array A!"); arrayA[a++] = currentNumber; } else { puts("Stored number in array B!"); arrayB[b++] = currentNumber; }.. αντικαθιστάς το if (1) με το δικό σου έλεγχο, προφανώς, ο οποίος θα ρυθμίζει σε ποιο πίνακα αντιγράφεται η τιμή.edit:Όπως θα δεις, οι πίνακες είναι στατικοί, με χωρητικότητα που καθορίζεται στην αρχή (στα defines).Αν θέλεις δυναμικούς πίνακες, παίξε με malloc/realloc. Link to comment Share on other sites More sharing options...
nucleus Απρίλιος 18, 2012 #12 Κοινοποίηση Απρίλιος 18, 2012 Tadaaawhile (tokenPtr){ if (1){ puts("Stored number in array A!"); arrayA[a++] = atof(tokenPtr); } else { puts("Stored number in array B!"); arrayB[b++] = atof(tokenPtr); } } Link to comment Share on other sites More sharing options...
Tsoureki Απρίλιος 18, 2012 #13 Κοινοποίηση Απρίλιος 18, 2012 Ενδεικτικό αρχείο (με όνομα test.txt!): 1 2 3 45 6 7 8 9 102.5 3.204 115 Δεν του κάνει ένας τέτοιου τύπου αρχείου. Έχει να κάνει με ασαφή λογική και θέλει συγκεκριμένα δεδομένα μαζί με τα βάρη τους (χοντρικά θα πρέπει μετά να συγκρίνει τα βάρη μεταξύ τους και το μικρότερο να το κρατάει σε ένα πίνακα). Π.χ. για το συννημένο που έβαλε ποιο πάνω θα πρέπει να ήταν: 0 2 5 8 10 0 0,2 0,5 0,8 137 037,5 038 0,238,5 0,539 0,839,5 140 1 Ένας κώδικας που έγραψα για ένα τέτοιου τύπου αρχείο (τον έγραψα στο πόδι, δεν έχει περάσει compile, έχει λάθη αν τον περάσεις εσύ όμως compile θα τα διορθώσεις εύκολα νομίζω) θα μπορούσε να ήταν ο εξής: #include <string.h>#include <stdlib.h>#define D_LENGTH 5 //to plithos twn D#define T_LENGTH 7 //to plithwn twn Tint main(void){FILE *fp;char *line, *token;double tblD[D_LENGTH][2], tblT[T_LENGTH][2], mandani[D_LENGTH][T_LENGTH];int i,j=0;fp = fopen("mandani.txt","r");//Gemizoume tous duo pinakes tlbD k tlbT apo to arxeiowhile (fgets(line, MAX_LINE_LEN, fp) != NULL){ i=0; if(j<2){ token = strtok(line, ' '); while( token!=NULL){ tlbD[i][j] = atof(token); i++; token = strtok( NULL, ' '); } j++; }else{ token = strtok(line, ' '); while( token!=NULL){ tlbT[j-2][i] = atof(token); i++; token = strtok( NULL, ' '); } J++; }}fclose(fp);i=0;j=0;//Gemizoume ton pinaka mandani. Tropopoihse to an thes Zadeh, Larsen ktl for(i=0, i<D_LENGTH, i++){ for(j=0, j<T_LENGTH, j++){ if (tlbD[i][1] < tlbT[j][1]){ mandani[i][j] = tlbD[i][1]; }else{ mandani[i][j] = tlbT[i][1]; } }}return 0;} #include <stdio.h> Όπως και να χει προτείνω περισσότερο τη λύση του Excell εφόσον δεν σας ζητήθηκε σε C. Είναι πιο παραμετροποιήσιμο και ευπαρουσίαστο imo. Αν έχεις λίγη υπομονή αύριο θα σου στείλω κάτι αντίστοιχο. Link to comment Share on other sites More sharing options...
nucleus Απρίλιος 18, 2012 #14 Κοινοποίηση Απρίλιος 18, 2012 C# ειναι καλυτερη Link to comment Share on other sites More sharing options...
Tsoureki Απρίλιος 19, 2012 #15 Κοινοποίηση Απρίλιος 19, 2012 Κάπως έτσι θα μπορούσε να είναι σε Excell Mandiani.xls Link to comment Share on other sites More sharing options...
scoobydoo Απρίλιος 19, 2012 Author #16 Κοινοποίηση Απρίλιος 19, 2012 Όχι δεν το θέλουμε έτσι γιατί θα πρέπει να φτιάξουμε τον αλγόριθμο για αυτό θέλουμε κάποια γλώσσα προγραμματισμού.Ευχαριστώ για τη βοήθεια. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.