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
eugenio.amitrano
Oggi sono riuscito a trovare un boco di un'ora per dedicarlo al pc.

eugenio.amitrano
Cara Stellacometa,
probabilmente l'algoritmo che hai chiesto non va bene per soddifare le tue esigenze.
Vediamo se ho capito bene il tuo problema e poi ti scrivo un algoritmo:

Ci sono 2 oggetti impiegati:
1) una textbox
2) un pulsante

quando premo il pulsante devono essere inseriti n elementi casuali nella textbox senza ripetizioni.
In particolare ogni pressione del pulsante deve generare n numeri casuali che non sono stati estratti nelle precedenti pressioni.
Giusto ?

Parametri:
a) n1 numeri casuali da generare
b) n2 numeri gia' estratti in precedenza
b) min e max estremi intervallo di generazione

Se n1+n2 > max-min+1 significa che non puo' essere esguita la generazione
(Puoi estrarre 20 numeri interi diversi tra di loro compresi tra 1 e 10 ?)

Memorizza gli elementi della textbox in un vettore vett2 di n2 elementi.
Ogni elemento generato deve essere confrontato prima con tutti gli elementi di vett2 e poi la classica verifica all'interno di vett come nel precedente algoritmo.

Prova a buttar giu' un codice e poi se non ti funziona lo vediamo insieme.

Ok ????

Buona Domenica a tutti.

EugenioA

eugenio.amitrano
Ila, sei riuscita a realizzare quegli esempi ?
Sono sicuro di si !
o no ?

stellacometa
Rieccomi..mi rimetto subito a lavoro!!!

IlaCrazy
"eugenio.amitrano":
Ila, sei riuscita a realizzare quegli esempi ?
Sono sicuro di si !
o no ?


due sono un pò difficilotti..per gli altri te li posto domani,ti ho lasciato un p. di tempo per fare le scorte di munizioni! :twisted:
comunque mi sto appassionando(per quel che ci capisco... :lol: )..grazie!

stellacometa
Allora..mi sono fatta questo..però a questo punto non so più dove sbattere la testa perchè con questo codice su 44 estrazioni 7 erano doppioni:


Dim vett() As Integer
Dim numero_estratto As Integer
Const totnumeri As Integer = 90
Const min = 1, max = 90

Private Sub Command1_Click()
Randomize
ReDim vett(1 To totnumeri)
For n = 1 To totnumeri

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


Se qualcuno capisce l'ORRORE venga a salvarmi da questo scempio!!! :cry:

lorven
@stellacometa
Ho modificato il tuo codice, contenente errori e ridondanze.

Dim vett() As Integer
Dim numero_estratto As Integer
Const totnumeri As Integer = 90
Const min = 1, max = 90

Private Sub Command1_Click()
Randomize
ReDim vett(1 To totnumeri)

For n = 1 To totnumeri

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



Dovrebbe funzionare; spero sia comprensibile.
:-)

IlaCrazy
"eugenio.amitrano":
Ciao Ila,
fammi pensare come posso renderti la vita difficile.
Hehehehe....

Esercizio 1: (FRASE)
Discutere una frase inserita dall'utente.
Contare il numero di lettere, parole e punteggiatura.

Esercizio 2: (PIANOLA)
Rendere la tastiera del pc una sorta di strumento musicale tipo pianola con le seguenti caratteristiche:
tasto A 100Hz
tasto B 200Hz
...
tasto Z 2600Hz
ogni volta che premo un tasto da A a Z deve emettere un suono di 0,3 secondi della frequenza indicata sopra. con il tasto ESC esce dal programma.

Esercizio 3: (CAOS)
Stampare caualmente circonferenze e linee di vari colori e lunghezze all'interno dello schermo 640x480
finche' non e' premuto il tasto INVIO

Esercizio 4: (CENTRO)
Stampare al centro dello schermo una parola inserita dall'utente.

------------

Se ci rifletti bene, non sono molto piu' difficili degli esempi che abbiamo visto in passato, sono solo un po' piu' lunghi.
Comunque non ti lascio sola in questa impresa, chiedimi tutto cio' che ti occorre.

In bocca al lupo,
EugenioA


@Eugenio:

Esercizio 1 (frase)
Sono riuscita a far contare il numero di lettere,ma ovviam per le parole e gli spazi..nada! :oops:
intanto ti dico quello che ho fatto:

CLS
DIM frase AS STRING
DIM lettere AS INTEGER
DIM parole AS INTEGER
DIM spazi AS INTEGER
INPUT “inserisci una frase:”,frase
Lettere= LEN(frase)
Print lettere


Esercizio 3 (caos)
In realtà ho trovato diverse soluzioni,ma provo a metterti quella che mi sembra meno stupida… :lol:
CLS
SCREEN 13
RANDOMIZE TIME
n=100
q=n+1000
WHILE INKEY$= “150”
LINE (rnd*q,rnd*q)-(rnd*q,rnd*q)
CIRCLE (rnd *q,rnd *q), rnd *q, rnd *q
WEND
END

Per capire quale era il codice del tasto invio,ho usato questo procedimento:
DIM ris AS INTEGER
ris= ASC (“invio”)
PRINT ris

Solamente che tu mi hai chiesto di far stampare cerchi e linee di lunghezze diverse,quindi sto pensando di fare un ciclo col FOR.. STEP.. NEXT..per far cambiare i valori…però non so..

Gli altri sono in fase di elaborazione…..ehm… :oops: :oops:

stellacometa
Lorven..niente da fare fa lo stesso delle ripetizioni...

Inizio a pensare che non esista soluzione!!! :smt010 :smt089 :smt088

lorven
@stella
Ho verificato più volte il programma. :!:
Impossibile che a me funzioni correttamente e a te no! :evil:
Hai fatto un copia/incolla? ;-)

stellacometa
si si..Ho copiato per intero il tuo...fai una cosa però..invece di farli visualizzare tutti insieme, visualizzali nella text ad uno ad uno!!! Se ti viene poi mi passi il codice...

aspetto l'esito!

stellacometa
A rivederlo ho notato una cosa...se i numeri li faccio apparire tutti insieme allora questi non si ripetono..ma se invce lo faccio uno per volta allora si..e questo mi pare anche ovvio visto che ad ogni click del pulsante corrisponde uno nuovo codice che così non tiene in considerazione il vecchio numero! Alla fine i nostri codici erano sulla giusta via ma abbiamo lasciato èper scontato il fatto ogni click corrisponde ad un nuovo codice!!! Di moriri!!! Incredibile... A questo punto chiedo: c'è un modo per fare un click e in vedere nella text in alternanza i numeri??

lorven
@stella

Chiedo venia se rispondo tardi: mi si è bloccato il pc nella prova!
Comunque, ecco una possibile soluzione per estrarre 90 numeri, tutti diversi, uno per volta.
Dim vett() As Integer
Dim numero_estratto As Integer
Dim a As String
Dim ne As String

Const totnumeri As Integer = 90
Const min = 1, max = 90
Const mess = "INVIO: continua; Q: fine"


Private Sub Command1_Click()
Randomize
ReDim vett(1 To totnumeri)

For n = 1 To totnumeri

    numero_ok = False
    Do Until numero_ok = True
   
        numero_estratto = min + Int((max - min + 1) * Rnd)
        numero_ok = True
                
        For i = 1 To n - 1
                    
            If numero_estratto = vett(i) Then
               numero_ok = False
               Exit For
            End If
            
        Next
    
    Loop
     
    vett(n) = numero_estratto
    Text1.Text = CStr(numero_estratto)
    
    ne = CStr(n)
    a = InputBox(mess, ne)
    If UCase(a) = "Q" Then Exit For
Next
End Sub



:-)

stellacometa
Grazie mille..mi stupisco sempre ad osservare come risolvi sempre tutto..Una cosa, mi spieghi l'ultimo blocco di istruzioni?

Ti ringrazio tantissimo per il tuo aiuto lorven, come al solito!!!

Ora vado però..lo leggerò domani!!!

Ciao

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 :-)

stellacometa
Grazie mille ancora!!!! :D

eugenio.amitrano
Ciao tutti.
Bello l'utilizzo della @ per richiamare l'attenzione di un utente.

@lorven
Un sentito ringraziamento da parte mia per avermi aiutato in questo topic.
Lo farai ancora, vero ? Spero proprio di si.

@Stella
Sono molto felice che hai finalmente risolto il problema.
Un espressione usuale tua per l'occasione: WoooooooooooooooooooW !

@Ila
l'Esercizio 1 e' giusto fino al punto che sei arrivata (molto bene) mentre l'Esercizio 3 ha la forma giusta ma non i concetti.
Sono sicuro che non ti sei impegnata molto e che se lo farai riuscirai a svolgerli. (Non mollare, FORZA ILACRAZY !!!!)
Se proprio non ci riesci domani ti aiutero' a capire la soluzione.

Per non lasciarti completamente a mani vuote, ecco alcuni suggerimenti.
Per l'esercizio 1:
tramite MID\$ e un ciclo FOR hai la possibilita' di vedere carattere per carattere com'e' composta la frase, (ricordi qualche esempio fa ?) se tale carattere e' uno spazio incrementa la variabile spazi. Per il conteggio delle parole lascio ancora alla tua fantasia.
Per l'esercizio 3:
il carattere invio e' CHR\$(13), tu hai fatto l'asc della parola "invio" (che non ha senso) e non del tasto invio.
Ti scrivo un programmino che ti restituisce il codice ascii di un tasto premuto dalla tastiera finche' non e' premuto ESC:

(non l'ho compilato, controlla eventuali errori)
CONST ESC = 27

DIM CH AS STRING
DIM CODICE AS INTEGER

SCREEN 0
CLS

DO

PRINT "Premere un tasto: "
CH = INPUT\$(1)
CODICE = ASC(CH)
PRINT "Il codice del tasto premuto e'"; CODICE

LOOP UNTIL(CH = CHR\$(ESC))

PRINT "Programma terminato."

Un ulteriore consiglio per l'esercizio 3 e' l'utilizzo delle costanti MAXX = 639, MAXY = 479, MAXCOL = 15
credo ti aiuteranno a capire il calcolo delle coordinate casuali.

A presto,
EugenioA

IlaCrazy
grazie...spero di cavarci fuori qualcosa!!!!!
ciao!!!

IlaCrazy
"eugenio.amitrano":
Ciao tutti.
@Ila
(non l'ho compilato, controlla eventuali errori)
CONST ESC = 27
DIM CH AS STRING
DIM CODICE AS INTEGER
SCREEN 0
CLS
DO
PRINT "Premere un tasto: "
CH = INPUT\$(1)
CODICE = ASC(CH)
PRINT "Il codice del tasto premuto e'"; CODICE
LOOP UNTIL(CH = CHR\$(ESC))
PRINT "Programma terminato."


ovviamente funziona!! :-D :-D
ma scusa la domanda ti sembrerà stupida,ma qual è la funzione di INPUT$(1) nel tuo programma??
tutto il resto l'ho capito,ma.. :oops: :oops:
grassie!!!!!!

eugenio.amitrano
Ciao Ila,
L'istruzione "stringa = INPUT\$(n)" serve per richiedere all'utente precisamente n caratteri da inserire in una stringa.

Eugenio

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