Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Gipple
    Registrato dal
    Mar 2009
    Messaggi
    41

    [C++] Array in ordine inverso utilizzando solo l'Array stesso?

    Buongiorno a tutti, volevo porvi una domanda (forse semplicissima, forse no) alla cui risposta non riesco ad arrivare in maniera autonoma.
    Mi è stato mostrato il testo di un esercizio su gli array che recita "Letto in input un array A, usando solo quest'array, invertire l'ordine degli elementi e poi stampare l'array A nel nuovo ordine". Di per se non è neanche difficile utilizzando almeno una variabile di appoggio, ma è quell' "usando solo quest'array" che mi da parecchio da fare e non riesco a capire se è scritto male il testo o sono io scemo che non riesco a vedere la soluzione ... qualcuno può darmi una mano? Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Senza una singola variabile di appoggio o una cella vuota dell'array è impossibile!
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Usi std::swap in un ciclo che va da zero a n/2 per scambiare l' elemento i-esimo con l' elemento di posizione n-1-i.
    std::swap usa una variabile d' appoggio per fare lo scambio.Ma senza una variabile d' appoggio non è possibile scambiare due elementi.
    Per cui chi ha scritto la consegna intendeva che non bisognava usare un array di appoggio, oppure la consegna è sbagliata.

  4. #4
    Utente di HTML.it L'avatar di Gipple
    Registrato dal
    Mar 2009
    Messaggi
    41
    Era il mio sospetto, grazie ad entrambi.

  5. #5
    Bhe, tecnicamente è possibile eseguire uno scambio senza variabile di comodo (anche se il metodo è molto sporco, ma a mali estremi...). Basta fare:
    codice:
      a+=b;
      b=a-b;
      a-=b;

  6. #6
    Quindi il codice sarebbe:
    codice:
    for(int i=0;i<lenght/2;i++){
        array[i]+=array[lenght-1-i];
        array[lenght-1-i]=array[i]-array[lenght-1-i];
        array[i]-=array[lenght-1-i];
    }

  7. #7
    Più in generale, è la tecnica dello XOR swap. In ogni caso, su compilatori recenti in genere tende ad essere più lenta dello scambio con variabile d'appoggio (che il compilatore riconosce come scambio, e lo può quindi ottimizzare in vari modi).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Sono si possibili, ma sono tecniche cadute in disuso, almeno in ambito generale.

    Comunque nel caso dello swap con addizione e sottrazione devi stare attento agli owerflow, per lo swap con XOR all'annullamento dei valori...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #9
    Non so come si chiama, mi è semplicemente venuta quest'idea xD... e comunque ho già detto che è un metodo molto sporco, soprattutto se lavori su stringhe e non su vettori di numeri..

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.