Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Dopo più di un anno dal primo test drive ci siamo rimessi al volante della Renault 5 E-Tech Electric, questa volta utilizzandola come prima auto per circa due settimane. Scoprite con noi se il progetto convince ancora
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
Un notebook sviluppato in collaborazione con GoPro ma che risponde al meglio alle necessità di tutti coloro che creano contenuti video: robustezza, design, potenza di calcolo e funzionalità si abbinano al meglio tra di loro, pur se a prezzo di un costo elevato per via della tanta memoria onboard
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-02-2005, 18:58   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
[C] Ho capito bene questo programma?

Scusate sre ultimamente sono particolarmente attivo a fare domande sul forum ma il 23 ho l'esame e evo riuscire a capirci qualcosa di più per quella data

Si tratta di un programma che implementa l'algoritmo bubblesort mediante i puntatori a funzioni, il codice è questo:

/* Programma di ordinamento polivalente che utilizza dei puntatori a funzioni */

#include <stdio.h>
#define SIZE 10

void bubble(int *, const int, int (*)(int, int));
int ascending(const int, const int);
int descending(const int, const int);

int main(){

int a[SIZE] = {2,6,4,8,10,12,89,68,45,37};
int counter, order;

printf("Inserire 1 per ordinare in modo ascendente il vettore\n");
printf("Inserire 2 per ordinare in modo discendente il vettore\n");
scanf("%d", &order);

printf("\nDati nell'ordine originale:\n");

for(counter=0; counter<=SIZE-1; counter++) // Visualizza il vettore nell'ordine originale
printf("%4d", a[counter]);

if(order == 1){
bubble(a, SIZE, ascending);
printf("\nDati nell'ordine ascendente:\n");
}
else{
bubble(a, SIZE, descending);
printf("\nDati nell'ordine decrescente:\n");
}

for(counter=0; counter<=SIZE-1; counter++)
printf("%4d", a[counter]); // Visualizza il vettore precedentemente ordinato

printf("\n");
return 0;
}

void bubble(int *work, const int size, int (*compare)(int, int)){

int pass, count;

void swap(int *, int*); // Prototipo di void visibile solo in bubble, gli passo i puntatori ai due elementi da scambiare

for(pass=1; pass<=size-1; pass++)
for(count=0; count<=size-2; count++)
if((*compare)(work[count], work[count+1]))
swap(&work[count], &work[count+1]);
}

void swap(int *element1Ptr, int *element2Ptr){

int temp;

temp = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = temp;
}

int ascending(const int a, const int b){
return b<a;
}

int descending(const int a, const int b){
return b>a;
}


Le cose che non ho ciarissime sono le seguenti(mi sà un bel po')

1) La funzione bubble riceve come argomenti il vettore, la sua dimensione e un puntatore a una funzione (gli viene passata o ascending o descending) che a sua volta accettacome parametri 2 argomenti interi e restituisce un intero...giusto?

2) A seconda della scelta viene invocata bubble passandogli o ascening o descending...
int (*compare)(int, int) è il puntatore a una delle due funzioni?

3)Il prototipo di swap viene dichiarato nella funzione buble per rendere visibile swap solo al suo interno e non fuori di buble?

4)PUNTO CRUSCIALE !!! Ecco questa è la cosa che mi è meno chiara di tutti :

if((*compare)(work[count], work[count+1]))
swap(&work[count], &work[count+1]);

Che fa questa parte di codice?
Io credo, ma non ne sono affatto sicuro, che chiami una delle due funzioni ascending o descending(in base alla scelta fatta prima) e gli passi 2 elementi contigui del vettore.....e se è vero che b<a (oppure nel caso dui descending b>a) passa i due scalari alla funzione swap e scambia i valori...giusto?

non mi è per niente chiaro il return in ascending e descending...help meeee

Grazie mille
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2005, 19:28   #2
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Re: [C] Ho capito bene questo programma?

Quote:
Originariamente inviato da D4rkAng3l
1) La funzione bubble riceve come argomenti il vettore, la sua dimensione e un puntatore a una funzione (gli viene passata o ascending o descending) che a sua volta accettacome parametri 2 argomenti interi e restituisce un intero...giusto?
Esatto.

Quote:
Originariamente inviato da D4rkAng3l
2) A seconda della scelta viene invocata bubble passandogli o ascening o descending...
int (*compare)(int, int) è il puntatore a una delle due funzioni?
Giusto.

Quote:
Originariamente inviato da D4rkAng3l
3)Il prototipo di swap viene dichiarato nella funzione buble per rendere visibile swap solo al suo interno e non fuori di buble?
Si in quel caso swap è visibile solo all'interno di bouble o nel codice dopo l'implementazione di swap.

Quote:
Originariamente inviato da D4rkAng3l
4)PUNTO CRUSCIALE !!! Ecco questa è la cosa che mi è meno chiara di tutti :

if((*compare)(work[count], work[count+1]))
swap(&work[count], &work[count+1]);

Che fa questa parte di codice?
Io credo, ma non ne sono affatto sicuro, che chiami una delle due funzioni ascending o descending(in base alla scelta fatta prima) e gli passi 2 elementi contigui del vettore.....e se è vero che b<a (oppure nel caso dui descending b>a) passa i due scalari alla funzione swap e scambia i valori...giusto?

non mi è per niente chiaro il return in ascending e descending...help meeee

Grazie mille
Esatto. Il return ritorna semplicemente il risultato del confronto tra le due variabili.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2005, 21:47   #3
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
cioè fa ritornare TRUE se tipo a<b e FALSE se non è vero?
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
Questi pannelli solari non producono sol...
Tutte le offerte TOP del weekend Amazon,...
Nuovi coupon nascosti Amazon, al via que...
La vera rivoluzione di AMD Zen 6 potrebb...
Xiaomi 17T e 17T Pro scendono di prezzo ...
Un brano sull'apocalisse per pubblicizza...
Ryzen 7 9800X3D raffreddato senza ventol...
Pubblicità nei display BMW: lo spot a sc...
TSMC accelera sui 1,4 nanometri: produzi...
Razer compra StreamElements: cambia tutt...
Il Task Manager di Windows arriva su Mac...
Sony: PS5 resta più conveniente d...
Ubisoft spegne uno dei suoi esperimenti ...
Garante Privacy: multa da 9,5 milioni di...
Windows 11, Microsoft promette un sistem...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:23.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v