Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Le Jabra Evolve3 85 non sono semplicemente cuffie Bluetooth con cancellazione del rumore. Sono un dispositivo professionale pensato per chi trascorre gran parte della giornata in riunione, al telefono o davanti a un assistente basato sull'intelligenza artificiale
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-04-2012, 20: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, 21: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, 21: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, 17: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, 18:01   #5
LMCH
Senior Member
 
Iscritto dal: Jan 2007
Messaggi: 7090
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, 18: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, 18: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, 18: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, 19: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, 20: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, 23: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, 19: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


Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Rubati 6 pallet di hardware NVIDIA da 11...
Addio ai limiti del silicio? Ecco il dia...
Windows 11 27H2 sarà un 'cambio completo...
Hai mai notato che l'iPhone sbaglia semp...
Raffreddamento a liquido e schermo perso...
TSMC valuta la produzione di 3D DRAM su ...
Il Cybertruck ha i giorni contati? Musk ...
Meta porta la voce su Muse, e a sponsori...
Perché il disco principale di Win...
Quanta acqua consuma l'IA? Da cinque goc...
Airbnb lancerà un assistente AI per pian...
25 miliardi sul tavolo: i sauditi voglio...
TV Haier QLED da 65'' a meno di 400€ su ...
Il meglio degli sconti Amazon del weeken...
Il rumore degli aerei in sottofondo può ...
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: 06:47.


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