Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271

    [c] mettere in pausa una stampa

    ho scritto un algoritmo per trovare tutte le possibili soluzioni di un problema e, man mano che vengono trovate, vengono anche stampate, però vorrei fare una cosa del tipo che se uno preme un tasto (P per esempio) finisce di stampare la soluzione corrente e và in pausa, per poi riprendere da dove ha lasciato e continuare.. si può fare?
    Avevo pensato ad usare direttamente il tasto pausa, ma in questo modo magari sta scrivendo ancora la soluzione (che occupa più righe) e quindi mettendo in pausa non trovo la soluzione completa.. si può risolvere? Posso in qualche modo dirgli, mentre stampa le soluzioni, di restare "in ascolto" per vedere se viene premuto un determinato tasto?

    Ci tengo a precisare che le soluzioni vengono calcolate, contate e stampate a volo, ma non vengono memorizzate, quindi visto che non le memorizzo non posso recuperare in alcun modo la soluzione numero X.. spero di essere stato chiaro..

  2. #2
    no, nonc'è niente di precostituito, devi lavorare sulla routine di stampa.
    Puoi usare un flag globale che interrompe la stampa quando settato esternamente dalla procedura di stampa, o richiamare durante la stampa una procedura esterna che gestisci come credi, o ....
    ciao
    sergio

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    si ma come faccio a lasciarlo "in ascolto"? cioè io ho una procedura che fa i conti, e finito di fare i conti stampa la soluzione chiamando la procedura StampaSoluzione.. quindi una cosa tipo questa..

    Procedura1{
    // fa i conti
    StampaSoluzione();
    }

    StampaSoluzione{
    // stampa la soluzione su una scacchiera, quindi su più righe)
    }

    ora cosa devo modificare, come e dove? sempre se si può fare.. perchè la procedura1 facendo i conti trova 1000 soluzioni (esempio) e per ogni soluzione che trova fà la stampa, non posso mettere una pausa alla fine di ogni soluzione altrimenti uno deve premere 1000 volte invio per vedere tutte le soluzioni, quindi volevo che andava avanti a mostrarle (più o meno una al secondo) e se schiaccio un tasto si ferma e mi fà vedere la soluzione corrente, quindi dopo aver finito di stamparla (terminata la procedura StampaSoluzione)..

  4. #4
    ti faccio un esempio banale di cosa intendo

    codice:
    #include <stdio.h>
    
    typedef void ( FUNZ )( unsigned int i, unsigned int j );
    
    void StampaSoluzione (FUNZ funz)
    {
    
    	unsigned int i, j ;
    	for ( i = 0; i < 16; i ++ )
    		for ( j = 0; j < 16; j ++ ) {
    			/* fa qualcosa */
    			funz ( i, j );
    		}
    }
    
    void call_funz ( unsigned int i, unsigned int j )
    {
    	printf ( "*" );
    }
    
    int main ()
    {
    	StampaSoluzione ( call_funz );
    	return ( 0 );
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    questo è un esempio di quello che dicevi, usare una procedura esterna da gestire come credo?? :master:
    Comunque.. visto che continuo a non capire qual'è la strada da imboccare, dove e come intervenire per effettuare il controllo sul tasto premuto e mettere l'esecuzione in pausa, passiamo alla pratica e vediamo se riusciamo a risolvere..
    la procedura che richiama la stampa è questa:

    codice:
    void Inserisci(int r, int m) {   
       int i;    
       if(r==N){      
          if (m==1) StampaSoluzione();      
          sol++;   
       }   
       else     
          for(i=0;i<N;i++) {       
             pos[r]=i;       
             if(Verifica(r)) Inserisci(r+1,m);     
          } 
    }
    mentre la procedura per la stampa della soluzione è questa:

    codice:
    void StampaSoluzione() {    
       int i,j;     
       for(i=0;i<N;i++) {        
          for(j=0;j<N;j++)          
             if(pos[i]==j) printf("X ");          
             else printf("- ");       
          printf("\n ");    
       } 
    }
    si può modificare per fare quello che dicevo? qualcosa tipo (in Inserisci): se viene premuto un tasto, StampaSoluzione e pausa, altrimenti solo StampaSoluzione? perchè se uso il getch l'esecuzione si interrompe fino a che non viene premuto un tasto, invece deve prevedere anche la possibilità che questo tasto non venga premuto..

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Parliamo di Windows (applicazione console) o Linux?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    Hai ragione, ho dimenticato di specificarlo.. l'applicazione deve girare su windows..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Allora potresti usare la funzione kbhit e la getch ... un esempio dell'uso di tali funzioni

    codice:
    #include <stdio.h>
    #include <conio.h>
    
    int main()
    {
      int c;
    	
      while(1)
      {
         if(kbhit())
         {
            c=getch();
            printf("%c\n", c);
         }
      }
    
      return 0;
    }
    che ti puo' servire (solo) per avere un'idea da applicare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    quindi questo kbhit verifica se viene premuto un tasto, giusto? quindi dovrei usare questo per vedere se viene premuto qualcosa, se si la catturo con getch e vado a vedere se, ad esempio, il carattere premuto è P, metto pausa.. ho capito bene?? mmm.. ora provo..

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    perfetto.. funziona a meraviglia.. grazie 1000!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.