Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Quattro modi di indossarlo, stessa app del Plaud Note Pro e integrazione con il desktop. Il registratore IA da indossare di Plaud eccelle in mobilità, ma resta vincolato all'abbonamento ed è facile da perdere
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
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


Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
L'IA sta prosciugando le riserve idriche...
Europa spaccata in due: Italia e Germani...
TOP 10 offerte Amazon del lunedì:...
State of Decay 3: trailer, data e la mos...
Iconico ed elegante: Samsung Galaxy S26 ...
Cybersecurity a misura di PMI: le soluzi...
Microsoft svela una speciale Xbox Series...
Perché l'IA agentica è la vera intellige...
Con il coupon torna a soli 34,19€ il car...
Resident Evil: Code Veronica torna in un...
AMD a un passo dal sorpasso? Il nuovo So...
Caricare l'auto elettrica o PHEV con la ...
UGREEN presenta i nuovi NASync GT con al...
Gli accessori auto da non perdere: aspir...
Questa bici elettrica è l'affare ...
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: 11:02.


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