Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [BASIC] Triangolo di Sierpinsky

    Sto leggendo il libro Fractals for the classroom - Introduction to fractals and chaos.

    Ho trovato questo semplicissimo programma in BASIC che disegna il triangolo di Sierpinsky, utilizzando un sistema di coordinate binarie per colorare - le pari di un colore, le dispari di un altro - le celle del triangolo di Pascal.
    codice:
    DEFINT x, y
    FOR x = 0 TO 255
        FOR x = 0 TO y
            IF (x AND (y-x)) = 0 THEN PSET (x + 158 - .5 * y, y + 30)
        NEXT x
    NEXT y
    L'immagine generata è larga 256 pixels. 158 è la metà della larghezza + 30 (il perché non l'ho capito...!).

    Ma comunque. Come potrei trasformare questo programma in C++ (i pixel li tratto come punti: li salvo in un file che poi passo a gnuplot).

    Ho pensato a un codice tipo questo:
    codice:
    #include <iostream>
    using std::cout;
    using std::endl;
    using std::ios;
    
    #include <fstream>
    using std::ofstream;
    
    int main()
    {
    	ofstream oFile("sierpinsky.txt", ios::out);
    	
    	for (int x = 0, x < 256, x++)
    	{
            // Non capisco come tradurre il ciclo dal BASIC
            {
                if (x == 0 and (x - y) == 0)
                {
                    oFile << x + 158 - 0.5 * y << ' ' << y + 30 << endl;
                }
            }
    	}
    	
    	return 0;
    }
    Ma visto che la y nel programma in BASIC non viene inizializzata come faccio a utilizzarla per un ciclo for in C++? Inoltre dovrei utilizzare le coordinate scritte in modo binario, ma non vedo dove questo avviene nel programma in BASIC...!

    Idea di come fare?!
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    8
    usa dei cicli while ed incrementa la variabile all'interno del ciclo
    però non ho capito cosa intendi con coordinate in modo binario

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da RooccoXXI
    Ma visto che la y nel programma in BASIC non viene inizializzata come faccio a utilizzarla per un ciclo for in C++?
    In teoria viene inizializzata a 0 e in C++ devi specificarlo altrimenti ha un valore indefinito. Poi, alla fine di ogni iterazione del ciclo esterno la incrementi di uno.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Originariamente inviato da Ncoder
    usa dei cicli while ed incrementa la variabile all'interno del ciclo
    però non ho capito cosa intendi con coordinate in modo binario
    Il ciclo FOR in BASIC corrisponde al WHILE in C++?
    Perché proprio non riesco a capire l'istruzione
    codice:
    FOR x = 0 TO y
    se la y non è inizializzata a qualche valore...!

    Comunque i numeri sul triangolo di Pascal possono essere rappresentati da un sistema di coordinate (x,y) se consideriamo come assi le due diagonali esterne del triangolo.

    Esempio:
    Primo elemento: (0,0) = (0,0)
    Secondo elemento sx: (1,0) = (1,0)
    Secondo elemento dx: (0,1) = (0,1)
    Terzo elemento sx: (2,0) = (10,0)
    Terzo elemento c: (1,1) = (1,1)
    Terzo elemento dx: (0,2) = (0,10)
    e così via...!

    E il triangolo viene colorato a seconda del valore binario delle coordinate, facendo così apparire il triangolo di Sierpinsky.

    Non so se mi sono spiegato...! È difficile da dire a parole!xD.
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

  5. #5
    Originariamente inviato da Alex'87
    In teoria viene inizializzata a 0 e in C++ devi specificarlo altrimenti ha un valore indefinito. Poi, alla fine di ogni iterazione del ciclo esterno la incrementi di uno.
    Ora ho capito. Il primo ciclo scorre l'immagine in altezza (h = 255 pixel). Il secondo ciclo crea il triangolo (prima un numero, poi due, poi tre, ...).

    Dovrebbe essere qualcosa del genere...:
    codice:
    #include <iostream>
    using std::cout;
    using std::endl;
    using std::ios;
    
    #include <fstream>
    using std::ofstream;
    
    int main()
    {
    	int y = 0;
    	
    	ofstream oFile("sierpinsky.txt", ios::out);
    	
    	for (int x = 0; x < 255; x++) 
    	{
    		for (int x = 0; x < y; x++) 
    		{
    			// Condizione if basata sulla rappresentazione binaria delle coordinate 
    			{
    				oFile << x + 158 - 0.5 * y << ' ' << y + 30 << endl;
    			}
    		}
    		
    		y++;
    	}
    	
    	return 0;
    }
    Però non sono sicuro della doppia dichiarazione. Come sarebbe tradotto "letteralmente" dal BASIC al C++ il programma che ho presentato? (Escluso l'IF e il suo contenuto).

    MAnca però da risolvere il secondo problema...quello delle coordinate in binario...!
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da RooccoXXI
    Il ciclo FOR in BASIC corrisponde al WHILE in C++?
    No. Il for in basic corrisponde al for di C++ (con le dovute modifiche ovviamente).

    Originariamente inviato da RooccoXXI Perché proprio non riesco a capire l'istruzione
    codice:
    FOR x = 0 TO y
    se la y non è inizializzata a qualche valore...!
    y sarà inizializzata a zero! In questo caso la prima volta il ciclo interno non verrà eseguito, la volta dopo verrà eseguito una volta, poi deu poi tre ecc...

    Lo vedi quel NEXT y? Io non conosco BASIC ma presumo che voglia dire Y = Y + 1...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da RooccoXXI
    Ora ho capito. Il primo ciclo scorre l'immagine in altezza (h = 255 pixel). Il secondo ciclo crea il triangolo (prima un numero, poi due, poi tre, ...).

    Dovrebbe essere qualcosa del genere...:
    codice:
    #include <iostream>
    using std::cout;
    using std::endl;
    using std::ios;
    
    #include <fstream>
    using std::ofstream;
    
    int main()
    {
    	int y = 0;
    	
    	ofstream oFile("sierpinsky.txt", ios::out);
    	
    	for (int x = 0; x < 255; x++) 
    	{
    		for (int x = 0; x < y; x++) 
    		{
    			// Condizione if basata sulla rappresentazione binaria delle coordinate 
    			{
    				oFile << x + 158 - 0.5 * y << ' ' << y + 30 << endl;
    			}
    		}
    		
    		y++;
    	}
    	
    	return 0;
    }
    Però non sono sicuro della doppia dichiarazione. Come sarebbe tradotto "letteralmente" dal BASIC al C++ il programma che ho presentato? (Escluso l'IF e il suo contenuto).
    Occhio che stai incrementando due volte x!

    Ad occhio direi una cosa del genere (ma ti ripeto, non conosco il BASIC):
    codice:
    for (int x = 0; x < 255; y++)  {
      for (x = 0; x < y; x++)  {
         ...
      }
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Il primo FOR in BASIC è sbagliato.
    Quello corretto è sicuramente questo:

    codice:
    DEFINT x, y
    FOR y = 0 TO 255
        FOR x = 0 TO y
            IF (x AND (y-x)) = 0 THEN PSET (x + 158 - .5 * y, y + 30)
        NEXT x
    NEXT y
    Altrimenti il NEXT y alla fine andrebbe chiaramente in errore.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Originariamente inviato da LeleFT
    Il primo FOR in BASIC è sbagliato.
    Quello corretto è sicuramente questo:

    codice:
    DEFINT x, y
    FOR y = 0 TO 255
        FOR x = 0 TO y
            IF (x AND (y-x)) = 0 THEN PSET (x + 158 - .5 * y, y + 30)
        NEXT x
    NEXT y
    Altrimenti il NEXT y alla fine andrebbe chiaramente in errore.


    Ciao.
    Giusto!xD.
    L'ho copiato male!

    E per le coordinate binarie hai qualche idea?!
    K. L. Thompson
    You can't trust code that you did not totally create yourself.
    A. Bogk
    UNIX is user-friendly, it just chooses its friends.

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.