Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
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.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-04-2012, 19:46   #1
MissaW_RaZ_98
Senior Member
 
L'Avatar di MissaW_RaZ_98
 
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
[C/C++]Incrementare variabile una sola volta

Come al solito,ho ancora un banalissimo problema

Voglio incrementare una variabile una sola volta ad una condizione,come nell'esempio:
Codice:
if(points>=5){
lifes++;
}
L'unico problema è che la variabile aumenta,aumenta e aumenta all'infinito,ma io voglio incrementarlo solo una volta!

So che è un problema banalissimo,ma non so proprio come risolverlo

MissaW_RaZ_98 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2012, 20:10   #2
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
Non avendo la minima idea della struttura del programma, con una (potenzialmente fastidiosa) variabile globale?
Codice:
bool bBonusLife = false ;

main()
{

    if(! bBonusLife && points>=5){
        bBonusLife = true ;
        lifes++;
    }

}
Codice:
int nBonusLifes = 1 ;

main()
{

    if(nBonusLives > 0 && points>=5){
        ++ lifes ;
        -- nBonusLifes ;
    }

}
Con una static in una funzione?
Codice:
void UpdateLifes( int &nLives, const long nPoints )
{
    static int nBonusLifes = 1 ;
    if(nBonusLives > 0 && nPoints >= 5){
        ++ nLives ;
        -- nBonusLifes ;
    }
}

main()
{
    int lives = 3 ;
    long points = 0 ;


    UpdateLifes( lifes, points ) ;

}
Con un'apposita variabile se è un oggetto?
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2012, 20:33   #3
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da MissaW_RaZ_98 Guarda i messaggi
Come al solito,ho ancora un banalissimo problema

Voglio incrementare una variabile una sola volta ad una condizione,come nell'esempio:
Codice:
if(points>=5){
lifes++;
}
L'unico problema è che la variabile aumenta,aumenta e aumenta all'infinito,ma io voglio incrementarlo solo una volta!

So che è un problema banalissimo,ma non so proprio come risolverlo

Decisamente devi postarci il codice del tuo programma. Soprattutto bisogna capire cosa sia quel points e in che maniera viene assengato. Oltre a questo, è impossibile che lifes venga incrementato all'infinito se non è all'interno di un loop (cosa che non traspare dal tuo esempio). Quindi, si torna al consiglio iniziale: postaci il codice intero del programma, o per lo meno quello del metodo/funzione in questione
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 16:42   #4
MissaW_RaZ_98
Senior Member
 
L'Avatar di MissaW_RaZ_98
 
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
si,scusate ragazzi,ora vi posto tutto il codice
Codice:
#include <stdio.h>
#include <iostream>

int main(){
int lifes=3;
int points=0;

while(1){
.....qui tutto il giochino (non credo che serva molto per aiutarmi)

if(points==5){
lifes++;
}//E qui il problema:la variabile incrementa all'infinito

}

return 0;
}
quindi si,è all'interno di un loop...
MissaW_RaZ_98 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 17:01   #5
LMCH
Senior Member
 
Iscritto dal: Jan 2007
Messaggi: 6984
Quote:
Originariamente inviato da MissaW_RaZ_98 Guarda i messaggi
si,scusate ragazzi,ora vi posto tutto il codice
Codice:
#include <stdio.h>
#include <iostream>

int main(){
int lifes=3;
int points=0;

while(1){
.....qui tutto il giochino (non credo che serva molto per aiutarmi)

if(points==5){
lifes++;
}//E qui il problema:la variabile incrementa all'infinito

}

return 0;
}
quindi si,è all'interno di un loop...
Come hanno già postato gli altri, nel caso generale ti serve una variabile di appoggio per sapere se hai già aggiornato la variabile.

Se invece il loop viene eseguito una sola volta durante l'esecuzione del programma e durante il loop points vale 5 in un solo ciclo di loop, allora potresti fare a meno della variabile di appoggio, ma come dicevo prima in linea generale è meglio usarla (così se fai modifiche successive e ti dimentichi di quel vincolo "una sola volta", non rischi che l'errore rispunti fuori).
LMCH è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 17:03   #6
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
E quindi ?

Utilizza il suggerimento che ti è stato dato, no?

Ad esempio quello della variabile

bool bBonusLife = false ;
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 17:07   #7
nico159
Senior Member
 
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
if(points==5 && lifes == 0) lifes++;?
__________________
In a world without fences, who needs Gates?
Power by: Fedora 8 - Mac OS X 10.4.11
nico159 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 17:10   #8
MissaW_RaZ_98
Senior Member
 
L'Avatar di MissaW_RaZ_98
 
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
ok...dato che uso il loop infinito(while),dovrò creare un'altra variabile "d'appoggio",che ferma il programma subito dopo che ho incrementato la variabile.
Quindi il codice dovrebbe essere così?
Codice:
#include <stdio.h>
#include <iostream>

int main(){
int lifes=3;
int points=0;

int increment==1;//questa è la variabile d'appoggio

while(1){
.....qui tutto il giochino (non credo che serva molto per aiutarmi)

if(points==5 && increment==1){
lifes++;
increment=0; 
}

}

return 0;
}
Ma ho un'altra domanda....
Vorrei anche che ogni 5 punti in più aumento la vita di uno...ma per fare questo devo cambiare in qualche modo la variabile increment in modo che diventi 0,poi 1,poi 0,etc.

Come faccio?

grazie per le risposte
MissaW_RaZ_98 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 18:43   #9
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
Se i punti sono compresi tra 0 e 5 puoi reincrementare il bonus dove azzeri i punti.

Se vanno da zero a MAX_INT ed il punteggio non può diminuire, puoi usare opportunamente l'operatore modulo (%) per sostituire il test di uguaglianza (==), in modo tale da rendere il test valido per ogni scatto di cinque.
Puoi quindi usarlo anche quando il punteggio è divisibile per sei per reincrementare il bonus, in previsione del successivo raggiungimento di un punteggio divisibile per cinque.
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 19:59   #10
MissaW_RaZ_98
Senior Member
 
L'Avatar di MissaW_RaZ_98
 
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
Quote:
Originariamente inviato da Gimli[2BV!2B] Guarda i messaggi
Se i punti sono compresi tra 0 e 5 puoi reincrementare il bonus dove azzeri i punti.

Se vanno da zero a MAX_INT ed il punteggio non può diminuire, puoi usare opportunamente l'operatore modulo (%) per sostituire il test di uguaglianza (==), in modo tale da rendere il test valido per ogni scatto di cinque.
Puoi quindi usarlo anche quando il punteggio è divisibile per sei per reincrementare il bonus, in previsione del successivo raggiungimento di un punteggio divisibile per cinque.
grande! non ci avevo proprio pensato!
Ora va alla grande!

A chi servisse,ecco il codice:
Codice:
while(1){
.....

if(increment==1 && points%5==0){
lifes++;
increment=0;
}

if(increment==0 && points%6==0){
increment=1;
}//questo serve per utilizzare il bonus in caso che i punti siano multipli di 5

}
grazie grazie a tutti
MissaW_RaZ_98 è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2012, 22:46   #11
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da MissaW_RaZ_98 Guarda i messaggi
grande! non ci avevo proprio pensato!
Ora va alla grande!

A chi servisse,ecco il codice:
Codice:
while(1){
.....

if(increment==1 && points%5==0){
lifes++;
increment=0;
}

if(increment==0 && points%6==0){
increment=1;
}//questo serve per utilizzare il bonus in caso che i punti siano multipli di 5

}
grazie grazie a tutti
Scusa ma così il programma fa lifes++ anche se points == 0.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2012, 18:53   #12
MissaW_RaZ_98
Senior Member
 
L'Avatar di MissaW_RaZ_98
 
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
giusto,correggo subito

Codice:
if(points!=0 && increment==0 && points%6==0){
increment=1;
}
Grazie per la segnalazione
MissaW_RaZ_98 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
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...
Microsoft Defender: falso allarme sull'a...
Aerei in volo e truppe pronte all'assalt...
Usano Claude per hackerare OpenAI: ricer...
RatHat: il nuovo malware Android usa il ...
Domanda di petrolio in calo di 2,5 milio...
Il meglio delle offerte weekend Amazon a...
Dopo oltre 100 anni di tentativi, l'IA d...
Speciale robot aspirapolvere in offerta ...
L'IA sta cancellando i lavori junior? Il...
Debutta Chery Italia: non più sol...
Addio ai dischi? Xbox ci aveva già...
Speciale TV Amazon: 4 modelli, da 139€ f...
Il nuovo iPhone 18 Pro Max ha una ricari...
Speciale smartphone Android: 7 modelli i...
La Camera USA presenta il conto: i data ...
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: 17:49.


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