# Esercizio: Turni di guardia

**URL:** <https://forum.olinfo.it/t/esercizio-turni-di-guardia/6605>\
**Category:** Aiuto\
**Created:** [15 Aprile 2021, 6:03pm UTC](https://forum.olinfo.it/t/esercizio-turni-di-guardia/6605 "2021-04-15T18:03:05Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![martaa](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/a3d4f5/32.png) [@martaa](https://forum.olinfo.it/u/martaa)\
**Post date:** [15 Aprile 2021, 6:03pm UTC](https://forum.olinfo.it/t/esercizio-turni-di-guardia/6605/1 "2021-04-15T18:03:05Z")

</div>

Ho iniziato da poco a programmare in c++ e non riesco a capire cosa ci sia di sbagliato, potreste darmi una mano?

```auto
#include <bits/stdc++.h>
using namespace std;

int main() {
	freopen("imput.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	int giorni, parenti;
	cin>>giorni>>parenti;
	vector<pair <int,int> > disponibilita(parenti); //pair=contenitore di coppie
	sort(disponibilita.begin(),disponibilita.end()); //sort fa ordinamento
	
	int pagati=1, day=0, i=0;
	bool fine=false;
	while(day!=giorni-1){
		int day=disponibilita[i].second;
	    while(disponbilita[i].first==day){
	    	if(disponbilita[i].second>day){
		    	pagati++;
			    int day=disponibilita[i+1].second;
	        }
	        i++;
		}
	}
	
    cout<<pagati;
	return 0;
}
```

---

<div class="post-metadata">

**Author:** ![Mazza](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/ed8c4c/32.png) [@Mazza](https://forum.olinfo.it/u/Mazza)\
**Post date:** [16 Aprile 2021, 7:27am UTC](https://forum.olinfo.it/t/esercizio-turni-di-guardia/6605/2 "2021-04-16T07:27:59Z")

</div>

In questo caso il problema è che va in loop, partendo dal primo valore nel caso di esempio viene assegnato day = 2 e si chiede nel **while(disponbilita[i].first==day)** quando 0 == 2, sempre falso, e continua cosi all’infinito, poiché la volta dopo riassegna l’elemento di i = 0, credo vada rivisto anche il ragionamento, prova magari a farlo prima a mano

---

<div class="post-metadata">

**Author:** ![cip999](https://forum.olinfo.it/user_avatar/forum.olinfo.it/cip999/32/58_2.png) [@cip999](https://forum.olinfo.it/u/cip999)\
**Post date:** [19 Aprile 2021, 9:06pm UTC](https://forum.olinfo.it/t/esercizio-turni-di-guardia/6605/3 "2021-04-19T21:06:45Z")

</div>

Vedo diversi altri problemi nel tuo codice.

- C’è un errore di spelling nella riga  
`freopen("imput.txt", "r", stdin);`  
“i **m** put.txt” dovrebbe essere “i **n** put.txt”.
- Non stai leggendo gli intervalli dal file di input (in altre parole, non stai inizializzando `disponibilita`).
- La riga `int day=disponibilita[i+1].second;` non fa quello che credi, cioè aggiornare il valore della variabile `day` dichiarata in precedenza. Invece, quello che succede è che viene creata e inizializzata una nuova variabile `day` – diversa dalla precedente – che esiste soltanto nello scope dell’if in cui l’hai dichiarata. Cioè, questa variabile smette di esistere non appena esci dall’if. In particolare, il valore della “vera” variabile `day` resta quello di prima. Per fixare, basta rimuovere `int`.
- Per finire, ti consiglio di stampare sempre un newline alla fine dell’output. Non dovrebbe essere necessario, ma è buona pratica.

Detto questo, non ho controllato la correttezza dell’algoritmo, ma se hai altre domande chiedi pure. 🙂
