Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di garlick
    Registrato dal
    Dec 2001
    Messaggi
    385

    [c] Sequenza di numeri crescenti

    Ciao, ho fatto questo programmino che indica di quanti elementi è composta la sequenza di numeri crescenti più lunga tra i valori inseriti:

    codice:
    #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

  2. #2
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    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!

  3. #3
    Utente di HTML.it L'avatar di garlick
    Registrato dal
    Dec 2001
    Messaggi
    385
    alla fine ce l'ho fatta da solo, senza usare troppe variabili:

    codice:
    #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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.