Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-11-2013, 18:50   #1
Forzajuve
Bannato
 
Iscritto dal: May 2008
Messaggi: 26
[C++] Non inverte ordine elementi di un array

Salve ragazzi,
dovrei invertire l'ordine degli elementi di un array. Dato un {a,b,c}, dovrebbe darmi {c,b,a}. Applicando ciò a una codifica di un numero in binario, mi aspetterei di ricevere una sequenza di 0 e 1, ma invece mi ritrovo con 4 8 e altri
Ho utilizzato:
Codice:
   for(int j=riemp; j>=(riemp/2); j=j--)
    {temp=v[j];
    v[j]=v[riemp-j+o];
    v[riemp-j+0]=temp;
    o=o++;
    
    cout<<""<<v[j]<<"";    
     }
Dove riemp è il riempimento, ossia la quantità inferiore o uguale alla cardinalità dell'array, temp è la variabile di appoggio temporanea.
Ad esempio, immettendo 4, mi trovo un array {0,0,1,0} su 4 bit, mentre dovrebbe essere {0,1,0,0}. La parte di codice qui sopra dovrebbe risolvere il problema, ma mi dà come risposta 011 su 4 bit (e l'altro dove va?) e una stringa di 7-8 numeri su 3 bit
Dov'è l'errore?
Forzajuve è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2013, 20:13   #2
Forzajuve
Bannato
 
Iscritto dal: May 2008
Messaggi: 26
La 0 al posto della o è dovuto alla fase di post del messaggio controllando c'è o e non 0.
Il problema persiste: con un riempimento di un certo numero di bit riesce a darmi, ad esempio, 4 giusto, ma con bit invertiti. Dopo la parte che dovrebbe scambiare le variabili, dà risultato 014699680

Ultima modifica di Forzajuve : 09-11-2013 alle 20:16.
Forzajuve è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2013, 20:55   #3
Forzajuve
Bannato
 
Iscritto dal: May 2008
Messaggi: 26
In effetti, cambiando o con 1 (tra l'altro ho scritto il file in 2 o 3 maniere diverse nell'ultima parte) non va in (quello che sembra) un overflow (o un accesso ad un registro di memoria non dedicato all'array). Ora con
Codice:
    for(int j=riemp; j>0; j=j--)
    {temp=v[j];
    v[j]=v[riemp-j+1];
    v[riemp-j+1]=temp;
    
    cout<<""<<v[j]<<"";    
     }
restituisce tutti bit. Il problema, stavolta, è che se ad esempio gli chiedo di scrivermi 1 su 10 cifre, nella prima parte me lo scrive invertito (1 e 9 zeri), nella seconda parte invece di invertirmi i valori, presenta tuttti 0. Perché?

Il main è così
Codice:
int main(int argc, char** argv) {
	binario v;
	int x, riemp,i=0, o=0, temp=0;
	cout<<"Su quanti bit vuoi scrivere il numero?\n";
	cin>>riemp;
	cout<<"Che numero vuoi convertire da decimale a binario?\n";
	cin>>x;
    for (; i<riemp; x=x/2, i=i++ )
    {if (x%2==0)
                {v[i] = 0;
            
                }
    else {v[i] = 1;
    
    }
    cout<<""<<v[i]<<"";
    }
    cout<<"\n";
Il cout di v[i] e il relativo \n li ho messi per vedere come cambiavano gli elementi dell' array nei vari passaggi

EDIT:
Da un punto di vista concettuale la seconda parte dovrebbe consistere nel prendere gli elementi dell'array fino a quello centrale (che mantiene la sua posizione) e scambiarne l'ordine.
EDIT2:
Avendo definito temp successivamente ora non è più inizializzato con 0.

Ultima modifica di Forzajuve : 09-11-2013 alle 21:33.
Forzajuve è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2013, 21:07   #4
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da Forzajuve Guarda i messaggi
La 0 al posto della o è dovuto alla fase di post del messaggio controllando c'è o e non 0.
Ma non hai fatto copia e incolla? :|
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2013, 21:11   #5
Forzajuve
Bannato
 
Iscritto dal: May 2008
Messaggi: 26
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Ma non hai fatto copia e incolla? :|
Sì ma probabilmente mentre lo copiavo avrò premuto 0

EDIT: Probabilmente un errore sta nel fatto che prima avevo fissato come indice massimo in cui ricercare il riempimento. Ma se gli elementi dell'array vanno a 0 a n-1, in n non lo troverà sicuramente . Anche se ancora non funziona.
EDIT2:Procedendo per tentativi. Questo restituisce solo bit 0 nella maggior parte dei casi.
Codice:
for(int j=0; j<riemp; j=j++)
    {temp=v[j];
    v[j]=v[riemp-j-1];
    v[riemp-j-1]=temp;
    cout<<""<<v[j]<<"";    
     }
EDIT3: Non so come, ma la 3 parte di questo programma funziona!
Codice:
int main(int argc, char** argv) {
	binario v;
	int x, riemp,i=0, o=0, temp=0;
	cout<<"Su quanti bit vuoi scrivere il numero?\n";
	cin>>riemp;
	cout<<"Che numero vuoi convertire da decimale a binario?\n";
	cin>>x;
    for (; i<riemp; x=x/2, i=i++ )
    {if (x%2==0)
                {v[i] = 0;
            
                }
    else {v[i] = 1;
    
    }
    cout<<""<<v[i]<<"";
    }
    cout<<"\n";
    for(int j=0; j<riemp; j=j++)
    {temp=v[j];
    v[j]=v[riemp-j-1];
    v[riemp-j-1]=temp;
    cout<<""<<v[j]<<"";    
     }
     cout<<"\n";
        for(int j=riemp-1; j>=0; j=j-1)
        { cout<<""<<v[j]<<"";   
        }
    
 
    return EXIT_SUCCESS;
}
EDIT 4: Versione definitiva e funzionante. Potreste dirmi cosa non andava/cosa potevo fare per farlo andare prima?
Codice:
int main(int argc, char** argv) {
	binario v;
	int x, riemp,i=0, o=0, temp=0;
	cout<<"Su quanti bit vuoi scrivere il numero?\n";
	cin>>riemp;
	cout<<"Che numero vuoi convertire da decimale a binario?\n";
	cin>>x;
    for (; i<riemp; x=x/2, i=i++ )
    {if (x%2==0)
                {v[i] = 0;
            
                }
    else {v[i] = 1;
    
    };
    }
    cout<<"\n";
    for(int j=0; j<riemp; j=j++)
    {temp=v[j];
    v[j]=v[riemp-j-1];
    v[riemp-j-1]=temp;  
     }
     cout<<"\n";
        for(int j=riemp-1; j>=0; j=j-1)
        { cout<<""<<v[j]<<"";   
        }
    
 
    return EXIT_SUCCESS;
}

Ultima modifica di Forzajuve : 09-11-2013 alle 22:00.
Forzajuve è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:11.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v