Vettori
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??!!!
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
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).
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.
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.
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;

Mi spiegate perchè controllate se la dimensione sia pari o dispari?
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
repeat
readln(n);
until (n div 2) = 0;
ciao
E perchè deve essere pari?
Se devi sommare coppie consecutive di elementi del vettore ...
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?
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?
Probabilmente c'è un errato dimensionamento del vettore e l'indice assume un valore errato. Posta l'intero programma.
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
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
In pratica il mio problema prima carica un vettore poi ordina tali elementi e infine dovrebbe fare il precedente quesito che vi ho posto!
Usi "dimensione" e n come dimensione del vettore: o uno o l'altro!
ah ok...piccola svista.. Però non viene lo stesso!
Il ciclo finale che fa le somme non deve partire da 0, ma da 1.
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!!
inoltre, l'indice i, prima dello stesso ciclo, va resettato a 1.
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??
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??
L'indice i, prima dell'ultimo ciclo, ha il valore di uscita dal ciclo: For i = 1 To dimensione - 1, cioè vale dimensione - 1!
E perchè non usi più vett2????
Secondo te dove sta l'errore??
Grazie mille del tuo preziosissimo aiuto!!!
Grazie mille del tuo preziosissimo aiuto!!!