Dall'assembly ai linguaggi di alto livello

  • Autore discussione Autore discussione Utente 125751
  • Data d'inizio Data d'inizio
Pubblicità
U

Utente 125751

Ospite
Buongiornoo!

Navigando tra le pagine di Wiki relative all' informatica mi sono imbattuto sulla pagina Wiki del Basic e poi in particolare su questo programma scritto in Basic usando il linguaggio Gw-basic:

Codice:
10 INPUT "Come ti chiami: ", U$
20 PRINT "Ciao "; U$
30 INPUT "Quante stelle vuoi: ", N
40 S$ = ""
50 FOR I = 1 TO N
60 S$ = S$ + "*"
70 NEXT I
80 PRINT S$
90 INPUT "Vuoi altre stelle? ", A$
100 IF LEN(A$) = 0 THEN GOTO 90
110 A$ = LEFT$(A$, 1)
120 IF A$ = "S" OR A$ = "s" THEN GOTO 30
130 PRINT "Arrivederci "; U$
140 END

Il problema è che non ho capito la linea 40 visto che alla fine della riga 30 c'è N e non S$.
Non ho capito del tutto la linea 50 e non ho capito perchè c'è LEN nella riga 100.


Cercando su internet ho trovato questo:

LEN FUNCTION Purpose: To return the number of characters in x$.

Syntax: LEN(x$) Comments: Nonprinting characters and blanks are counted.

Example: x$ is any string expression.

Codice:
10 X$="PORTLAND, OREGON"
20 PRINT LEN(X$)
RUN
 16


Grazie a chi mi aiuterà ^^
 
Non conosco il Basic, ma la riga 40 usa la stessa stringa usata alle righe 10 e 20 e la mette a “carattere di terminazione” (sempre che esista in Basic).
Poi il for va a 1 a N, compresi, e aggiunge alla stringa la stringa “*” ogni iterazione.
Se come input dai 5, ad esempio, il for verà eseguito 5 volte con conseguente stringa S : “*****”.
LEN() penso sia utilizzato per verificare che la stringa in input non sia vuota (un semplice invio) e quindi evitare di fare un token impossibile (vedi sotto).
LEFT$() prende come parametri una stringa e un valore e fa un token di quella stringa da sinistra fino al carattere con posizione quella del parametro.
 
Ultima modifica:
Vecchissimi ricordi...

linea 40:
Il programma scrive una stringa di N asterischi (stelle), per costruirla parte dalla stringa vuota S$ e aggiunge un asterisco ogni ciclo fino a N, inserito dall'utente.

linea 50:
È appunto il ciclo FOR.. ..NEXT (riga 70) con cui costruisce la stringa S$

linea 100:
La funzione LEN() restituisce il numero di caratteri di una stringa (lunghezza: "LENght"). In tal caso ritorna a proporre l'input se il valore è 0 cioè se all'input si preme invio il programma non termina, mentre se si scrive qualsiasi cosa il programma valuterà solo il primo carattere digitato e ricomincerà solo se questo sarà "s": minuscolo o maiuscolo.

Ovviamente, essendo un programmino dimostrativo è fatto per inserire il maggior numero di funzioni.. dal punto di vista del codice riesce ad essere assolutamente osceno e non didattico: BASIC (cosi come il FORTRAN a cui è strettamente legato) appartiene ad epoche in cui, considerata l'esiguità delle risorse, la vera qualità sta nella sintesi del codice.




Inviato dal mio Nexus 5 utilizzando Tapatalk
 
Ultima modifica:
Buongiornoo!

Navigando tra le pagine di Wiki relative all' informatica mi sono imbattuto sulla pagina Wiki del Basic e poi in particolare su questo programma scritto in Basic usando il linguaggio Gw-basic:

Codice:
10 INPUT "Come ti chiami: ", U$
20 PRINT "Ciao "; U$
30 INPUT "Quante stelle vuoi: ", N
40 S$ = ""
50 FOR I = 1 TO N
60 S$ = S$ + "*"
70 NEXT I
80 PRINT S$
90 INPUT "Vuoi altre stelle? ", A$
100 IF LEN(A$) = 0 THEN GOTO 90
110 A$ = LEFT$(A$, 1)
120 IF A$ = "S" OR A$ = "s" THEN GOTO 30
130 PRINT "Arrivederci "; U$
140 END

Il problema è che non ho capito la linea 40 visto che alla fine della riga 30 c'è N e non S$.
Non ho capito del tutto la linea 50 e non ho capito perchè c'è LEN nella riga 100.


Cercando su internet ho trovato questo:

LEN FUNCTION Purpose: To return the number of characters in x$.

Syntax: LEN(x$) Comments: Nonprinting characters and blanks are counted.

Example: x$ is any string expression.

Codice:
10 X$="PORTLAND, OREGON"
20 PRINT LEN(X$)
RUN
16


Grazie a chi mi aiuterà ^^
Perché vuoi "imparare" il GWBasic? Esistono ad oggi interessanti implementazioni del BASIC (anche open source) che, a differenza dell'inutile GWBasic, sono pienamente utilizzabili per scrivere software.

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
a leggerlo mi pare di sentire il suono della tastiera con quei tasti pesanti e a corsa lunga.... ma è ancora facile da interpretare.
con il COBOL le cose sarebbero più difficili.
 
Usai il BASIC solo nei primi anni 80 ma ancora posso capire un semplice programma come quello. Per esempio il simbolo monetario alla fine definisce una variabile di tipo stringa. Ben diverso dal Lisp per esempio, che ormai non riuscirei più a leggere, ci sono motivi che venne chiamato appunto BASIC.
 
Non conosco il Basic, ma la riga 40 usa la stessa stringa usata alle righe 10 e 20 e la mette a “carattere di terminazione” (sempre che esista in Basic).
Poi il for va a 1 a N, compresi, e aggiunge alla stringa la stringa “*” ogni iterazione.
Se come input dai 5, ad esempio, il for verà eseguito 5 volte con conseguente stringa S : “*****”.
LEN() penso sia utilizzato per verificare che la stringa in input non sia vuota (un semplice invio) e quindi evitare di fare un token impossibile (vedi sotto).
LEFT$() prende come parametri una stringa e un valore e fa un token di quella stringa da sinistra fino al carattere con posizione quella del parametro.



Che è il carattere di terminazione?

I è un' altra variabile in questo programma?

Vecchissimi ricordi...

linea 40:
Il programma scrive una stringa di N asterischi (stelle), per costruirla parte dalla stringa vuota S$ e aggiunge un asterisco ogni ciclo fino a N, inserito dall'utente.

linea 50:
È appunto il ciclo FOR.. ..NEXT (riga 70) con cui costruisce la stringa S$

linea 100:
La funzione LEN() restituisce il numero di caratteri di una stringa (lunghezza: "LENght"). In tal caso ritorna a proporre l'input se il valore è 0 cioè se all'input si preme invio il programma non termina, mentre se si scrive qualsiasi cosa il programma valuterà solo il primo carattere digitato e ricomincerà solo se questo sarà "s": minuscolo o maiuscolo.

Ovviamente, essendo un programmino dimostrativo è fatto per inserire il maggior numero di funzioni.. dal punto di vista del codice riesce ad essere assolutamente osceno e non didattico: BASIC (cosi come il FORTRAN a cui è strettamente legato) appartiene ad epoche in cui, considerata l'esiguità delle risorse, la vera qualità sta nella sintesi del codice.

Inviato dal mio Nexus 5 utilizzando Tapatalk

Nella riga 40 crea uno spazio vuoto e lo associa alla variabile S$, giusto?


Riguardo al ciclo for sono arruginito e non mi ricordo se cambia rispetto al Python oppure al Quick basic o al Pascal etc... che avevo iniziato a fare in passato.

"I" in questo caso è una variabile e vale 1 quindi il programma andrà sempre al valore N indicata dall' utente. Dico bene?

Nella riga 60 aggiunge uno spazio più un' asterisco.
Nella riga 70 va alla variabile "I" che però vale sempre 1.

Ora un pochino ho capito a quandi linee la riga 100.

Io non me ne intendo e perciò chiedo: come mai questo programmino è assolutamente osceno e non didattico?

Leggendo ho saputo che la prima versione del Basic fu il Dartmouth BASIC che deriva dal Fortan e dall' Algol ed è stato creato da 2 studenti universitari allo scopo di avere un linguaggio di programmazione che non richiedesse conoscenze di matematica, in cui l' ambito non sia quello scientifico

Secondo Wiki.com il Gw-basic (ma anche il Dartmouth Basic) a differenza del linguaggio non è strutturato proprio come l' Assembly anche se il primo è un linguaggio ad alto livello ed è interpretato.


Perché vuoi "imparare" il GWBasic? Esistono ad oggi interessanti implementazioni del BASIC (anche open source) che, a differenza dell'inutile GWBasic, sono pienamente utilizzabili per scrivere software.

Inviato dal mio Nexus 5 utilizzando Tapatalk



Ti spiego: per interesse personale/hobbystico stavo cercando su Wiki, specie su quella .com, un linguaggio per Ms-dos (intendo il sistema operativo) oppure per Windows che sia adatto a me, che mi piaccia a livello di sintassi/sematica (non sono bravo con la teoria), che sia anche o solo general o/e general purpose, che non sia limitato come il Basic o il Python, che non mi faccia poi perdere l' interesse.

Arrivando alla pagina del Basic, mi sono ritornati ricordi ed interessi passati compreso anche l' Ms-dos. Poi ho visto il Gw-basic e pensavo che come sintassi/semantica potesse andare bene ma poi mi sono reso conto di no.

Ho aperto questa discussione solamente perchè volevo risolvere i dubbi che avevo su quel codice trovato su Wiki, che mi ha un po' incuriosito. Non voglio "imparare" il Gw-basic o programmare usando linguaggio.

Se dovessi andare sul Basic riprenderò sicuramente il Quick Basic (meno limitato del Gw-basic) e quindi o il Qbasic (su Ms-dos) oppure il QB64 (su Windows 64 bit) che avevo interrotto più di volta.

Ogni tanto mi viene il desiderio/interesse di programmare.

Sono un sognatore e sono almeno un po' creativo.

Mi rendo conto che non ho la mentalità del matematico o del fisico o dell' ingegnere o del programmatore.

Però non odio la matematica anzi ci sono alcuni/degli argomenti che mi piacciono/mi interessano.

Ho un pensiero/visione po' diverso/a sul concetto di "problema" nella programmazione. Per me il "problema" c'è ad es. quando bisogna realizzare un programma o codice o funzione e non si sa come fare (o da dove iniziare) o/e si è bloccati in un punto oppure se ad es. in programma o codice o funzione c'è un errore (o più errori) che quindi oppure nel caso di un esercizio da risolvere in cui sinonimo è "problema".

Ammetto che per alcune cose vivo nel periodo storico sbagliato visto che mi piace ad es. anche l' informatica vintage.

In generale: se una cosa mi interessa o/e mi piace o/e mi incuriosisce non mi importa l' anno in cui è stata creata e quindi se è giovane o vecchia o vintage o addirittura antica.

Come linguaggi ho visto che oltre a quelli imperativi ci sono anche quelli dichiarativi, funzionali, logici, debolmente o fortemente tipizzati, scripting, paralleli, esoterici ed hardware description. Chissà se tra questi ce ne sarà almeno uno adatto per me ^^


In quello che ho scritto non ci sono critiche o/e giudizi ma sono solo pensieri,opinioni ed interessi personali che possano essere utili per avere un consiglio o/e trovare la giusta strada che fa per me indipendentemente dal mercato, dalla moda, dalla classifiche etc..

P.S. se sei arrivato fin qui spero che non sarai svenuto per terra :D



@Andretti60

Mi ero scordato del significato del $ alla fine.
Come mai non riesci più a leggere il Lisp? Cos' ha di particolare questo linguaggio?
 
Ultima modifica da un moderatore:
Non conosco il Basic, ma la riga 40 usa la stessa stringa usata alle righe 10 e 20 e la mette a “carattere di terminazione” (sempre che esista in Basic).
Poi il for va a 1 a N, compresi, e aggiunge alla stringa la stringa “*” ogni iterazione.
Se come input dai 5, ad esempio, il for verà eseguito 5 volte con conseguente stringa S : “*****”.
LEN() penso sia utilizzato per verificare che la stringa in input non sia vuota (un semplice invio) e quindi evitare di fare un token impossibile (vedi sotto).
LEFT$() prende come parametri una stringa e un valore e fa un token di quella stringa da sinistra fino al carattere con posizione quella del parametro.
Senza offesa, ma rispondi se sai, altrimenti fai a meno.. così fai solo confusione!

Inviato dal mio Nexus 5 utilizzando Tapatalk
 
@Cibachrome, la variabile I è la variabile utilizzata come contatore nel ciclo for. Ad ogni iterazione aumenta di uno finché rispetta la condizione.
Il carattere di terminazione è rappresentabile con ‘\0’ e indica il termine di una stringa in linguaggi quali C e alcuni derivati. Una stringa di lunghezza 0 in realtà è una stringa si lunghezza 1. Per ora non è affatto importante.
La riga 60 non aggiunge alcun spazio. Aggiunge “*” al termine della stringa.
La riga 70 segna la fine della parte del codice inclusa nel ciclo.
La $ al termine di una funzione indica che il tipo di ritorno è una stringa.
Senza offesa, ma rispondi se sai, altrimenti fai a meno.. così fai solo confusione!

Inviato dal mio Nexus 5 utilizzando Tapatalk
L’algoritmo è molto facile e spiegarlo non è un problema nemmeno conoscendo il Basic. Non ho fatto confusione a nessuno :ok:
 
Vedi il mio Nick.. RC sta per RetroComputer.. se hai cose da chiedere sul passato sono qui.. uso il computer e programmo dal 1984 (34 anni!) e sono appassionato di storia e informatica..

Nella riga 40 crea uno spazio vuoto e lo associa alla variabile S$, giusto?

Precisamente crea una variabile di tipo stringa e gli assegna null. Associare valori a variabili lo fa python..



Riguardo al ciclo for sono arruginito e non mi ricordo se cambia rispetto al Python oppure al Quick basic o al Pascal etc... che avevo iniziato a fare in passato.

"I" in questo caso è una variabile e vale 1 quindi il programma andrà sempre al valore N indicata dall' utente. Dico bene?

"Quick basic" è un basic Microsoft non c'è differenza di sintassi.
Il ciclo FOR esiste in tutti i linguaggi anche se con sintassi diverse: si ripete facendo cambiare valore alla variabile contatore

Nella riga 60 aggiunge uno spazio più un' asterisco.
Nella riga 70 va alla variabile "I" che però vale sempre 1.

La riga 70 chiude il ciclo che si ripete con incrementi del contatore.. I dopo viene incrementato di 1.
Alla riga 60 aggiunge un asterisco al valore precedente della variabile.. non ci sono spazi.

Ora un pochino ho capito a quandi linee la riga 100.

Io non me ne intendo e perciò chiedo: come mai questo programmino è assolutamente osceno e non didattico?

Leggendo ho saputo che la prima versione del Basic fu il Dartmouth BASIC che deriva dal Fortan e dall' Algol ed è stato creato da 2 studenti universitari allo scopo di avere un linguaggio di programmazione che non richiedesse conoscenze di matematica, in cui l' ambito non sia quello scientifico

Non è stato scritto da due studenti, ma da due ricercatori come linguaggio simbolico di facile apprendimento per impieghi fuori dall'ambito scientifico. Era disponibile online su mainframe time-sharing (in condivisione di risorse) e per questo motivo era interpretato. Come sintassi è praticamente identico al FORTRAN, davvero il primo linguaggio strutturato per computer, considerando che l'assembler, specialmente nelle implementazioni originarie non si può neppure considerare un linguaggio.

Il BASIC è un linguaggio fondamentale per la storia dell'informatica, almeno quanto il C.
- ha contribuito alla diffusione della cultura informatica già dagli anni 60
- è stato implementato da subito (1975) in praticamente tutti i microcomputer come linguaggio di programmazione e anche con funzionalità di sistema operativo
- è stato il primo prodotto di Microsoft, e anche uno di quelli di maggior successo, che ha decretato l'affermazione planetaria dell'azienda.


Secondo Wiki.com il Gw-basic (ma anche il Dartmouth Basic) a differenza del linguaggio non è strutturato proprio come l' Assembly anche se il primo è un linguaggio ad alto livello ed è interpretato.

Non capisco cosa significhi questo parallelo molto improbabile tra basic e assembly!?!?!?
Il GWBasic è un prodotto degli anni 80, un interprete Microsoft inizialmente diffuso su CP/M e poi dato in dotazione con ms-dos.. un dialetto molto diffuso è compatibile con il mitico basic compiler di Microsoft.

Ti spiego: per interesse personale/hobbystico stavo cercando su Wiki, specie su quella .com, un linguaggio per Ms-dos (intendo il sistema operativo) oppure per Windows che sia adatto a me, che mi piaccia a livello di sintassi/sematica (non sono bravo con la teoria), che sia anche o solo general o/e general purpose, che non sia limitato come il Basic o il Python, che non mi faccia poi perdere l' interesse.

Arrivando alla pagina del Basic, mi sono ritornati ricordi ed interessi passati compreso anche l' Ms-dos. Poi ho visto il Gw-basic e pensavo che come sintassi/semantica potesse andare bene ma poi mi sono reso conto di no.

Ho aperto questa discussione solamente perchè volevo risolvere i dubbi che avevo su quel codice trovato su Wiki, che mi ha un po' incuriosito. Non voglio "imparare" il Gw-basic o programmare usando linguaggio.

Se dovessi andare sul Basic riprenderò sicuramente il Quick Basic (meno limitato del Gw-basic) e quindi o il Qbasic (su Ms-dos) oppure il QB64 (su Windows 64 bit) che avevo interrotto più di volta.

Il Quick basic è tutt'altro pianeta. Con quello (e le reti netware) ho iniziato a lavorare.


Inviato dal mio Nexus 5 utilizzando Tapatalk
 
@Cibachrome, la variabile I è la variabile utilizzata come contatore nel ciclo for. Ad ogni iterazione aumenta di uno finché rispetta la condizione.
Il carattere di terminazione è rappresentabile con ‘\0’ e indica il termine di una stringa in linguaggi quali C e alcuni derivati. Una stringa di lunghezza 0 in realtà è una stringa si lunghezza 1. Per ora non è affatto importante.
La riga 60 non aggiunge alcun spazio. Aggiunge “*” al termine della stringa.
La riga 70 segna la fine della parte del codice inclusa nel ciclo.
La $ al termine di una funzione indica che il tipo di ritorno è una stringa.

Non ho capito il paragone con il C che tra l' altro in passato gli avevo dato solo un' occhiattina e non è sufficiente per capire il paragone. Non ho capito nemmeno la seconda frase XD.

Devo ritornare e capire bene la linea 40.

Una volta finito il ciclo for con la riga 70 poi torna all' inizio del ciclo for, se non ho capito male.

Il tipo di ritorno? Questa non la so.


Vedi il mio Nick.. RC sta per RetroComputer.. se hai cose da chiedere sul passato sono qui.. uso il computer e programmo dal 1984 (34 anni!) e sono appassionato di storia e informatica..

Non sapevo il significato del tuo nick e non credevo che fossi appassionato di RetroComputer. Meglio così visto che ho una persona in più a cui chiedere^^


Precisamente crea una variabile di tipo stringa e gli assegna null. Associare valori a variabili lo fa python..

@rctimelines

Tra le virgolette non c'è nessuna stringa. "Null" sarebbe?

Io da quello che ricordo avevo imparato che la variabile è un contenitore oppure un associazione di un valore. Il concetto di variabile non è uguale per i linguaggi di programmazione?

GW basic/Quick basic che cosa fanno invece di diverso rispetto a Python?

"Quick basic" è un basic Microsoft non c'è differenza di sintassi.
Il ciclo FOR esiste in tutti i linguaggi anche se con sintassi diverse: si ripete facendo cambiare valore alla variabile contatore
La riga 70 chiude il ciclo che si ripete con incrementi del contatore.. I dopo viene incrementato di 1.

Ora ho capito cosa fa il ciclo for però analizzando il codice non sembra che la variabile contatore, che è in questo caso è I, venga cambiata alla prossima ripetizione del ciclo for ed ecco perchè fin dall' inizio questo mi ha tratto in inganno,


Alla riga 60 aggiunge un asterisco al valore precedente della variabile.. non ci sono spazi.

Ok ho capito però ho un dubbio. qual'è il valore precedente della variabile se tra le virgolette, presenti nella riga 40 non c'è nulla nemmeno uno spazio?

Poche righe di codice di Gw Basic sono riuscite a confondermi/mettermi in crisi...


Non è stato scritto da due studenti, ma da due ricercatori come linguaggio simbolico di facile apprendimento per impieghi fuori dall'ambito scientifico. Era disponibile online su mainframe time-sharing (in condivisione di risorse) e per questo motivo era interpretato. Come sintassi è praticamente identico al FORTRAN, davvero il primo linguaggio strutturato per computer, considerando che l'assembler, specialmente nelle implementazioni originarie non si può neppure considerare un linguaggio.

Il BASIC è un linguaggio fondamentale per la storia dell'informatica, almeno quanto il C.
- ha contribuito alla diffusione della cultura informatica già dagli anni 60
- è stato implementato da subito (1975) in praticamente tutti i microcomputer come linguaggio di programmazione e anche con funzionalità di sistema operativo
- è stato il primo prodotto di Microsoft, e anche uno di quelli di maggior successo, che ha decretato l'affermazione planetaria dell'azienda.


Se l' intendo del Basic era quello di essere un" linguaggio simbolico di facile apprendimento per impieghi fuori dall'ambito scientifico" come fa ad essere praticamente identico al FORTRAN?

Secondo Wiki.com, se non ho capito male, il primo Dartmouth basic era basato sul Fortran II ed aveva alcune influenze con l' Algol 60. Però poi in alto a destra menziona anche JOSS.

L' assembly specie quello di allora perchè non si può considerare un linguaggio?

Non capisco cosa significhi questo parallelo molto improbabile tra basic e assembly!?!?!?
Il GWBasic è un prodotto degli anni 80, un interprete Microsoft inizialmente diffuso su CP/M e poi dato in dotazione con ms-dos.. un dialetto molto diffuso è compatibile con il mitico basic compiler di Microsoft. [/QUOTE]

Tra i due ci sono tante forse tantissime differenze però io intendevo a livello di paradigma.

Wiki.com dice che l' Assembly come paradigma è imperativo e non-strutturato mentre sul Dartmouth e GW-basic dice che è non-strutturato. Da questo deduco che hanno in comune il fatto che sono linguaggi non strutturati.

Conosci un linguaggio imperativi e non-strutturato?

Il Quick basic è tutt'altro pianeta. Con quello (e le reti netware) ho iniziato a lavorare.

Avevo capito che era diverso ma non credevo che fosse tutt' altro pianeta.

Considerando quello che ho scritto nella risposta di ieri sai per caso consigliarmi un linguaggio?

Avevo dimenticato ieri che ci sono anche i linguaggi di programmazione visuali.

Inviato dal mio Nexus 5 utilizzando Tapatalk[/QUOTE]
 
Ultima modifica da un moderatore:
Pubblicità
Pubblicità
Indietro
Top