Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Con un prezzo di 2.999 euro, il Panasonic Z95BEG entra nella fascia ultra-premium dei TV OLED: pannello Primary RGB Tandem, sistema di raffreddamento ThermalFlow, audio Technics integrato e funzioni gaming avanzate lo pongono come un punto di riferimento
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: 15820
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: 15820
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: 15820
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: 15820
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: 15820
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


Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
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...
La sorpresa di IAA Mobility è Xyt...
Le vetture elettriche Opel GSE: Mokka GS...
Star Wars: Knight of the Old Republic Re...
Scoperta un'enorme rete IPTV da pi&ugrav...
Anche Life is Strange diventerà u...
QSAN presenta la nuova serie XN1 di NAS ...
Abbiamo visto in anteprima nuova Renault...
Come ricaricare i veicoli elettrici sino...
Microsoft annuncia nuovi servizi azienda...
Roborock QV 35S spazza via lo sporco: po...
The Last of Us: arriva il primo Emmy per...
Firefox abbandona Linux a 32 bit: fine d...
Reti mobili italiane: chi vince e chi pe...
God of War: le riprese della serie TV ta...
Volkswagen ID. Cross Concept: design Pur...
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: 22:33.


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