Esercizio C# in console che, data una stringa composta solo da cifre, calcoli il prodotto maggiore ottenibile per una sua sottostringa contigua di cifre di lunghezza N; in caso la lunghezza della sottostringa sia 0 ritornare 1.
Creazione di un contenitore per tutti i prodotti che otterremo.
int lengmnspan=digits.Length-span; //Lunghezzza stringa - lunghezza sottostringa
int[] prodotti = new int[lengmnspan+1]; Nell'esempio qui sopra digits rappresenta la nostra stringa mentre span la lunghezza della sottostringa; la lunghezza di prodotti deve essere di lengmnspan in quanto sarà quella la quantità di prodotti ottenuti.
Creazione di altre variabili utili al programma.
int i,j; //Indici
int maggiore;
int len=digits.Length;Le variabili create ci serviranno successivamente, le prime sono degli indici, abbiamo poi una variabile nella quale inseriremo il prodotto maggiore e a seguire la lunghezza della nostra stringa.
Dichiarazione di una funzione, che chiameremo CheckNumero, in grado di controllare se la nostra stringa è composta unicamente da numeri.
public static bool CheckNumero(string digits)
{
//Dichiarazione variabili
int i; //Indice
int len=digits.Length;
bool numero=true; //Variabile di return
//Scorro la stringa
for(i=0;i<len;i++){
if(char.IsNumber(digits[i])==false){
numero=false;
break;
}
}
return numero;
}Qui eseguiamo un semplice controllo tramite .IsNumber() per ogni carattere di digits. Appena viene rilevato un carattere diverso da un numero il programma uscirà dal for per poi ritornare numero che, in questo caso, sarà uguale a false.
Assegnamento ad una variabile del risultato della funzione CheckNumero.
bool soloNum = CheckNumero(digits);In questo modo in caso non siano presenti soltanto numeri, soloNum risulterà false segnalandocelo.
Controllo della conformità della stringa prima di iniziare a lavorarci sopra.
if(span>0&&soloNum==true&&digits!=""&&span<=len){Qui controlliamo che span sia maggiore di 0, che siano presenti solo numeri, che digits non sia vuota e che span non superi la lunghezza della stringa, di modo da essere sicuri di poter andare avanti con l'esercizio.
Riempimento del vettore dedito ai prodotti.
//Riempio prodotti di 1
for(i=0;i<=lengmnspan;i++){
for(j=i;j<i+span;j++){
prodotti[i]*=Convert.ToInt32(Convert.ToString(digits[j]));
}
}
//Riempimento con i prodotti
for(i=0;i<=lengmnspan;i++){
for(j=i;j<i+span;j++){
prodotti[i]*=Convert.ToInt32(Convert.ToString(digits[j]));
}
}Nel primo for riempiamo il vettore di 1, in modo da poter poi calcolare e inserire i prodotti all'interno di prodotti tramite il secondo for.
Ricerca del prodotto maggiore.
maggiore=prodotti[0];
for(i=1;i<lengmnspan+1;i++){
if(prodotti[i]>=maggiore){
maggiore=prodotti[i];
}
}In questa parte di codice inizialmente assegniamo il contenuto di prodotti[0] a maggiore, di modo da avere qualcosa da confrontare quando, nel for successivo, andremo a confrontare il resto dei componenti di prodotti con il contenuto di maggiore, aggiornando la variabile qualora trovassimo un prodotto più grande.
Aggiunta del return e condizioni per i casi particolari.
return maggiore;
}
if(span==0){
return 1;
}
else{
throw new ArgumentException();
}L'ultima cosa che ci rimane da fare è ritornare al programma il prodotto maggiore, chiudendo poi l'if iniziato nel quinto punto. Inseriamo delle condizioni finali per i casi particolare: in caso span sia uguale a 0 ritorneremo 1 (per richiesta dell'esercizio) altrimenti, in caso questa condizione non fosse vera e la stringa non rispetta le condizioni dell'if prima citato, ritorneremo un ArgumentException().