Visualizzazione dei risultati da 1 a 8 su 8

Visualizzazione discussione

  1. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Modificando il tuo codice facendo un po' di pulizia e correggendo il bug puoi scrivere qualcosa del genere, ci sono modi molto migliori per fare la stessa cosa tuttavia.
    codice:
    #include <iostream>
    #include <stdio.h>
    
    
    using namespace std;
    
    
    int numero_partecipanti, terminare;
    //DICHIARAZIONE DECIMALI
    float Pfinale[21];
    
    
    char PA[21][30];
    
    
    void Stampa_classifica();
    
    
    int main()
    {
    
    
        cout << "Scrivere il numero di partecipanti:\n";
        cin >> numero_partecipanti;
    
    
        for (int i = 0; i < numero_partecipanti; i++) {
            cout << "\nInserisci il nome del partecipante:\n";
            cin >> PA[i];
            cout << "Inserisci il punteggio finale:\n";
            cin >> Pfinale[i];
        }
        Stampa_classifica();
        return 0;
    }
    
    
    void Stampa_classifica()
    {
        bool scambio;
        do {
            scambio = false;
            //CICLO CHE SCAMBIA PER IL NUMERO DI PARTECIPANTI
            for (int i = 0; i < numero_partecipanti - 1; i++) {
                if (Pfinale[i] < Pfinale[i + 1]) {
                    //SCAMBIO NOME
                    for (int j = 0; j < 30; ++j) {
                        char tmp = PA[i][j];
                        PA[i][j] = PA[i + 1][j];
                        PA[i + 1][j] = tmp;
                    }
    
    
                    float tmp = Pfinale[i];
                    Pfinale[i] = Pfinale[i + 1];
                    Pfinale[i + 1] = tmp;
    
    
                    scambio = true;
                }
            }
        } while (scambio);
    
    
        for (int i = 0; i < numero_partecipanti; i++) {
            cout << i + 1 << " "
                 << "CLASSIFICATO";
            printf("\nNome: %s", PA[i]);
            printf("\nFinale: %.2f\n", Pfinale[i]);
        }
    }
    Le modifiche minime per far funzionare il codice danno come risultato
    codice:
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <float.h>
    #include <cmath>
    using namespace std;
    
    
    int numero_partecipanti, terminare;
    //DICHIARAZIONE DECIMALI
    float Pfinale[21];
    
    
    char PA[21][30];
    char NOME[21][30];
    
    
    void Stampa_classifica();
    int main()
    {
    
    
        cout << "Scrivere il numero di partecipanti:\n";
        cin >> numero_partecipanti;
    
    
        int i;
        for (i = 0; i < numero_partecipanti; i++) {
            cout << "\nInserisci il nome del partecipante:\n";
            cin >> PA[i];
            cout << "Inserisci il punteggio finale:\n";
            cin >> Pfinale[i];
        }
        Stampa_classifica();
        return 0;
    }
    
    
    void Stampa_classifica()
    {
        unsigned int i, scambio;
        float X = 0;
        do {
            scambio = 0;
            //CICLO CHE SCAMBIA PER IL NUMERO DI PARTECIPANTI
            for (i = 0; i < numero_partecipanti - 1; i++) {
                if (Pfinale[i] < Pfinale[i + 1]) {
                    //SCAMBIO NOME
                    int a, b, c;
                    for (a = 0; a != 30; a++) {
                        NOME[i][a] = PA[i][a];
                    }
                    for (b = 0; b != 30; b++) {
                        PA[i][b] = PA[i + 1][b];
                    }
                    for (c = 0; c != 30; c++) {
                        PA[i + 1][c] = NOME[i][c];
                    }
    
    
                    X = Pfinale[i];
                    Pfinale[i] = Pfinale[i + 1];
                    Pfinale[i + 1] = X;
    
    
                    scambio = 1;
                }
            }
        } while (scambio == 1);
    
    
        for (i = 0; i < numero_partecipanti; i++) {
            cout << i + 1 << " "
                 << "CLASSIFICATO";
            printf("\nNome: %s", PA[i]);
            printf("\nFinale: %.2f\n", Pfinale[i]);
        }
    }
    Una versione invece riscritta, anche se ancora largamente migliorabile, può essere
    codice:
    #include <iostream>
    #include <vector>
    
    
    using namespace std;
    
    
    struct partecipante {
        string nome;
        float punteggio;
    };
    
    
    vector<partecipante> leggi_partecipanti();
    void ordina_partecipanti(vector<partecipante>& partecipanti);
    void stampa_partecipanti(const vector<partecipante>& partecipanti);
    void stampa_classifica_partecipanti(vector<partecipante> partecipanti);
    
    
    int main()
    {
        vector<partecipante> partecipanti = leggi_partecipanti();
        stampa_classifica_partecipanti(partecipanti);
        return 0;
    }
    
    
    vector<partecipante> leggi_partecipanti() {
        int n;
        cout << "Numero partecipanti: ";
        cin >> n;
        vector<partecipante> partecipanti(n);
        for(int i = 0; i < n; ++i) {
            cout << "Inserisci il nome del partecipante: ";
            cin >> partecipanti[i].nome;
            cout << "Inserisci il punteggio finale: ";
            cin >> partecipanti[i].punteggio;
            cout << endl;
        }
        return partecipanti;
    }
    
    
    void ordina_partecipanti(vector<partecipante>& partecipanti) {
        bool scambio = true;
        for(int j = partecipanti.size()-1; scambio && j > 0; --j) {
            scambio = false;
            for(int i = 0; i < j; ++i) {
                if(partecipanti[i].punteggio < partecipanti[i+1].punteggio) {
                    swap(partecipanti[i], partecipanti[i+1]);
                    scambio = true;
                }
            }
        }
    }
    
    
    void stampa_partecipanti(const vector<partecipante>& partecipanti) {
       for(int i = 0; i < partecipanti.size(); ++i) {
           cout << i+1 << " " << partecipanti[i].nome
                << " con un punteggio di " << partecipanti[i].punteggio << endl;
       }
    }
    
    
    void stampa_classifica_partecipanti(vector<partecipante> partecipanti) {
        ordina_partecipanti(partecipanti);
        cout << "CLASSIFICA" << endl;
        stampa_partecipanti(partecipanti);
    }
    Ultima modifica di Scara95; 21-10-2017 a 16:42
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.