|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2007
Messaggi: 44
|
[C] Percentuale di caricamento
Ciao a tutti,
premetto che il programma è fatto sotto win 7, anche se per quello che sto facendo e devo fare non cambia nulla. Cmq quello che vorrei fare è la percentuale di caricamento di una parte di codice... Mi spiego meglio. In pratica ho fatto un esercizio con sul selection sort e sull'insertion sort che vengono eseguiti uno di fila all'altro dopo aver terminato l'ordinamento di un array. A me servirebbe sapere come fare per far si che durante l'ordinamento mi dica a che punto è in percentuale e magari anche una barra di caricamento... tutto ciò da terminale, cioè senza grafica o altra roba... es: [============ ] |/-|\ 50% gli slash,back-slash ecc sarebbe quell'affarino che gira durante il caricamento XD Grazie mille a tutti |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
non mi pare si possa fare in maniera standard, un sistema "fatto con l'accetta" sarebbe cancellare tutta la consolle (su windows con system("cls")
![]()
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Oct 2007
Messaggi: 44
|
perchè il mio problema è che non so come fare a creare un dato statico sullo schermo che si aggiorna...
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Intendi qualcosa di simile a questo?
Codice:
#include <stdio.h> #include <unistd.h> int main(int argc, char** argv) { for (int i = 0; i < 100; ++i) { printf("completato %d\r", i); fflush(stdout); sleep(1); } return 0; } |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Oct 2007
Messaggi: 44
|
ciao, spero di si, che sia quello che intendo...
me lo potresti spiegare? ho provato a compilarlo e mi dice che il for va il loop #EDIT 1 Codice:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <time.h> void isort(int a[], int n){ int i; int x=0; int j=0; for(i=1; i<n; i++){ x=a[i]; j=i; while (j >0 && x< a[j-1]) { a[j] = a[j-1]; j--; } a[j]= x; } } int main(int argc, char** argv) { clock_t start, end, dif; float tempo=0; int N=0; int M=0; printf("Inserisci la dimensione dell'array: \n"); scanf("%d",&N); printf("Ora inserisci il range degli elementi: \n"); scanf("%d",&M); int a[N]; // x isort // ISORT**************** printf("\n\n\t\t***ISORT***\n\n"); start=clock(); isort(a,N); end=clock(); dif=end-start; tempo=(float)dif/(float)CLOCKS_PER_SEC; for (int i = 0; i < 100; ++i) { printf("completato %d\r", i); fflush(stdout); sleep(1); } return 0; } In pratica oltre a far misurare il tempo vorrei una barra di caricamento con percentuale... es: [======== ========] 50% Ultima modifica di Ov3rLo4d : 03-11-2009 alle 22:50. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Il codice è semplice. printf usa \r per tornare indietro e fflush forza l'output in caso il terminale abbia un suo buffer interno. Ovviamente non basta fare copia e incolla per fare quello che vuoi te. devi modificare il codice del sort perché si preoccupi di aggiornare la barra di avanzamento mentre sta ordinando.
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Oct 2007
Messaggi: 44
|
SOLUZIONE TROVATA:
Codice:
#include <stdio.h> #include <unistd.h> typedef enum { false=0, true=!false } bool; typedef struct { /* Delimitatore iniziale (es. [ )*/ char StartDelimiter; /* Delimitatore finale (es. ] )*/ char EndDelimiter; /* Blocco centrale (es. = )*/ char Block; /* Ultimo blocco (es. > ) */ char CurBlock; /* Flag che indica se mostrare la percentuale di avanzamento o meno */ bool PrintPercent; } ProgressBarSettings; void PrintProgressBar(unsigned int Width, double Max, double Pos, bool update, ProgressBarSettings * Settings); int main() { int i; /* Inizializza le impostazioni della barra */ ProgressBarSettings pbs; pbs.StartDelimiter='['; pbs.EndDelimiter=']'; pbs.Block='='; pbs.CurBlock='>'; pbs.PrintPercent=true; printf("Progress: "); /* Mostra la barra vuota */ PrintProgressBar(40,80,0,false,&pbs); for(i=0;i<=80;i++) { /* Attende la pressione di un tasto (funzione non-standard) */ sleep(1); /* Aggiorna la barra di avanzamento */ PrintProgressBar(40,80,i,true,&pbs); } printf(" Done"); sleep(1); return 0; } void PrintProgressBar(unsigned int Width, double Max, double Pos, bool update, ProgressBarSettings * Settings) { |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:14.