Salta al contenuto principale

Corso vbs\Confronto tra stringhe-seconda parte

Guido Ruggeri su winguidotecnica, 05\01\2010, h.14.14.

Riprendiamo a parlare del confronto tra stringhe, così
nelle prossime lezioni potremo cominciare a parlare di
qualcosa di molto importante, cioè delle istruzioni
condizionali.
A quel punto, finalmente potremo cominciare a fare sul
serio.
Abbiamo già detto che il confronto tra stringhe è un
confronto carattere per carattere, secondo un ordine
alfanumerico.
C'è però una complicazione, rappresentata dalle lettere
maiuscole e minuscole.
Quando ne abbiamo parlato, nella lezione 16, abbiamo detto:
nel confronto, le lettere maiuscole vengono prima delle
minuscole.
Cioè: se confronto la stringa "Guido", con la G maiuscola,
e la stringa "guido", con la g minuscola, ottengo che la
prima stringa è minore della seconda.
Proviamo:

Ed ora, un po' di pubblicità

:

S1 = "Guido"
S2 = "guido"
msgbox S1 = S2
msgbox S1 > S2
msgbox S1 < S2

eseguendo questo programma, otteniamo: Falso, Falso, Vero.
Quindi le due stringhe non sono uguali, perché S1 è
minore di S2.
Ma non sempre è stato così. Nelle prime versioni di
Basic, il confronto non teneva conto della differenza tra
lettere maiuscole e quelle minuscole. Perciò le due
stringhe sarebbero risultate uguali.
In effetti, spesso, quando manipoliamo delle banche dati,
non ci interessa sapere se le lettere sono scritte in
maiuscolo o in minuscolo.
Però ci possono anche essere situazioni in cui questa
differenza ci interessa.
Perciò anche nel Basic è stata introdotta la distinzione
tra confronto di tipo testuale e confronto di tipo binario.
Il confronto testuale è quello che suppone che le lettere
minuscole e maiuscole abbiano la stessa valenza.
Il confronto binario è quello che fa distinzione tra
lettere minuscole e lettere maiuscole: le minuscole
precedono le maiuscole.
Come facciamo a dire al nostro programma se vogliamo fare un
confronto testuale o binario?
In altre versioni di Basic, c'è una facile scappatoia.
Si scrive, all'inizio del programma, l'istruzione:
Option Compare Text
che significa: guarda che in questo programma tutti i
confronti tra stringhe, se non ti dico diversamente, devono
essere considerati testuali. E quindi: senza distinzione tra
maiuscole e minuscole.
Oppure l'istruzione:
Option Compare Binary
che significa: guarda che in questo programma tutti i
confronti tra stringhe, se non ti dico diversamente, devono
essere considerati binari. E quindi: con la distinzione tra
maiuscole e minuscole.
Il nostro VBScript, però, non accetta queste istruzioni.
Per VBScript, se non gli diciamo diversamente, tutti i
confronti tra stringhe sono binari.
E allora, come dobbiamo fare se vogliamo un confronto
testuale?
Dobbiamo usare, anziché gli operatori che già
conosciamo, una apposita funzione che si chiama: StrComp.
Chiaro il nome? StrComp, che significa comparazione di
stringhe.
Impariamo ad usarla, così, con l'occasione, cominciamo
anche a renderci conto che certe funzioni possono richiedere
l'uso di più parametri, e non di uno solo come abbiamo
fatto finora.
Cosa intendiamo per parametri di una funzione?
Ricordate tutte le volte che abbiamo usato Msgbox?
La chiamata a MsgBox è seguita da una stringa: quello è
il parametro che noi passiamo alla funzione. Poi
provvederà la funzione, nel suo interno, ad elaborarlo.
I parametri sono spesso indicati anche col nome di:
argomenti.
Nel caso di MsgBox è sufficiente un parametro, anche se in
realtà quella funzione accetta anche altri parametri
facoltativi.
Invece alla funzione StrComp non può bastare un solo
parametro.
Come mai?
Ma è ovvio, no? Se ci serve per confrontare due stringhe,
gliele dovremo passare tutte e due.
I diversi parametri devono essere separati per mezzo di
virgole.
Adesso proviamo a scrivere così:

S1 = "Guido"
S2 = "guido"
msgbox StrComp(S1, S2)

Nella prima riga, "Guido" è con la G maiuscola, mentra
nella seconda "guido" è con la g minuscola.
Attenzione alla sintassi dell'ultima riga: StrComp è una
funzione, quindi vuole gli argomenti racchiusi tra
parentesi. Però gli argomenti sono due.
Quindi: StrComp, aperta parentesi, primo argomento, virgola,
secondo argomento, chiusa parentesi.
Che succede se salviamo ed eseguiamo il programma? cosa ci
appare nella finestra aperta da msgbox?
meno uno?
come, meno uno? che vuol dire?
uhm, mi sa che qui dobbiamo ragionarci un attimo sopra.
Proviamo a invertire le stringhe: mettiamo quella con la G
maiuscola per seconda, e quella con la g minuscola per
prima.

S1 = "guido"
S2 = "Guido"
msgbox StrComp(S1, S2)

Proviamo ad eseguirlo.
Uno?
Ma come, prima era meno uno, adesso è uno?
Allora facciamo un'altra prova. Adesso con due stringhe
uguali, ad esempio tutte e due con la G maiuscola.

S1 = "Guido"
S2 = "Guido"
msgbox StrComp(S1, S2)

Proviamo ad eseguirlo.
Zero?
Oh, poveretti noi, chi ci capisce più niente qua, questa
StrComp dà i numeri.
Ma non perdiamoci d'animo, forse se ci ripensiamo un attimo
non è così difficile.
Innanzi tutto sembra che StrComp funzioni al contrario di
come avevamo imparato.
Infatti noi sapevamo che se confrontiamo due stringhe col
segno di uguale, e quelle sono uguali, otteniamo True,
mentre False, cioè zero, lo otteniamo quando le stringhe
sono diverse.
Invece pare proprio che StrComp lo zero ce lo dia quando le
due stringhe sono uguali. Tutto il contrario.
Ma in realtà sembra che i valori che ci può restituire
StrComp siano 3, e non semplicemente True o False.
Ma sì, ripensandoci è chiaro: StrComp restituisce meno 1
se la prima stringa è minore della seconda, 0 se le due
stringhe sono uguali, 1 se la prima stringa è maggiore
della seconda.
Eh, già, perché in questo modo può sostituirsi agli
operatori di confronto che già conoscevamo: =, >, <,
>=, <=, <>.
Infatti:
S1 = S2 equivale a: StrComp(S1,S2) = 0
S1 > S2 equivale a: StrComp(S1,S2) = 1
S1 < S2 equivale a: StrComp(S1,S2) = -1
S1 >= S2 equivale a: StrComp(S1,S2) >= 0
S1 <= S2 equivale a: StrComp(S1,S2) <= 0
S1 <> S2 equivale a: StrComp(S1,S2) <> 0
e così, usando StrComp, possiamo fare le stesse cose che
facevamo con gli operatori di confronto.
Va bene, ma allora, direte voi, che cosa cambia? Perché
dovremmo usare StrComp, cosa ci dà in più?
L'importanza di StrComp sta in un terzo parametro, di cui
non abbiamo parlato.
Parametro facoltativo, infatti finora non l'abbiamo usato,
ma StrComp ha funzionato lo stesso.
Eppure è proprio quel terzo parametro che fa la
differenza.
Si tratta di un parametro numerico che serve a dire a
StrComp se vogliamo che ci faccia un confronto binario,
oppure testuale.
Se il terzo parametro è omesso, il confronto è binario.
Se il terzo parametro vale 0, il confronto è binario.
Se il terzo parametro vale 1, il confronto è testuale.
Adesso proviamo a scrivere il seguente programma:

S1 = "Guido"
S2 = "guido"
msgbox StrComp(S1, S2, 1)

Si badi che nella prima riga ho scritto "Guido" con la G
maiuscola, e nella seconda "guido" con la g minuscola. Le
due stringhe, quindi, sono diverse in un confronto binario,
uguali in un confronto testuale.
Nella terza riga, ho scritto: StrComp, aperta parentesi, S1,
virgola, S2, virgola, 1, chiusa parentesi.
A StrComp, cioè, ho passato un terzo parametro che vale 1.
Con questo ho detto a StrComp: fammi un confronto testuale,
non binario.
Se quindi eseguiamo il programma, otterremo: 0. Cioè: le
due stringhe, in base ad un confronto testuale, risultano
uguali.
Forse sei arrivato fin qui con le idee confuse, ma non ha
importanza, ci serviva parlare di queste cose per chiudere
l'argomento dei confronti.
Se vuoi, prova ad inventarti qualche esercizio sul confronto
tra stringhe, ma per adesso non è importante saperlo fare
a menadito. Quello che ci serve è aver recepito il
concetto di confronto.
Nella prossima lezione, finalmente cominceremo a parlare di
istruzioni condizionali. Cioè, applicheremo i confronti
per decidere quali parti di programma eseguire e quali no.
Insomma, si comincerà ad entrare nel vivo della
programmazione.

***
Ambro.

innanzitutto ringrazio Guido per il bel lavoro che sta facendo, organizzando un corso molto bello riguardante questi argomenti. Qualche anno fa avevo studiato un po' il c, che è molto più complesso oltreché dà meno soddisfazioni: qui c'è il bello di poter creare programmi con finestre windows. Utilizzo winguido da un po' di anni con soddisfazione. Ho saputo in ritardo del corso ma sto recuperando.(omissis)

Vi copio qui un piccolo programmino che ho ideato. Il programma esegue vari calcoli tra i numeri.

Numero = CSng(InputBox("Inserisci un numero:"))
Numero1 = Csng(InputBox("Inserisci un altro numero:"))
addizione= Numero + Numero1
Sottrazione = Numero - Numero1
Moltiplicazione = Numero * Numero1
Divisione = Numero / Numero1
Msgbox "La somma tra " & numero & "e" & numero1 & "è: " & Addizione & vbCr
Msgbox "La sottrazione tra" & numero & "e" & numero1 & "è: " & Sottrazione & Vbcr
Msgbox "La divisione tra" & numero & "e" & numero1 & "è: " & Divisione & Vbcr
Msgbox "La moltiplicazione tra" & numero & "e" & numero1 & "è: " & Moltiplicazione

Guido Ruggeri.

Per quanto riguarda il linguaggio C, posso dirti che, fino a
una quindicina di anni fa, era praticamente l'unico
linguaggio che permettesse di sviluppare applicazioni per
Microsoft Windows, per cui era importante conoscerlo.
Ma adesso anche tutti gli altri linguaggi si sono evoluti
verso la programmazione ad oggetti, per cui anche con un
semplice linguaggio di scripting come quello che stiamo
esaminando, cioè VBScript, si riesce a fare molto.
Per cui la conoscenza di C non è più necessaria, si
può arrivare a buoni risultati anche senza.
Per quando riguarda l'esercizio che hai svolto, certamente
è ben fatto e dimostri di saperti destreggiare
nell'argomento.
Mi vengono due osservazioni da fare.
La prima è che dovresti, quando contateni le stringhe e i
numeri, fare attenzione agli spazi.
Presta attenzione a come hai scritto:
"La somma tra " & numero & "e" & numero1 & "è: "
Va bene lasciare uno spazio dopo la parola "tra", che serve
a separarla da numero. Però non c'è nessuno spazio tra
numero e la congiunzione "e" che lo segue, per cui risultano
attaccati.
Stesso discorso più avanti, non c'è nessuno spazio tra
la congiunzione "e" e numero1, e nemmeno tra numero1 e il
verbo "è". Quindi viene tutto attaccato.
Mentre è giusto che ci sia uno spazio dopo i due punti che
seguono il verbo "è".
Insomma, il modo corretto di concatenare le stringhe e i
numeri è questo:
"La somma tra " & numero & " e " & numero1 & " è: "
La seconda osservazione è sull'uso della costante vbCr.
Tu hai fatto quattro chiamate distinte a MsgBox, una per
ogni risultato. Perciò ottieni l'apertura di quattro
finestre distinte, ognuna con un risultato.
L'utente deve quindi chiudere ogni finestra per poter
passare alla successiva.
In questa logica, l'uso delle costanti vbCr alla fine dei
primi tre messaggi non serve. I messaggi, infatti, sono
ognuno a sé stante, non si devono concatenare tra di loro.
Invece le costanti vbCr ti sarebbero servite se tu avessi
voluto ottenere un unico messaggio in cui presentare tutti e
quattro i risultati.
In questo caso, avresti dovuto fare un'unica chiamata a
msgbox, passando come argomento un'unica stringa.
Le costanti vbCr sarebbero quindi servite a realizzare,
nell'unica finestra, l'effetto visivo del ritorno a capo
dopo ogni risultato.
Quindi le ultime quattro righe del tuo programma avrebbero
dovuto essere sostituite da quest'unica riga:

Msgbox "La somma tra " & numero & " e " & numero1 & " è: "
& Addizione & vbCr & "La sottrazione tra " & numero & " e "
& numero1 & " è: " & Sottrazione & vbCr & "La divisione
tra " & numero & " e " & numero1 & " è: " & Divisione &
vbCr & "La moltiplicazione tra " & numero & " e " & numero1
& " è: " & Moltiplicazione

Ambro.

Ringrazio Guido per le correzioni al programma e copio il programma corretto.
Grazie,
Ambro

Numero = CSng(InputBox("Inserisci un numero:"))
Numero1 = Csng(InputBox("Inserisci un altro numero:"))
addizione= Numero + Numero1
Sottrazione = Numero - Numero1
Moltiplicazione = Numero * Numero1
Divisione = Numero / Numero1
Msgbox "La somma tra " & numero & " e " & numero1 & " è: " & Addizione & vbCr & "La sottrazione tra " & numero & " e " & numero1 & " è: " & Sottrazione & Vbcr & "La divisione tra " & numero & " e " & numero1 & " è: " & Divisione & Vbcr & "La moltiplicazione tra " & numero & " e " & numero1 & " è: " & Moltiplicazione
***
Aniceto Fois
(programma per il calcolo dell'ici)

Qualche tempo fa mi era stato chiesto di calcolare l'I.C.I. di un immobile; ripensandoci, ho costruito, con le conoscenze che possiedo, il programmino che allego.Lo sottopongo alla Vostra benevolenza per eventuali imprecisioni ed errori; l'unico accorgimento è quello di esprimere l'aliquota prevista dal comune senza i millesimi (7/1000) scrivendo solo 7.renditacatastale = csng(inputbox("valore della rendita catastale"))

aggiornante = 5 / 100
const parametro = 100
rendita = renditacatastale * parametro
renditaaggiornante = rendita * aggiornante
renditafiscale = renditaaggiornante + rendita
msgbox "rendita fiscale= " & renditafiscale & VBCR
renditafiscale = csng(inputbox("importo della rendita fiscale"))
aliquota = csng(inputbox("aliquota prevista dal comune per l'immobile espressa togliendo i millesimi"))
ici = renditafiscale * aliquota / 1000
msgbox "cuota da versare= " & ici

Guido Ruggeri.

Bene, Aniceto, questo significa ragionare e entrare nel
meccanismo della programmazione.
Chissà che, andando avanti, non ci riesca da arrivare ad
un programma che possa prendere i dati sulle aliquote
comunali direttamente da qualche tabella che le riporti
tutte, così che l'utente non abbia che da scegliere il
comune.
Per adesso, un'osservazione simile a quella che avevo fatto
ad Ambro.
Nella riga:
msgbox "rendita fiscale= " & renditafiscale & VBCR
è superfluo concludere la stringa con un ritorno a capo,
cioè con vbCr. Quello avrebbe senso se, dopo vbCr, ci si
volesse concatenare qualcos'altro, in modo da farlo apparire
su righe diverse.
d.
***
nella lezione 19, parlando di StrComp,
per avere un confronto testuale, a scritto: Nella terza
riga, ho scritto: StrComp, aperta parentesi, S1, virgola,
S2, virgola, 1, chiusa parentesi. Se al posto di 1 ci
scrivo 0 o -1, cosa succederebbe? Si può fare?
Risposta:
Se ci metti -1, come qualsiasi altro valore diverso da 0 e
da 1, non lo accetta. Ottieni un errore per chiamata di
routine o argomento non validi.
Se invece ci metti 0, funziona facendo un confronto binario.
Cioè: nel confronto ha rilevanza che le lettere siano
maiuscole o minuscole.
Adesso ne approfitto per insegnarne un'altra.
Abbiamo detto che StrComp, come terzo argomento, vuole 0
oppure 1.
Questi due valori li possiamo indicare anche per mezzo delle
loro corrispondenti costanti mnemoniche, che sono:
vbTextCompare
e
vbBinaryCompare.
vbTextCompare vale 1, e vbBinaryCompare vale 0.
Quindi, dopo aver definito due stringhe S1 e S2, il loro
confronto lo possiamo fare scrivendo così:
Confronto = StrComp(S1, S2, vbTextCompare)
se vogliamo il confronto testuale,
oppure così, se lo vogliamo binario:
Confronto = StrComp(S1, S2, vbBinaryCompare)
Le costanti mnemoniche sono comode perché spesso è più
facile ricordare i loro nomi, anziché i valori a cui
corrispondono.
Ma non è tanto questa la loro utilità, perché, messa
così, potrebbe sembrare più facile ricordare 1 e 0,
anziché due paroloni come vbTextCompare e vbBinaryCompare.
In realtà la loro vera importanza si manifesta quando, per
scrivere i sorgenti dei programmi, si lavora dentro ambienti
di sviluppo appositamente attrezzati.
Noi ci stiamo arrangiando a scrivere i sorgenti in VBScript
con quello che possiamo usare, cioè il blocco note,
WordPad, o Microsoft Word.
Se però stessimo lavorando con un apposito ambiente di
sviluppo, come ad esempio Visual InterDev, scopriremmo che
questi ambienti sono fatti in modo da aiutare il
programmatore suggerendogli, di volta in volta, quello che
può scrivere.
Ad esempio, se fossimo in Visual InterDev, scriveremmo
StrComp(S1, S2, e, dopo aver scritto la seconda virgola
senza aver ancora chiuso la parentesi, ci vedremmo apparire
un menù che ci propone la scelta tra i vari argomenti
possibili in quella terza posizione, cioè: vbTextCompare e
vbBinaryCompare.
Vedendole in un menù, è più facile ricordare che cosa
vogliano dire e quindi scegliere quello che ci serve.
Non so se arriveremo a lavorare insieme con Visual InterDev,
anche perché non ho mai provato il suo funzionamento con
Jaws e non saprei dirvi se sarebbe abbastanza agevole.
Comunque, se mai ci arrivermo, è un traguardo ancora
lontano.

Aniceto àFois: un altro esercizio.

Seguendo le lezioni 17 e 18, ho pensato a qualcosa, un semplice giochetto, che avrei sempre voluto farenel mio lavoro per cercare di coinvolgere alunni socialmente svantaggiati e quindi a rischio abbandono scolastico. Grazie all'ingegnere ora ci son riuscito: un po' troppo tardi, ma....
Certo, proseguendo, si potrà fare di meglio... Comunque ve lo sottopongo per eventuali correzioni o precisazioni.
Vi ringrazia e Vi saluta
Aniceto

s1 = inputbox("l'eroe dei due Mondi")
s2 ="Garibaldi"
msgbox strcomp(s1, s2, 1)
s3 = inputbox("anno della fine della seconda guerra mondiale")
s4 = "1945"
msgbox s3=s4

è poca cosa, le domande sono semplici e nozionistiche, dirà qualcuno, ma catturare l'attenzione e l'interesse degli adolescenti è la cosa fondamentale.
L'esercizio può essere continuato inserendo nello stesso schema altre stringhe.
Guido Ruggeri.

Questo lo perfezioneremo presto. Con i prossimi argomenti di cui parlermo, arriveremo a farlo diventare una vera bomba.
Tienitelo dunque ben da parte.
Per ora, un suggerimento.
Sappiamo che StrComp non restitisce True o False, ma può dare tre possibili risultati: meno 1, 0, 1.
Perciò, nella msgbox chiamata dalla terza riga, sono quelli che appaiono all'utente, sotto forma di numeri.
L'utente del programma potrebbe non capirli.
Anzi, se scrive correttamente "Garibaldi", l'utente rimane disorientato, perché si sente rispondere: 0.
Noi sappiamo che 0, in uscita da StrComp, vuol dire che le due stringhe sono uguali, ma l'utente non lo sa. Quello pensa: ma come, ho risposto giusto e mi ha dato zero?
Se vuoi che nella terza riga ti appaiano le parole Vero o Falso, conviene fare un doppio confronto.
Così:

Msgbox StrComp(s1, s2, 1) = 0

in questo modo, in MsgBox non arriva direttamente il risultato di StrComp, ma il suo confronto con lo 0.
Vale a dire: True se le stringhe sono uguali, False se sono diverse.

d.

Mi scusi prof, ma true o false si ottengono anche se nella terza riga si
scrive:
Msgbox S1 = S2
L'unica differenza è che Garibaldi deve essere scritto in inputbox con la g
maiuscola, altrimenti da falso, ma trattandosi di cognome di persona non ci
dovrebbero essere errori; o no?

r.

Se il confronto tra le stringhe S1 e S2 lo facciamo con l'operatore uguale, vuol dire che ci aspettiamo che l'utente debba scrivere la sua risposta correttamente, cioè minuscola con l'iniziale maiuscola, altrimenti risulterebbe errata, anche se le lettere fossero quelle della parola Garibaldi.
Se invece vogliamo fare un programma più elastico, che accetti la risposta a prescindere da come è scritta, cioè indipendentemente che sia tutta minuscola, tutta maiuscola, o con la sola iniziale maiuscola, allora il confronto lo dobbiamo fare testuale, cioè con StrComp(S1, S2, 1) = 0.
Tutto quindi dipende da quello che ci riproponiamo di fare.

Vincenzo Gramuglia: confronto tra nome e cognome.

ho provato a eseguire questo programmino inserendo il nome e il cognome se volete provare cosa da alla fine eccolo.
nome =
cognome =
msgbox strcomp (nome, cognome). nelle prime 2 righe dovete inserire il vostro nome e cognome. provate e fate sapere.

***
d.

vi incollo l'esercizio che ha proposto salvatore senza inputbox perchè non dà il valore 0 o
1 ma ti dà solo la stringa l'eroe dei 2 mondi. eccolo provate.
s1 = "leroe dei due mondi"
s2 = "Garibaldi"
s3 = "anno della fine della seconda guerra mondiale"
s4 = "1945"
msgbox strcomp (s1, s2)
msgbox strcomp (s2, s3)
Se provate a premere invio su ok vi dà il valore anche di s2 e s3.

r.
Guido Ruggeri.

Non ho capito il senso.
Hai scritto 4 stringhe palesemente diverse tra di loro, e poi hai fatto il confronto della prima con la seconda, poi della seconda con la terza, mentre della quarta non te ne fai niente.
Qual è il significato?

Vincenzo Gramuglia.

forse la fretta e mi sono dimenticato s4. ho eseguito dal'interno di winguido e premendo ok la seconda volta il programma si bloccava mentre da fuori eseguendo il file andava bene.
ecco la modifica:
s1 = "leroe dei due mondi"
s2 = "Garibaldi"
s3 = "anno della fine della seconda guerra mondiale"
s4 = "1945"
msgbox strcomp (s1, s2)
msgbox strcomp (s2, s3)
msgbox strcomp (s3, s4)

Guido Ruggeri.

D'accordo, ma rimane poco chiaro il senso dell'esercizio. Si tratta di 4 stringhe fisse, che già sappiamo essere diverse tra di loro, e non fai altro che confrontarle. Chi esegue il programma vede solo una sequenza di tre numeri, i risultati dei tre confronti, che per lui non hanno senso.

Guido Ruggeri.

Messaggio originale:
Quando si lancia il programmino, nel primo modo se scrivo 1945, mi dà vero; nel secfondo modo, invece, anche se scrivo 1945, mi dà falso. Questo, penso ma non lo sò, dovrebbe succedere perché: nel primo ho usato il VbTextCompare; e nel secondo, perché ho usato il VbBinaryCompare. Questo me lo può spiegare solo lei.
Risposta:
Nota bene che nel secondo modo hai scritto così:
s3 = inputbox("anno della fine della seconda guerra mondiale")
s4 = 1945
MsgBox S3=S4
la differenza è che quando hai scritto 1945 ti sei dimenticato di metterlo tra virgolette.
Quindi, S4 non contiene una stringa, ma un numero.
Il che potrebbe anche andare bene. Si tratta di un anno, quindi rappresentarlo con un numero non è sbagliato.
Però s3 contiene una stringa, perché proviene da una chiamata a InputBox.
Quindi quando esegui S3=S4 fai il confronto tra una stringa e un numero. Che, per l'interprete, sono due cose diverse, e pertanto il confronto risulta falso.
Hai una prima soluzione possibile: quando fai l'assegnazione a S4, metti 1945 tra virgolette, così diventa una stringa.
E così poi il confronto diventa tra due stringhe.
Oppure, hai una seconda soluzione: nell'assegnazione a s3 inserisci una funzione di conversione a numero intero, cioè CInt, così diventa un numero.
Così poi il confronto diventa tra due numeri.
s3 = CInt(InputBox("anno della fine della seconda guerra mondiale"))

Vincenzo Gramuglia: esercizio uso di inputbox e altro.

vi incollo uno degli esercizi che mi sono riusciti. non ho inserito niente di nuovo ma cè già quanto habbiamo fatto nei precedenti esercizi. potete apportare anche modifiche.
n1 = inputbox(n1)
n2 =inputbox(n2)
msgbox "numero" & n1 & " " & n2
n1 = (n1)
n2 = (n2)
msgbox strcomp (n1, n2)
n1 = (n1)
n2 = (n2)
msgbox "somma = " & n1 + n2
msgbox "differenza = " & n1 - n2
msgbox "moltiplicazione = " & n1 * n2
msgbox "rapporto = " & n1 / n2

Guido Ruggeri.
No, non va.
Questo esercizio è pieno zeppo di errori e di istruzioni senza senso.
E' da rifare.

Giovanni Taverna.

h. 22.53:
Caro Vincenzo, come fai a dire che l'esercizio è funzionante? Se usi i
numeri 3 e 4, ottieni cin riga 3 la sola giustapposizione dei numeri e va
bè, inutile, ma corretta; ma quando poi passi alle operazioni, la somma di 3
e 4, con la tua stringa da 34 che non mi pare sia corretto; ti sei
dimenticato che se non dai istruzioni specifiche n1 e n2 sono costituite da
stringhe di testo e quindi il segno più equivale solo a & e non alla somma.;
le altre operazioni funzionano esattamente perchè vbs capisce da solo che le
stringhe devono essere numeriche perchè sarebbe strano moltiplicare due
stringhe di testo o dividerle....