Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
Abbiamo provato per diverse settimane il nuovo Magic V5 di HONOR, uno smartphone pieghevole che ci ha davvero stupito. Il device è il più sottile (solo 4.1mm) ma non gli manca praticamente nulla. Potenza garantita dallo Snapdragon 8 Elite, fotocamere di ottima qualità e batteria in silicio-carbonio che garantisce un'ottima autonomia. E il Prezzo? Vi diciamo tutto nella nostra recensione completa.
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro)
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro)
Google Pixel 10 Pro XL è il top di gamma della serie Pixel, presentando un ampio display Super Actua da 6.8 pollici insieme alle novità della serie, fra cui la ricarica wireless magnetica Pixelsnap e le nuove funzionalità AI avanzate. Il comparto fotografico include un sistema a tripla fotocamera con zoom Pro Res fino a 100x, mentre il processore Tensor G5 con 16GB di RAM garantisce prestazioni percepite molto elevate su Android.
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Forte della piattaforma Qualcomm Snapdragon X, il notebook Lenovo IdeaPad Slim 3 riesce a coniugare caratteristiche tecniche interessanti ad uno chassis robusto, con autonomia di funzionamento a batteria che va ben oltre la tipica giornata di lavoro. Un notebook dal costo accessibile pensato per l'utilizzo domestico o in ufficio, soprattutto con applicazioni native per architettura ARM
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-02-2015, 10:05   #1
turbobenza
Member
 
Iscritto dal: Feb 2009
Messaggi: 35
[C] Prestazioni algoritmi ordinamento

Salve sn alle prime armi con la programmazione. vorrei scrivere un codice che mi confronti due algoritmi di ordinamento a scelta (bubblesort e quicksort) e mi restituisca il tempo di esecuzione per entrambi per istanze di misura crescenti. Cercando su internet sono riuscito a mettere insieme un codice ma non riesco a farlo funzionare. Ve lo posto. Potete aiutarmi? grazie

Quote:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>


#define MAX 100


/*
* Legge in input il numero n ed n numeri interi
* che memorizza nell'array. Restituisce il numero
* di elementi letti (n).
*/

int leggi_array(int x[]) {
int i, n;

printf("Numero di elementi: ");
scanf("%d", &n);
for (i=0; i<n; i++) {
scanf("%d", &x[i]);
}
return(n);
}


/*
* Stampa in output l'array.
*/

void stampa_array(int x[], int n) {
int i;

for (i=0; i<n; i++) {
printf("%d ", x[i]);
}
printf("\n");
return;
}



/*
* Scambia il contanuto delle due variabili
* indirizzate dai puntatori x e y.
*/

void scambia(int *x, int *y) {
int z;

z = *x;
*x = *y;
*y = z;
return;
}



/*
* Funzione che implementa l'algoritmo Bubble sort.
* Riceve come argomento l'array ed il numero di
* elementi contenuti nell'array. Non restituisce alcun
* valore, ma modifica il contenuto dell'array, ordinandolo.
*/

void bubble_sort(int x[], int n) {
int flag=1, k=n-1, i;

while (flag == 1 && k > 0) {
flag = 0;
for (i=0; i<k; i++) {
if (x[i]>x[i+1]) {
scambia(&x[i], &x[i+1]);
flag = 1;
}
}
k = k-1;
}
return;



/*
* Trova_pivot: individua l'elemento pivot in
* V[i]...V[j]; se esistono almeno due elementi
* diversi allora l'elemento scelto come pivot
* e' il piu' grande fra i due. Restituisce -1
* se tutti gli elementi sono uguali.
*/

int trova_pivot(int V[], int i, int j) {
int k;

for (k=i+1; k<=j; k++) {
if (V[k]>V[i])
return(V[k]);
else
if (V[k]<V[i])
return(V[i]);
}
return(-1);
}


/*
* Partiziona: funzione per la ridistribuzione
* degli elementi in base al valore del "pivot".
*/

int partiziona(int V[], int p, int r, int pivot) {
int i, j;

i = p;
j = r;
do {
while (V[j]>=pivot) {
j = j-1;
}
while (V[i]<pivot) {
i = i+1;
}
if (i<j)
scambia(&V[i], &V[j]);
} while (i<j);
return(j);
}


/*
* Quick_sort: funzione ricorsiva
*/

void quick_sort(int V[], int p, int r) {
int q, pivot;

pivot = trova_pivot(V, p, r);
if (p<r && pivot!=-1) {
q = partiziona(V, p, r, pivot);
quick_sort(V, p, q);
quick_sort(V, q+1, r);
}
return;
}


/*
* Funzione principale
*/

int main(void) {
int n, A[100];
float t0, t1;

n = leggi_array(A);

t0 = ((float)clock())/CLOCKS_PER_SEC;
quick_sort(A, 0, n-1);
t1 = ((float)clock())/CLOCKS_PER_SEC;

printf("Il tempo impiegato da quick_sork: %f secondi", t1-t0);


stampa_array(A, n);

return 0;
}

Ultima modifica di turbobenza : 27-02-2015 alle 10:25.
turbobenza è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2015, 10:24   #2
turbobenza
Member
 
Iscritto dal: Feb 2009
Messaggi: 35
quando vado a compilare non me lo compila. credo ci sia un problema nel main della funzione principale che è quella che ho inserito alla fine del codice. ma non riesco a risolvere.
turbobenza è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2015, 11:04   #3
turbobenza
Member
 
Iscritto dal: Feb 2009
Messaggi: 35
syntax error at end of input...ho controllato le graffe sembra essere a posto..booooo
turbobenza è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2015, 14:39   #4
M@Rk0
Senior Member
 
L'Avatar di M@Rk0
 
Iscritto dal: May 2008
Città: Torino - Valenza (AL)
Messaggi: 1215
la richiesta specifica che sia il programma a restituire il tempo di esecuzione?
perchè io avrei fatto fatto due eseguibili (uno per ogni algoritmo) che prendono in input l'array da sortare e li avrei lanciati con http://it.wikipedia.org/wiki/Time_%28Unix%29
__________________
Win 10 x64 - NZXT H440 - Antec TP-750C - AsRock Z77 Extreme4 - Intel Core i5-3570k - 16GB DDR3 Corsair XMS3 1333Mhz CL9 - MSI GTX970 Gaming 4G - Samsung 850 Evo 256GB - WD 4TB Green SATA3 - Maxtor 500GB SATA2 - Seagate 500GB SATA2 - WD 500GB SATA2 - Seagate 160GB IDE - ASUS VW224T @ 1680x1050 @ 60Hz - Creative Inspire T6100
M@Rk0 è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2015, 15:29   #5
turbobenza
Member
 
Iscritto dal: Feb 2009
Messaggi: 35
Quote:
Originariamente inviato da M@Rk0 Guarda i messaggi
la richiesta specifica che sia il programma a restituire il tempo di esecuzione?
perchè io avrei fatto fatto due eseguibili (uno per ogni algoritmo) che prendono in input l'array da sortare e li avrei lanciati con http://it.wikipedia.org/wiki/Time_%28Unix%29
si si deve essere il programma che alla fine dell'inserimento dei valori random da ordinare e successivo ordinamento, mi restituisca il tempo impiegato per entrambi gli algoritmi.
turbobenza è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2015, 09:27   #6
M@Rk0
Senior Member
 
L'Avatar di M@Rk0
 
Iscritto dal: May 2008
Città: Torino - Valenza (AL)
Messaggi: 1215
comunque, basta indentare bene il codice per vedere che alla fine della funzione bubble_sort manca la graffa dopo al return

inoltre nel main chiami solo il quick sort, l'altro non lo fai
__________________
Win 10 x64 - NZXT H440 - Antec TP-750C - AsRock Z77 Extreme4 - Intel Core i5-3570k - 16GB DDR3 Corsair XMS3 1333Mhz CL9 - MSI GTX970 Gaming 4G - Samsung 850 Evo 256GB - WD 4TB Green SATA3 - Maxtor 500GB SATA2 - Seagate 500GB SATA2 - WD 500GB SATA2 - Seagate 160GB IDE - ASUS VW224T @ 1680x1050 @ 60Hz - Creative Inspire T6100

Ultima modifica di M@Rk0 : 02-03-2015 alle 09:35.
M@Rk0 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2015, 10:38   #7
turbobenza
Member
 
Iscritto dal: Feb 2009
Messaggi: 35
purtroppo sono fresco di programmazione. non è che sappia come fare perchè avevo provato a chiamare il bubblesort ma ricevevo degli errori. non riesco a rendere il codice funzionante
turbobenza è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2015, 11:14   #8
M@Rk0
Senior Member
 
L'Avatar di M@Rk0
 
Iscritto dal: May 2008
Città: Torino - Valenza (AL)
Messaggi: 1215
allora intanto bisogna aver voglia di leggere e capire quello che ti dicono gli altri:
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
posta gli errori di compilazione no?
Quote:
Originariamente inviato da turbobenza Guarda i messaggi
syntax error at end of input...ho controllato le graffe sembra essere a posto..booooo
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
vabbè, non ho capito se lo stai facendo apposta oppure no:

fai "copia e incolla" dell'output del compilatore.
e non l'hai fatto.
nello specifico l'output dovrebbe essere:
Codice:
marco@vmwx:~/Scrivania$ gcc hwu.c -o hwu
hwu.c: In function ‘bubble_sort’:
hwu.c:166:1: error: expected declaration or statement at end of input
 }
 ^
marco@vmwx:~/Scrivania$
cosa vuol dire? molto probabilmente che manca una graffa o un ; da qualche parte. dove? in questo caso molto semplice bastava indentare bene il codice, a questo punto notavi che dopo un return definisci direttamente una funzione nuova, senza chiudere con la graffa quella prima
Quote:
Originariamente inviato da M@Rk0 Guarda i messaggi
comunque, basta indentare bene il codice per vedere che alla fine della funzione bubble_sort manca la graffa dopo al return

inoltre nel main chiami solo il quick sort, l'altro non lo fai
Quote:
Originariamente inviato da turbobenza Guarda i messaggi
purtroppo sono fresco di programmazione. non è che sappia come fare perchè avevo provato a chiamare il bubblesort ma ricevevo degli errori. non riesco a rendere il codice funzionante
ti ho appena scritto come fare per farlo funzionare. devi aggiungere la graffa alla fine del bubble_sort. e devi aggiungere la chiamata all'altro algoritmo di sorting, nello stesso modo in cui l'hai fatto per il bubble.

più di così, non te lo possiamo scrivere noi il codice. se davvero sei in difficoltà, parti da problemi più semplici. per esempio, in questo codice passi puntatori alle funzioni. sai il perché? sai cosa sono e come funzionano? il fatto che tu dica "Cercando su internet sono riuscito a mettere insieme un codice" mi fa pensare a "non molto" come risposta
__________________
Win 10 x64 - NZXT H440 - Antec TP-750C - AsRock Z77 Extreme4 - Intel Core i5-3570k - 16GB DDR3 Corsair XMS3 1333Mhz CL9 - MSI GTX970 Gaming 4G - Samsung 850 Evo 256GB - WD 4TB Green SATA3 - Maxtor 500GB SATA2 - Seagate 500GB SATA2 - WD 500GB SATA2 - Seagate 160GB IDE - ASUS VW224T @ 1680x1050 @ 60Hz - Creative Inspire T6100

Ultima modifica di M@Rk0 : 02-03-2015 alle 11:17.
M@Rk0 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2015, 13:56   #9
turbobenza
Member
 
Iscritto dal: Feb 2009
Messaggi: 35
ho provato a modificare il main in questo modo:

Codice:
int main(void) {
  int n, A[100];
  float t0, t1;
  
  n = leggi_array(A); 
  
  t0 = ((float)clock())/CLOCKS_PER_SEC;
  quick_sort(A, 0, n-1);
  t1 = ((float)clock())/CLOCKS_PER_SEC;
  
  printf("Il tempo impiegato da quick_sork: %f secondi", t1-t0);
  
  t0 = ((float)clock())/CLOCKS_PER_SEC;
  bubble_sort(v, n);
  t1 = ((float)clock())/CLOCKS_PER_SEC;
  
  printf("Il tempo impiegato da bubble_sork: %f secondi", t1-t0);
  
  stampa_array(A, n);
  
  return 0;
  }
}
mi restituisce questo errore: `v' undeclared (first use in this function)
turbobenza è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2015, 14:11   #10
M@Rk0
Senior Member
 
L'Avatar di M@Rk0
 
Iscritto dal: May 2008
Città: Torino - Valenza (AL)
Messaggi: 1215
Quote:
Originariamente inviato da turbobenza Guarda i messaggi
ho provato a modificare il main in questo modo:

Codice:
int main(void) {
  int n, A[100];
  float t0, t1;
  
  n = leggi_array(A); 
  
  t0 = ((float)clock())/CLOCKS_PER_SEC;
  quick_sort(A, 0, n-1);
  t1 = ((float)clock())/CLOCKS_PER_SEC;
  
  printf("Il tempo impiegato da quick_sork: %f secondi", t1-t0);
  
  t0 = ((float)clock())/CLOCKS_PER_SEC;
  bubble_sort(v, n);
  t1 = ((float)clock())/CLOCKS_PER_SEC;
  
  printf("Il tempo impiegato da bubble_sork: %f secondi", t1-t0);
  
  stampa_array(A, n);
  
  return 0;
  }
}
mi restituisce questo errore: `v' undeclared (first use in this function)
vabbè, io ora non voglio offendere nessuno e questo voglio che sia chiaro, chiedo solo: è il primo programma che provi a scrivere? così almeno ti si sa indirizzare in modo corretto.
chiusa questa parentesi, andiamo per piccoli passi: sai cosa significa l'errore che ti ha dato? o meglio, cosa pensi che voglia dire? hai idea di come usare la funzione quick_sort (tanto più che hai la bubble_sort come riferimento), e soprattutto di cosa faccia?
secondo me, ripeto, dovresti partire proprio dalle basi, non copiaincollare codice in giro sperando che funzioni (o questa è l'impressione che mi sono fatto da questo thread)
__________________
Win 10 x64 - NZXT H440 - Antec TP-750C - AsRock Z77 Extreme4 - Intel Core i5-3570k - 16GB DDR3 Corsair XMS3 1333Mhz CL9 - MSI GTX970 Gaming 4G - Samsung 850 Evo 256GB - WD 4TB Green SATA3 - Maxtor 500GB SATA2 - Seagate 500GB SATA2 - WD 500GB SATA2 - Seagate 160GB IDE - ASUS VW224T @ 1680x1050 @ 60Hz - Creative Inspire T6100
M@Rk0 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2015, 14:20   #11
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15819
Quote:
Originariamente inviato da turbobenza Guarda i messaggi
ho provato a modificare il main in questo modo:

Codice:
int main(void) {
  int n, A[100];
  float t0, t1;
  
  n = leggi_array(A); 
  
  t0 = ((float)clock())/CLOCKS_PER_SEC;
  quick_sort(A, 0, n-1);
  t1 = ((float)clock())/CLOCKS_PER_SEC;
  
  printf("Il tempo impiegato da quick_sork: %f secondi", t1-t0);
  
  t0 = ((float)clock())/CLOCKS_PER_SEC;
  bubble_sort(v, n);
  t1 = ((float)clock())/CLOCKS_PER_SEC;
  
  printf("Il tempo impiegato da bubble_sork: %f secondi", t1-t0);
  
  stampa_array(A, n);
  
  return 0;
  }
}
mi restituisce questo errore: `v' undeclared (first use in this function)
se il vettore l'hai chiamato A, perchè nel bubble_sort gli passi v?

Gli errori che restituisce il compilatore non sono messaggi scritti a caso, se li leggi ti dicono quello che non va "`v' undeclared" indica che non capisce cos'è "v"
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2015, 14:22   #12
M@Rk0
Senior Member
 
L'Avatar di M@Rk0
 
Iscritto dal: May 2008
Città: Torino - Valenza (AL)
Messaggi: 1215
edit: fail mio
__________________
Win 10 x64 - NZXT H440 - Antec TP-750C - AsRock Z77 Extreme4 - Intel Core i5-3570k - 16GB DDR3 Corsair XMS3 1333Mhz CL9 - MSI GTX970 Gaming 4G - Samsung 850 Evo 256GB - WD 4TB Green SATA3 - Maxtor 500GB SATA2 - Seagate 500GB SATA2 - WD 500GB SATA2 - Seagate 160GB IDE - ASUS VW224T @ 1680x1050 @ 60Hz - Creative Inspire T6100
M@Rk0 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2015, 14:27   #13
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15819
nell'esercizio però c'è un errore di fondo, su un vettore inserito a mano, quindi diciamo con una ventina di elementi, ti risulterà esattamente lo stesso tempo di ordinamento, andrebbe fatto almeno su 100.000 elementi per vedere qualche differenza
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2015, 10:26   #14
turbobenza
Member
 
Iscritto dal: Feb 2009
Messaggi: 35
si esatto simone..è un altro problema che mi sono posto ma non so come risolvere..avevo pensato a generare migliaia di numeri random ma non so come fare
turbobenza è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2015, 10:31   #15
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15819
Quote:
Originariamente inviato da turbobenza Guarda i messaggi
si esatto simone..è un altro problema che mi sono posto ma non so come risolvere..avevo pensato a generare migliaia di numeri random ma non so come fare
un bel ciclo for e la funzione rand() fanno al caso tuo

http://www.html.it/pag/15491/il-ciclo-for/
http://www.cplusplus.com/reference/cstdlib/rand/
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2015, 10:36   #16
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15819
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
la prima cosa che devi fare è prendere un libro e studiare le basi del C.

dopo X settimane puoi porti problemi avanzati.

spero che non siano esercizi richiesti a livello universitario per una facoltà di informatica o ingegneria, altrimenti prevedo giorni molto duri...
purtroppo ho visto pure di peggio al Politecnico, avevo parecchi compagni di corso che veninavo dal liceo classico e non avevano mai sentito nominare il C siamo partiti proprio dalle basi, non ti dico che noia per chi come me era perito informatico

in quel periodo ho notato che la cosa più difficie per i poco avvezzi all'informatica era l'indentazione, ho visto cose che voi umani....

Ultima modifica di Simonex84 : 03-03-2015 alle 10:39.
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2015, 10:46   #17
Simonex84
Senior Member
 
L'Avatar di Simonex84
 
Iscritto dal: Jun 2003
Messaggi: 15819
Quote:
Originariamente inviato da Antonio23 Guarda i messaggi
non è tanto questione di che scuola hai fatto (io ho fatto lo scientifico e il C l'avevo visto di striscio per fatti miei, mentre ho visto tanti venire dagli istituti tecnici e mantenere la loro mentalità da scuola superiore anche studiando materie prettamente tecniche che avevano già fatto), ma di come ti approcci allo studio di una nuova materia.

prendere pezzi di codice da internet e pregare che tutto funzioni non è un buon modo di cominciare.
verissimo, in questo caso turbobenza dovrebbe prendere carta e penna e partire con un bel diagramma di flusso, altro che google....

Poi magari una lettura ad un manuale di C non avrebbe guastato, ma se non hai in testa l'algoritmo non si va da nessuna parte
Simonex84 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli Recensione OnePlus Watch 3 43mm: lo smartwatch c...
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura BOOX Note Air4 C è uno spettacolo: il tab...
3 minuti: è il tempo per vedere l...
Gli Amazfit sono ora gli smartwatch più ...
Rowenta alza la posta: scopa elettrica s...
6 robot per le pulizie completi in offer...
Friggitrice ad aria Cecofry Full InoxBla...
iPhone 16 Pro Max a 10€ in più del minim...
Una chiavetta USB, ma SanDisk Ultra Slid...
La bolla dell'AI: perché l'econom...
Lo smartphone dovrebbe essere usato solo...
SpaceX: i video e le foto dello spettaco...
Anche a Pescara si passa ai fatti: e-bik...
La One UI 8 è pronta: Samsung con...
Xiaomi annuncia l'arrivo in Italia dei R...
La Cina stupisce ancora: test per la tur...
L'iconico iMac G3 diventerà un set LEGO?...
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: 21:10.


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