Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-02-2005, 19: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, 20: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, 22: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


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
La Cina si prepara al primo lancio orbit...
Sale LAN, la Manovra 2027 introduce una ...
11 prezzi imperdibili in Amazon: non sol...
Giù i prezzi di Xiaomi 17T e Xiao...
Una tassa di 5,5 centesimi su ogni gigab...
Vuoi clonare un videogioco con l'IA? Cla...
Furto da 6,3 miliardi di dollari, Binanc...
Gli USA dipendono dai robot stranieri: T...
Volkswagen non ha più soldi per l...
Telescopio spaziale Hubble: la NASA cerc...
Più sottile e potente: le nuove i...
Il JPL estende la vita operativa della s...
DAZN Full è in offerta: tutta la ...
GTA 6 su PC potrebbe arrivare prima del ...
Da zero al tracciato in secondi: LibreCo...
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: 18:07.


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