Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    residenza
    Sardegna
    Messaggi
    18

    [C] Randomizzare più variabili con un solo seed

    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

    codice:
    #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
    Ultima modifica di alemutasa; 28-10-2014 a 12:56

  2. #2
    Ricontrolla questi if...
    codice:
        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;
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    E soprattutto concentrati su queste linee

    distBC = max;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2014
    residenza
    Sardegna
    Messaggi
    18
    Diamine faccio sempre lo stesso errore. Grazie mille, scusate il disturbo!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.