Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Domande su argomenti programmazione c
Forum - C/C++ - Domande su argomenti programmazione c - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
andrea.b89 (Ex-Member)
Pro


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 18:53
Lunedì, 13/04/2009
Personalmente il codice lo riscriverei nel seguente modo :

Codice sorgente - presumibilmente C++

  1. #define N 5
  2. main(){
  3. int i=0;
  4. int u=1;
  5. int a[N]={3,6,9,10,15};
  6.  
  7. while(i < N && u != 0)
  8.   if(a[i]%3!=0)
  9.     u = 0;
  10.   else
  11.     i++;



secondo me per le asserzioni fatte è più chiaro scritto così :

1) Asserzione iniziale, o pre-condizione per darle un altro nome, è che u sia pari a 1
2) Asserzione finale, o post-condizione per darle un nome diverso, è che
     u = 0 se nel vettore a vi è almento un elemento non multiplo di 3
     u = 1 se tutti gli elementi del vettore sono multipli di 3
3) Complessità è pari a O(n) in quanto al massimo scorri l'intero vettore una sola volta.

Poi mi potresti cortesemente dare la tua definizione di invariante? Vorrei capire che cosa intendi tu per Invariante.

PM Quote
Avatar
gabama (Normal User)
Rookie


Messaggi: 26
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 19:34
Lunedì, 13/04/2009
scusa se non ti ho risposto subito,mi ero assentato dal pc,
per prima cosa grazie mille per i consigli,
per quanto riguarda l 'invariante,è una proposizione sempre per quanto riguarda il ciclo,
quindi vera immediatamente prima dell' azione iterativa,vera dopo ogni ripetizione del corpo del ciclo e vera all' uscita azione iterativa
E' giusto il diagramma?

PM Quote
Avatar
andrea.b89 (Ex-Member)
Pro


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 19:48
Lunedì, 13/04/2009
capito.
allora l'invariante in quel caso è i con dominio [0, N-1]

lo schema è un pelo incasinato
io lo farei così :

begin
i = 0, u = 1
while : se i < N e u != 0
SI : se a % 3 != 0 NO : vai a fine
SI : u = 0 NO : i = i + 1
torna a while
fine : end

relativamente al tuo codice sarebbe stato :

begin
i = 0, u = 1
for : se i < N
SI : se a % 3 != 0 ; NO : vai a fine
SI : u = 0
se u == 0
SI : termina for
i = i +1
torna a for
fine : end

spero sia chiaro. se hai domande chiedi pure :k:

Ultima modifica effettuata da andrea.b89 il 13/04/2009 alle 19:52
PM Quote
Avatar
gabama (Normal User)
Rookie


Messaggi: 26
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 20:34
Lunedì, 13/04/2009
grazie mille,non mi è però chiaro il diagramma sul tuo esempio
si parte da i=0; e u=1;
test while i<N e u!=0
se SI si fa ulteriore test ,se a>3 ,se NO si esce
se secondo test è SI i=i+1;se NO U=0 e si esce
---non comprendo--- dove ti ho fatto le freccette
i = 0, u = 1
while : se i < N e u != 0
SI : se a % 3 != 0 NO : vai a fine <--
SI : u = 0 NO : i = i + 1          <--
torna a while
fine : end

Abi pazienza se ti faccio una domanda stupida,o per te scontata.....

PM Quote
Avatar
Dave Danuve (Normal User)
Newbie


Messaggi: 6
Iscritto: 13/04/2009

Segnala al moderatore
Postato alle 21:01
Lunedì, 13/04/2009
Scusate ma non è ben chiaro il problema da risolvere. Da quel che sono riuscito a capire il problema consiste nel verificare che un'insieme di n numeri contenga solo multipli di 3, o sbaglio?

In tal caso è sufficiente scorrere l'array con un ciclo for ed effettuare un controllo su tutti gli elementi.

Codice sorgente - presumibilmente C++

  1. #include <stdbool.h>
  2.  
  3. bool arrayMultipliDi3(int values[N])
  4. {
  5.    unsigned int i;
  6.  
  7.    for (i = 0; i < N; i++)
  8.       if (values[i] % 3)
  9.          return false;
  10.  
  11.    return true;
  12. }



La funzione restituisce true se e solo se tutti gli elementi sono multipli di 3. All'interno dell'if viene effettuato un controllo booleano implicito: in linguaggio C una qualsiasi espressione viene considerata vera se il risultato è diverso da 0. La complessità dell'algoritmo è O(n) nel caso peggiore, ovvero quando tutti gli elementi sono multipli di 3 (in questo caso si scorre tutto l'array, altrimenti la funzione restituisce false nonappena trova un elemento che non è multiplo di 3).

PM Quote
Avatar
gabama (Normal User)
Rookie


Messaggi: 26
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 21:08
Lunedì, 13/04/2009
il mio problema è che non sono riuscito a comprendere il diagramma a blocchi

PM Quote
Avatar
andrea.b89 (Ex-Member)
Pro


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 22:33
Lunedì, 13/04/2009
ti allego il diagramma di flusso in versione grafica.
non è fatto molto bene a livello grafico perchè l'ho realizzato con paint, però dovrebbe essere chiaro. almeno lo spero.

:k:


andrea.b89 ha allegato un file: flowchart.JPG (39748 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
gabama (Normal User)
Rookie


Messaggi: 26
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 23:08
Lunedì, 13/04/2009
ti ringrazio moltissimo,sei troppo gentile
Grazie ancora
Ciao!

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo