PDA

View Full Version : Principiante c++ista


.:StEfAnO:.
20-01-2006, 16:34
Sono al terzo anno del liceo ed è il primo anno che studio il linguaggio c++ ad informatica, penso che per voi sia molto semplice risolvere un problema del genere:

Inserito un numero N, definire quanto è lunga la sottosequenza non decrescente maggiore. (cioè: N=12145 le sottosequenze sono 12 e 145)

io ho scritto questo, mi potete dare una manina? dove sbaglio?
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{int A,B,N,CONTA,MAX=0;
cout<<"inserisci n\n";
cin>>N;
do
{do
{A=N%10;
CONTA++;
N=N/10;
B=N%10;}
while (B<A);
if (MAX<CONTA)
MAX=CONTA;
CONTA=0;}
while (N>0);
cout<<MAX<<endl;
getch();
return 0;
}

lo so che vi sembrerà stupido, però sono agli inizi :D :oink:

.:StEfAnO:.
21-01-2006, 05:36
...up

FedeX_65246X
21-01-2006, 16:28
Quando inserisci codice cerca di inserirlo formattato, usando il tag [CODE], ne guadagna la leggibilità...

es.

#include<iostream>
#include<conio.h>

using namespace std;

int main()
{
int A,B,N,CONTA,MAX=0;

cout<<"inserisci n\n";
cin>>N;
do {
do {
A=N%10;
CONTA++;
N=N/10;
B=N%10;
}
while (B<A);
if (MAX<CONTA)
MAX=CONTA;
CONTA=0;
}
while (N>0);

cout<<MAX<<endl;
getch();
return 0;
}

.:StEfAnO:.
22-01-2006, 08:27
OK, grazie FedeX_65246X per il consiglio, cmq, non c'è nessuno che sia in grado di darmi una mano???

stefano_ba
22-01-2006, 16:16
Penso che innanzitutto dovresti inizializzare le variabili al valore nullo, tu le hai solo definite, non e' detto che il compilatore gli assegni valore predefinito nullo.

Io procederei scorrendo le cifre a partire da quella a sinistra, memorizzandole in un vettore diciamo v1.
Ad ogni nuova cifra controllo che sia maggiore uguale di quella analizzata precedentemente.
Se invece e' minore della precedente inizio la memorizzazione in un nuovo vettore v2, continuando cosi' sinche' nuovamente la cifra e' minore della sua precedente.
A questo punto confronto la dimensione dei due vettori, il piu' lungo e' la sotto sequenza che cercavo.
Naturalmente se il numero iniziale contiene piu' di due sottosequenze reitero i passi precedenti.

.:StEfAnO:.
22-01-2006, 16:36
Penso che innanzitutto dovresti inizializzare le variabili al valore nullo, tu le hai solo definite, non e' detto che il compilatore gli assegni valore predefinito nullo.

Io procederei scorrendo le cifre a partire da quella a sinistra, memorizzandole in un vettore diciamo v1.
Ad ogni nuova cifra controllo che sia maggiore uguale di quella analizzata precedentemente.
Se invece e' minore della precedente inizio la memorizzazione in un nuovo vettore v2, continuando cosi' sinche' nuovamente la cifra e' minore della sua precedente.
A questo punto confronto la dimensione dei due vettori, il piu' lungo e' la sotto sequenza che cercavo.
Naturalmente se il numero iniziale contiene piu' di due sottosequenze reitero i passi precedenti.

come faccio ad anallizzare le cifre a partire da quella di sinistra? (per prendere quella di destra basta utilizzare %)
nel codice che ho scritto io ho notato che il problema sta negl'ultimi controlli, quando rimane una sola cifre. Perciò avevo pensato di inserire un controllo che bloccasse il ciclo quando il numero scendesse al di sotto di 10, però ancora non funziona: non so se è un problema del mio compilatore (uso il dev) ma ogni volta che compilo e lancio il rpogramma mi da come risultato 65!

qualcuno sa darmi una mano?

.:StEfAnO:.
22-01-2006, 16:41
Penso che innanzitutto dovresti inizializzare le variabili al valore nullo, tu le hai solo definite, non e' detto che il compilatore gli assegni valore predefinito nullo.

Io procederei scorrendo le cifre a partire da quella a sinistra, memorizzandole in un vettore diciamo v1.
Ad ogni nuova cifra controllo che sia maggiore uguale di quella analizzata precedentemente.
Se invece e' minore della precedente inizio la memorizzazione in un nuovo vettore v2, continuando cosi' sinche' nuovamente la cifra e' minore della sua precedente.
A questo punto confronto la dimensione dei due vettori, il piu' lungo e' la sotto sequenza che cercavo.
Naturalmente se il numero iniziale contiene piu' di due sottosequenze reitero i passi precedenti.

ho inizializzato tutte le variabili a zero e funziona!!! grazie stefano, non pensavo fosse quello l'errore perchè in altri programmi che ho scritto non c'era bisogno!!!!

.:StEfAnO:.
22-01-2006, 17:03
ho inizializzato tutte le variabili a zero e funziona!!! grazie stefano, non pensavo fosse quello l'errore perchè in altri programmi che ho scritto non c'era bisogno!!!!
come non detto, non funziona ancora bene

stefano_ba
22-01-2006, 20:15
come faccio ad anallizzare le cifre a partire da quella di sinistra?

Questo codice


char ch[10];
int i = 1234;

itoa(i, ch, 10);

converte il valore numerico i nel vettore di caratteri ch.
(itoa sta per IntegerTOchAr)
A questo punto scorri il vettore dal primo all'ultimo elemento.

Puoi risparmiarti questa conversione se accetti in ingresso il numero come normale stringa, a te in fin dei conti non interessa il valore numerico dell'input ma la sua composizione.