Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα

Θα ήθελα τα φώτα σας αν ειναι δυνατόν σε ένα προιγραμματάκι C. Προσπαθώ να φτιάξω ένα προγραμμα να ανοιγει και να διαβάζει ένα αρχείο απο 25 ακέραιους αριθμούς και να το αποθηκεύει σε έναν πίνακα 5Χ5 διαστάσεων. Αυτό το απλό κομμάτι το έχω κάνει. Με δυσκολεύει να το υλοποιήσω με τη μορφή δομής. Δηλαδή τι εννοώ/ Αφού ανοιχθεί το αρχείο θα έχω μια δομή που θα καλείται και θα αποθηκεύει στον έναν πίνακα την δεκάδα του αριθμού και σε εναν δευτερον τις μονάδες του αριθμού.

πχ. αριθμος 25

πρώτος πίνακας  αποθηκευει το δύο και δευτερος πίνακας το 5. Εφόσον ο αριθμός είναι στην πρώτη θέση άρα και οι πίνακες θα είναι η θέση [1] και [1].

Προβληματίζομαι στο γεγονός για το αν οι πίνακες πρέπει να είναι και οι δύο δυο διστάσεων οι δε χρειάζεται απαραίτητα και πως θα αποτυπωσω τη δομή-struct

Δημοσ.

Από C δεν γνωρίζω πολλά από αυτά όμως που γράφεις καταλαβαίνω ότι είναι λάθος να χρησιμοποιείς πίνακες δύο διαστάσεων. Μονοδιάστατοι πίνακες θα είναι το σωστό. 

Από κει και πέρα έστω n, d, m οι τρεις πινακές σου, n ο αριθμός d δεκάδες  m μονάδες Θα έχεις  d= n/10 και m= n%10 

Δημοσ.

Δοκίμασε να έχεις έναν πίνακα από struct της μορφής:

 

struct numb_representation{
  int dec;
  int unit;
}
Οπότε, θέλεις μόνο έναν πίνακα 5x5 ο οποίος θα έχει σε κάθε θέση το struct. Και εάν το κάνεις και με δείκτες, θα μπορείς να παίρνεις τα στοιχεία με

 

numb = pStruct->dec * 10 + pStruct->unit;
Και άρα κάνεις μία function που παίρνει έναν αριθμό και σου επιστρέφει το struct για να μπει στον πίνακα και μία function που παίρνει ένα struct και σου επιστρέφει τον αριθμό. Έτσι θα μπορείς να κάνεις:

 

int a = 33;
myStruct = numb_to_struct(33);

int b = struct_to_numb(myStruct);
Εάν νιώθεις οικείος με δείκτες, θα μπορείς να κάνεις μία function που να παίρνει ένα void* και ένα char argument (π.χ. n ή s, για number ή struct αντιστοίχως) και αναλόγως να

 

* κάνει cast τον void*

* καλεί και επιστρέφει μία άλλη function με την κατάλληλη μορφή μεταβλητής και με σωστή τιμή της μεταβλητής.

 

Εάν θες να το κάνεις πιο γενικό, π.χ. και για εκατοντάδες, αντί για 2 int έχεις έναν int* μέσα στο struct με μορφή:

 

struct myStruct {
  int size;
  int* vals;
}
και έτσι από το size ξέρεις πόσα έχεις και επίσης μπορείς να δεσμεύεις μνήμη on the fly επειδή είναι incomplete struct.

 

 

Y.Γ. Φυσικά και είναι πιο συμφέρων να έχεις τον αριθμό κατευθείαν, αλλά με τα παραπάνω θα μάθεις και κάτι :P

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...