|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
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;
}
|
|
|
|
|
|
#2 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
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" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
#3 |
|
Senior Member
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'è |
|
|
|
|
|
#4 | ||
|
Senior Member
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:
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++;
}
}
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:
http://www.robertnz.net/ftp/newran03.zip GRAZIE ANCORA |
||
|
|
|
|
|
#5 |
|
Senior Member
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;
}
|
|
|
|
|
|
#6 |
|
Senior Member
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? |
|
|
|
|
|
#7 |
|
Senior Member
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(); Potresti aver bisogno di fare una cosa del tipo Codice:
float temp=Z.Next(); pippo << temp << "\n"; dentrocode=temp;
__________________
Il sole è giallo |
|
|
|
|
|
#8 |
|
Senior Member
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...
|
|
|
|
|
|
#9 |
|
Senior Member
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();
}
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
__________________
Il sole è giallo |
|
|
|
|
|
#10 |
|
Senior Member
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();
}
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? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:48.



















