Aiuto Esame

di il
4 risposte

Aiuto Esame

Ciao Ragazzi,

Studio ingegneria civile/ambientale e lunedì devo dare un esame di informatica di di programmazione in C.
Vi vorrei postare un esempio di verifica perché vorrei il consiglio di voi esperti su come prepararmi, (fate conto che tra un esame e l'altro questo l'ho pienamente tralasciato essendo per il mio corso un esame ''pacco'') Immagino che per voi sia una prova semplicissima e vi chiedo cosa secondo voi dovrei studiare bene...

Esercizio 1.

Disegnare il flowchart del seguente frammento di programma:

for( i=0; i<= N; i=i+1 ) {
 for( j=0; j<= N; j=j+1 ) {
 if( i <= j ){
 printf("(%d,%d) ",i,j);
 } else {
 printf("      ");
 }
 }
 printf("\n");
}
Esercizio 2.
A) Per ciascuna variabile del seguente programma dire se si tratta di variabile globale o locale;
B) Mostrare l'output del programma.
#include <stdio.h>

int a,b;   

int f(int c) {  // funzione

int a;  

a=1;
b=b+c;  

return a+b;
}

int main() {
a=1;
b=2;
printf("%d\n",f(1));  
printf("%d\n",f(1)); 
getchar();
}
Esercizo 5.
Mostrare che cosa stampa il seguente frammento di programma:

for(A=0;A<=1;A++) {
 for(B=0;B<=1;B++) {
 printf("| %d | %d | %d \n", A, B, A&&B );
 }
}
Esercizo 6.
Mostrare che cosa stampa il seguente frammento di programma:

int a=1, b=0;
for(i=1;i<=5;i++) {
 a=a*i;
 b=b+i;
}
printf("%d %d", a, b);
Spero possiate chiarirmi le idee!!
CONSIDERATE CHE NON SO NIENTE!!! mi piacerebbe pero capirci qualcosa

Grazie.

4 Risposte

  • Re: Aiuto Esame

    Ciao ,

    Devi mettere il codice tra i tag code e /code , leggi il regolamento prima di creare un topic ^^

    Comunque :
    Esercizio 1:
    Utilizza due cicli , uno dentro l' altro ( il for non è altro che un ciclo , cioè viene ripetuta n volta un blocco di istruzioni racchiuse tra due parentesi graffe )
    
    for ( int i=0 ; i <= N ; i++ )
    { 
          ..... istruzioni ;
    }  // i è il contatore  , i++ è l' incremento per ogni ciclio di +1 ( i++ equivale a scrivere i=i+1 ) e i<=N indica a quale condizione si deve fermare . In questo caso possiamo dire che si compiranno tanti cicli fin quando i non risulta essere = ad N ( fin quando la condizione i<=N risulta vera continua a fare il ciclo )
    
    Comunque se non conosci il significa di for , while , if then else , funzioni , variabili, ti consiglio di studiarteli , io ti ho dato solo qualche cenno maccheronico ^^.

    Ritornando all' esercizio 1 :
    Fa un ciclo in cui i parte da 0 fino ad un valore N in cui fa partire un ciclo , quindi per ogni ciclo chiamerà un altro for . Facciamo un esempio in cui N vale 3, quell' algoritmo lo puoi leggere in questo modo
    
    Inizio ( N = 3 ) 
    i= 0 , inizia il secondo for in cui j = 0 
    ora parte l' if : se i <= j ( in questo caso se 0 <= 0 ) stampa a video i e j ( 0 0 )
    finisce il ciclo interno ( quello con j ) e si incrementa j lasciando i = 0 
    ripete l' if : se i <= j ( in questo caso se 0 <= 1 ) stampa a video i e j ( 0 1 )
    itera il procedimento fin quando j non arriva a 3. Dopodichè finisce anche il primo ciclo e si incrementa i portandolo a 1 , il quale farà iniziare un altro ciclo uguale a quello spiegato precedentemente. La stampa sarà una cosa del genere:
    0 0 0 1 0 2 0 3
       1 1 1 2 1 3
          2 2 2 3 
             3 3
    

    Esercizio 2:
    Qui devi studiare la teoria sullo scope di una variabile , cioè sulla visibilità di una variabile. In pratica ( ovviamente ti consiglio di approfondire ) una variabile vive nel blocco di istruzioni che viene creata ( i blocchi sono limitati da due parentesi graffe { } ) . Le variabili globali si trovano fuori dal Main program e sono visibili a tutte le funzioni .
    
    #include < stdio.h>
    
    int a ;   // variabile globale  , muore quando finisce il programma
    
    int main () {
    int b=0 ;    // variabile locale , muore quando finisce il programma main
    if ( b > 0 ) 
    {
        int c ;  // variabile locale e vivrà soltanto all' interno del blocco dell' if  
        c= 3;
    }  // la variabile c muore.
    
    c = 5; // ERRORE , la variabile c non esiste più è come se non fosse mai esistita
    
    return 0;
    }  // fine programma main , muore la variabile b
    
    Ritornando all' esercizio 2 :
    le variabili a e b sono globali , la variabile c è locale alla funzione int f ( muore quando muore la funzione ).



    Esercizio 5:
    Sono sempre due cicli , uno dentro l' altro , il concetto teorico è lo stesso che ho spiegato del for del primo esercizio.
    Questo esercizio stampa a video la tabella della verità della porta logica AND in cui
    0 AND 0 è 0
    0 AND 1 è 0
    1 AND 0 è 0
    1 AND 1 è 1


    Esercizio 6:

    fa un ciclo da 1 a 5 quindi ripete 5 volte un blocco di istruzioni
    
    a=a*i;
    b=b+i;
    
    dove i cambia tra 1 e 5 man mano che si ripete il blocco quindi lo puoi leggere così
    
    a= 1; b=0 ; 
    primo ciclo i = 1;
    a= a* i   // a = 1*1 ----> a = 1;
    b = b+1   // b = 0+1 --- > b = 1;
    secondo ciclo i = 2;
    a= a*i    // a= 1*2 ----> a = 2;
                // b = 1+2 ---> b = 3;
     i = 3;
        a = 2*3 ---> a = 6;
        b = 3+3 ----> b = 6;
      i = 4;
         a = 6*4 ---> a = 24;
         b = 6+4 ---> b = 10 ;
       i = 5;
        a = 24*5 ---> a= 120;
        b = 10+5 ----> b = 15;
    i = 6 --> non si verifica la condizione e termina il for: 
    printf stamperà i valor di a e b , quindi 120 e 15.
    
  • Re: Aiuto Esame

    Beh, innanzi tutto grazie mille,mi hai un po chiarito le idee.. Ma ti vorrei chiedere una precisazione per quanto riguarda l'es 1, in un eventuale flowchart non vedremmo un grosso ciclofor che ne comprende un altro seguito da un if then else? E per N uguale a 3 non dovrei avere un output del tipo : 04 14 24 34 44 ???

    Grazie ancora e scusa se non ho rispettato le regole!!
  • Re: Aiuto Esame

    Guarda il primo esercizio sono in effetti due cicli for uno dentro l'altro, il che vuol dire che il secondo segue il primo.
    ora sarebbe necessario sapere il valore di N in modo da sapere quante iterazioni devono effettivamente fare i cicli.
    se poniamo N = 3 ecco cosa accade: il primo ciclo fa 4 iterazioni, j=0 j=1 j=2 e j=3, mentre il secondo ciclo fa 4 iterazioni per ogni iterazione del primo.
    ovvero j=0 (i=0 i=1 i=2 i=3) j=1 (n=0 n=1 n=2 n=3) j=2(ecc...)
    in tutto abbiamo 16 iterazioni.
    Il secondo stampa i e j quando j è maggiore o uguale a i, altrimenti stampa uno spazio bianco e poi va a capo.
    quindi nella prima iterazione avremo 00 01 02 03
    nella seconda (spazio bianco perchè j<i) 11 12 13
    nella terza (due spazi bianchi) 22 23
    nella quarta (tra spazi bianchi) 33
    così è come ho capito io!
    ciao e buona fortuna! (anche io ho un esame tra poco ma un bel po' più difficile di questo e sono spacciato xD)
  • Re: Aiuto Esame

    Bhe quello che ha detto stefanoMDj è giusto , Sili92 se N è = 3 come fa a stampare un 4 se j potrà valere massimo 3?
    QUando c'è un for dentro un altro ci sarà un numero di Cicli pari a NxM ( dove N è il numero di cicli di un for e M il numero di un altro , nel nostro caso M = N quindi un numero di cicli pari a NxN ).
    Il for esterno ( quello dove si incrementa la i ) è come se si blocca e per ogni valore che assume i ( quando vale 0 , 1 2 e 3 ) si eseguirà un altro ciclo for il quale farà N cicli per ogni valore di i ( esempio con N=3 : quando i = 0 j varrà 0 , 1 ,2 ,3 dopo i = 1 j varrà 0 , 1 ,2 ,3 dopo i = 2 j varrà 0 , 1 ,2 , 3 dopo i = 3 j varrà 0 ,1 ,2 , 3 e poi finisce ) Ora se fai con calma i conti vedi che l' output è uguale a quello che ha scritto stefanoMDj
Devi accedere o registrarti per scrivere nel forum
4 risposte