Salvation Δημοσ. 24 Οκτωβρίου 2010 Δημοσ. 24 Οκτωβρίου 2010 Καλησπέρα, Θέλω να φτίαξω ένα προγραμμα που να δέχεται έναν αριθμό και να τον βγάζει το αντεστραμμένο, πχ να δέχετε το 314 και να βγάζει σαν output το 413. Μια προσπάθεια που έκανα είναι η παρακάτω: > #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int num,i,k,*a; int reversed=0; printf("Give number: "); scanf("%d",&num); i=0; a=malloc(1*sizeof(int)); while((num/10)!=0) { a[i]=num%10; i++; a=realloc(a,sizeof(int)); num=num/10; } for(k=0;k<i;k++) reversed+=pow(10,k)*a[k]; printf("Reversed number is: %d",reversed); return 0; } Ξέρω ότι στη συγκεκριμένη υλοποίηση δεν έχω κάνει αποδέσμευση μνήμης στο τέλος ούτε κάνω τον έλεγχο για NULL στη malloc αλλά δεν νομίζω να είναι αυτό το πρόβλημα. Αν έχετε κάμια προταση γιατί παίρνω λανθασμένο αποτέλεσμα please tell!
Salvation Δημοσ. 24 Οκτωβρίου 2010 Μέλος Δημοσ. 24 Οκτωβρίου 2010 Καλησπέρα, Θέλω να φτίαξω ένα προγραμμα που να δέχεται έναν αριθμό και να τον βγάζει το αντεστραμμένο, πχ να δέχετε το 314 και να βγάζει σαν output το 413. Μια προσπάθεια που έκανα είναι η παρακάτω: > #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int num,i,k,*a; int reversed=0; printf("Give number: "); scanf("%d",&num); i=0; a=malloc(1*sizeof(int)); while((num/10)!=0) { a[i]=num%10; i++; a=realloc(a,sizeof(int)); num=num/10; } for(k=0;k<i;k++) reversed+=pow(10,k)*a[k]; printf("Reversed number is: %d",reversed); return 0; } Ξέρω ότι στη συγκεκριμένη υλοποίηση δεν έχω κάνει αποδέσμευση μνήμης στο τέλος ούτε κάνω τον έλεγχο για NULL στη malloc αλλά δεν νομίζω να είναι αυτό το πρόβλημα. Αν έχετε κάμια προταση γιατί παίρνω λανθασμένο αποτέλεσμα please tell!
V.I.Smirnov Δημοσ. 24 Οκτωβρίου 2010 Δημοσ. 24 Οκτωβρίου 2010 Kάτι πρόχειρο : δώσε τον αριθμό ως string, και ανάστρεψέτο. Μετά ξανακάνε το ανεστραμμένο string αριθμό. Δες εδώ πώς αντιστρέφεται ένα string (διάφορες ιδέες) : http://www.insomnia.gr/forum/showthread.php?t=376309&highlight=%CE%B1%CE%BD%CE%B1%CE%B4%CF%81%CE%BF%CE%BC%CE%B7 Aφού ο αριθμός γραφεί ανάποδα ως string, μπορεί να ξαναμετατραπεί σε αριθμό με κάποια συνάρτηση όπως η atoi.... -
V.I.Smirnov Δημοσ. 24 Οκτωβρίου 2010 Δημοσ. 24 Οκτωβρίου 2010 Kάτι πρόχειρο : δώσε τον αριθμό ως string, και ανάστρεψέτο. Μετά ξανακάνε το ανεστραμμένο string αριθμό. Δες εδώ πώς αντιστρέφεται ένα string (διάφορες ιδέες) : http://www.insomnia.gr/forum/showthread.php?t=376309&highlight=%CE%B1%CE%BD%CE%B1%CE%B4%CF%81%CE%BF%CE%BC%CE%B7 Aφού ο αριθμός γραφεί ανάποδα ως string, μπορεί να ξαναμετατραπεί σε αριθμό με κάποια συνάρτηση όπως η atoi.... -
Salvation Δημοσ. 24 Οκτωβρίου 2010 Μέλος Δημοσ. 24 Οκτωβρίου 2010 Ευχαριστώ, το συγκεκριμένο τρόπο τον γνωρίζω, αλλά ήθελα να το δοσιμάσω με τη μέθοδο των υπολοιπων. Αν βλέπεις κάτι που δεν βλέπω στον κώδικα πες!
Salvation Δημοσ. 24 Οκτωβρίου 2010 Μέλος Δημοσ. 24 Οκτωβρίου 2010 Ευχαριστώ, το συγκεκριμένο τρόπο τον γνωρίζω, αλλά ήθελα να το δοσιμάσω με τη μέθοδο των υπολοιπων. Αν βλέπεις κάτι που δεν βλέπω στον κώδικα πες!
nplatis Δημοσ. 24 Οκτωβρίου 2010 Δημοσ. 24 Οκτωβρίου 2010 Γιατί δεν το ψάχνεις Άλλη τεχνική: μπορείς να περιγράψεις με λόγια αυτό που κάνεις στο πρόγραμμα;
nplatis Δημοσ. 24 Οκτωβρίου 2010 Δημοσ. 24 Οκτωβρίου 2010 Γιατί δεν το ψάχνεις Άλλη τεχνική: μπορείς να περιγράψεις με λόγια αυτό που κάνεις στο πρόγραμμα;
Salvation Δημοσ. 24 Οκτωβρίου 2010 Μέλος Δημοσ. 24 Οκτωβρίου 2010 Δεν βλεπω κάτι λάθος στη realloc. Διαβάζω ένα αριθμό και υπολογίζω αρχικά το πηλίκο. Στη συνέχεια υπολογιζω τα υπόλοιπα και τα αποθηκεύω σε ενα πίνακα το μέγεθος του οποίου το αυξάνω κάθε φορά κατά 1. Μόλις τελειώσει η διαδικάσια πολλαπλασιάζω κάθε στοιχείο του πίνακα a με το 10^0, 10, 10^2 κτλ μονάδες,δεκάδες κτλ.
Salvation Δημοσ. 24 Οκτωβρίου 2010 Μέλος Δημοσ. 24 Οκτωβρίου 2010 Δεν βλεπω κάτι λάθος στη realloc. Διαβάζω ένα αριθμό και υπολογίζω αρχικά το πηλίκο. Στη συνέχεια υπολογιζω τα υπόλοιπα και τα αποθηκεύω σε ενα πίνακα το μέγεθος του οποίου το αυξάνω κάθε φορά κατά 1. Μόλις τελειώσει η διαδικάσια πολλαπλασιάζω κάθε στοιχείο του πίνακα a με το 10^0, 10, 10^2 κτλ μονάδες,δεκάδες κτλ.
Directx Δημοσ. 24 Οκτωβρίου 2010 Δημοσ. 24 Οκτωβρίου 2010 Αβλεψία υπάρχει πέραν του realloc, στην while και ύστερα στην pow αν δουλέψεις με έναν debugger και κάνεις step τον κώδικα σου θα το διορθώσεις άμεσα, ενδεχομένως στο pow να είναι systemic. Προσωπικά πάντως θα ακολουθούσα τον δρόμο που σου υπέδειξε ο V.I.Smirnov. Αν θες αναρτώ τον κώδικα αν και σε προτρέπω "να μην καταθέσεις τα όπλα".
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.