Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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!


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
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


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
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'


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
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