PDA

Visualizza la versione completa : [C] Sequenza di numeri crescenti


garlick
09-12-2005, 22:52
Ciao, ho fatto questo programmino che indica di quanti elementi composta la sequenza di numeri crescenti pi lunga tra i valori inseriti:



#include <stdio.h>

main() {

int i, flag, flag2, flagmax, seqstart, seqend, flagcambio, flag3, flagPos;
float n, valmax;

flag3=0;
flag = 0;
flagmax = 0;
valmax = 0;
i=1;
seqstart= 0;
seqend = 0;
flagcambio = 0;
flag2 = 0;

flagPos = 0;

printf("Inserisci il valore\n");
scanf("%f", &n);

while (n!=0)
{

if (n > valmax)
{

valmax = n;
flag++;

if (flag > flagmax)
{

if (flagPos == 0)
{

seqstart = i;

}

flagmax = flag;
// aggiunta

flagPos = 1;



// fine aggiunta

}
else
{

flagPos = 0;

}
}
else
{


flag = 1;
valmax = 0;
flagPos = 0;
}


printf("Inserisci il valore\n");
scanf("%f", &n);

i++;


}


printf("La massima sequenza crescente e' di %d elementi\n", flagmax);
printf("La massima sequenza crescente inizia in %d \n", seqstart);
scanf("%d");
}


Come noterete dal codice devo anche fare in modo di sapere in corrispondenza di quale valore inizia la sequenza massima crescente. Se ad esempio inserisco:

4 5 6 1 2 3 4 5 6 dovrebbe dirmi che la sequenza massima crescente lunga 6 elementi e che inizia dal quarto elemento. Non posso usare vettori, solo flag. Io ho comnciato con l'inserire un contatore i che mi indica il valore i esimo che stiamo considerando, poi volevo mettere un flag che avvisasse quando era iniziata una nuova sequenza crescente massima e che a quel punto dasse a seqstart il valore di i, ma non funziona.

Cosa sbaglio?

Grazie

ibykos
09-12-2005, 23:28
Secondo me non ti servono cos tante variabili per risolvere l'esercizio.
Potresti provare con questo algoritmo:

base di dati:

int nPrecedente=0, nAttuale=0, serie=0, serieMax=0, partenzaSerieMax=0, partenzaTmp=0,contaNumeri=0;

per ogni numero in input:

1) accetta un numero

2)Se il numero attuale maggiore di quello inserito prima:
allora allunga la serie
--> nSerie++;

Se il numero minore (o uguale):
allora termina la serie
--> se serie>serieMax allora aggiorni serieMax = serie attuale
--> in ogni caso:
--> serie=0; partenzaSerieMax=partenzaTmp; partenzaTmp=contaNumeri;

Se il numero quello designato per terminare l'input
allora termina la serie

3) aggiorna nPrecedente = nAttuale;

quando finisce l'input stampa serieMax e partenzaSerieMax

Ciao!

garlick
11-12-2005, 18:48
alla fine ce l'ho fatta da solo, senza usare troppe variabili:



#include <stdio.h>

main() {

int i, flag, flagmax, seqstart, seqend;
float n, valmax;


seqstart = 0;
flag = 0;
flagmax = 0;
valmax = 0;
i=1;
seqend = 0;

printf("Inserisci il valore\n");
scanf("%f", &n);

while (n!=0)
{

if (n > valmax)
{

// la seq sta crescendo



valmax = n;
flag++;

if (flag > flagmax)
{



flagmax = flag;


}

}
else
{

// la seq non pi crescente

if (flag == flagmax){

seqstart = i - flag;

}

flag = 1;
valmax = 0;


}


printf("Inserisci il valore\n");
scanf("%f", &n);

i++;


}

if (flag == flagmax){

seqstart = i - flag;

}

seqend = seqstart + flagmax - 1;

printf("La massima sequenza crescente e' di %d elementi\n", flagmax);
printf("La massima sequenza crescente inizia in %d e finisce in %d\n", seqstart, seqend);
scanf("%d");
}



Ciao :ciauz:

Loading