Advertisement
daniele2013

complessità funzione main che c'era nel progetto dev c++

Apr 8th, 2014
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.97 KB | None | 0 0
  1. vvv LA COMPLESSITA' E' ALLA FINE vvv
  2.  
  3. #include "fun.h"
  4.  
  5. int main(){
  6.     int i=2, a, S=2, N, iterazioni=10, delay_istantanee=2, time=0, log=1;;  //Le variabili sono inizializzate a valori tali da non dare problemi nei controlli all'avvio del programma
  7.     struct strada *confluenti[N_S]={NULL,NULL,NULL,NULL,NULL};// Ovvero tutte le strade sono vuote
  8.     struct strada rotatoria[N_P]={};
  9.     do {
  10.             printf("1 - Carica da file situazione iniziale azzerando situazioni precedenti\n2 - Inserisci macchine\n3 - Rimuovi macchina\n4 - Stampa situazione\n5 - Simula rotatoria (Standard: 10 istantanee)\n6 - Salva situazione su file (Sovrascrivera' situazioni precedenti)\n7 - Impostazioni\n0 - EXIT\n");
  11.             while(S<0 || S>7 || scanf("%d", &S)!=1){
  12.                 while (getchar() != '\n');
  13.                printf("Input non valido\n\n1 - Carica da file situazione iniziale azzerando situazioni precedenti\n2 - Inserisci macchine\n3 - Rimuovi macchina\n4 - Stampa situazione\n5 - Simula rotatoria (Standard: 10 istantanee, 2 secondi per ognuna)\n6 - Salva situazione su file (Sovrascrivera' situazioni precedenti)\n7 - Impostazioni\n0 - EXIT\n");
  14.                scanf("%d", &S);
  15.                system("cls");
  16.             }
  17.                switch (S){
  18.                    case 1:
  19.                        read_file(rotatoria); break;
  20.                    case 2:
  21.                        printf("In quale strada vuoi inserirle? [0-4]\n");
  22.                        while(i<0 || i>4 || scanf("%d", &i)!=1){
  23.                             while (getchar() != '\n');
  24.                            printf("Input non valido, riprovare\n");
  25.                            scanf("%d", &i);
  26.                        }
  27.                            printf("Quante macchine vuoi inserire?\n");
  28.                            scanf("%d", &N);
  29.                        for(; N>=1; N--)
  30.                            new_road(confluenti, i); break;
  31.                     case 3:
  32.                         remove_car(confluenti); break;
  33.                    case 4:
  34.                        stampa_situazione(confluenti,rotatoria); break;
  35.                    case 5:
  36.                            system("cls");
  37.                            for (a=0;a<10;a++){
  38.                                 if(time==a){
  39.                                     Sleep(2000);
  40.                                     stampa_situazione(confluenti,rotatoria);
  41.                                     time+=delay_istantanee;
  42.                                 }
  43.                                shift_L(rotatoria);
  44.                                check_exit(rotatoria, &time, &log);
  45.                                check_enter(rotatoria,confluenti);
  46.                            }time=0; break;
  47.                     case 6:
  48.                         save_file(rotatoria); break;
  49.                     case 7:
  50.                          impostazioni(&iterazioni,&delay_istantanee,&log, rotatoria);
  51.                          printf("%d iterazioni con %d delay quindi %d istanee\n",iterazioni,delay_istantanee,iterazioni/delay_istantanee);
  52.                          printf("L'uscita delle auto viene ");
  53.                          if(log==0)
  54.                             printf("visualizzata a video\n\n");
  55.                          else printf("stampata su file\n\n");break;
  56.                }
  57.     }
  58.     while (S!=0);
  59.     pulizia(rotatoria, confluenti);
  60.     return 0;
  61. }
  62.  
  63. COMPLESSITA' v v v
  64.  
  65. comp_17 - main
  66. {
  67.     TEMPO
  68.     L'algoritmo fa eseguire un ciclo do-while e fintanto che si inserisce un input valido, si attiva uno switch case che in base all'input richiama
  69.     un qualche particolare algoritmo o funzione.
  70.     Nel caso 1, si richiama la funzione read_file che ha complessità O(N_P) dove N_P è la dimensione della struttura dati usata per la rotatoria;
  71.     nel caso 2, si richiama un ciclo for nel quale si richiama la funzione new_road che ha complessità O(N_S) (N_S è la dimensione della variabile
  72.     confluenti); per cui la complessità del caso 2 è N*O(N_S) con N numero di macchine da inserire;
  73.     nel caso 3 si richiama la funzione remove_car che ha complessità O(N_S);
  74.     nel caso 4 si richiama la funzione stampa_situazione che ha complessità O(n) dove n è la somma di N_S e N_P;
  75.     nel caso 5 c'è un ciclo for al cui interno c'è un if che se valutato vero richiama la funzione stampa_situazione (complessità O(n)); poi si
  76.     richiama la funzione shift_L che ha complessità O(N_P) e poi si richiamano le funzioni check_exit e check_enter che hanno complessità O(N_P),
  77.     facendo avere al caso 5 una complessità asintotica di tempo nel caso peggiore (if valutato vero) di O(n);
  78.     nel caso 6 si attiva la funzione save_file che ha complessità O(N_P);
  79.     nel caso 7 si attiva la funzione impostazioni, che ha complessità nel suo caso peggiore di O(N_P).
  80.     Alla fine del do-while si attiva la funzione pulizia che ha complessità costante.
  81.     In definitiva, la complessità asintotica di tempo nel caso peggiore di tutto l'algoritmo corrisponde all'attivazione del caso 5 che ha complessità
  82.     O(n).
  83.     SPAZIO
  84.     Come nella complessità temporale, poichè le strutture dati utilizzate sono due array di struct con dimensione N_P e N_S e poichè le funzioni chiamate
  85.     alterano la loro dimensione, la complessità spaziale massima corrisponde a O(n) con n = N_P + N_S.
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement