PDA

Visualizza la versione completa : [C] Randomizzare pių variabili con un solo seed


alemutasa
28-10-2014, 11:51
Salve a tutti! Ho un problema con il seguente esercizio:

Randomizza i punti di un poligono nel piano, calcola la distanza dei lati e stampa a video il lato maggiore e quello minore.

Teoricamente dovrei randomizzare otto variabili (ascissa e ordinata di quattro punti) ma, quando eseguo il programma, i numeri sono tutti uguali.

Il codice č questo


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main()
{
int p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y; //dichiaro le variabili dei punti
float distAB, distBC, distCD, distDA; //dichiaro le variabili dei lati
float max, min; //dichiaro le variabili di massimo e minimo

srand(time(NULL)); //do il seed al programma

p1x = rand(); //randomizzo le variabili dei punti
p1y = rand();

p2x = rand();
p2y = rand();

p3x = rand();
p3y = rand();

p4x = rand();
p4y = rand();

distAB = sqrt(pow((p2x - p1x), 2) + pow((p2y - p1y) ,2)); //calcolo le distanze col teorema di pitagora
distBC = sqrt(pow((p3x - p2x), 2) + pow((p3y - p2y) ,2));
distCD = sqrt(pow((p4x - p3x), 2) + pow((p4y - p3y) ,2));
distDA = sqrt(pow((p1x - p4x), 2) + pow((p1y - p4y) ,2));

max = distAB; //imposto i controlli per scoprire il lato pių lungo

if (distBC > max) distBC = max;
if (distCD > max) distCD = max;
if (distDA > max) distDA = max;

min = distAB; //imposto i controlli per scoprire il lato pių corto

if (distBC < min) distBC = min;
if (distCD < min) distCD = min;
if (distDA < min) distDA = min;

printf("il programma ha generato quattro punti nello spazio e\nha calcolato i lati del poligono corrispondente.\n\n");
printf("latoAB = %f\nlatoBC = %f\nlatoCD = %f\nlatoDA = %f", distAB, distBC, distCD, distDA);

printf("\n\nlato max = %f\nlato min = %f", max, min);

return 0;
}

La domanda č: cos'č che sbaglio? Sbaglio la sintassi della funzione rand() oppure devo usare pių seed? Se devo dare pių seed, come faccio? Grazie in anticipo

[EDIT] Chiedo scusa se vedo molte discussioni ma non rispondo ad alcuna di esse, sono un programmatore principiante e ho ancora tanto da imparare prima di poter correggere i programmi che postano gli altri utenti

MItaly
29-10-2014, 01:21
Ricontrolla questi if...


max = distAB; //imposto i controlli per scoprire il lato pių lungo

if (distBC > max) distBC = max;
if (distCD > max) distCD = max;
if (distDA > max) distDA = max;

min = distAB; //imposto i controlli per scoprire il lato pių corto

if (distBC < min) distBC = min;
if (distCD < min) distCD = min;
if (distDA < min) distDA = min;

oregon
29-10-2014, 09:26
E soprattutto concentrati su queste linee

distBC = max;

alemutasa
29-10-2014, 14:07
Diamine faccio sempre lo stesso errore. Grazie mille, scusate il disturbo!

Loading