forum.math.uoa.gr

Forum του Τμήματος Μαθηματικών
Ημερομηνία 22 Σεπ 2017, 20:55

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]




Δημιουργία νέου θέματος Απάντηση στο θέμα  [ 5 δημοσιεύσεις ] 
Συγγραφέας Μήνυμα
 Θέμα δημοσίευσης: Βοηθεια στον προγραμματισμόοοοοοοοο
ΔημοσίευσηΔημοσιεύτηκε: 11 Ιούλ 2010, 20:19 
Χωρίς σύνδεση
Regular Forumer

Εγγραφή: 11 Ιούλ 2010, 01:18
Δημοσ.: 107
Γειά σας συνάδελφοι....
Λοιπόν, σπουδάζω στο τμήμα Μαθηματικών Πανεπιστημίου Κρήτης...
Στο δεύτερο εξάμηνο έχουμε ως υποχρεωτικό μάθημα την γλώσσα προγραμματισμού C....
Λόγω του ότι ήμουν Θετική, δεν είχα ιδέα από αλγορύθμους και εντολές, βασικά δεν ήξερα καν τι ειναι προγραμματισμός...
Κατά την διάρκεια του εξαμήνου παρακολουθούσα διαλέξεις, από τις οποίες δεν κέρδισα τίποτα, γιατί ο καθηγητής πρέπει να κάνει άλλη δουλειά και όχι να διδάσκει....
Δεν το έχει καθόλου....
Τεσπα, έμεινα στο μάθημα και τώρα διαβάζω από το συγγραμμα που μας είχε δωθεί....
Καταφέρνω να λύσω κάποιες ασκήσεις, αλλά όχι και αυτές του καθηγητή...
Στις υποχρεωσεις μου τώρα, για να περάσω το μάθημα τον Σεπτέμβρη είναι να παραδώσω μια άσκηση, που πολύ λίγα καταλαβαίνω....
Η άσκηση έχει ως εξής:

Το πρόγραμμα θα πρέπει να τηρεί μια δομή δεδομένων η οποία περιέχει καταχωρήσεις...
Κάθε καταχώρηση θα πρέπει να αποτελείται απο τα εξής στοιχεία: όνομα, επώνυμο, και τηλέφωνο...
Μέσω του προγράμματος ο χρήστης θα μπορεί να καταχωρεί και να διαγράφει τις καταχωρήσεις.
Τα ονόματα δεν είναι παραπάνω απο 50 χαρακτήρες. Όλοι οι χαρακτήρες είναι λατινικοί.
Επειδή δε θέλουμε το πρόγραμμα να "ξεχνά" τις καταχωρήσεις ζητείται να τηρεί αρχείο
στο οποίο θα τις καταγράφει, και όταν το ξανατρέχουμε να "φορτώνει" τον κατάλογο απο αυτό.
Το πρόγραμμα θα πρέπει να παρουσιάζει μια γραμμή εντολών, ή "command prompt", με το οποίοο χρήστης θα μπορεί
να δίνει εντολές για τη διαχείριση του καταλόγου. Οι εντολές τις οποίες
θα δίδει ο χρήστης στο command prompt ζητούνται να είναι:
> p
εκτύπωση των καταχωρήσεων στην οθόνη
> f Georgiou
εκτύπωση των καταχωρήσεων που το επώνυμο είναι "Georgiou"
> d Georgiou
διαγραφή της καταχώρησης που αντιστοιχεί στο όνομα "Georgiou"
> i Nikos Petrou 182362554
εισαγωγή καταχώρησης, όνομα, επώνυμο, τηλέφωνο
> q
τερματισμός προγράμματος και ενημέρωση του αρχείου mydata.txt.
Οι επιπλέον εντολές ζητείται να είναι
> psn
Αλφαβητικά ταξινομημένη εκτύπωση, με βάση το όνομα
> pss
Αλφαβητικά ταξινομημένη εκτύπωση, με βάση το επώνυμο

Όποιος γνωρίζει κάτι ας στείλει...

_________________
Για ΣΕΝΑ τραγουδώ . . .


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Βοηθεια στον προγραμματισμόοοοοοοοο
ΔημοσίευσηΔημοσιεύτηκε: 11 Ιούλ 2010, 22:52 
Χωρίς σύνδεση
Regular Forumer

Εγγραφή: 21 Οκτ 2008, 19:57
Δημοσ.: 228
Το πρόγραμμα δεν είναι δύσκολο, αλλά θέλει δουλειά και πρέπει να έχεις ασχοληθεί λίγο με τη C.

Από αλγορίθμους, μόνο έναν για την ταξινόμηση χρειάζεσαι, για τις εντολές pss,psn. Οι αλγόριθμοι αυτοί μπορεί να είναι οι bubblesort (φυσαλίδας), quicksort (γρήγορη ταξινόμηση), ανάλογα ποιον έχετε κάνει.

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

Ποιό βιβλίο χρησιμοποιείτε;

_________________
"Αν οι αρχιτέκτονες κατασκεύαζαν τα κτίρια όπως οι προγραμματιστές προγραμματίζουν τους υπολογιστές, ο πρώτος τρυποκάρυδος που θα εμφανιζόταν θα κατέστρεφε τον πολιτισμό μας."
Δεύτερος νόμος του Gerald Weinberg.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Βοηθεια στον προγραμματισμόοοοοοοοο
ΔημοσίευσηΔημοσιεύτηκε: 12 Ιούλ 2010, 14:14 
Χωρίς σύνδεση
Regular Forumer

Εγγραφή: 11 Ιούλ 2010, 01:18
Δημοσ.: 107
Γεία σου delphi...
Λοιπόν, χρησιμοποιούμε το βιβλίο "Η Τέχνη και Επιστήμη της C" του Eric Roberts, απο τις εκδόσεις ΚΛΕΙΔΑΡΙΘΜΟΣ....
Απο το βιβλίο, μετά απο συστηματική μελέτη μπορώ να κάνω κάποιες ασκήσεις και "τρέχουν" κιόλας, τις ασκήσεις όμως του καθηγητή, δεν μπορώ να τις κάνω ολοκληρωμένες.....πφφφφ
Στην συγκεκριμένη ασκηση κατι καταφέρνω, αλλα μεχρι ενα κομμάτι της main, μετά την χανω την μπάλα.....
Ταξινόμηση δεν εχω καταλάβει καθόλου τι είναι....
Αρα δεν βλεπω να το περναω τον Σεπτέμβρη......

_________________
Για ΣΕΝΑ τραγουδώ . . .


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Βοηθεια στον προγραμματισμόοοοοοοοο
ΔημοσίευσηΔημοσιεύτηκε: 12 Ιούλ 2010, 18:47 
Χωρίς σύνδεση
Regular Forumer

Εγγραφή: 21 Οκτ 2008, 19:57
Δημοσ.: 228
Χμ, δύσκολα τα πράγματα. Άσε προς το παρόν την ταξινόμηση. Δεν είναι εκεί η δυσκολία.

Το γενικό πλάνο είναι: Κάθε εντολή χρήστη (7 στο σύνολο) θα έχει τη δική της συνάρτηση υλοποίησης. Επίσης, χρειάζεσαι μία συνάρτηση για να φορτώσει στην αρχή τα περιεχόμενα του αρχείου στον πίνακα Directory, μία για να μεγαλώνει τον πίνακα, αν χρειάζεται, μία για να γράψει στο τέλος τα περιεχόμενα του Directory στο αρχείο και μία συνάρτηση για τις ταξινομήσεις. Όλες αυτές καλούνται μέσα από την main. Φυσικά, μπορείς να βάλεις όσο κώδικα θέλεις μέσα στην main, αλλά με ξεχωριστές συναρτήσεις το πρόβλημα σπάει σε μικρότερα κομμάτια. Το μόνο που μένει είναι μια while μέσα στην main, που θα διαβάζει συνεχώς εντολές από τον χρήστη και θα καλεί τις κατάλληλες συναρτήσεις.

Το πρώτο θέμα νομίζω είναι τί μορφή θα έχει το αρχείο mydata.txt. Επειδή μάλλον το πρόγραμμα θα κάνει χρήση συνήθων συναρτήσεων της C όπως fgets, scanf κ.τ.λ. μάλλον το αρχείο πρέπει να είναι στην απλούστερη μορφή, δηλ. π.χ.:

George Georgiou 123456789
Kostas Euthimiou 987654321
κ.τ.λ.

Μια κατάλληλη δομή (εγγραφή) για να κρατήσει αυτές τις πληροφορίες θα ήταν η:

Κώδικας:
struct PersonData
{
    char FirstName[51];
    char LastName[51];
    char Telephone[21];
    int GiaDiagrafi;
};


Το πεδίο GiaDiagrafi το προσθέτω ώστε όταν κάποιος δώσει την εντολή π.χ. d Georgiou, το πεδίο GiaDiagrafi να παίρνει τιμή 1 κι έτσι η συγκεκριμένη εγγραφή να παραλείπεται από την συνάρτηση που αποθηκεύει το Directrory στο αρχείο στο τέλος.

Επειδή περιμένεις να έχει πολλές εγγραφές, δηλώνεις έναν πίνακα με αρχική χωρητικότητα 50 εγγραφών, αλλά τον δηλώνεις με δυναμικό τρόπο, ώστε αν χρειαστεί, να μεγαλώσει αργότερα. Έχεις λοιπόν αναλυτικά:

Κώδικας:
#define INITIALDIRECTORYSIZE 50

struct PersonData *Directory;
int DirectorySize = INITIALDIRECTORYSIZE;
int DirectoryCountItems = 0;

Directory = (struct PersonData *) malloc( sizeof(struct PersonData) * INITIALDIRECTORYSIZE );

if ( Directory == NULL )
{
    printf("H mnhmh den eparkei. Exodos...\n");
   exit( 1 );
}


Άρα, αμέσως χρειάζεσαι μια συνάρτηση να μεγαλώσει τον πίνακα, εάν αυτός γεμίσει. Εξ ορισμού, θα τον μεγαλώνει κατά 50 εγγραφές.

Κώδικας:
struct PersonData *ResizeDirectory(char *Directory[], int *DirectorySize, int DirectoryCountItems)
{
    struct PersonData *NewDirectory;
    int i;

    *DirectorySize += 50;
    NewDirectory = (struct PersonData *) malloc ( sizeof(struct PersonData) * (*DirectorySize) );
    if ( NewDirectory == NULL )
    {
       printf("H mnhmh den eparkei. Exodos...\n");
        exit(1);
    }
   
     //Antigrafi tou paliou pinaka ston kainourio
    for (i=0; i<DirectoryCountItems; i++) NewDirectory[i] = (*Directory)[i];
   
    free(*Directory); //Apeleytherosi ths palias mnhmhs
    return NewDirectory; //Epistrofi ths kainourias dieythinsis
}


Αυτή η συνάρτηση καλείται από την main π.χ. όπως παρακάτω:
Κώδικας:
Directory = ResizeDirectory( &Directory, &DirectorySize, DirectoryCountItems );


Προσπάθησε να φτιάξεις μια συνάρτηση που να καλείται από την main και να φορτώνει τα περιεχόμενα του αρχείου στον πίνακα Directory. Μια τέτοια συνάρτηση θα μπορούσε να είναι η
Κώδικας:
LoadDirectory( char *Directory[], int *DirectorySize, int *DirectoryCountItems );


Τα παραπάνω δεν τα έχω κάνει compile, ελπίζω να δουλεύουν.

Πάντως, επειδή έχει πολύ δουλειά και η εργασία είναι για το σπίτι, η συνεργασία με κάποιον άλλον είναι νομίζω καλή ιδέα. Ελπίζω να πήρες μια γεύση.

_________________
"Αν οι αρχιτέκτονες κατασκεύαζαν τα κτίρια όπως οι προγραμματιστές προγραμματίζουν τους υπολογιστές, ο πρώτος τρυποκάρυδος που θα εμφανιζόταν θα κατέστρεφε τον πολιτισμό μας."
Δεύτερος νόμος του Gerald Weinberg.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Βοηθεια στον προγραμματισμόοοοοοοοο
ΔημοσίευσηΔημοσιεύτηκε: 12 Ιούλ 2010, 22:27 
Χωρίς σύνδεση
Regular Forumer

Εγγραφή: 11 Ιούλ 2010, 01:18
Δημοσ.: 107
Η συνεργασία είναι πολύ καλή ιδέα....
Ναι, σε ευχαριστώ πραγματικά παρα μα πάρα πολύ....
Θα το μελετήσω και αν εχω καποια απορία θα πω....
Και παλι ευχαριστώ πολύ....
Να περνας καλά, Κωνσταντίνος....

_________________
Για ΣΕΝΑ τραγουδώ . . .


Κορυφή
 Προφίλ  
 
Τελευταίες δημοσιεύσεις:  Ταξινόμηση κατά  
Δημιουργία νέου θέματος Απάντηση στο θέμα  [ 5 δημοσιεύσεις ] 

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]


Μελη σε συνδεση

Μέλη σε αυτή την Δ. Συζήτηση : Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης


Δεν μπορείτε να δημοσιεύετε νέα θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να απαντάτε σε θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επεξεργάζεστε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να διαγράφετε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση

Αναζήτηση για:
Μετάβαση σε:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group