Vettori

stellacometa
E' già un paio di giorni che cerco totalmente invano di risolvere e appagare una mia curiosità su un problema (forse anche banale).

Carico un vettore di 16 elementi, dopo le somme degli elementi del primo vettore presi a 2 a 2 devono dare gli elementi di un secondo vettore..

esempio:
vett1= 1,2,3,4
vett2= 3,7

Come procedo??!!! :(

Risposte
lorven
Prova così: usa un ciclo enumerativo sul primo vettore, con un indice I che vari da 1 a 15, nel quale si sommino 2 componenti consecutive (cioè di indici I e I+1); la somma va assegnata alla componente di indice J di un secondo vettore, avente dimensione 8: dopo ogni assegnazione, ricordati di incrementare J di 1 e I di 2. (naturalmente I e J inizializzati a 1 prima del ciclo).

Nidhogg
Lo farei più generale. Salvo errori ecco il codice Pascal!

j:=1;

if n mod 2=0 then n:=n/2+1
else n:=n/2;

for i:=1 to n do
begin
v2:=v1[j]+v1[j+1];
j:=i+2;
end;

n è la dimensione logica del vettore.
Con / intendo solo la parte intera della divisione.

lorven
j:=1;

if n mod 2=0 then n:=n/2+1
else n:=n/2;

for i:=1 to n do
begin
v2:=v1[j]+v1[j+1];
j:=i+2;
end;


Scusa Leonardo, correggo qualche svista:

-n è intero e va usato div invece di /
-non se n è pari, ma se n è dispari, incrementare di 1 n/2 (anche se così l'ultima coppia da sommare non esiste!)
- j:=j+2 al posto di j:=i+2

pertanto:

j:=1;

if n mod 2<>0 then n:=n div 2 +1
else n:=n div 2;

for i:=1 to n do
begin
v2:=v1[j]+v1[j+1];
j:=j+2;
end;

:D

stellacometa
Mi spiegate perchè controllate se la dimensione sia pari o dispari?

lorven
A mio avviso, non serve. Bisognerebbe assicurarsi però di introdurre per n un valore pari. ad esempio così:

repeat
readln(n);
until (n div 2) = 0;

ciao

stellacometa
E perchè deve essere pari?

lorven
Se devi sommare coppie consecutive di elementi del vettore ...

stellacometa
If dimensione Mod 2 <> 0 Then
dimensione = dimensione / 2 + 1
Else
dimensione = dimensione / 2
End If
For j = 0 To n
vett2(j) = vettore(i) + vettore(i + 1)
i = i + 2
Next j

Questo è in Vb..mi da errore (sub o function non definita in "vett2") dov'è che sbaglio?

lorven
Probabilmente c'è un errato dimensionamento del vettore e l'indice assume un valore errato. Posta l'intero programma.

stellacometa
Private Sub Form_Load()

dimensione = InputBox("inserisci dimensione", "chiedi dimensione")
ReDim vettore(1 To dimensione)
For i = 1 To dimensione
vettore(i) = InputBox("inserisci il " & (i) & " elemento", "inserisci")
Next i
For i = 1 To dimensione - 1
For j = i + 1 To dimensione
If vettore(i) > vettore(j) Then
c = vettore(i)
vettore(i) = vettore(j)
vettore(j) = c
End If
Next j
Text1.Text = vettore(i)
Next i
Text1.Text = Text1.Text + " " + vettore(i)
If dimensione Mod 2 <> 0 Then
dimensione = dimensione / 2 + 1
Else
dimensione = dimensione / 2
End If
For j = 0 To dimensione
vett2(j) = vettore(i) + vettore(i + 1)
i = i + 2
Next j
Text2.Text = "" + vett2
End Sub

stellacometa
In pratica il mio problema prima carica un vettore poi ordina tali elementi e infine dovrebbe fare il precedente quesito che vi ho posto!

lorven
Usi "dimensione" e n come dimensione del vettore: o uno o l'altro!

stellacometa
ah ok...piccola svista.. Però non viene lo stesso!

lorven
Il ciclo finale che fa le somme non deve partire da 0, ma da 1.

stellacometa
Non mi cambia nulla..fare partire un vettore da 0 o 1 è indifferente!!! Secondo te il procedimento è giusto? Perchè non capisco il motivo per cui mi segnala errore!!

lorven
inoltre, l'indice i, prima dello stesso ciclo, va resettato a 1.

stellacometa
In Vb non si azzerano gli indici , almeno io l'ho configurato in un modo in cui non ho bisogno mai di azzerare un contatore..

A proposito, ho cambiato il codice così nell'ultima parte:

For j = 0 To dimensione
vettore(j) = vettore(i) + vettore(i + 1)
i = i + 2
Next j
Text2.Text = "" + vettore(j)
End Sub

ma mi da errore nella parte rossa. dicendomi "indice non compreso nell'intervallo". Forse devo mettero un secondo ciclo enumerativo con indice I??

lorven
L'indice i, prima dell'ultimo ciclo, ha il valore di uscita dal ciclo: For i = 1 To dimensione - 1, cioè vale dimensione - 1!

lorven
E perchè non usi più vett2????

stellacometa
Secondo te dove sta l'errore??

Grazie mille del tuo preziosissimo aiuto!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.