Newsgroup: it.comp.lang.c++
Titolo: Piccolo aiutino per una principiante

Ciao a tutti! Ho iniziato da poco a studiare C++ per l'università, ma mi 
trovo già nei casini col primo problema. Chi mi sa aiutare?
Allora, dice il testo:
Sia dato un array di interi. Costruire una funzione che, avendo come 
parametro passante l'array, calcoli la linghezza della sottosequenza 
strettamente crescente di interi (presente nell'array) più lunga. Fornire in 
output tale lunghezza.
Esempio: 2  8  -10  3  6  9  15  -23  -40  78  83  85  85  108  -6  7
Output: 5 (-10  3  6  9  15)
Grazie a tutti quelli che sapranno aiutare!!
Ciao,
Michi. 

 output tale lunghezza.
Qui mi sa che il tuo problema non è il C++, ma è trovare l'algoritmo! 
Oppure hai già in mente qualcosa?
E.

 output tale lunghezza.
L'esercizio è stimolante, quindi mi ci sono cimentato. Ecco una 
soluzione (in stile C, e non ho avuto voglia di prendere la lista dallo 
stdin)
int input[]= {2,  8,  -10,  3,  6,  9,  15,  -23,  -40,  78,  83,  85, 
85,  108,  -6,  7};
/* calcola la lunghezza massima di una sottosuccessione strettamente
  * crescente che parte da list[0] e finisce prima di list[n]
  */
int len(int *list, int n) {
   int count=1;
   int i;
   int last=list[0];
   if (n<2) return n;
   for (i=1;i<n;++i) {
     if (list[i]>last) {
       last=list[i];
       count++;
     }
   }
   return count;
}
int main() {
     int i;
     int position=0;
     int max_len=0;
     int N=sizeof(input)/sizeof(int);
     for (int i=0;i<N;++i) {
       int l;
       l=len(input+i,N-i);
       if (l>max_len) {
            max_len=l;
            position=i;
       }
     }
     printf("position %d, len %d\n",position,max_len);
}
// E.

Output: 5 (-10  3  6  9  15)
#include <iostream>
#include <cstdlib>
size_t findLen(int ints[], size_t size, size_t& begin, size_t& end) {
    end = begin = 0;
    if (size < 2)
      return 0;
    int last = ints[0];
    size_t count=1, b=0, e=0, max=count;
    for (int i=1; i<size; i++) {
        if (ints[i] > last) {
          ++count;
          ++e;
        }
        else {
          count = 1;
          e = b = i;
        }
        last = ints[i];
        if (count > max) {
          begin = b;
          end = e;
          max = count;
        }
    }
    return (max < 2) ? 0: max;
}
void printSequence(int a[], size_t size) {
   size_t begin, end;
   std::cout << "findLen(a, " << size << ") = "
       << findLen(a, size, begin, end );
   if (begin > 0) {
      std::cout << " - sequence: (";
      for (size_t i = begin; i <= end; i++)
         std::cout << a[i] << (i == end ? ")" : ",");
   }
   std::cout << std::endl;
}
int main()
{
    int a[] = {2, 8, -10, 3, 6, 9, 15, -23, -40, 78, 83, 85, 85, 108,
-6, 7};
    printSequence(a, sizeof a / sizeof a[0]);
}

   if (begin > 0) {
Errata Corrige: 
 
    if (end > 0) {

     if (end > 0) {
Ma perche` usualmente si risponde picche a quelli che chiedono la 
risoluzione di esercizi stile "pappa pronta" nel newsgroup e questa 
volta invece l'OP ha avuto ben due risposte? :)
Bye,
  Gabry

 volta invece l'OP ha avuto ben due risposte? :)
Sei invidioso perché non hai ricevuto aiuto? :)

 volta invece l'OP ha avuto ben due risposte? :)
Tanto non se ne fa niente delle risposte, se non ha capito qual è 
l'algoritmo!
E.

 l'algoritmo!
A parte presentare il tutto al prof. :P
-- 
cc = callcc {|cc| cc.call cc}; cc.call cc

 volta invece l'OP ha avuto ben due risposte? :)
Perché si è firmata "Fiorella", se si firmava "Goffredo", col cavolo che 
aveva una risposta.



Personalmente ho sempre risposto a tutti, quando ho avuto tempo e
voglia di farlo, che si chiamassero Ugo o Fiorella.