Billy_Bekia Δημοσ. 20 Οκτωβρίου 2017 Δημοσ. 20 Οκτωβρίου 2017 Πως μπορουμε να μετατρεψουμε εναν αριθμό από βάση α σε βάση β? Μπορει καποιος να με βοηθησει και να μου πει εναν αλγοριθμο για την c++? Οι βασεις α και β μπορει να ειναι ειτε η 2 ειτε η 8 ειτε η 10 ειτε η 16. Ευχαριστω!
anon667 Δημοσ. 20 Οκτωβρίου 2017 Δημοσ. 20 Οκτωβρίου 2017 Δεν σας έχουν δείξει στην σχολή πως γίνεται μετατροπή μεταξύ συστημάτων; Στο google το έψαξες; Γεμάτο παραδείγματα είναι παντού.
Billy_Bekia Δημοσ. 20 Οκτωβρίου 2017 Μέλος Δημοσ. 20 Οκτωβρίου 2017 Πρεπει να το σπασουμε σε κατηγοριες? Δηλ. Αν απο 2 σε 8, αν απο 2 σε 10, αν απο 10 σε 2 κτλ?
Lanike71 Δημοσ. 21 Οκτωβρίου 2017 Δημοσ. 21 Οκτωβρίου 2017 Σε 15 δεύτερα : 1. Γούγλε "base change in c++" 2.Επιλογή 1 stackoverflow 3.Διάβασε αλγόριθμο στο https://stackoverflow.com/questions/12713999/base-10-to-base-n-conversions Δύσκολο; 1
defacer Δημοσ. 21 Οκτωβρίου 2017 Δημοσ. 21 Οκτωβρίου 2017 Πρεπει να το σπασουμε σε κατηγοριες? Δηλ. Αν απο 2 σε 8, αν απο 2 σε 10, αν απο 10 σε 2 κτλ? Δεν έχει καμία διαφορά στον αλγόριθμο το αν κάνεις μετατροπή από 2 σε 8 ή από 57 σε 13 ή οτιδήποτε άλλο. Θα σε συμβούλευα να μάθεις να κάνεις μετατροπή manually με μολύβι και χαρτί, δεν είναι δύσκολο. Απλά θέλει να κάτσεις λίγο να σκεφτείς τι κάνεις. Και μετά, έχοντας γνώση του τι ακριβώς κάνεις, είναι εύκολο και να τα μεταφέρεις σε πρόγραμμα.
k33theod Δημοσ. 21 Οκτωβρίου 2017 Δημοσ. 21 Οκτωβρίου 2017 Κοιτώντας διάφορους αλγόριθμους γι αυτό το πρόβλημα έπεσα πάνω σε έναν που μετατρέπει αριθμό από μία βάση στο 10δικό η υλοποίηση του σε python είναι έτσι def fromDigits(digits, : n = 0 for d in digits: n = b * n + d return n και μαγικά fromDigits([1,1,2,0],3) >>>42 Δεν κάνει δηλαδή το κλασικό 0*3^0 +2*3^1+... αλλά το παραπάνω και δουλεύει
imitheos Δημοσ. 21 Οκτωβρίου 2017 Δημοσ. 21 Οκτωβρίου 2017 Κοιτώντας διάφορους αλγόριθμους γι αυτό το πρόβλημα έπεσα πάνω σε έναν που μετατρέπει αριθμό από μία βάση στο 10δικό η υλοποίηση του σε python είναι έτσι def fromDigits(digits, : n = 0 for d in digits: n = b * n + d return n και μαγικά fromDigits([1,1,2,0],3) >>>42Δεν κάνει δηλαδή το κλασικό 0*3^0 +2*3^1+... αλλά το παραπάνω και δουλεύει Δεν είναι ο κλασικός 0*3^0+κτλ που ανέφερες και που θα έπρεπε να σκεφτεί με κλειστά μάτια ο OP (από το δημοτικό ακόμη το μάθαμε αυτό απλά αντί να ξέρουμε βάσεις και δυνάμεις λέγαμε μονάδες, δεκάδες, εκατοντάδες) αλλά και αυτός είναι ένας από τους κλασικούς τρόπους. Είναι σαν να κάνεις shift τα ψηφία. def fromDigits(digits, : n = 0 for d in digits: n = b * n n = n + d return n fromDigits([1,1,2,0],10) Για να γίνει πιο κατανοητό στον OP το έσπασα σε δύο δηλώσεις και άλλαξα την βάση που είχες σε 10. Έχουμε n = 10 * 0 (επειδή αρχικά το n είναι 0) και μετά προσθέτουμε το 1ο ψηφίο που είναι το 1 οπότε έχουμε 1. Στο επόμενο στάδιο έχουμε n = 10 * 1 δηλαδή επειδή πολλαπλασιάζουμε με την βάση, σύραμε το ψηφίο μας κατά μία θέση και από τις "μονάδες" πήγε στις "δεκάδες". Μετά προσθέτουμε το επόμενο ψηφίο και γίνεται 11. Και ούτω καθεξής, το 11 θα πολλαπλασιαστεί με το 10 και θα γίνει 110 (οπότε τα ψηφία μας σύρονται κατά μία θέση) και προσθέτουμε το ψηφίο 2 οπότε γίνεται 112 και τέλος στο επόμενο στάδιο γίνεται 1120. Δηλαδή πόσο πια βαριέται κάποιος να σκεφτεί και δεν βρήκε τον τρόπο του δημοτικού ? Σε λίγο κάποιος θα ζητήσει κώδικα c++ που να υπολογίζει το παραγοντικό.
PC_MAGAS Δημοσ. 21 Οκτωβρίου 2017 Δημοσ. 21 Οκτωβρίου 2017 Πρόσφατα καθώς "έπαιζα" λίγη C++ έκανα αυτό το παράδειγμα: #include <iostream> #include <bitset> using namespace std; const char RED[8]="\033[0;31m"; const char GREEN[8]="\033[0;32m"; const char YELLOW[8]="\033[0;33m"; const char NO_COLOR[7]="\033[0m"; int main() { unsigned int x,originalNumber; // A normal integer unsigned char *p; // A pointer to an integer unsigned char lower_byte; p = (unsigned char *)&x; // Read it, "assign the address of x to p" cout<<"Please enter a number: "<<endl; cin>> x; // Put a value in x, we could also use *p here cin.ignore(); originalNumber=x; //Saving the oroginal Value lower_byte=*p; *p=~*p; //inverting the first byte cout<< "Original Number: "<<GREEN<<std::bitset<32>(originalNumber)<<NO_COLOR<<"("<<RED<<originalNumber<<NO_COLOR<<")"<<endl; cout<< "Lower Byte Number: "<<GREEN<<std::bitset<32>(lower_byte)<<NO_COLOR<<"("<<RED<<(unsigned int)lower_byte<<NO_COLOR<<")"<<endl; cout<< "Modified Number: "<<GREEN<<std::bitset<32>(x)<<NO_COLOR<<"("<<RED<<x<<NO_COLOR<<")"<<endl; cin.get(); } Ίσως η βιβλιοθήκη bitset να έχει αυτό ποθ επιθυμείς. (Βασικά προσπαθούσα να αντιστρέψω δυαδικά τα πρώτα 8bit ενός integer αριθμού έτσι για δοκιμή.)
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα