Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Qbasic e numeri

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    451

    Qbasic e numeri

    sto incominciando a programma in qbasic e il mio prof. mi ha detto di programmare un programma che dopo aver inserito 160 numeri da 1 a 90 gli dica quanti 1 sono usciti, quanti 2 sono usciti, quanti 3 sono usciti......

    io stò utilizzando questa strada:


    For N=1 to 10 step 1
    INPUT "INSERIRE NUMERO: ", A
    SELECT CASE A
    CASE 1
    N1 = N1 + 1
    CASE 2
    N2 = N2 + 1
    CASE 3
    N3 = N3 + 1
    CASE 4
    N4 = N4 + 1
    CASE 5
    N5 = N5 + 1
    ....
    END SELECT
    NEXT
    PRINT "1: ", N1
    PRINT "2: ", N2
    PRINT "3: ", N3
    PRINT "4: ", N4
    PRINT "5: ", N5
    .....


    Non c'è una via più semplice per fare tutto questo?????

    Grazie per il vostro aiuto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    451
    up

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Certo, esiste una via più semplice. E' la strada seguita da uno dei più famosi algoritmi di ordinamento non basati sul confronto: il counting sort.

    Ti crei un array di 90 elementi ed ogni volta che introduci un numero X vai ad aumentare di uno il numero inserito nella posizione X-esima dell'array:
    codice:
    DIM array(1 to 90)
    FOR i=1 TO 160
       ' Introduzione del numero (estratto a caso o inserito da tastiera?)
       ' Io suppongo introdotto da tatiera
       INPUT "Introduci il numero: ", Numero
       array(Numero) = array(Numero) + 1
    NEXT
    
    ' Espongo i risultati
    FOR i=1 TO 90
       PRINT "Occorrenze del numero "; i; ": "; array(i)
    NEXT
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    451
    Grazie era proprio come mi serviva.

    Vediamo se ho capito il programma altrimenti faccio una figura di m.... con il mio prof. che mi ha detto che non esiste un altra strada per creare questo programma, invece grazie a te faccio un figurone

    codice:
    DIM ARRAY (1 TO 90)
    Con questo comando vado a creare 160 array dove vengono memorizzati i numeri che digito

    codice:
    FOR I=1 TO 160
    Questo è il contatore che fa andare avanti il programma solo al raggiungimento di 160

    codice:
    INPUT "INTRODUCI IL NUMERO: ", NUMERO
    Questo è l'input che do con la tastiera

    codice:
    ARRAY(NUMERO) = ARRAY(NUMERO) + 1
    Al secondo del numero che inserisco diventa per es.:

    ARRAY15 = ARRAY15 + 1

    Quindi aumenta array15 di 1 e tutto il resto del codice è molto semplice....

    Sono stato un bravo professore virtuale?????




    Grazie per il tuo aiuto.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Vediamo di correggere qualcosa:
    codice:
    DIM ARRAY (1 TO 90)
    Così creo un array di 90 elementi (un array è una struttura dati, non è nient'altro che una lista, in questo caso).
    codice:
    FOR I=1 TO 160
    Questo è un costrutto presente in (quasi) tutti i linguaggi di programmazione. Il costrutto FOR server per eseguire un certo numero di volte le stesse istruzioni. In questo caso eseguo per 160 volte l'istruzione di lettura del numero da tastiera, ossia leggo 160 numeri.
    codice:
    ARRAY(NUMERO) = ARRAY(NUMERO) + 1
    Qu uso la struttura dati (Array) creata prima. Se per esempio l'utente digita 15, questa istruzione prende il valore memorizzato in posizione 15 nella lista e lo aumenta di uno. (significa, dal punto di vista logico del nostro programma, che ho letto una volta in più il numero 15).

    Io non ho integrato dei controlli nel codice, credo che non ti sia difficile farlo, in modo da evitare che l'utente inserisca un valore più grande di 90 o più piccolo di 1. Se questo dovesse succedere, con il codice che ho postato io, si presenterebbe lo sconfinamento dell'array ed il programma andrebbe 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

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    451
    Ho modificato un po il codice

    codice:
    DIM array(1 to 90)
    FOR i=1 TO 160
       INPUT "Introduci il numero: ", Numero
       array(Numero) = array(Numero) + 1
    NEXT
    FOR i=1 TO 90
    open "prova.txt" output as 1#
       PRINT #1, "Occorrenze del numero "; i; ": "; array(i)
    closed
    NEXT
    ma non funziona, perkè????

    mi scrive solo 90 : 0


  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    451
    Ci sono riuscito ho usato questo comando:

    open "prova.txt" for append as #1
    PRINT #1, "Occorrenze del numero "; i; ": "; array(i)
    close


    Grazie, mi hai fatto fare una bella figura con il mio prof. ci ho inpiegato 1 ora per fargli capire come funzionava il programma perchè non riusciva a capire.


    Grazie.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Si vede che non è uno che ha perso ore e ore a programmare in QBasic... cari bei vechi tempi in cui 5000 linee di codice piene di GOTO non facevano paura!!


    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

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.