View Full Version : [C++] Problema nel determinare la dipendenza di una variabile da un altra
Heretic Curse
29-01-2013, 22:14
Scusate per il titolo poco chiaro :rolleyes: comunque, non riesco a capire come potrei fare per far si che una determinata variabile x aumenti di 0,5 ogni volta che una variabile y aumenta di 1.
O meglio, avendo nel mio caso come limiti della x -5 e 11 potrei fare if else una marea di volte, ma sono sicuro che c'è un metodo più semplice :) grazie per l'attenzione.
Hmm, difficile capire... Prova a mettere uno spezzone di codice o a fare un esempio.
Perchè così a naso mi verrebbe da dirti
y++;
x+= 0.5;
EDIT: Puoi usare una terza variabile, un marker: è impostato a 0 di default, quando aumenti y di 1, imposti il marker=1.
Controlli se il marker=1, se si aumenti x di 0.5
Scusate per il titolo poco chiaro :rolleyes: comunque, non riesco a capire come potrei fare per far si che una determinata variabile x aumenti di 0,5 ogni volta che una variabile y aumenta di 1.
O meglio, avendo nel mio caso come limiti della x -5 e 11 potrei fare if else una marea di volte, ma sono sicuro che c'è un metodo più semplice :) grazie per l'attenzione.
Se intendi dire ottenere l'effetto che quando aumenti una variabiel aumenti anche l'altra in modo automatico, non puoi.
Invece che usare una variabile usa una funzione o un metodo per una delle due. Ad esempio
double y() { return k + x / 2; }
Dalla seconda parte pero' mi par di capire che forse intendi un'altra cosa
Non sei stato molto chiaro pero'... cosa vuoi ottenere ?
Heretic Curse
29-01-2013, 23:22
Vi ringrazio per le risposte, però aspettate, cerco di spiegarmi meglio: in pratica l'utente deve decidere il valore di y. Poniamo che metta 16: in questo caso x=5. Se invece avesse messo 17, x=5,5 e così via.
banryu79
30-01-2013, 08:46
Vi ringrazio per le risposte, però aspettate, cerco di spiegarmi meglio: in pratica l'utente deve decidere il valore di y. Poniamo che metta 16: in questo caso x=5. Se invece avesse messo 17, x=5,5 e così via.
Ti fai una funzione che dato in ingresso un certo valore (y) calcola l'altro valore (x) e lo restituisce.
L'utente inserisce il valore di y.
Tu lo prendi e chiami la tua funzione passandogli questo valore, e lei ti restituisce x.
tomminno
30-01-2013, 09:13
class CoupledVars
{
int y;
int x;
public:
CoupledVars(int x, int y) : x(x), y(y) {}
void IncreaseY() { y++; x += 0.5; }
int GetY() { return y; }
int GetX() { return x; }
};
Già che esistono le classi perchè non usarle? :D
[Kendall]
30-01-2013, 09:54
Io a quel punto seguirei più una logica ad eventi, così da svincolare di per sè i due valori e far si che la variazione del valore Y possa modificare un numero indefinito di valori in base alla necessità.
Tramite i puntatori a funzione si può realizzare la cosa con facilità, però il tutto dipende anche dal grado di conoscenza del C++ dell'autore del topic (non che sia un concetto avanzato come difficoltà, ma viene giustamente trattato dai capitoli intermedi di un buon manuale).
Heretic Curse
30-01-2013, 14:16
Oggi è l'undicesimo giorno da quando ho iniziato a studiare tale linguaggio, e non ho esperienze precedenti di programmazione :D comunque ad una prima occhiata sembra che fra le vostre risposte ci sia quello che cerco, vedrò di capirle!
Grazie a tutti.
La matematica è nostra amica, quello che cerca l'autore del thread è una (semplice credo) funzione matematica.
Dovrebbe essere qualcosa del tipo:
x = BASE + 0.5*y;
Dove BASE chiaramente è il tuo offset.
Se x parte da -5 (quando y è 0), allora:
x = -5 + 0.5*y
Che tradotto in codice sarebbe:
double func(int y)
{
return -5 + 0.5*y;
}
Ma non torna affatto con il tuo esempio, in cui se y = 16 allora x = 5. Quindi ti chiedo, da dove l'hai tirato fuori quell'esempio?
Mancano delle informazioni.
tomminno
30-01-2013, 21:40
La matematica è nostra amica, quello che cerca l'autore del thread è una (semplice credo) funzione matematica.
Dovrebbe essere qualcosa del tipo:
x = BASE + 0.5*y;
Dove BASE chiaramente è il tuo offset.
Se x parte da -5 (quando y è 0), allora:
x = -5 + 0.5*y
Che tradotto in codice sarebbe:
double func(int y)
{
return -5 + 0.5*y;
}
Ma non torna affatto con il tuo esempio, in cui se y = 16 allora x = 5. Quindi ti chiedo, da dove l'hai tirato fuori quell'esempio?
Mancano delle informazioni.
Ma se non ho capito male lui vorrebbe aumentare x tutte le volte che aumenta y. Se metti tutto in una funzione devi ricordarti di andarla a richiamare tutte le volte che per un qualunque motivo modifichi y. Se y viene incrementata in 100 punti devi ricordarti di andare a chiamare la funzione di incremento di x per 100 volte, e se in un punto inavvertitamente te ne dimentichi?
Heretic Curse
30-01-2013, 22:03
La matematica è nostra amica, quello che cerca l'autore del thread è una (semplice credo) funzione matematica.
Dovrebbe essere qualcosa del tipo:
x = BASE + 0.5*y;
Dove BASE chiaramente è il tuo offset.
Se x parte da -5 (quando y è 0), allora:
x = -5 + 0.5*y
Che tradotto in codice sarebbe:
double func(int y)
{
return -5 + 0.5*y;
}
Ma non torna affatto con il tuo esempio, in cui se y = 16 allora x = 5. Quindi ti chiedo, da dove l'hai tirato fuori quell'esempio?
Mancano delle informazioni.
Ok ora spiego tutto per bene :) pensavo fosse qualcosa di molto più semplice, per questo non sono stato molto preciso sinora. Scusate.
Conoscete tutti Dungeons&Dragons? Beh, è un (IL) gioco di ruolo da tavolo, e in pratica per determinare i modificatori delle varie statistiche sul manuale è riportata una tabella che mostra che quando ad esempio la Forza è a 16 o 17 il suo modificatore è a 3 (prima avevo scritto 5, ma ho sbagliato), quando è a 18 o 19 è 4 e così via.
Quello che vi chiedo è un modo per aumentare il modificatore di 0,5 ogni volta che la statistica aumenta di 1 (poi tanto metto lround e si sistema tutto).
Se necessitate di ulteriori chiarimenti non esitate a chiedere, anzi, mi fate solo un favore :)
Ok ora spiego tutto per bene :) pensavo fosse qualcosa di molto più semplice, per questo non sono stato molto preciso sinora. Scusate.
Conoscete tutti Dungeons&Dragons? Beh, è un (IL) gioco di ruolo da tavolo, e in pratica per determinare i modificatori delle varie statistiche sul manuale è riportata una tabella che mostra che quando ad esempio la Forza è a 16 o 17 il suo modificatore è a 3 (prima avevo scritto 5, ma ho sbagliato), quando è a 18 o 19 è 4 e così via.
Quello che vi chiedo è un modo per aumentare il modificatore di 0,5 ogni volta che la statistica aumenta di 1 (poi tanto metto lround e si sistema tutto).
Se necessitate di ulteriori chiarimenti non esitate a chiedere, anzi, mi fate solo un favore :)
Allora è come dico io :D
Puoi applicare la formula:
x = -5 + 0.5*y
Infatti:
se y = 16, x = 3
se y = 17, x = 3,5
se y = 18, x = 4
E così via...
Heretic Curse
30-01-2013, 22:20
Allora è come dico io :D
Puoi applicare la formula:
x = -5 + 0.5*y
Infatti:
se y = 16, x = 3
se y = 17, x = 3,5
se y = 18, x = 4
E così via...
sisi, me ne ero accorto e stavo giusto provando :) ho fatto così:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int livello = 0;
int FOR=0;
float forr= -6 + 0.5*FOR;
cout << "Livello: ";
cin >> livello;
cout << endl;
cout << "FOR: ";
cin >> FOR;
cout << endl;
cout << forr;
system("PAUSE");
return EXIT_SUCCESS;
}
Non tenere conto delle righe relative al livello, le ho messe per dopo.
Mi rimane un problema però: praticamente mi segna sempre che forr è uguale a -6, questo credo sia poiché non salva in memoria il valore dato a FOR. Dovrei quindi ricorrere ad un puntatore come mi è stato consigliato precedentemente? Li ho studiati ieri per la prima volta, devo ancora capirli bene, ma mi basterebbe per il momento sapere se sono l'unica strada o ce ne sono di alternative.
Accidenti, quanto torna utile l'algebra lineare :eek: e io che la sto rimuovendo in favore della trigonometria :doh:
Heretic Curse
31-01-2013, 12:43
fingete che io non abbia scritto il codice di prima, perché mi sono accorto di essermi complicato la vita per niente :doh: una volta ottenuta l'equazione il gioco è fatto in pratica, ma me ne accorgo solo ora :D Quindi grazie mille a tutti, ora ho risolto.
Heretic Curse
31-01-2013, 23:27
programma ultimato! era davvero molto semplice, anche se all'inizio avevo messo -6 anziché -5 e non mi tornavano i conti :doh:
a breve posto il download, casomai ci fosse qualche altro giocatore di D&D che ne voglia far uso :)
EDIT: ecco qua https://mega.co.nz/#fm
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.