Διαίρεση στοιχείων διανύσματος τιμών με το μικρότερο όρο στη C++

Να γραφεί ένα πρόγραμμα που:

  1. Διαβάζει από το STDIN (πληκτρολόγιο) δεκαδικούς αριθμούς (το πολύ 20)
  2. Υπολογίζει το μικρότερο από αυτούς
  3. Διαιρεί όλους του αριθμούς με τον μικρότερο όρο και πολλαπλασιάζει το αποτέλεσμα επί 100
  4. Τυπώνει το αποτέλεσμα στο STDOUT (οθόνη)
  5. Τροποποιήστε το πρόγραμμα ώστε να δέχεται μόνο θετικές τιμές

Δηλαδή, κάνει τη μετατροπή:

$$ \mathbf{x}_i \rightarrow \frac{100 \, \mathbf{x}_i} {\mathbf{x}_{min}} \quad , \quad \mathbf{x}_i > 0 $$

Σταδιακή λύση του προβλήματος

  1. Ανάγνωση τιμών σε πίνακα:
    #include <iostream>
    
    using namespace std;
    
    int main ()
    {
        float x[20];
        int i = 0;
        
        while (cin >> x[i])
        {
            ++i;
        }
    
        return 0;
    }
    
  2. Υπολογισμός του μικρότερου όρου
    #include <iostream>
    
    using namespace std;
    
    int main ()
    {
        float x[20];
        int i = 0;
        
        float xmin;
        int n;
        
        // ανάγνωση δεδομένων από STDIN
        while (cin >> x[i])
        {
            ++i;
        }
        n = i;
        
        // εύρεση του μικρότερου
        xmin = x[0];
        for (i=1; i < n; ++i)
        {
            if (x[i] < xmin)
            {
                xmin = x[i];
            }
        }
        
        cout << "min = " << xmin << endl;
        return 0;
    }
    
  3. Διαίρεση με το μικρότερο όρο επί 100:
    #include <iostream>
    
    using namespace std;
    
    int main ()
    {
        float x[20];
        int i = 0;
        
        float xmin;
        int n;
        
        // ανάγνωση δεδομένων από STDIN
        while (cin >> x[i])
        {
            ++i;
        }
        n = i;
        
        // εύρεση του μικρότερου
        xmin = x[0];
        for (i=1; i < n; ++i)
        {
            if (x[i] < xmin)
            {
                xmin = x[i];
            }
        }
        cout << "min = " << xmin << endl;
        
        // διαίρεση με το μικρότερο επί 100
        cout << endl << "Αποτελέσματα " << endl << endl ;
        for (i=0; i < n; ++i)
        {
            x[i] = (100.0 * x[i]) / xmin;
            cout << "i=" << i << "\t" << x[i] << endl;
        }   
    
        return 0;
    }
    
  4. Έλεγχος για θετικές τιμές. Και μια τελευταία προσθήκη: Διακοπή του βρόγχου ανάγνωσης, όταν ξεπεραστεί το μέγιστο πλήθος.
    #include <iostream>
    
    using namespace std;
    
    #define NMAX 20
    
    int main ()
    {
        float z, x[NMAX];
        int i = 0;
        
        float xmin;
        int n;
        
        // ανάγνωση δεδομένων από STDIN
        while (cin >> z)
        {
            if (z > 0)
            {
                x[i] = z;
                ++i;
            }
            if (i >= NMAX) break;
        }
        n = i;
        
        // εύρεση του μικρότερου
        xmin = x[0];
        for (i=1; i < n; ++i)
        {
            if (x[i] < xmin)
            {
                xmin = x[i];
            }
        }
        cout << "min = " << xmin << endl;
        
        // διαίρεση με το μικρότερο επί 100
        cout << endl << "Αποτελέσματα " << endl << endl ;
        for (i=0; i < n; ++i)
        {
            x[i] = (100.0 * x[i]) / xmin;
            cout << "i=" << i << "\t" << x[i] << endl;
        }   
    
        return 0;
    }
    

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

Αναζήτηση στο google.com για παρόμοια θέματα

Creative Commons License
Εκπαιδευτικό υλικό από τον Αθανάσιο Σταυρακούδη σας παρέχετε κάτω από την άδεια Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.