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++ - C - conferme asserzioni e ricerca binaria
Forum - C/C++ - C - conferme asserzioni e ricerca binaria

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
gabama (Normal User)
Rookie


Messaggi: 26
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 17:27
Martedì, 14/04/2009
#include<stdio.h>
#define N 5
main(){
int a[N]={1,2,8,4,5};
int i=0;int somma=0;
for(i=0;i<N-1;i++){
    somma=somma+a;}
printf("somma %d",somma);}

in questo codice ass. iniziale non c'è
ass. finale che somma=somma el. vettori
invariante 0<=somma<=somma+a
Sono giuste queste affermazioni?

Vorrei sapere inoltre se (cambiando radicalmente argomento) è corretto questo procedimento per cercare il valore tramite ricarca binaria (es. cercare 8)
1 <-
2
3
4
5 <-
6
7
8
9 <-

8 diverso e maggiore di 5,si cerca nella seconda parte,
5 <-
6
7 <-
8
9 <-

diverso da 7,ma maggiore di 7
7 <-
8 <-
9 <-
= 8 ,è presente e si ritorna i=7;

è corretto?
Grazie in anticipo








PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 17:36
Martedì, 14/04/2009
il ragionamento per la ricerca binaria è corretto...per l'inviariante del ciclo per la somma è sbagliata dato che fare somma + a con a un vettore significa sommare alla variabile somma sempre e solo il primo valore del vettore. Quindi

somma è = 0 se il primo valore di a è uguale a 0
somma però non è sempre <= somma + a dato che anche solo in questo caso abbiamo che somma alla fine arriva a contenere il valore 5, che è > e non <= di 0 + 1.

se ho detto qualche cavolata mi scuso dato che vado di fretta!

PM Quote
Avatar
gabama (Normal User)
Rookie


Messaggi: 26
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 17:40
Martedì, 14/04/2009
intanto grazie di avermi risposto,
quindi devo scrivere che 0<=somma<=somma[0....N-1]?

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 17:47
Martedì, 14/04/2009
mah secondo me l'invariante è somma >= 0 e basta

PM Quote
Avatar
gabama (Normal User)
Rookie


Messaggi: 26
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 17:50
Martedì, 14/04/2009
va bene,grazie

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


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 22:03
Martedì, 14/04/2009
non vorrei dire ma facendo somma = somma + a non si ottiene somma più il primo elemento del vettore a, ma si ottiene somma più l'indirizzo al quale è memorizzato il primo elemento del vettore a.

quindi per sommare ogni elemento del vettore si deve fare

Codice sorgente - presumibilmente C/C++

  1. int i;
  2. int a[3] = {1, 4, 5};
  3. int somma = 0;
  4.  
  5. for(i = 0; i < 3; i++)
  6.     somma = somma + a[i];



spero di essere stato chiaro e di aiuto.

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 22:12
Martedì, 14/04/2009
in effetti non avevo fatto caso alla mancanza dell'operatore * davanti alla 'a'

PM Quote
Avatar
gabama (Normal User)
Rookie


Messaggi: 26
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 23:43
Martedì, 14/04/2009
grazie 1000 a entrambi,è stata una mia svista nello scrivere il codice,vedendo che funzionava non ho riguardato,grazie ancora

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


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 23:53
Martedì, 14/04/2009
comunque per invariante ho trovato la seguente definizione :


Invariante di ciclo è una proposizione (riguardante i contenuti delle variabili
di una procedura o programma) la quale:
• vera immediatamente prima di eseguire l'istruzione iterativa;

• vera dopo ogni ripetizione del corpo del ciclo ;

• quindi, in particolare, è vera all’uscita dall'istruzione iterativa, cioè
all'uscita "definitiva" dal ciclo.

Basandomi su ciò, io direi che :

•somma è l'invariante in quanto viene intesa come la somma degli elementi di un vettore che vengono analizzati indi per cui risulta :

0 <= somma <= somma + a[i-1] con 0 <= i <= N

ove : se i = 0 (condizione iniziale) prima dell'inizio del ciclo somma = 0
ove : se i = N (condizione di terminazione) alla fine fine del ciclo somma = somma+a[i-1]

spero di essere stato chiaro e di aiuto :k:

Ultima modifica effettuata da andrea.b89 il 14/04/2009 alle 23:54
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo