_chris_ Δημοσ. 21 Ιανουαρίου 2009 Δημοσ. 21 Ιανουαρίου 2009 έχω γράψει ένα πρόγραμμα σε C++ που θα υπολογίζει τους αριθμούς Fibonacci (κάθε αριθμός ισούται με το άθροισμα του προηγούμενου και του προ-προηγούμενου) με μέγιστο 20 αριθμούς.ο χρήστης θα δίνει το πλήθος που θα υπολογιστεί και το αποτέλεσμα θα τυπώνεται.το έκανα με χρήση κλάσης αν και υπάρχει και πιο εύκολος τρόπος. το πρόγραμμα δουλεύει αλλά δεν ξέρω αν υπάρχει καμιά βελτίωση που μπορώ να κάνω.τα φώτα σας παρακαλώ. >class fib { private: int fibar[20]; public: fib(); void create_nums(int); void show(int); }; void fib::show(int n) { for(int i=0;i<n;i++) cout<<fibar[i]<<"\n"; } fib::fib() { memset(fibar,0,sizeof(int)*20); fibar[1]=1; } void fib::create_nums(int n) { for(int i=2;i<n;i++) fibar[i]=fibar[i-2]+fibar[i-1]; } main() { fib obj; int num; cout<<"dose plithos arithmon:"; do{ cin>>num; }while(num>20 || num<0); obj.create_nums(num); obj.show(num); }
ippo00 Δημοσ. 22 Ιανουαρίου 2009 Δημοσ. 22 Ιανουαρίου 2009 Err.. βελτιώσεις ντάξει.. Πάντως κάπως έτσι θα το έκανα, όχι με loop. > 1 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 void fib_recursion(long long int cvalue, long long int pvalue, int count, 6 int max) 7 { 8 if (count == max) { 9 printf("\nExiting, ciao\n"); 10 exit(0); 11 } 12 printf("%d\n", cvalue); 13 fib_recursion(cvalue + pvalue, cvalue, count + 1, max); 14 } 15 16 void check_arguments(int argc, char **argv) 17 { 18 19 if (argc != 2) { 20 printf("Proper usage is `%s <int>'\n", argv[0]); 21 exit(0); 22 } 23 if (!atoi(argv[1])) { 24 printf("Proper usage is `%s <int>'\n", argv[0]); 25 exit(0); 26 } 27 if (atoi(argv[1]) > 47) { 28 printf("Cannot calculate for higher than 47 \n"); 29 exit(0); 30 } 31 } 32 int main(int argc, char **argv) 33 { 34 35 check_arguments(argc, argv); 36 fib_recursion(0, 1, 0, atoi(argv[1])); 37 return (-1); 38 }
_chris_ Δημοσ. 22 Ιανουαρίου 2009 Μέλος Δημοσ. 22 Ιανουαρίου 2009 το θέμα είναι ότι πρέπει να κάνω μια κλάση που θα έχει τις απαραίτητες λειτουργίες για την εμφάνιση των όρων.Γι αυτό αναρωτιέμαι αν αυτό είναι σωστό.ότι δουλεύει δουλεύει αλλά δεν ξέρω αν θα μπορούσε να βελτιωθεί κάτι.προφανώς ο έλεγχος που γίνεται στη main() δεν έπρεπε να γίνεται εκεί αλλά σε κάποια συνάρτηση.
ippo00 Δημοσ. 22 Ιανουαρίου 2009 Δημοσ. 22 Ιανουαρίου 2009 Θα μπορούσες να το βάλεις στο constructor sou. Και βάλε το cout μέσα στο while για να μην νομίζει ο άλλος ότι έκανε hang το πρόγραμμά.
_chris_ Δημοσ. 22 Ιανουαρίου 2009 Μέλος Δημοσ. 22 Ιανουαρίου 2009 Θα μπορούσες να το βάλεις στο constructor sou. Και βάλε το cout μέσα στο while για να μην νομίζει ο άλλος ότι έκανε hang το πρόγραμμά. οκ αλλά τώρα έχω άλλο πρόβλημα. μετά θέλω να εμφανιστουν οι αριθμοί.και πρέπει να εμφανιστούν τόσοι αριθμοί όσους έδωσε ο χρήστης.άρα ο χρήστης πρέπει να ξαναπληκτρολογήσει τον αριθμό.και πρέπει να είναι ο ίδιος δε λέει να βάλω μια for και να εμφανίζει αριθμούς μέχρι να βρει το 0. με λίγα λόγια αν ο χρήστης δώσει 5 η void fib::show(int n) πως θα το ξέρει ώστε να εμφανίσει 5;
3c0r1z Δημοσ. 25 Ιανουαρίου 2009 Δημοσ. 25 Ιανουαρίου 2009 Μια ρητορική ερώτηση για αρχή. Γιατί δεν χρησιμοποιείς std::vector αντι για πίνακες; Τώρα στην τελευταία ερώτηση θα μπορούσες να χρησιμοποιήσεις μια μεταβλητή στην κλάση όπου θα αποθήκευε αυτον αριθμό, δηλαδή κάπως έτσι: >class fib { private: // Η μεταβλητή που αποθηκεύει την πληκρολόγηση του χρήστη unsigned short used_; public: // Οι παρακάτω μέθοδοι είναι για να έχεις πρόσβαση // στην μεταβλητή unsigned short GetUsed() const { return used_; } void SetUsed(unsigned short used) { used_ = used; } };
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.