Aiutino per Algoritmo

domenica 14 ottobre 2012 - 11.18
Tag Elenco Tags  C#  |  VB.NET  |  Visual Studio 2010  |  Visual Studio 2008  |  Visual Studio 2005  |  Visual Studio 2003  |  Visual Studio 2002  |  Visual Studio Express  |  Javascript  |  VBScript

Antonio2277 Profilo | Newbie

Ho una sequenza di N valori vero-falso nella Matrice_A:
1|0|1|1|0|0|0|0|0|1|0|1|1|0|0|1|...
quello che voglio ottenere è la Matrice_B siffatta:
+1|-1|+2|-5|+1|-1|+2|-2|+1|...
cioè contare e cambiare segno e incrementare l'indice della matrice_b...

Aggiungo per essere piu chiaro:

Matrice_A
1|0|1|1|0|0|0|0|0|1|0|1|1|0|0|1|...
prendo il primo numero
Matrice_A(0) =|1| -> Matrice_B(0)= 1

Matrice_A(1) =|0| -> Matrice_B(1)= -1

Matrice_A(2) =|1| -> Matrice_B(2)= 2 (perchè ci stanno 2 valori consecutivi veri -> segno + )
Matrice_A(3) =|1|

Matrice_A(4) =|0| -> Matrice_B(3)= -5 (perchè ci stanno 5 valori consecutivi falsi -> segno - )
Matrice_A(5) =|0|
Matrice_A(6) =|0|
Matrice_A(7) =|0|
Matrice_A(8) =|0|

.....

e cosi via... quindi:
Matrice_B
+1|-1|+2|-5|+1|-1|+2|-2|+1|...

Grazie a tutti.

luigidibiasi Profilo | Guru

> Ho una sequenza di N valori vero-falso nella Matrice_A:
>1|0|1|1|0|0|0|0|0|1|0|1|1|0|0|1|...
>quello che voglio ottenere è la Matrice_B siffatta:
>+1|-1|+2|-5|+1|-1|+2|-2|+1|...
>cioè contare e cambiare segno e incrementare l'indice della matrice_b...
>
>Grazie a tutti.

non capisco bene cosa vuoi dire con contare (cosa) cambiare segno (quando c'è zero) e incrementare (quando)

Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/
http://yadamp.unisa.it/ - YADAMP CMS -

Antonio2277 Profilo | Newbie

(Ho modificato il messaggio originale spero sia piu chiaro)

luigidibiasi Profilo | Guru

si... non ho come testarlo ma scrivo come mi viene in mente...
è in vb.net ma spero renda l'idea (e non contenga erroracci)

Dim mat1 As Array = Array.CreateInstance(GetType(Integer), 16)

mat1(0) = 1
mat1(1) = 0
mat1(2) = 1
mat1(3) = 1
mat1(4) = 0
mat1(5) = 0
mat1(6) = 0
mat1(7) = 0
mat1(8) = 0
mat1(9) = 1
mat1(10) = 0
mat1(11) = 1
mat1(12) = 1
mat1(13) = 0
mat1(14) = 0
mat1(15) = 1

Dim mat2 As Array = Array.CreateInstance(GetType(Integer), mat1.Length)


Dim index_to_write As Integer = 0
Dim value_to_write As Integer = 0
Dim last_read As Integer = mat1(0)


For i As Integer = 0 To mat1.Length - 1

If last_read <> mat1(i) Then
'# write
mat2(index_to_write) = value_to_write
index_to_write += 1
value_to_write = 0
End If

If mat1(i) = 1 Then
value_to_write += 1
ElseIf mat1(i) = 0 Then
value_to_write -= 1
End If

last_read = mat1(i)

Next i
mat2(index_to_write) = value_to_write



Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/
http://yadamp.unisa.it/ - YADAMP CMS -

Antonio2277 Profilo | Newbie

perfetto con qualche piccola modifica
(in quanto i dati erano di tipo boolean per la matriceA tra l altro)
sembra funzionare egregiamente!
thanks!
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5