PDA

View Full Version : programma c


84roller84
18-02-2005, 11:44
ragazzi sono abbastanza disperato: ho l'esame di programmazione tra una settimana e non riesco a fare il programma: non è che potreste aiutarmi? se si mandatemi una mail che vi rispedisco il programma.grazie mille

Ziosilvio
18-02-2005, 12:06
Se ci stai chiedendo di aiutarti a fare il programma: volentieri, ma perché non posti in questa sezione le parti che non riesci a fare, in modo che chiunque passi di qui possa dare il suo contributo?

Se invece ci stai chiedendo di fare il programma al tuo posto: la risposta, almeno da parte mia, è NO.

84roller84
18-02-2005, 14:55
la mia preoccupazione è che se mille casi il prof mi sgama mi posso scordare anche dell'esame. perquesto preferisco che la cosa resti alquanto privata.

ilsensine
18-02-2005, 15:21
Nessun professore si incazza se chiedi consiglio ad altri per fare un buon programma _tuo_. Potrebbe incazzarsi se fai fare ad _altri_ il programma (e sta sicuro che all'orale se ne accorge ;) )

71104
18-02-2005, 17:34
quoto appieno chi ti ha risposto: così non otterrai nulla: quante email hai ricevuto finora? immagino la risposta :O
e poi il tuo professore conosce il tuo nick su hwupgrade? sa che tu vieni su questo forum e ti chiami 84roller84? lo ritengo difficile...
forza spiega la traccia a zio 7 e dicci cosa non sai fare ;) :) :D

Goldrake_xyz
18-02-2005, 21:12
Originariamente inviato da 84roller84
ragazzi sono abbastanza disperato: ho l'esame di programmazione tra una settimana e non riesco a fare il programma: non è che potreste aiutarmi? se si mandatemi una mail che vi rispedisco il programma.grazie mille

Posta pure sul forum, io x mè posso aiutarti nei programmi in
C,Pascal,Fortran,Prolog,Lisp,ASMx86.

P.S. hai paura che qualche "amico" ti può scopiazzare la
soluzione .. ? :wtf:

Ciao. :)

84roller84
18-02-2005, 22:03
variante dell’algoritmo di ricerca binaria che fa uso di numeri casuali. L’algoritmo, da implementare con tecnica ricorsiva, è una variante della versione standard, in cui l’indice dell’elemento da confrontare non è l’elemento di indice mediano della porzione sotto esame, ma è un indice generato a caso tra quelli che definiscono la porzione in esame; per esempio se la porzione è individuata dal primo indice =10 e dall’ultimo indice = 20, piuttosto che l’elemento di indice mediano (=15), si genera a caso un indice in (10,11,12,..,19,20) e si considera l’elemento di quell’indice nel confronto con la chiave e come elemento di partizione della porzione nelle due successive porzioni. Usare la function rand(), il cui prototipo è in <stdlib.h>, per generare a ogni passo l’indice dell’elemento da considerare a quel passo.
Si ricorda che, se numero_casuale è dichiarata di tipo int, allora la chiamata numero_casuale=rand()%(n+1); genera un numero casuale intero (distribuzione uniforme) nell’insieme (0,1,2,..n).

praticamente non so come inserire l'indice generato a caso. di solito l'ho sempre fatto partire dall'indice mediano

Fenomeno85
19-02-2005, 10:03
semplicemente mettendo


mediano = rand()%N;


dove N è la grandezza dell'array così avrai valori che vanno da 0->N-1 che sono esattamente gli indici possibili di un array di dimensione N.

~§~ Sempre E Solo Lei ~§~

84roller84
19-02-2005, 11:38
no perdonami ma non ho capito
dovrei inserire tra gli int anche "mediano"?
io lo faccio scaturire dalla somma del primo eultimo indice dell'array diviso due. come dici tu, invece, dovrei già averlo tra le variabili. ho capito una cosa per un'altra?

Fenomeno85
19-02-2005, 11:51
se fai la divisione come indice (inf + sup) /2 utilizzi il metodo classico invece tu usi in rand il punto.

~§~ Sempre E Solo Lei ~§~

84roller84
19-02-2005, 11:55
quindi come dici tu dovrei sostituire al mio calcolo la tua stringa?

Fenomeno85
19-02-2005, 12:13
#define N 5

int binary (int arr[], int k){
int inf, sup, center;
bool flag;
inf = 0;
sup = N;
flag = true;
srand (time(NULL));
while (inf<=sup && flag){
do{
center = rand ()%N+inf;
}while (center > N-1);
if (arr[center]== k) flag = true;
else
if (arr[center]<k) inf = center +1;
else sup = center -1;
}
if (flag == 0) return center;
else return -1;
}


dovrebbe essre una cosa del genere

~§~ Sempre E Solo Lei ~§~

84roller84
19-02-2005, 12:17
ti ringrazio moltissimo ma...cos' bool flag?

Fenomeno85
19-02-2005, 12:40
è un flag che ti identifica se hai trovato il valore nella posizione


arr[center] == k


~§~ Sempre E Solo Lei ~§~

71104
19-02-2005, 20:21
non può saperlo; il tipo bool non esiste nell'ANSI C. :)
84roller84, al posto di bool mettici semplicemente char.
ciao

71104
19-02-2005, 20:21
e dimenticavo: al posto di "true" mettici 1 e al posto di "false" 0.
ariciao :)

tglman
20-02-2005, 00:08
Per rendere il codice un pò più performante puoi togliere totalmente la variabile flag e cambiare il codice in questo modo:


#define N 5

int binary (int arr[], int k){
int inf, sup, center;
bool flag;
inf = 0;
sup = N;
srand (time(NULL));
while (inf<=sup && flag){
do{
center = rand ()%N+inf;
}while (center > N-1);
if (arr[center]== k) break;
else
if (arr[center]<k) inf = center +1;
else sup = center -1;
}
if (arr[center]== k)return center;
else return -1;
}

The3DProgrammer
20-02-2005, 00:09
inoltre credo (dato l'orario :D) sia

if (arr[center]== k) flag = 0;

Goldrake_xyz
20-02-2005, 06:54
Originariamente inviato da 84roller84
variante dell’algoritmo di ricerca binaria che fa uso di numeri casuali. L’algoritmo, da implementare con tecnica ricorsiva, è una variante della versione standard, in cui l’indice dell’elemento da confrontare non è l’elemento di indice mediano della porzione sotto esame, ma è un indice generato a caso tra quelli che definiscono la porzione in esame; per esempio se la porzione è individuata dal primo indice =10 e dall’ultimo indice = 20, piuttosto che l’elemento di indice mediano (=15), si genera a caso un indice in (10,11,12,..,19,20) e si considera l’elemento di quell’indice nel confronto con la chiave e come elemento di partizione della porzione nelle due successive porzioni. Usare la function rand(), il cui prototipo è in <stdlib.h>, per generare a ogni passo l’indice dell’elemento da considerare a quel passo.
Si ricorda che, se numero_casuale è dichiarata di tipo int, allora la chiamata numero_casuale=rand()%(n+1); genera un numero casuale intero (distribuzione uniforme) nell’insieme (0,1,2,..n).

praticamente non so come inserire l'indice generato a caso. di solito l'ho sempre fatto partire dall'indice mediano

Provo a vedere se ho capito bene :
dati due indici interi positivi i e j con i <= j , l'elemento
mediano è k = i + ( j - i)/2, cioè se i = 10 e j = 20 , k = 15.
è corretto ?
Allora se devo "pescare" un elemento casuale frà i e j compresi,
questo sarà k = i + rand( )%(j - i + 1) ;

Piccolo prog. di prova x la funzione rand() :


# include <stdio.h>
# include <stdlib.h>
int main()
{int i,j,k;
i=10; j=20;
k=i+rand()%(j-i+1);
printf("i=%d, j=%d, k=%d \n",i,j,k);
return 0;
}

Fenomeno85
20-02-2005, 09:52
Originariamente inviato da tglman
Per rendere il codice un pò più performante puoi togliere totalmente la variabile flag e cambiare il codice in questo modo:


#define N 5

int binary (int arr[], int k){
int inf, sup, center;
bool flag;
inf = 0;
sup = N;
srand (time(NULL));
while (inf<=sup){
do{
center = rand ()%N+inf;
}while (center > N-1);
if (arr[center]== k) break;
else
if (arr[center]<k) inf = center +1;
else sup = center -1;
}
if (arr[center]== k)return center;
else return -1;
}



devi togliere dal ciclo principale la variabile flag se no può anche non entrare.
Non so se è + performante ... alla fine io leggiamo sempre una volta qualcosa ... al massimo per rendere + veloce possiamo far si che il flag sia contenuto in un registro della CPU forse così miglioriamo altrimenti stesso tempo :)

~§~ Sempre E Solo Lei ~§~

tglman
20-02-2005, 18:07
Susate ma non avevo dato peso alla variabile nella condizione del while errore che non dovrei fare essendo un programmatore (comunquer se lo compili te lo dice il compilatore che la variabile flag non è dichiarata)

Grazie comunque par la correzzione
Ciao\

tglman
20-02-2005, 18:22
in verita in velocita non guadagna molto con questo cambiamento di codice, evita solo un confronto di troppo nel while(che avevo dimenticato di togliere), ma resta comunque che permette di allocare una variabile in meno che in un programma che svolge solo queste operazioni non cambierebbe molto, ma se facciamo eseguire questo codice da 100 thread tutti insieme porterebbe ad allocare 100 byte di troppo.

Questo è un pò come cercare il pelo nell'uovo ma se si fossero utilizzati questi criteri nella costruzione di tutti i softwere, ora i nostri sistemi avrebbero avuto una potenza di elaborazione molto maggiore!!