|
|||||||
|
|
|
![]() |
|
|
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 23: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: 13:06.


















