Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-02-2007, 09:59   #1
AYAMY
Senior Member
 
L'Avatar di AYAMY
 
Iscritto dal: Dec 2003
Messaggi: 704
[c++] semplice controllo con If che non va

Ciao a tutti...
Ho un programmino che mi genera dei numeri secondo un certo algoritmo...
Ora io vorrei fare in modo che sono i numeri che sono compresi tra 2 estremi (min e max) siano accettati...
Per fare questo ho usato un ciclo for con dentro un if.... ma non va...secondo voi dove sta l'inghippo?
NB: Z.next mi restituisce un numero secondo un certo algoritmo
poi io associo questo numero alla variabile "dentrocode" e con questa faccio il controllo.... ma non va...mi escono anche valori che non sono compresi tra min e max????
mi date una mano please?
Grazie

Codice:
for (int i = 0; i < 99; ++i)
        {
          dentrocode=Z.Next();
          if ( dentrocode >= min and dentrocode <= max )
             {
              vector[k] = dentrocode; 
              k++;
              }        
              }
     for (int i = 0; i < 99; ++i)
         { 
          cout << "Vettore Valori" << endl;
          cout << vector[i] << endl;
          }
AYAMY è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2007, 10:15   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16213
Per caso, i numeri fuori dall'intervallo, sono solo tra gli elementi di vector con i>=k?
Perché, se è così, il problema è solo che tu visualizzi tutti gli elementi del vettore, e non solo quelli in cui hai messo davvero un numero: e in generale, la memoria allocata è "sporca" e può contenere qualsiasi valore.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2007, 10:22   #3
reptile9985
Senior Member
 
L'Avatar di reptile9985
 
Iscritto dal: Jul 2004
Messaggi: 1685
l'indice i del primo ciclo for come mai non viene usato dentro al pezzo di codice?? e k dove l'hai inizializzato??
perchè scrivi and e non &&?? come vedi qualcosa da sistemare c'è
reptile9985 è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2007, 10:51   #4
AYAMY
Senior Member
 
L'Avatar di AYAMY
 
Iscritto dal: Dec 2003
Messaggi: 704
innanzitutto grazie x l'aiuto...
K l'ho inizializzato in alto nella parte del programma che non ho postato... adesso ho anche sostituito and con && ma continua a non andare...

Quote:
Per caso, i numeri fuori dall'intervallo, sono solo tra gli elementi di vector con i>=k?
forse non ho capito.. quello che mi stai dicendo.....
se con il ciclo
Codice:
for (int i = 0; i < 99; ++i)
        {
          pippo << Z.Next() << "\n";
          dentrocode=Z.Next();
          if ( dentrocode >= min && dentrocode <= max )
             {
              vector[k] = dentrocode; 
              k++;
              }        
              }
faccio prima il controllo sul valore del numero generato.. e poi lo metto nel vettore chiamato vector[k]... in questo vettore ci dovrebbero essere solo valori compresi tra min e max... giusto?
Ad esempio.. Z.next() mi da come valore 79... min=81 , max = 99 l'IF quindi dovrebbe scartare 79 visto che è minore di min ..e poi continuare l'esecuzione e rieseguire il ciclo for in cui mi viene generato un altro numero da Z.next() sul quale riandare a fare il test di controllo...
E' giusto l'algoritmo? oppure ho sbagliato ..e non funziona come ho scritto?


PS: ecco tutto il codice

Quote:
#include <iostream>
#include <fstream>
#include "newran03/newran.h"

int main()
{
ofstream pippo;
pippo.open("zuzzurellone.txt", ios::out);
cout << "Prego Inserise L'Angolo (cioe' la Media della Gaussiana)" << endl;
cout << "La Varianza verrà calcolata come il 10% della Media" << endl;
float media;
cin >> media;
float sigma;
int k = 0;
sigma = (0.1*media);
float min = media-3*sigma;
float max = media+3*sigma;
float dentrocode;
float vector[100];
srand(time(0));
int mostra = rand()%100;
char s[]="test file";
MotherOfAll urng;
Random::Set(urng);
Normal N;
SumRandom Z = media + sigma * N;
for (int i = 0; i < 99; ++i)
{
pippo << Z.Next() << "\n";
dentrocode=Z.Next();
if ( dentrocode >= min && dentrocode <= max )
{
vector[k] = dentrocode;
k++;
}
}
for (int i = 0; i < 99; ++i)
{
cout << "Vettore Valori" << endl;
cout << vector[i] << endl;
}
//std::cout << std::endl;
cout << "Test eseguito trovi i risultati in zuzzurellone.txt" << endl;
cin.get();
cin.get();
}
PS: Si appoggia a delle librerie esterne che si possono trovare qui

http://www.robertnz.net/ftp/newran03.zip

GRAZIE ANCORA
AYAMY è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2007, 11:13   #5
reptile9985
Senior Member
 
L'Avatar di reptile9985
 
Iscritto dal: Jul 2004
Messaggi: 1685
il secondo for dovrebbe fare il controllo su k, perchè nel vettore hai inserito k elementi nell'intervallo desiderato:
Codice:
for (int i = 0; i < k; ++i)
{
cout << "Vettore Valori" << endl;
cout << vector[i] << endl;
}
il resto del tuo codice sembra ok, a meno che l'errore non sia nell'uso della libreria esterna...
reptile9985 è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2007, 11:26   #6
AYAMY
Senior Member
 
L'Avatar di AYAMY
 
Iscritto dal: Dec 2003
Messaggi: 704
ho messo K ma continua a non andare..
come è possibile?
Ma che cavolo di errore c'è nell'IF... mi sembra che sia tutto apposto?
Secondo Voi l'IF funziona nel modo che ho postato poco sopra.. escludendo i valori esterni a min e max?
AYAMY è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2007, 12:02   #7
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
L'if mi pare giusto, non credo ti dia problemi quello.

Non ho idea di cosa sia quel SumRandom Z, ma se viene gestito come una lista/collection, nelle seguenti istruzioni
Codice:
pippo << Z.Next() << "\n";
dentrocode=Z.Next();
la scorri in avanti 2 volte.

Potresti aver bisogno di fare una cosa del tipo

Codice:
float temp=Z.Next();
pippo << temp << "\n";
dentrocode=temp;
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2007, 14:42   #8
AYAMY
Senior Member
 
L'Avatar di AYAMY
 
Iscritto dal: Dec 2003
Messaggi: 704
Non ci credo....
Non è possibile.. non va nemmeno così!!!
Ma perchè eppure è di una semplicità imbarazzante... ma non trovo il problema...
che cavolo..

Ragà.. chiedo il vostro Aiuto...
AYAMY è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2007, 15:23   #9
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Con qualche semplice modifica al tuo programma ti mostro che l'if è giusto (non sono riuscito a linkare le tue librerie, mancano dei .lib e non so in alternativa quali .cpp includere). In qualsiasi caso ti riporto il codice, che non cambia nulla dal tuo punto di vista.

Codice:
#include <iostream.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>
int main()
{
cout << "Prego Inserise L'Angolo (cioe' la Media della Gaussiana)" << endl;
cout << "La Varianza verrà calcolata come il 10% della Media" << endl;
float media;
cin >> media;
float sigma;
int k = 0;
sigma = (0.1*media);
float min = media-3*sigma;
float max = media+3*sigma;
float dentrocode;
float vector[100];
srand(time(0));
int mostra = rand()%100;
char s[]="test file";
for (int i = 0; i < 99; ++i)
{
dentrocode=(float)(rand()%100);
if ( dentrocode >= min && dentrocode <= max )
{
vector[k] = dentrocode;
k++;
}
}
for (i = 0; i < 99; ++i)
{
cout << "Vettore Valori" << " Min:" << min << " Max:" << max << endl;
cout << vector[i] << endl;
}
cin.get();
cin.get();
}
Il problema è che stampi TUTTO l'array (ovvero da 0 a 99) e non solo per i k indici che hai filtrato per vector (ovvero i valori realmente compresi tra min e max).


Di seguito ti riporto l'output del programma:

Codice:
La Varianza verrÓ calcolata come
56
Vettore Valori Min:39.2 Max:72.8
65
Vettore Valori Min:39.2 Max:72.8
58
Vettore Valori Min:39.2 Max:72.8
58
Vettore Valori Min:39.2 Max:72.8
66
Vettore Valori Min:39.2 Max:72.8
62
Vettore Valori Min:39.2 Max:72.8
70
Vettore Valori Min:39.2 Max:72.8
43
Vettore Valori Min:39.2 Max:72.8
55
Vettore Valori Min:39.2 Max:72.8
66
Vettore Valori Min:39.2 Max:72.8
49
Vettore Valori Min:39.2 Max:72.8
68
Vettore Valori Min:39.2 Max:72.8
Ovvero fino a un certo indice l'output è giusto, poi ovviamente negli indici finali (dal valore massimo di k fino a 99) sfori da min e max perchè questi valori non dovrebbero far parte di vector. Il linkare o meno le librerie che hai postato non dovrebbe cambiar nulla
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2007, 15:27   #10
AYAMY
Senior Member
 
L'Avatar di AYAMY
 
Iscritto dal: Dec 2003
Messaggi: 704
... adesso il mio programma è così
Codice:
#include <iostream>
#include <fstream>
#include "newran03/newran.h"

int main()
{
 ofstream pippo;
    pippo.open("zuzzurellone.txt",  ios::out);
    cout << "Prego Inserise L'Angolo (cioe' la Media della Gaussiana)" << endl;
    cout << "La Varianza verrà calcolata come il 10% della Media" << endl;
    float media;
    cin >> media;
    float sigma;
    int k = 0;
    sigma = (0.1*media);
    float min = media-3*sigma;
    float max = media+3*sigma;
    float dentrocode;
    float vector[100];
    srand(time(0));
    int mostra = rand()%100;
    char s[]="test file";
    MotherOfAll urng;
	Random::Set(urng);
	Normal N;
	SumRandom Z = media + sigma * N;
	for (int i = 0; i < 99; ++i)
        {
          float temp =Z.Next();
          pippo << temp  << "\n";
          dentrocode=temp;
          if ( dentrocode >= min && dentrocode <= max )
             {
              vector[k] = dentrocode; 
              k++;
              }        
              }
     for (int i = 0; i < k; ++i)
         { 
          cout << "Vettore Valori" << endl;
          cout << vector[i] << endl;
          }                            
	//std::cout << std::endl;
	cout << "Test eseguito trovi i risultati in zuzzurellone.txt" << endl; 
    cin.get();
    cin.get();
}
quindi nella stampa dei valori del vettore ci si ferma a k ma escono comunque valori che sono esterni agli estremi....

Sto iniziando a sflippare...
Concettualmente dovrebbe andare...
Il codice mi sembra giusto e una volta lanciato non ne vuole sapere di funzionare nel modo giusto....

Qualche altra idea su dove possa stare il problema?

AYAMY è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Il telescopio XRISM ha osservato i raggi...
Il telescopio spaziale James Webb ha sco...
Logitech G325: audio di fascia alta, wir...
Nessuna pubblicità su Claude, per...
Gli stipendi nel settore tech? Sono anco...
Problemi con la stampa 3D? Un prompt per...
Amazon Leo amplia i contratti con SpaceX...
Basta Purefication, il Giurì bloc...
LibreOffice 26.2 migliora prestazioni e ...
La Cina si prepara a un test della capsu...
La NASA rende note alcune informazioni a...
ASUS ExpertCenter PN54: mini PC Copilot+...
Geely userà una fabbrica europea ...
Leica Camera tratta la cessione della ma...
La nuova AMD non è più 'ec...
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: 01:39.


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