Le strutture di controllo della programmazione imperativa sono
la sequenza di istruzioni
la selezione
i cicli.
Qualsiasi problema può essere risolto utilizzando in modo combinato tali strutture.
Consideriamo il seguente problema, semplificato rispetto alla versione originale:
Festa canina
Mojito, il cane di Monica, vuole organizzare una festa con i suoi amici. Aiutalo a scegliere quali invitare e quali escludere in modo da rendere la festa più bella possibile.
Dettagli:
Mojito ha N amici, ognuno dei quali ha un grado di amicizia A i che indica quanto Mojito apprezzi la sua presenza. Ovviamente nella lista c'è anche qualche antipatico che quindi ha un grado di amicizia negativo.
La bellezza della festa è definita come la somma del grado di amicizia degli invitati. Quanto può valere al massimo questa somma?
Assunzioni
1≤N≤10.000, il numero di amici di Mojito.
−100≤A i ≤100, il grado di amicizia dell'ii-esimo amico.
È anche possibile che Mojito festeggi senza amici, in tal caso la festa ha valore 00.
Dati di input
il primo input è l'intero N, il numero di amici di Mojito.
seguono gli N valori Ai, corrispondenti al grado di amicizia di ogni amico
Dati di output
un solo intero k pari il massimo valore di bellezza ottenibile.
Esempi di input/output
Input:
N=8
Ai=1 -4 5 -2 -1 8 0 1
output: 15 (cioè se Ai è maggiore di zero, lo sommo: 1+5+8+1=15)
Input:
3
-1 -2 -4
output: 0 (non sommo nulla)
Spiegazione
Nel primo caso d'esempio la soluzione si ottiene invitando il primo, il terzo, il sesto, il settimo e l'ottavo amico, totalizzando una somma di 15.
Nel secondo caso d'esempio la soluzione si ottiene non invitando alcun amico, totalizzando quindi 0.
codice con input da tastiera dei valori Ai, assegnando da codice il valore di N:
#include <stdio.h>#include <stdlib.h> main() {int N,A,i,acc=0; N=8; for(i=1;i<=N;i++) {printf("grado di amicizia dell'amico %d: ",i); scanf("%d",&A); if(A>0) acc+=A;} printf("%d",acc); }
codice modificato, senza input dei valori Ai, che vengono precaricati da codice in array:
#include <stdio.h>#include <stdlib.h>#define MAX 10000 main() {int N=8, A[MAX]={1,-4,5,-2,-1,8,0,1},i,acc=0; for(i=0;i<N;i++) if(A[i]>0) acc+=A[i]; printf("%d",acc); getch(); }