QUICK BASIC

IlaCrazy
CIAO!!! :-D :-D
IN questo momento in informatica stiamo facendo il Quick Basic,però vorrei avere delle informazioni più chiare sulla programmazione e i comandi..
Qualcuno mi sa consigliare un sito chiaro??
Oppure ha del materiale da passarmi??
Grazie tante!! :lol: :lol:

Risposte
stellacometa
"lorven":
@stella

ne = CStr(n) 'numero estrazione

a = InputBox(mess, ne) 'visualizza l'InputBox col messaggio e il n.ro di estrazione

If UCase(a) = "Q" Then Exit For 'Se Click su OK o si batte INVIO, prosegue; se si batte q oppure Q, finisce


ciao, vado via anch'io :-)


Questo è un metodo ben funzionante..Ma non c'è anche un modo per continuare a estrarre continuando a pigiare lo stesso bottone???

Il mio prof mi ha parlato di variabile globale..sarebbe utile qui?

TomSawyer1
In che senso continuare a pigiare lo stesso bottone?

lorven
Credo che Stella intenda e preferisca una soluzione come la seguente, che fa a meno dell'inputbox per chiedere se continuare o finire.
Basta cliccare sull'unico pulsante del form per procedere alla successiva estrazione.

Const totnumeri As Integer = 90
Const min = 1, max = 90

Dim numero_estratto As Integer
Dim vett(totnumeri) As Integer

Dim n As Integer

Private Sub Form_load()
n = 0
Randomize
End Sub

Private Sub Command1_Click()

    numero_ok = False
    Do Until numero_ok = True
   
        numero_estratto = min + Int((max - min + 1) * Rnd)
        numero_ok = True
                
        For i = 1 To n
                    
            If numero_estratto = vett(i) Then
               numero_ok = False
               Exit For
            End If
            
        Next
    
    Loop
     
    n = n + 1
    vett(n) = numero_estratto
    Text1.Text = Text1.Text + " " + CStr(numero_estratto)
    
    Form1.Caption = "Estratto n." + " " + CStr(n) + " = " + CStr(numero_estratto)

End Sub




Qui l'ultimo numero estratto è visualizzato nella caption del form e nel text box sono aggiunti i numeri, man mano che vengono estratti.

Attenzione: se si tenta una 91.ma estrazione, il programma va in loop!
Lascio a Stella la modifica necessaria. ;-)

Ciao
:-)

stellacometa
Ora lo provo..e magari posso mettere un altro bottone che mi rimanda in un'altro form dove vengono visualizzati tutti gli elementi estratti in una lista così viena anche piu "sapuritu"...

Grazie..provo subito!!!

stellacometa
WooooW..Lorven sei un genio!!! Viene bellissimo!! Magari potessi avere un insegnante come te!! Grazie infinite..mi stai insegnando molto!!!! :D

IlaCrazy
Ovviamente sono tornata,questa volta con una curiosità...è possibile disegnare con QB una spirale (magari anche in movimento,cioè che si avvita su stessa..)?????
Grazie a tutti!

stellacometa
Quoto la stessa domanda ma con Vb! :D

carlo232
"stellacometa2003":
Quoto la stessa domanda ma con Vb! :D


Beh, questa non è programmazione, ma matematica! :-D

Esistono tanti tipi di spirali, di Pascal di Archimede...

Eccone una carina, noi disegnamo in una PictureBox Picture1 di dimensioni 1000x1000.

Il codice seguente buttiamolo in un timer

Static t,v as single

For t=0 to 6.3 step 0.1
X=K*t*sin(t+v)
Y=K*t*cos(t+v)
Picture1.pset(X+500,Y+500)
Next

v=v+0.1 


K è una costante che scegliamo il base a quanto vogliamo far grande la spirale.

Ciao Ciao :D

stellacometa
Grazie Carlo...ora lo provo, vediamo che ne esce!!

carlo232
"stellacometa2003":
Grazie Carlo...ora lo provo, vediamo che ne esce!!


Prova, intanto specifico una cosa importante al riguardo.

Per disegnare curve continue con Vb o qualche altro linguaggio che permetta di disegnare punti o linee si può ricorrere a due metodi.

Il primo è il seguente, basta mettere tutto in un ciclo for che disegna singolarmente i singoli punti della curva

FOR t=0 to N
'Qua ci mettiamo le equazioni parametriche il t della curva
Picture1.pset(X,Y)
NEXT


ovvero dividiamo la curva in N punti che poi disegnamo, questo metodo funziona bene solo se i punti della curva sono molti vicini e quindi da l'impressione della continuità, altrimenti

FOR t=0 to N
'Qua ci mettiamo le equazioni parametriche il t della curva X1 e Y1 saranno le coordinate della
'curva nel punto con parametro t e X2 Y2 le coordinate della curva nel punto con parametro t+1
Picture1.line(X1,Y1)-(X2,Y2)
NEXT


quest'altro codice divide la curva in N linette è quindi più indicato per disegnare curve di funzioni che crestono lentamente tipo $ln(x)$ altrimenti la curva diventa una linea spezzata. Importante se calcolare X e Y richiede parecchio sforzo al calcolatore non ha senso farli calcolare 2 volte ogni punto tanto vale memorizzare il suo ultimo valore per utilizzarlo nel ciclo successivo.

STATIC X2,Y2 as single
FOR t=0 to N
'Qua ci mettiamo le equazioni parametriche il t della curva X1 e Y1 saranno le coordinate della
'curva nel punto con parametro t 
Picture1.line(X1,Y1)-(X2,Y2)
X2=X1
X2=Y1
NEXT


ricordando solo che al primo ciclo X2 e Y2 saranno uguali a 0 e semmai impostarle diversamente prima del ciclo for.

Ciao Ciao :D

eugenio.amitrano
"IlaCrazy":
Ovviamente sono tornata,questa volta con una curiosità...è possibile disegnare con QB una spirale (magari anche in movimento,cioè che si avvita su stessa..)?????
Grazie a tutti!


Mi ha incuriosito e ci ho provato.
Ovviamente in QBasic la faccenda non e' molto semplice.

CONST ESC = 27
CONST PI = 3.141592

'' Dati spirale
CONST kSpeed = 8: '' Velocita' avvitamento
CONST kNumberOfFrames = 8: '' Numero Frame Animazione per 360ø di avvitamento
CONST kNumberOfCoils = 10: '' Numero di spire della spirale
CONST kSizeX = 80, kSizeY = 80:  ''Dimensione X e Y della Spirale
CONST kColor = 14: '' Colore della spirale - 14 = Giallo

'' #################
'' # ATTENZIONE !! #
'' #################
''
'' Purtroppo il QBasic e' molto limitato sulla memoria:
'' Devi eseguire il seguente calcolo:
''
'' Valore = kNumberOfFrames * (4 + INT((kSizeX * kBitsOfPixel + 7) / 8) * kSizeY)
'' Il Risultato deve essere minore di 65536 (Valore < 65536)
''
'' In pratica piu' Frame vuoi e meno grande deve essere la spirale
''

'' Dati Schermo
CONST kMode = 12: '' Modalita Schermo 640x480
CONST kBitsOfPixel = 4: '' Bit per pixel - Max 2^4 = 16 colori

DIM iMemSize AS INTEGER: '' Memoria occupata da un frame

'' Formula per il calcolo della memoria occupata da ogni frame
iMemSize = 4 + INT((kSizeX * kBitsOfPixel + 7) / 8) * kSizeY

'' Un frame deve essere un vettore grafico di grandezza iMemSize
'' Dichiarazione degli n frames
DIM gFrame(iMemSize, kNumberOfFrames) AS INTEGER

'' Centro della spirale
DIM X0, Y0 AS INTEGER
X0 = kSizeX / 2
Y0 = kSizeY / 2

'' Coordinate Cartesiane del Generico Punto della Spirale
DIM Xp, Yp AS INTEGER

'' Coordinate Polari del Generico Punto della Spirale
DIM Angle, xRadius, yRadius AS DOUBLE

'' Angolo di avvitamento
DIM StartAngle AS DOUBLE

'' Altre variabili
DIM ch AS STRING
DIM iCount, iOldCount AS INTEGER

SCREEN kMode
CLS

'' Memorizzazione dell'avvitamento nei vari frame
FOR iFrame = 0 TO kNumberOfFrames - 1
   LOCATE 24, 1
   PRINT "Creazione del Frame N."; iFrame + 1
   CIRCLE (kSizeX / 2, kSizeY / 2), kSizeX / 2 - 1, kColor, , , kSizeY / kSizeX
  
   '' Calcolo dell'angolo di avvitamento
   StartAngle = 2 * PI * iFrame / kNumberOfFrames
   FOR Angle = 0 TO 2 * PI * kNumberOfCoils STEP PI / 180
      xRadius = Angle * kSizeX / (2 * PI * kNumberOfCoils)
      yRadius = Angle * kSizeY / (2 * PI * kNumberOfCoils)
      Xp = X0 + xRadius * COS(Angle + StartAngle) / 2
      Yp = Y0 + yRadius * SIN(Angle + StartAngle) / 2
      PSET (Xp, Yp), kColor
   NEXT Angle
  
   GET (1, 1)-(kSizeX, kSizeY), gFrame(0, iFrame)
   PUT (1, 1), gFrame(0, iFrame), XOR

NEXT iFrame


SCREEN kMode
CLS
LOCATE 24, 42
PRINT "Premere ESC per terminare l'animazione"

''Esecuzione dell'animazione finche' non e' premuto il tasto Esc
dPause = 1 / kSpeed ''Pausa in secondi
DO
   PUT (1, 1), gFrame(0, iCount), PSET
   SOUND 32767, dPause * 18.2
   ch = INKEY$
   iOldCount = iCount
   iCount = iCount + 1
   iCount = iCount MOD kNumberOfFrames
   PUT (1, 1), gFrame(0, iOldCount), XOR
LOOP UNTIL ch = CHR\$(ESC)


A presto,
Eugenio

lorven
"eugenio.amitrano":
[quote="IlaCrazy"]Ovviamente sono tornata,questa volta con una curiosità...è possibile disegnare con QB una spirale (magari anche in movimento,cioè che si avvita su stessa..)?????
Grazie a tutti!


Mi ha incuriosito e ci ho provato.
Ovviamente in QBasic la faccenda non e' molto semplice.
....
A presto,
Eugenio[/quote]
:shock: :shock: :shock:
pure l'animazione ha inserito Eugenio :!:
Complimenti, davvero :D

A questo punto, preceduto dia in QB che in VB, posto qualcosina in Pascal, anche se siamo in ambito Basic.

program spirale;
(* disegna la spirale di Archimede e
   la spirale logaritmica *)

uses crt, graph;
const
      ns=30; (* numero spire *)
      Ox=512; (* ascissa origine: num_pix_orizz/2 *)
      Oy=384; (* ordinata origine: num_pix_vert/2 *)
      c=3; (* colore pixel *)
      ds=2; (* distanza tra le spire per spirale di Archimede *)
      d=1; (* ritardo emissione pixel *)
      sr= 1; (* senso di rotazione: 1 orario, -1 antiorario *)
      it=0.01; (* incremento parametro t *)
      A = 0.2; (* angolo di curvatura della sp. logaritmica *)
      B = 0.05; (*                ''                         *)
      sl = 1; (* 1 spirale logaritmica; 0 di archimede *)
var r,t:real;
var gd,gm:smallint;
px,py:integer;

procedure init;
begin
gd:=detect; (*Rileva la scheda video*)
InitGraph(gd,gm,''); (*Inizializza la modalità grafica*)
if graphresult<>grOK then (*Se si sono verificati errori*)
  halt(1); (*termina il programma*)
end;

begin (**** M A I N ****)
init;
t:=0;
while abs(t)<ns*2*pi do
   begin
   if sl=1 then r:= A * EXP(B * abs(T))
      else r:=ds*t;
   px:=trunc(r*cos(t))+Ox;
   py:=trunc(r*sin(t))+Oy;
   PutPixel(px,py,c);
   delay(d);
   t:=t+it*sr;
   end;
CloseGraph;
readln;
end.

Disegna la spirale di Archimede o la spirale logaritmica (senza animazione) :(

:-)

IlaCrazy
Grazie infinite a tutti siete grandissimi!!
@Eugenio: my God,è bellizzzzimo molto più di quanto avevo immaginato di fare!!!!!

stellacometa
WooooW..complimenti sia a Eugenio che a lorven..Vedere certe cose in Pascal fa un certo effetto!!! :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.