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

    [C++]Array in ordine crescente

    Sto creando un programma che ordina gli array in ordine crescente

    Ho scritto questa parte di codice ma non l'ho capita appieno:

    for( int pass = 0; pass < misuratoreArray - 1; pass++ )
    for( int i = 0; i < misuratoreArray - 1; i++ )
    N.:
    misuratoreArray è una costante intera con valore 10.
    Non riesco a concettualizzare quel - 1 che si trova in
    'pass < misuratoreArray - 1; e i < misuratoreArray - 1;.

    Se questi dati non dovessero bastare fatemi sapere che vi scrivo il programmino per intero.
    Vi sarei grato se mi spieghereste in modo molto elementare questo passaggio!
    Grazie infinite!
    Il sapere rende l'uomo libero!

  2. #2
    Sto creando un programma che ordina gli array in ordine crescente

    Ho scritto questa parte di codice ma non l'ho capita appieno:

    for( int pass = 0; pass < misuratoreArray - 1; pass++ )
    for( int i = 0; i < misuratoreArray - 1; i++ )
    N.:
    misuratoreArray è una costante intera con valore 10.
    Non riesco a concettualizzare quel - 1 che si trova in
    'pass < misuratoreArray - 1; e i < misuratoreArray - 1;.

    Se questi dati non dovessero bastare fatemi sapere che vi scrivo il programmino per intero.
    Vi sarei grato se mi spieghereste in modo molto elementare questo passaggio!
    -Se mi spiegaste....
    -In effetti se avessi postato un pò più di codice sarebbe più semplice,comunque da quello che hai scritto presumo che quel for interno nelle tue intenzioni scandisca l'array da ordinare confrontando ogni elemento con il successivo e che quindi la necessità di fermarsi al penultimo indice sia dovuta al fatto che se non fai così il prog ti va in crash accedendo ad un elemento dell'array oltre l'ultimo.
    -Comunque ci sono un sacco di algoritmi di ordinamento per array,anche molto efficienti,come mai hai necessità di scrivertelo tu?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Questo è il programma completo che non fa altro che ordinare in ordine crescente i valori di un array:

    #include<iostream.h>
    #include<iomanip.h>

    int main()
    {
    const int misuratoreArray = 10;
    int a[ misuratoreArray ] = { 2,6,4,8,10,12,89,68,45,37 };
    int i, hold;

    cout << "Registrati in ordine originale\n";

    for( i = 0; i < misuratoreArray; i++ )
    cout << setw( 4 ) << a[ i ];
    for( int pass = 0; pass < misuratoreArray - 1; pass++ )
    for( i = 0; i < misuratoreArray - 1; i++ )
    if( a[ i ] > a[ i + 1 ]
    {
    hold = a[ i ];
    a[ i ] = a[ i + 1 ];
    a[ i + 1 ] = hold;
    }

    cout << "\nRegistrati in ordine ascendente\n";

    for( i = 0; i < misuratoreArray; i++ )
    cout << setw( 4 ) << a[ i ];
    cout << endl;
    return 0;
    }
    La tecnica che ho utilizzato è detta 'bubble sort' o 'ordinamento a bolle'.
    Resta il fatto che i due cicli for di cui vi ho parlato precedentemente non li ho capiti appieno.
    Vi ringrazio per ogni vostro chiarimento in proposito!
    Il sapere rende l'uomo libero!

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Dunque misuratoreArray rappresenta il numero di elementi dell'array, questo significa che gli elementi occupano le posizioni che vanno da 0 a misuratoreArray - 1; ora quello che l'algorimto fa in un generico passo è confrontare l'elemento corrente di posizione 'i' con quello successivo di posizione 'i+1':

    if( a[ i ] > a[ i + 1 ] )

    Questo significa che l'indice 'i' deve fermarsi sul penultimo elemento che sara confrontato con l'utlmo a [i + 1]; ora abbiamo detto che l'ultima posizione è misuratoreArray -1, la penultima posizione è quindi misuratoreArray - 2, quindi 'i' deve essere minore di misuratoreArray - 1.


    Il ciclo interno sposta un elemento verso il fondo dell'array. In particolare, dopo che il for interno è stato eseguito per la prima volta, in fondo all'array l'elemento maggiore di tutti; con la seconda iterazione il secondo elemento piu grande sarà finito in penultima posizione; con la terza iterazione il terzo elemento piu grande sarà nella terzultima posizione e cosi via fino a completare l'array eseguendo tante iterazioni quante sono glielementi: ecco il motivo dei fue for annidati. Date queste considerazioni, il ciclo interno potrebbe fermarsi prima anzicchè andare ad esaminare anche le ultime posizioni che sono state gia ordinate, comuque questa è un'ottimizzazione e l'algoritmo funziona lo stesso.


  5. #5
    Esatto!!
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    Grazie per l'approfondita analisi!
    Ora mi è tutto più chiaro.
    Il sapere rende l'uomo libero!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.