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

C++ Fibonacci numbers (με κλάση)


_chris_

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

Δημοσ.

έχω γράψει ένα πρόγραμμα σε 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);
}

Δημοσ.

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 }

Δημοσ.

το θέμα είναι ότι πρέπει να κάνω μια κλάση που θα έχει τις απαραίτητες λειτουργίες για την εμφάνιση των όρων.Γι αυτό αναρωτιέμαι αν αυτό είναι σωστό.ότι δουλεύει δουλεύει αλλά δεν ξέρω αν θα μπορούσε να βελτιωθεί κάτι.προφανώς ο έλεγχος που γίνεται στη main() δεν έπρεπε να γίνεται εκεί αλλά σε κάποια συνάρτηση.

Δημοσ.

Θα μπορούσες να το βάλεις στο constructor sou. Και βάλε το cout μέσα στο while για να μην νομίζει ο άλλος ότι έκανε hang το πρόγραμμά.

Δημοσ.
Θα μπορούσες να το βάλεις στο constructor sou. Και βάλε το cout μέσα στο while για να μην νομίζει ο άλλος ότι έκανε hang το πρόγραμμά.

 

οκ αλλά τώρα έχω άλλο πρόβλημα.

μετά θέλω να εμφανιστουν οι αριθμοί.και πρέπει να εμφανιστούν τόσοι αριθμοί όσους έδωσε ο χρήστης.άρα ο χρήστης πρέπει να ξαναπληκτρολογήσει τον αριθμό.και πρέπει να είναι ο ίδιος

 

δε λέει να βάλω μια for και να εμφανίζει αριθμούς μέχρι να βρει το 0.

 

με λίγα λόγια αν ο χρήστης δώσει 5 η void fib::show(int n) πως θα το ξέρει ώστε να εμφανίσει 5;

Δημοσ.

Μια ρητορική ερώτηση για αρχή. Γιατί δεν χρησιμοποιείς std::vector αντι για πίνακες; Τώρα στην τελευταία ερώτηση θα μπορούσες να χρησιμοποιήσεις μια μεταβλητή στην κλάση όπου θα αποθήκευε αυτον αριθμό, δηλαδή κάπως έτσι:

 

>class fib
{
    private:
// Η μεταβλητή που αποθηκεύει την πληκρολόγηση του χρήστη 
       unsigned short used_;	
    public:
       // Οι παρακάτω μέθοδοι είναι για να έχεις πρόσβαση
// στην μεταβλητή
       unsigned short GetUsed() const { return used_; }
       void SetUsed(unsigned short used) { used_ = used; }
};   

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...