aisixtir Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 καλησπέρα ψάχνω να βρω στην C έναν τρόπο να ενώσω δυο μεταβλητές τύπου int σε μια τρίτη τύπου int παλι. πΧ χ=3 , y= 5 θέλω η μεταβλητη δ να αποθυκεύει το δ=35... καμια ιδέα ??
kostas_crete Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Αν έχεις μόνο integer χρησιμοποίησε τις itoa/atoi ή σε VS200x την Convert::....
parsifal Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 d = x * 10 + y; ???? Αν δεν είναι μονοψήφιες οι τιμές των μεταβλητών; Π.χ. "10" + "11"...; Ένας άλλος τρόπος είναι να τις τυπώσεις σε ένα νέο string κολλητά με την sprintf. Και μετά, χρήση της atoi.
aisixtir Δημοσ. 24 Ιουνίου 2009 Μέλος Δημοσ. 24 Ιουνίου 2009 με sprintf και μετα atoi δουλεψε μια χαρα ευχαριστω παιδια
drm Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Εάν το αποτέλεσμα το χρειάζεσαι σαν ακέραιο θα πρότεινα κάτι τέτοιο (ώστε να μην μπλέξεις με strings) C = A * 10^(1+floor(log10()) + B
ippo00 Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Εάν το αποτέλεσμα το χρειάζεσαι σαν ακέραιο θα πρότεινα κάτι τέτοιο (ώστε να μην μπλέξεις με strings)C = A * 10^(1+floor(log10()) + B Καλύτερα απλά να το κάνεις cast σε int να γλυτώσεις το floor C = A * 10^(1+ (int)log10() + B
parsifal Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Δεν φαίνεται να είναι C το παραπάνω. ψάχνω να βρω στην C έναν τρόπο...
Directx Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Με πρόλαβε ο parsifal οπότε το post κατεβαίνει (η καλύτερη & κομψότερη λύση btw.)
teo64x Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 C6WGMN, πώς μπορώ να σου εκφράσω ότι έγινες κατ' ευθείαν ένα από τα αγαπημένα μου πρόσωπα στο φόρουμ;
parsifal Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 Με πρόλαβε ο parsifal οπότε το post κατεβαίνει (η καλύτερη & κομψότερη λύση btw.) Νομίζω πως είναι πιο ευκολοχώνευτος τρόπος από κάποιον που είναι αρχάριος στη C. Τώρα, αν θέλουμε μία πολύ efficient λύση - π.χ. προγραμματίζουμε κάποιο πολύ μικρό σύστημα - ίσως είναι καλύτερο να γίνει με άλλον τρόπο. Αν και οι επεξεργαστικοί κύκλοι για να γίνουν οι πράξεις στις, κατά τα άλλα σωστές, παραστάσεις που δίνουν τα παιδιά πιο πάνω δε μου φαίνονται με μία πρώτη ματιά και τόσο λίγοι. Ίσως μπορεί να χωθεί ενδιάμεσα κάποιο bitwise operation που να ξαλαφρώνει λίγο τα πράγματα... ;
bxenos Δημοσ. 24 Ιουνίου 2009 Δημοσ. 24 Ιουνίου 2009 bitwise δεν το βλέπω (δεν συμβαδιζουν δυναμεις του 2 με του 10), αλλα για μικροελενκτες που δεν βολεύει το float ή το char buffer του atoi/itoa: > #include <stdio.h> unsigned combine2n(unsigned a,unsigned { unsigned b1 = b, //προσωρινο αντίγραφο της b moredigits = 1; //επιτρεπει σε πιθανο μηδενικο αριθμο b να δωσει το "0" //το combine2n(50,0) θα δωσει 500 //το combine2n(50,10) θα δωσει 5010 //το combine2n(50,100) θα δωσει 50100 while(b1 || moredigits){ //ο b1 έχει ενα ψηφείο, αρα "φτιάξε χώρο" για να μπεί αυτό: a *= 10; //"σπρώξε" τον πρωτο αριθμό (a) μια θέση προς τα αριστερα b1 /= 10; //αφαιρεσε απο τον δευτερο αριθμό μια θέση moredigits = 0; //χειρηστήκαμε τουλάχιστο 1 ψηφειο απο τη b (σε περίπτωση που ηταν 0) } return a + b; //ενωσε τον αριθμο (a) οπως έχει "σπρωχτεί" για να χωρέσει ο b, με τον b } int main(void){ printf("combine(34,56)=%u\n",combine2n(34,56)); printf("combine(34,0)=%u\n",combine2n(34,0)); printf("combine(34,50)=%u\n",combine2n(34,50)); printf("combine(34,100)=%u\n",combine2n(34,100)); } > αποτέλεσματα: combine(34,56)=3456 combine(34,0)=340 combine(34,50)=3450 combine(34,100)=34100
Directx Δημοσ. 25 Ιουνίου 2009 Δημοσ. 25 Ιουνίου 2009 Νομίζω πως είναι πιο ευκολοχώνευτος τρόπος από κάποιον που είναι αρχάριος στη C. Τώρα, αν θέλουμε μία πολύ efficient λύση - π.χ. προγραμματίζουμε κάποιο πολύ μικρό σύστημα - ίσως είναι καλύτερο να γίνει με άλλον τρόπο. Αν και οι επεξεργαστικοί κύκλοι για να γίνουν οι πράξεις στις, κατά τα άλλα σωστές, παραστάσεις που δίνουν τα παιδιά πιο πάνω δε μου φαίνονται με μία πρώτη ματιά και τόσο λίγοι. Ίσως μπορεί να χωθεί ενδιάμεσα κάποιο bitwise operation που να ξαλαφρώνει λίγο τα πράγματα... ; Προσωπικά θεωρώ ότι το καλύτερο είναι να κρατάς τον κώδικα σου όσο και όπου μπορείς απλό. Οι «ταρζανιές» δεν ωφελούν παρά μόνο πρόσκαιρα και όταν περνά ο καιρός και χρειάζεται να τον αναθεωρήσεις τότε τις βρίσκεις μπροστά σου και αρχίζουν διάφορα προβλήματα. Είμαι οπαδός της αρχής “K.I.S.S.”, ειδικά όταν η αρχιτεκτονική των σημερινών υπολογιστών δεν επιβάλει ιδιαίτερους (ουσιαστικούς) περιορισμούς που ήταν απαραίτητοι πριν 15 ή 20 χρόνια οπότε είμαι έτοιμος να διαπραγματευτώ μεταξύ ενός ευανάγνωστου κώδικα και ενδεχομένως λίγο πιο αργού ή λίγο μεγαλύτερου εκτελέσιμου. Φυσικά ο καθένας μπορεί να έχει διαφορετική θέση επί του θέματος οπότε όλες οι γνώμες δεκτές._
drm Δημοσ. 25 Ιουνίου 2009 Δημοσ. 25 Ιουνίου 2009 Προσωπικά θεωρώ ότι το καλύτερο είναι να κρατάς τον κώδικα σου όσο και όπου μπορείς απλό. Οι «ταρζανιές» δεν ωφελούν παρά μόνο πρόσκαιρα και όταν περνά ο καιρός και χρειάζεται να τον αναθεωρήσεις τότε τις βρίσκεις μπροστά σου και αρχίζουν διάφορα προβλήματα. Είμαι οπαδός της αρχής “K.I.S.S.”, ειδικά όταν η αρχιτεκτονική των σημερινών υπολογιστών δεν επιβάλει ιδιαίτερους (ουσιαστικούς) περιορισμούς που ήταν απαραίτητοι πριν 15 ή 20 χρόνια οπότε είμαι έτοιμος να διαπραγματευτώ μεταξύ ενός ευανάγνωστου κώδικα και ενδεχομένως λίγο πιο αργού ή λίγο μεγαλύτερου εκτελέσιμου. Φυσικά ο καθένας μπορεί να έχει διαφορετική θέση επί του θέματος οπότε όλες οι γνώμες δεκτές._ Εμένα πάλι μου αρέσει ο κώδικας(μου) να έχει μία κάποια συνέπεια θέλω καθαρές λύσεις. Προσπαθώ να αποφευγω τα quick n dirty, όσο βέβαια μπορώ...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.