Curiosità
Ragazzi...avrei una domanda da farvi...
Sapete come si fa a fare l'algoritmo di questo problema: Verificare che all'interno di una parola inserita da tastiera vi sia la lettera "a".
E' un bel pò che me lo domando ma mi è sempre rimasto il dubbio....
Sapete come si fa a fare l'algoritmo di questo problema: Verificare che all'interno di una parola inserita da tastiera vi sia la lettera "a".
E' un bel pò che me lo domando ma mi è sempre rimasto il dubbio....
Risposte
Vuoi sapere l'algoritmo in generale o in un linguaggio specifico?
In linguaggio Pascal:
Program VerificaLettera; Uses WinCrt; Var lettera:char; parola:string; i,flag:integer; begin write('Inserisci la lettera da trovare nella parola: '); readln(lettera); writeln; write('Inserisci la parola: '); readln(parola); flag:=0; for i:=1 to length(parola) do if parola[i]=lettera then flag:=1; writeln; if flag=1 then writeln('La lettera ',lettera,' è presente in ',parola) else writeln('La lettera ',lettera,' non è presente in ',parola); end.
In linguaggio C:
Poi in linguaggio C esiste una funzione, la strchr, che implementa direttamente questo algoritmo. Gli algoritmi di ricerca di stringhe aventi il compito di trovare una data sottostringa o una data configurazione di caratteri sono molto interessanti!!!
Se hai bisogno di chiarimenti chiedi pure.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 int main(void) { char lettera; char parola[MAX]; int i,flag; printf("\n Inserisci la lettera da trovare nella parola: "); scanf("%c",&lettera); printf("\n Inserisci la parola: "); scanf("%s",&parola); flag=0; for (i=0;i<strlen(parola);i++) if (parola[i]==lettera) flag=1; if (flag==1) printf("\n La lettera %c è presente in %s \n",lettera,parola); else printf("\n La lettera %c non è presente in %s \n",lettera,parola); system("pause"); return 0; }
Poi in linguaggio C esiste una funzione, la strchr, che implementa direttamente questo algoritmo. Gli algoritmi di ricerca di stringhe aventi il compito di trovare una data sottostringa o una data configurazione di caratteri sono molto interessanti!!!
Se hai bisogno di chiarimenti chiedi pure.
Mi interesserebbe in linguaggio Visual Basic...ma ovviamente vorrei spiegato come si procede!!! Grazie
Esiste una funzione in VB, InStr, che permette la ricerca di una sottostringa all'interno di una stringa.
parola1 = "MIAO MIAO"
parola2 = "IAO"
EInStr(parola1,parola2) --> 2 'trovata a partire dalla posizione 2
EInStr(parola1,"BAU") --> 0 'non trovata[/quote]
Private Function EInStr (ByVal parola1 As String, ByVal parola2 As String) As Long Dim i As Integer Dim Finito As Boolean Finito = False EInStr = 0 If Len(parola1) >= Len(parola2) Then i = 1 Do While Mid dollaro(parola1, i, Len(parola2)) <> parola2 If i > Len(parola1) - Len(parola2) + 1 Then i = 0 Finito = True Else i = i + 1 End If Loop End If EInStr = i End Sub
parola1 = "MIAO MIAO"
parola2 = "IAO"
EInStr(parola1,parola2) --> 2 'trovata a partire dalla posizione 2
EInStr(parola1,"BAU") --> 0 'non trovata[/quote]
Grazie Leonardo...forse è inutile ma a noi lo fanno studiare..perciò, sapete a sommi capi come dovrei impostare il diagramma a blocchi?
Mi sono permesso di completare e modificare il buon programma di Leonardo, che presentava però qualche errore, evidentemente di distrazione.
Ho costruito un form con un solo COMMAND BUTTON che attiva COMMAND1_CLICK.
Private Function MiaInStr(ByVal parola1 As String, ByVal parola2 As String) As Long
Dim i As Integer
Dim Finito As Boolean
Finito = False
MiaInStr = 0
i = 1
Do While Not Finito
If Mid(parola1, i, Len(parola2)) = parola2 Then
Finito = True
MiaInStr = i
End If
If i > Len(parola1) - Len(parola2) Then
Finito = True
Else: i = i + 1
End If
Loop
End Function
Sub COMMAND1_CLICK()
Dim par1 As String
Dim par2 As String
Dim messaggio As String
Dim posiz As Long
par1 = InputBox("parola 1:")
par2 = InputBox("parola 2:")
posiz = MiaInStr(par1, par2)
If posiz > 0 Then
messaggio = "la parola " + par2 + " appare in " + par1 + " in posizione " + CStr(posiz)
Else: messaggio = "la parola " + par2 + " non appare in " + par1
End If
MsgBox messaggio
End Sub
N.B.: Dopo MID c'è il simbolo del dollaro!
Per il diagramma a blocchi: non ho il programma per disegnarlo; se necessario, posso realizzarlo a mano e inserirne una immagine scannerizzata (ma spero di no ...)
Ho costruito un form con un solo COMMAND BUTTON che attiva COMMAND1_CLICK.
Private Function MiaInStr(ByVal parola1 As String, ByVal parola2 As String) As Long
Dim i As Integer
Dim Finito As Boolean
Finito = False
MiaInStr = 0
i = 1
Do While Not Finito
If Mid(parola1, i, Len(parola2)) = parola2 Then
Finito = True
MiaInStr = i
End If
If i > Len(parola1) - Len(parola2) Then
Finito = True
Else: i = i + 1
End If
Loop
End Function
Sub COMMAND1_CLICK()
Dim par1 As String
Dim par2 As String
Dim messaggio As String
Dim posiz As Long
par1 = InputBox("parola 1:")
par2 = InputBox("parola 2:")
posiz = MiaInStr(par1, par2)
If posiz > 0 Then
messaggio = "la parola " + par2 + " appare in " + par1 + " in posizione " + CStr(posiz)
Else: messaggio = "la parola " + par2 + " non appare in " + par1
End If
MsgBox messaggio
End Sub
N.B.: Dopo MID c'è il simbolo del dollaro!
Per il diagramma a blocchi: non ho il programma per disegnarlo; se necessario, posso realizzarlo a mano e inserirne una immagine scannerizzata (ma spero di no ...)

Non capisco che errori hai trovato nel mio programma. Non metto in dubbio che li hai trovati, ma quali sono?
Ragazzi...fatemi capire anche a me...ci sono delle funzioni che non ho mai utilizzato..Ricordatevi che ho iniziato da poco a studire VB
Quali funzioni in particolare non riconosci? Ad esempio Len(stringa) restituisce il numero di caratteri della variabile "stringa".
EInStr (ByVal parola1 As String, ByVal parola2 As String)
Ps...se ti riesce cerca di spiegarmelo passo per passo tutto ok??...
Grazie 1000
Ps...se ti riesce cerca di spiegarmelo passo per passo tutto ok??...
Grazie 1000

In Visual Basic esiste una funzione già definita, InStr(), che permette di cercare una stringa all’interno di un’altra. La sintassi di questa funzione è: Instr([iniziale, ]stringa1, stringa2[, confronto]). "iniziale" è il numero che indica la posizione, l'indice da dove far partire la ricerca. Se si omette l’argomento, la ricerca inizia dal primo carattere. "stringa1" è la sottostringa da ricercare. "confronto" è il tipo di confronto da effettuare (se vuoi altre informazioni su questo argomento chiedi pure). Io ho voluto emulare questa funzione, definendone un'altra, EInStr, che fa esplicita esattamente le stesse funzionalità della procedura standard InStr. Poi la parola chiave ByVal serve ad indicare che un argomento viene passato in modo tale che la routine o la proprietà chiamata non sia in grado di modificare il valore della variabile sottostante nel codice chiamante. Quindi se si passa una variabile di argomento tramite valore, utilizzando la parola chiave ByVal, la routine non può modificare la variabile.
Ok...magari provo a farlo in Vb e vediamo che me ne esce fuori..in tal caso mi rifaccio viva!!
Gli errori:
1. appaiono EInstr e MiaInstr, che immagino siano due nomi diversi per la stessa funzione;
2. la variabile booleana Finito viene valorizzata ma mai testata (dovrebbe comandare l'uscita dal ciclo)
3. se parola2 non appare in parola1 mi risulta che il programma vada in errore
Una curiosità: è sparita l'indentazione dal mio programma; come fare per mantenerla anche nel post?
Ciao e grazie.
1. appaiono EInstr e MiaInstr, che immagino siano due nomi diversi per la stessa funzione;
2. la variabile booleana Finito viene valorizzata ma mai testata (dovrebbe comandare l'uscita dal ciclo)
3. se parola2 non appare in parola1 mi risulta che il programma vada in errore
Una curiosità: è sparita l'indentazione dal mio programma; come fare per mantenerla anche nel post?
Ciao e grazie.
Gli errori che hai segnalato non esistono. Controlla di nuovo il mio codice.
N.B.: Per mantenere l'indentazione o qualsiasi forma di formattazione basta premere il bottone "Code" nel menù "Struttura Messaggio", poi inserire il testo e poi ripremere "Code".
N.B.: Per mantenere l'indentazione o qualsiasi forma di formattazione basta premere il bottone "Code" nel menù "Struttura Messaggio", poi inserire il testo e poi ripremere "Code".
Confermo i tre punti.
Forse parliamo di due codifiche diverse?
Forse parliamo di due codifiche diverse?
Temo di si!
Private Function EInStr (ByVal parola1 As String, ByVal parola2 As String) As Long
Dim i As Integer
Dim Finito As Boolean
Finito = False
EInStr = 0
If Len(parola1) >= Len(parola2) Then
i = 1
Do While Mid dollaro(parola1, i, Len(parola2)) <> parola2
If i > Len(parola1) - Len(parola2) + 1 Then
i = 0
Finito = True
Else
i = i + 1
End If
Loop
End If
MiaInStr = i
End Sub
Questo è ciò che vedo io; ho evidenziato i tre errori
Dim i As Integer
Dim Finito As Boolean
Finito = False
EInStr = 0
If Len(parola1) >= Len(parola2) Then
i = 1
Do While Mid dollaro(parola1, i, Len(parola2)) <> parola2
If i > Len(parola1) - Len(parola2) + 1 Then
i = 0
Finito = True
Else
i = i + 1
End If
Loop
End If
MiaInStr = i
End Sub
Questo è ciò che vedo io; ho evidenziato i tre errori
Non capisco come sia scomparsa la condizione su Finito nel ciclo Do While. Poi EInStr e MiaStr sono lo stesso (un errore, vero!).


