# Fluttuazioni Finanziarie 90/100

**URL:** <https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375>\
**Category:** Aiuto\
**Created:** [28 Ottobre 2018, 12:28pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375 "2018-10-28T12:28:24Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sergiuzzo](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/s/278dde/32.png) [@Sergiuzzo](https://forum.olinfo.it/u/Sergiuzzo)\
**Post date:** [28 Ottobre 2018, 12:28pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375/1 "2018-10-28T12:28:25Z")

</div>

Ciao a tutti,  
ho sviluppato il seguente codice per il problema fluttuazioni finanziarie. Questo codice non risolve uno dei testcase proposti dal sistema di correzione, quale potrebbe essere l’errore?  
Allego il sorgente sviluppato:

```auto
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main ()
{
	ifstream in ("input.txt");
	ofstream out ("output.txt");
	int N,Q,temp,temp1,max1=0,max=0;
	in>>N;
	vector <int> numeri;
	for (int i=0;i<N;i++)
	{
		in>>Q;
		numeri.push_back(Q);
	}
	for (int i=0;i<N;i++)
	{
		if (numeri[i]>numeri[i+1])
		{
			temp=numeri[i]-numeri[i+1];
			if (temp>max)
				max=temp;
		}
		else 
			if (numeri[i]<numeri[i+1])
			{
				temp1=numeri[i+1]-numeri[i];
				if (temp1>max1)
					max1=temp1;
			}
	}
	if (max1<max)
		out<<max;
	else
		out<<max1;
}

```

---

<div class="post-metadata">

**Author:** ![Sergiuzzo](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/s/278dde/32.png) [@Sergiuzzo](https://forum.olinfo.it/u/Sergiuzzo)\
**Post date:** [28 Ottobre 2018, 12:44pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375/2 "2018-10-28T12:44:01Z")

</div>

Allego anche il codice con il valore assoluto:

```auto
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int main ()
{
	ifstream in ("input.txt");
	ofstream out ("output.txt");
	int N,Q,temp,temp1,max1=0,max=0;
	in>>N;
	vector <int> numeri;
	for (int i=0;i<N;i++)
	{
		in>>Q;
		numeri.push_back(Q);
	}
	for (int i=0;i<N;i++)
	{
		temp=abs(numeri[i]-numeri[i+1]);
		if (temp>max)
			max=temp;
	}
		out<<max;
}

```

---

<div class="post-metadata">

**Author:** ![zJack1342](https://forum.olinfo.it/user_avatar/forum.olinfo.it/zjack1342/32/711_2.png) [@zJack1342](https://forum.olinfo.it/u/zJack1342)\
**Post date:** [28 Ottobre 2018, 12:54pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375/3 "2018-10-28T12:54:06Z")

</div>

In realtà mi stupisco che faccia 90, il vector non ha il template e tecnicamente dovresti accedere a aree di memoria non allocate.  
Nel tuo codice non si vede l uso di una libreria ma solo degli include.  
Per le librerie basta che importi vector per il vector, cmath per il valore assoluto e fstream per usare i file.  
Per il template al vector basta che scrivi: _vector \<tipo di dato\> nome variabile_. Esempio :  
`vecotr <int> numeri;`  
Per l’ accesso a aree di memoria non allocate basta che confronti il secondo con il primo, il terzo con il secondo e cosi via.  
Utilizzando il ciclo scitto da te tecnicamente fai accesso alla posizone _N_ che non esiste essendo numerato da _0 a N - 1_.

---

<div class="post-metadata">

**Author:** ![Sergiuzzo](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/s/278dde/32.png) [@Sergiuzzo](https://forum.olinfo.it/u/Sergiuzzo)\
**Post date:** [28 Ottobre 2018, 12:57pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375/4 "2018-10-28T12:57:36Z")

</div>

Lo so, purtroppo quando copio e incollo il codice non so perchè ma non fa vedere le librerie, comunque ho importato la vector, la cmath e la fstream per l’input output.  
Cosa intendi per accesso alla posizione N che non esiste?

---

<div class="post-metadata">

**Author:** ![Sergiuzzo](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/s/278dde/32.png) [@Sergiuzzo](https://forum.olinfo.it/u/Sergiuzzo)\
**Post date:** [28 Ottobre 2018, 12:59pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375/5 "2018-10-28T12:59:27Z")

</div>

L’ho messo su pastebin, ecco il link: [https://pastebin.com/ynDQrf1r](https://pastebin.com/ynDQrf1r)

---

<div class="post-metadata">

**Author:** ![zJack1342](https://forum.olinfo.it/user_avatar/forum.olinfo.it/zjack1342/32/711_2.png) [@zJack1342](https://forum.olinfo.it/u/zJack1342)\
**Post date:** [28 Ottobre 2018, 1:09pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375/6 "2018-10-28T13:09:21Z")

</div>

I vettori in c++ sono numerati da _0 a N - 1_.  
Inizialmente il tuo vecotr è vuoto, e utilizzando la funzione push\_back aggiungi elementi alla fine.  
Utilizzando _N_ volte la funzione push\_back avrai _N_ elementi.  
Prendiamo in considerazione il primo caso d’ esempio del problema :

```
10
9 1 6 6 3 9 3 7 9 4 

```

Il tuo vector dopo aver caricato tutti gli elementi gli avrà disposti cosi

```
index 0 1 2 3 4 5 6 7 8 9
  val 9 1 6 6 3 9 3 7 9 4

```

Come vedi la posizone 10 non esiste e nel tuo ciclo all’ ulitma iterazione facendo i + 1 farai accesso alla cella con indice 10 che non c’ è causando un accesso a memoria non allocata.  
Per convincerti di ciò provo a stampare i valori di _i_ e _i + 1_ mentre esegui il caso d’ esempio in locale.

---

<div class="post-metadata">

**Author:** ![Sergiuzzo](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/s/278dde/32.png) [@Sergiuzzo](https://forum.olinfo.it/u/Sergiuzzo)\
**Post date:** [28 Ottobre 2018, 1:20pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375/7 "2018-10-28T13:20:24Z")

</div>

Anche effettuando la correzione nel secondo for e facendolo partire da i=1 e effettuando il confronto al contrario per evitare di andare nella posizione N mi restituisce sempre 90/100 sempre per lo stesso output sbagliato.

---

<div class="post-metadata">

**Author:** ![zJack1342](https://forum.olinfo.it/user_avatar/forum.olinfo.it/zjack1342/32/711_2.png) [@zJack1342](https://forum.olinfo.it/u/zJack1342)\
**Post date:** [28 Ottobre 2018, 1:23pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375/8 "2018-10-28T13:23:00Z")

</div>

Posta il codice, io correggendo l’ accesso a memoria non allocata del vector con il tuo codice ottengo 100 🙂  
Per postare il codice basta che fai copia e incolla, dopo evidenzia il codice e premi sul tasto “testo preformattato” sali di una riga e premi invio.

---

<div class="post-metadata">

**Author:** ![Sergiuzzo](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/s/278dde/32.png) [@Sergiuzzo](https://forum.olinfo.it/u/Sergiuzzo)\
**Post date:** [28 Ottobre 2018, 1:23pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375/9 "2018-10-28T13:23:04Z")

</div>

Ok risolto. Avevo aggiunto un uguale di troppo. La condizione esatta del secondo for è (int i=1;i\<N;i++) per l’esecuzione 100/100.

---

<div class="post-metadata">

**Author:** ![Sergiuzzo](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/s/278dde/32.png) [@Sergiuzzo](https://forum.olinfo.it/u/Sergiuzzo)\
**Post date:** [28 Ottobre 2018, 1:23pm UTC](https://forum.olinfo.it/t/fluttuazioni-finanziarie-90-100/5375/10 "2018-10-28T13:23:36Z")

</div>

Grazie mille per l’aiuto 😃
