Pagina 1 di 2
		
			
				Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 10:03 
				di MauriAxel
				ragazzi mi serve una mano, devo scrivere un programma in C++. questa è la consegna:
Una sequenza di numeri è costruita nel modo seguente:
si scrive il numero 1 una volta, il numero 2 due volte, il numero 3 tre volte, il numero 4 quattro volte, il numero 5 cinque volte, il numero n n volte.
Si scriva un programma in grado di rispondere al seguente quesito:
Quale numero troviamo nella milionesima posizione?
Dopo aver scritto il programma in grado di fornire la risposta, si rifletta sulla possibilità di ottenere lo stesso risultato con una formula chiusa.
I primi due studenti che postano il programma avranno una valutazione di 8 i secondi due di 7.
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 10:42 
				di dannyb78
				non ricordo il c++ ma l'algoritmo potrebbe essere questo. La complessità mi sembra valida anche se forse si potrebbe ridurla.
i_max= 1.000.000 (puoi anche chiederlo come input per vedere chi sta nella posizione i_max, così fai una cosa elegante
i=1;
num=1;
while (i<=1_max)
{ i=i+num;
num++;
}
alla fine del while num è il risultato che ti interessa. tutte le var sono interi.
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 13:48 
				di tonertemplum
				dannyb78 ha scritto:non ricordo il c++ ma l'algoritmo potrebbe essere questo. La complessità mi sembra valida anche se forse si potrebbe ridurla.
i_max= 1.000.000 (puoi anche chiederlo come input per vedere chi sta nella posizione i_max, così fai una cosa elegante
i=1;
num=1;
while (i<=1_max)
{ i=i+num;
num++;
}
alla fine del while num è il risultato che ti interessa. tutte le var sono interi.
Farei anche io allo stesso modo, cambiando una sola istruzione...
- Codice: Seleziona tutto
 i_max= 1.000.000
i=1;
num=1;
while (i!=1_max) //cambierei questa istruzione
{ i=i+num;
num++;
}
Cioè direi "Finchè il contatore NON è UGUALE (
- Codice: Seleziona tutto
 !=
) a 1.000.000 (o al numero dato in input)
 
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 16:43 
				di `knives`
				non conosco il c++.. ma in c lo farei cosi:
- Codice: Seleziona tutto
 #include <stdio.h>
unsigned int main ()
{
     int num1=1000, num2=0, num3=1,i,j=1;
  
         do
              {
                  for ( i = 1; i <= j ; i++ ) 
                     { 
                          if (num3<=num1)
                          {
                                     num2=j;
                          num3++;
                          }
         
                      }
                      j++;
               } while(j<=num1);
printf("%d",num2);
}
quello a cui devi stare attento secondo me.. è proprio come dichiari le variabili perchè (almeno in c) int va da -32700 a 32700, quindi 1000000 è fuori dal range.
 
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 17:11 
				di dannyb78
				così ha complessità maggiore dell'altro, e mi sembra anche meno leggibile (così a colpo d'occhio)
almeno però è scritto in c++ (o qualcosa che ci somiglia molto). Io non lo uso da almeno 8 anni e lo ho [quasi] completamente dimenticato. MAURIIIIII
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 17:26 
				di `knives`
				è meno leggibile xke l ho scritto velocemente... senza badare troppo ad indentare o altro..
per la complessita.. non ho provato il vostro.. cmq il mio risolve la richiesta
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 17:41 
				di `knives`
				l'oputput dei due è diverso.. il mio si ferma alla posizione voluta, il vostro la salta.. diciamo che basterebbe aggiungere al vostro un controllo sulla posizione giusta e fermarlo li oppure salvare la variabile della posizione.
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 18:23 
				di Joistick
				non capisco una cosa.... qual'è il valore assegnato alla variabile i nel tuo programma knives???
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 18:40 
				di diegofio
				i va da 1 a j l'assegnamento si fa all'interno del for
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 18:54 
				di dannyb78
				`knives` ha scritto:l'oputput dei due è diverso.. il mio si ferma alla posizione voluta, il vostro la salta.. diciamo che basterebbe aggiungere al vostro un controllo sulla posizione giusta e fermarlo li oppure salvare la variabile della posizione.
il mio si ferma alla posizione voluta uscendo dal while, basta aggiungere l'output della variabile num che è il valore cercato. O forse sono totalmente arrugginito, il che è possibile.
 
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 18:55 
				di Joistick
				diego.fiozzi ha scritto:i va da 1 a j l'assegnamento si fa all'interno del for
capito grazie diego  
  
sistemando un po tutto alla fine vieni così
- Codice: Seleziona tutto
 #include <iostream>
using namespace std;
int main ()
{
   int num1,num2,num3,i,j;
   num1=1000;
   num2=0; 
   num3=1;
   j=1;
 
         do
       {
          for(i=1;i<=j;i++)
                     {
                      if (num3<=num1)
                          {
                          num2=j;
                          num3++;
                          }
         
                      }
                      j++;
               } while(j<=num1);
       cout<<"Il numero in milionesima posizione e':"<<num2<<endl;
      system("PAUSE");
      return 0;
}
 
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 19:14 
				di `knives`
				dannyb78 ha scritto:`knives` ha scritto:l'oputput dei due è diverso.. il mio si ferma alla posizione voluta, il vostro la salta.. diciamo che basterebbe aggiungere al vostro un controllo sulla posizione giusta e fermarlo li oppure salvare la variabile della posizione.
il mio si ferma alla posizione voluta uscendo dal while, basta aggiungere l'output della variabile num che è il valore cercato. O forse sono totalmente arrugginito, il che è possibile.
 
l ho provato, e dato che somma le varie posizioni non avrai la milionesima. 
@joistick : num1 = 1000 del mio è in realta 1000000. non va bene un int.. ma deve essere un long int o un unsigned int, per il discorso che dicevo prima 
se il tuo è scritto in c++ ora provo a sistemarlo..
 
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 19:46 
				di Joistick
				`knives` ha scritto:
@joistick : num1 = 1000 del mio è in realta 1000000. non va bene un int.. ma deve essere un long int o un unsigned int, per il discorso che dicevo prima 
se il tuo è scritto in c++ ora provo a sistemarlo..
si ho visto... comunque il mio è scritto in C++ e compila solo che va fino al 1000...
se compilo con un long int non finisce più( e da 5 minuti in esecuzione), adesso provo con unsigned ma non penso cambi e penso sia colpa del milione...
 
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 20:06 
				di dannyb78
				non ricordo la sintassi, per cui il mio non è scritto in c++, anche se conoscendo la sintassi da lì si dovrebbe arrivare velocemente al codice.
il mio programma somma il numero alla posizione e scorre il numero. Chiaramente però fa il controllo sulla posizione. Si ferma quando supera la posizione i_max e restituisce l'intero con il quale ha superato i_max (che deve essere uguale a quello in posizione i_max)
			 
			
		
			
				Re: Quale numero troviamo nella milionesima posizione?
				
Inviato: 
04 apr 2008, 20:49 
				di MauriAxel
				ecco ci ho provato anche io a farlo:
- Codice: Seleziona tutto
 #include <iostream>
using namespace std;
int main ()
{
int cont=0;
int num=0;
do
{
   num=num+1;
   cont=cont+num;
}while(cont<=1000000);
cout<< "L'elemento in milionesima posizione e' il numero "<<num;
cout<<endl;
system("pause");
return 0;
}