Due cicli for in parallelo

mercoledì 19 aprile 2006 - 16.50

b3rt0l4 Profilo | Newbie

Salve a tutti voi del forum, avrei una domanda da proporvi:
Coma faccio ad eseguire due cicli for allo stesso momento?
Per chiarezza (so che sembra una bestemmia ma è per chiarezza ) vi riporto il codice come dovrebbe essere:

for I = 0 to String1.length and for L = 0 to String2.length ' ' Qualche funzione... ' next and next

ripeto è una bestemmia ma...
Grazie per l'aiuto.

Ciciu Profilo | Senior Member

Ciao.
Il ciclo FOR è un ciclo DEFINITO, il che significa che ha un inizio ed una fine definiti, a differenza dei cicli WHILE e REPEAT che sono indefiniti.

Prendiamo il Tuo esempio :

>for I = 0 to String1.length and for L = 0 to String2.length
> '
> ' Qualche funzione...
> '
>next and next
>

Cosa dovrebbe succedere, secondo Te, nel momento in cui le lunghezze delle due stringhe sono diverse ?

Quello che puoi fare, è utilizzare la variabile di terazione nel ciclo, assegnandola ad un'altra...

for i =0 to String1.length
l = i
' Adesso i ed l hanno lo stesso valore
next i

In alternativa, se immmagino bene quanto vuoi realizzare, potresTi fare un ciclo che iteri da 0 alla lunghezza della stringa più lunga, gestendo le istruzioni che si riferiscono alla stringa più corta, in modo tale che queste non vengano eseguite quando la variabile di iterazione ne raggiunge la lunghezza....

Ma, forse, è meglio che Tu spieghi meglio cosa vuoi ottenere...

Ciao - Fabio
Fabio G

b3rt0l4 Profilo | Newbie

Ti ringrazio molto per la risposta.
Dunque a me serve scomporre due stringhe (ad esempio "1231313" e "12312121331") e iterare attraverso tutti i caratteri riconvertendoli
in singole cifre per moltiplicarle ( lo so detto così sembra strano ma pensa alle moltiplicazioni che facevamo alle elementari mettendo i fattori in colonna ps: sono un laureato in matematica che sta cercando di prendere la mcsd ponendosi le domande e dandosi la risposta); mi puoi aiutare?
Grazie mille ancora per l'aiuto .
Si vis pacem, para bellum

Brainkiller Profilo | Guru

>mettendo i fattori in colonna ps: sono un laureato in matematica

Ci sono ancora laureati in matematica in Italia ? E' un miracolo! Per fortuna c'è ancora qualcuno che si dedica a quello se no fra 20 anni saranno tutti avvocati economisti ecc. probabilmente servirebbero più matematici e fisici... ma al di là di questo veniamo al problema.

>che sta cercando di prendere la mcsd ponendosi le domande e dandosi
>la risposta); mi puoi aiutare?

Allora se definisci un po' meglio il problema ti possiamo venire in aiuto ossia quello che devi fare è moltplicare la prima cifra della prima stringa con la prima delal seconda ? Per questo vorresti fare due cicli paralleli ?

Il for supporta un solo ciclo, quello che hai scritto non funziona. L'unica cosa che si potrebbe fare è creare due Threads paralleli uno che elabora la prima stringa e uno che fa l'altra ma poi ci sarebbe da gestire la sincronia il chè non è facile.

La soluzione sarebbe quella di fare due cicli uno dietro l'altro ed eventualmente salvare i risultati del primo ciclo in una variabile temporanea o array.
Ma aspettiamo tuoi chiarimenti.
ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

Ciciu Profilo | Senior Member

Effettivamente, se si trattasse di effettuare la moltiplicazione tra i due numeri "come facevamo a scuola", la soluzione sarebbe un banale ciclo FOR nidificato in un altro : bisogna prendere ogni cifra del secondo fattore e moltiplicarla per ogni cifra del primo fattore.

Considerazione # 1 : i cicli for devono partire dalla lunghezza della stringa per arrivare a 0
Considerazione # 2 : bisogna comunque tenere conto di eventuali riporti
Considerazione # 3 : i risultati intermedi devono essere shifati a sx di un carattere in più del risultato precedente.

Ciao - Fabio
Fabio G

b3rt0l4 Profilo | Newbie

> Ci sono ancora laureati in matematica in Italia ? E' un
>miracolo!

hehe

Ok grazie ancora per le risposte, allora...
si effettivamente e molto più semplice lavorare con il secondo metodo da te proposto brainkiller
Si, devo moltiplicare la prima lettera della prima stringa( trasformata poi in cifra) per la prima della seconda stringa(trasformata anchessa).
Comunque questo lo risolto ribaltando gli array (con la funzione .toCharArray della stringa e poi array.reverse).
Mi potreste solamente aiutare in che modo assegnare i dati alla variabile temporanea o all'array?
Grazie mille ancora siete gentilissimi!


Ciao - Federico
Si vis pacem, para bellum

b3rt0l4 Profilo | Newbie


>>che sta cercando di prendere la mcsd ponendosi le domande e dandosi
>>la risposta); mi puoi aiutare?
>
>Allora se definisci un po' meglio il problema ti possiamo venire
>in aiuto ossia quello che devi fare è moltplicare la prima cifra
>della prima stringa con la prima delal seconda ? Per questo vorresti
>fare due cicli paralleli ?


Scusami non fraintendermi non era una critica al vostro preziosissimo aiuto (e ci mancherebbe!) ma è effettivamente il mio metodo in quanto studio da "solista".
Spero di essermi chiarito .


Ciao - Federico

Si vis pacem, para bellum

Brainkiller Profilo | Guru

>Mi potreste solamente aiutare in che modo assegnare i dati alla
>variabile temporanea o all'array?

Non capisco la difficoltà ?

Così ?

nome_Array(3)=valore variabile=valore

??
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5