Εμφάνιση 1-7 από 7
  1. #1
    Εγγραφή
    14-12-2006
    Μηνύματα
    18
    Downloads
    5
    Uploads
    0
    Προσπαθω να γραψω ενα προγραμμα σε C(σε linux) το οποιο θα ανοιγει ενα συγκεκριμενο αρχειο απο το δισκο , θα διαβαζει πχ. 3 ονοματα που εχω γραψει σε αυτο(καθε ονομα και νεα γραμμη) δηλαδη θα διαβαζει τους χαρακτηρες καθε γραμμης και θα μου τα εμφανιζει στην οθονη ταξινομημενα κατα αυξουσα σειρα.

    Βασικα κανω χρηση της fopen("file","r") για να ανοιξω το αρχειο , και για την ταξινομηση βρηκα τον αλγοριθμο bubblesort.

    Το προβλημα μου ειναι πως (και αν) μπορω τις γραμμες που διαβαζω (τα ονοματα δλδ) απο το αρχειο να τα βαζω σε ενα πινακα τον οποιο θα χρησιμοποιει ο αλγοριθμος bubblesort για να κανει την ταξινομηση.

    Ειμαι λιγο ασχετος απο C και ισως να ρωταω πραγματα που ειναι απλα και μπερδευομαι μονος μου ή πραγματα που δεν γινονται.

    Οποιος μπορει ας βοηθησει μπας και μαθουμε και εμεις κατι

    Ευχαριστω!

  2. #2
    Εγγραφή
    03-11-2005
    Περιοχή
    Belfast, UK
    Ηλικία
    44
    Μηνύματα
    2.256
    Downloads
    20
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    78Mbps/19Mbps
    ISP
    Plusnet
    Router
    Plusnet Hub One
    Παράθεση Αρχικό μήνυμα από road Εμφάνιση μηνυμάτων
    Το προβλημα μου ειναι πως (και αν) μπορω τις γραμμες που διαβαζω (τα ονοματα δλδ) απο το αρχειο να τα βαζω σε ενα πινακα τον οποιο θα χρησιμοποιει ο αλγοριθμος bubblesort για να κανει την ταξινομηση.
    Φυσικά και μπορείς να χρησιμοποιήσεις έναν δισδιάστατο πίνακα γι' αυτόν το σκοπό, ο οποίος θα πρέπει να έχει αριθμό γραμμών τουλάχιστον όσες είναι και οι γραμμές του αρχείου. Το θέμα είναι ότι αν δεν ξέρεις από πριν τον αριθμό γραμμων του αρχείου θα πρέπει είτε ο πίνακας να δηλωθεί ως στατικός με αρκούντως μεγάλες διαστάσεις είτε (το πιο σωστό) να μετρήσεις πρώτα τον αριθμό γραμμών του αρχείου και στη συνέχεια να δημιουργήσεις τον πίνακα με malloc.


    Επίσης, έχε υπ'όψιν σου ότι θα πρέπει να παραλλάξεις λίγο τον αλγόριθμο φυσαλίδας, αφού για λεξικογραφική ταξινόμηση δεν αρκεί να συγκρίνεις μόνο τον πρώτο χαρακτήρα που έχουν δύο ονόματα. Αν αυτός βρεθεί ίδιος, πρέπει ο αλγόριθμος να πηγαίνει και στον επόμενο, και στον επόμενο κ.ο.κ., μέχρι είτε να βρεθεί διαφορά είτε να φτάσεις στο τέλος του ενός από τα δύο ονόματα που συγκρίνεις...

  3. #3
    Εγγραφή
    14-12-2006
    Μηνύματα
    18
    Downloads
    5
    Uploads
    0
    Βασικα οι γραμμες του αρχειου δεν θα ειναι πανω απο 20. Μπορω φυσικα να βαλω οτι θα ειναι πχ.20.

    Αυτο που δεν μπορω να βρω (με εντολες) ειναι αφου ανοιξω το αρχειο πως θα βαλω αυτα που εχει το αρχειο στον πινακα που μου ειπες οτι μπορω να χρησιμοποιησω....

  4. #4
    Εγγραφή
    03-11-2005
    Περιοχή
    Belfast, UK
    Ηλικία
    44
    Μηνύματα
    2.256
    Downloads
    20
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    78Mbps/19Mbps
    ISP
    Plusnet
    Router
    Plusnet Hub One
    Από το απόσπασμα που έκανα quote, δίνεται η εντύπωση ότι ήδη γνωρίζεις πώς να διαβάζεις την κάθε γραμμή του αρχείου. Αλλά τελικά έχεις καλέσει μόνο μία fopen() απ' ό,τι λες τώρα. Είδες πώς η έλλειψη ακριβολογίας δεν βοηθάει να παίρνουμε σωστές και ολοκληρωμένες απαντήσεις στα ερωτήματά μας;


    Το επόμενο βήμα από το σημείο που βρίσκεσαι είναι να χρησιμοποιήσεις εντολή που διαβάζει απευθείας από το αρχείο και αποθηκεύει κάπου αλλού. Εγώ το κάνω χρησιμοποιώντας συνήθως μία fgets() που διαβάζει επαναληπτικά (με while βρόχο, για έλεγχο της άφιξης στο τέλος του αρχείου) την κάθε γραμμή μέσα σε έναν μονοδιάστατο πίνακα που παίζει το ρόλο linebuffer. Μέσα στο βρόχο αρκεί να γίνεται αντιγραφή με strcpy() του περιεχομένου του linebuffer στην κατάλληλη γραμμή ( => χρειάζεσαι μετρητή για τον τρέχοντα αριθμό γραμμής) του δισδιάστατου πίνακα. Αν θες παράδειγμα με κώδικα, πες το...

  5. #5
    Εγγραφή
    14-12-2006
    Μηνύματα
    18
    Downloads
    5
    Uploads
    0
    Έχεις δίκαιο δεν το διατύπωσα σωστά.
    Ξέρω να διαβάζω τα δεδομένα από το αρχείο απλά δεν ξέρω πως τα γράφω μετά στο πινακα. Αν υπάρχει κάποιο παράδειγμα με κώδικα θα βοηθούσε πολύ.

    Σε ευχαριστώ για τη βοήθεια

  6. #6
    Εγγραφή
    03-11-2005
    Περιοχή
    Belfast, UK
    Ηλικία
    44
    Μηνύματα
    2.256
    Downloads
    20
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    78Mbps/19Mbps
    ISP
    Plusnet
    Router
    Plusnet Hub One
    Ορίστε ένα παραδειγματάκι στα γρήγορα. Συμπληρώνεις ενδιάμεσα κώδικα που χρειάζαεσαι κατά το δοκούν:


    Κώδικας:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[]) {
    	FILE *infile;
    	char linebuffer[50], linetable[20][50];
    	int linecounter = 0;
    
    	if(!(infile = fopen(argv[1], "r"))) {
    		printf("\nERROR: File %s not existant or could not be opened.\n\n", argv[1]);
    		return 1;
    	}
    
    	while((fgets(linebuffer, 50, infile))) {	/* Στο τέλος του αρχείου, η fgets επιστρέφει NULL και ο βρόχος τερματίζεται */
    		strcpy(linetable[linecounter], linebuffer);
    		linecounter++;
    	}
    	fclose(infile);
    
    	/* Εδώ οι εντολές που εργάζονται πάνω στον πίνακα linetable */
    
    	return 0;
    }

  7. #7
    Εγγραφή
    14-12-2006
    Μηνύματα
    18
    Downloads
    5
    Uploads
    0
    Αυτό ακριβώς έψαχνα.

    Ευχαριστώ πολύ.

Παρόμοια Θέματα

  1. Μηνύματα: 5
    Τελευταίο Μήνυμα: 13-07-08, 22:22
  2. Ποιο πρόγραμμα για screen capture με ήχο και για MSN;
    Από Director CrisAK στο φόρουμ Software γενικά
    Μηνύματα: 14
    Τελευταίο Μήνυμα: 03-08-07, 22:49
  3. Γρήγορη ερώτηση => Πρόγραμμα ελέγχου θερμοκρασίας?
    Από JoeBar στο φόρουμ Laptop, tablet και mobile computing
    Μηνύματα: 7
    Τελευταίο Μήνυμα: 22-07-06, 15:20
  4. Ερώτηση για πρόγραμμα menu
    Από foncastel στο φόρουμ Web authoring, development & web design
    Μηνύματα: 3
    Τελευταίο Μήνυμα: 11-05-06, 11:24

Tags για αυτό το Θέμα

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας