Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [c#] ordinamento di due array contemporaneamente

    ciao a tutti amici di html forum !
    Sto facendo un programma in c# che deve fare queste cose:
    -chiede quanti alunni ci sono in una classe e il loro voto.
    -e poi li deve riordinare in ordine di voto dal più bravo al meno bravo.
    Premetto che il programma l'ho già fatto solo che trova solo l'alunno più bravo e lo riordina correttamente ma gli altri no !
    adesso posto il codice
    codice:
                int numAlunni;
                bool inputOK;            
                 do
                {
                    Console.WriteLine("da quanti alunni è composta la classe ?");
                    inputOK = int.TryParse(Console.ReadLine(), out numAlunni);
                    if ((!inputOK) || (numAlunni <= 0))
                        Console.WriteLine("Errore input, Riprova!");
                } while ((numAlunni <= 0) || (!inputOK));
                 string[] nomi = new string[numAlunni];// dichiaro l'array dei nomi
                 float[] voti = new float[numAlunni];// dichiaro array voti
                 int n = numAlunni;// variabile temporanea per lo scambio dei nomi
                Console.WriteLine("inserisci i nomi degli alunni che fanno parte della classe");
                for (int nome = 0; nome < numAlunni; nome++)// ciclo inserimento nomi
                {
                    Console.WriteLine("alunno numero: " + (nome + 1));
                    nomi[nome] = Convert.ToString(Console.ReadLine());
                }
                Console.WriteLine("ora inserisci il voto degli alunni");
                for (int voto = 0; voto < numAlunni; voto++)// ciclo inserimento voti
                {
                    Console.WriteLine("voto numero: " + (voto + 1));
                    voti[voto] = Convert.ToInt32(Console.ReadLine());
                }
                for (int iEsterno = 0; iEsterno < n-1; iEsterno++)//ciclo di riordinamento
                {
                    float valoreMax = voti[iEsterno];
                    int indiceMax = iEsterno; // individuo il massimo
                    for (int iInterno = iEsterno + 1; iInterno < n-1; iInterno++)
                    {
                        if (voti[iInterno] > valoreMax)
                        {
                            valoreMax = voti[iInterno];
                            indiceMax = iInterno;
                        }
    
                        voti[indiceMax] = voti[iEsterno];
                        voti[iEsterno] = valoreMax;
    // scambio nomi
                        string nomeseccha = nomi[indiceMax];
                        nomi[indiceMax] = nomi[iEsterno];
                        nomi[iEsterno] = nomeseccha;
                    }
                }
                for (int i = 0; i < numAlunni; i++)
                {
                    Console.WriteLine(" " + nomi[i]);
                }
                Console.ReadLine();
    ho messo anche i commenti spero si capisca dov'è il problema
    Cristian

  2. #2
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Se vedi LINQ ci metti 1millisecondo a fare un ordinamento.
    Te lo consiglio...
    I got the remedy

  3. #3
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    a parte che in c# queste cose le fai con la giusta collection e con un istruzione. In ogni caso se il tuo obiettivo è quello di esercitarti un po' ad implementare qualche algoritmo allora attento perche hai mischiato la ricerca del massimo con l'ordinamento. Se voti[iInterno] > voti[iEsterno] devi scambiare e fare lo stesso con i nomi (per tenerli allineati). fine.

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.