Pagina 2 di 2

Re: [c] stampa di un disegno nel terminale

Inviato: domenica 28 dicembre 2008, 20:03
da cristian_c
Ciao, ho risolto l'ultimo problema:

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>
#include <linux/termios.h>

int colonne()
{
    int fd = fileno(stdin);
    struct winsize s;

    if (!isatty(fd)) {
        fprintf(stderr, "Not a terminal\n");
        exit(1);
    }
    ioctl(fd, TIOCGWINSZ, &s);
    return s.ws_col;
}

main()
{
 int t1,t2;
 char c;
 int col,rig;
 int i,j,iold,jold,q,cont;
 printf("\n   *** PROGRAMMA PER LA RAPPRESENTAZIONE DELLE TESSERE DEL DOMINO ***\n\n");
 printf("\nPremere:\n1- Per visualizzare una tessera in particolare\n2- Per visualizzare l'intero set di tessere\n\n");
 printf("\t\t\t\t\t\t\tScelta:");
 scanf("%c",&c);
 if (c == '1') {
     printf("\n// l'utente dovrà inserire una coppia di cifre che rappresentano i numeri\n// presenti sulla superficie della tessera che si vuole visualizzare\n\n");
     printf("prima cifra(da 0 a 6): ");
     scanf("%d",&t1);
     printf("seconda cifra(da 0 a 6): ");
     scanf("%d",&t2);
     if ((t1>=0 && t1<=6) && (t2>=0 && t2<=6)) {
         printf("\n"); 
         if (t1==0 || t1==1) printf("   ");
         if (t1==2 || t1==3) printf("*  ");
         if (t1==4 || t1==5 || t1==6) printf("* *");
         printf(" | ");
         if (t2==0 || t2==1) printf("   ");
         if (t2==2 || t2==3) printf("*  ");
         if (t2==4 || t2==5 || t2==6) printf("* *");
         printf("\n");
         if (t1==1 || t1==3 || t1==5) printf(" * ");
         if (t1==0 || t1==2 || t1==4) printf("   ");
         if (t1==6) printf("* *");
         printf(" | ");
         if (t2==1 || t2==3 || t2==5) printf(" * ");
         if (t2==0 || t2==2 || t2==4) printf("   ");
         if (t2==6) printf("* *"); 
         printf("\n");
         if (t1==0 || t1==1) printf("   ");
         if (t1==2 || t1==3) printf("  *");
         if (t1==4 || t1==5 || t1==6) printf("* *");
         printf(" | ");
         if (t2==0 || t2==1) printf("   ");
         if (t2==2 || t2==3) printf("  *");
         if (t2==4 || t2==5 || t2==6) printf("* *"); 
         printf("\n\n"); 
     }
 }
 if (c == '2') {
     printf("Visualizzazione delle 28 tessere in corso.Premere un tasto per continuare...");
     getchar(); getchar();
     col=colonne();
     q=col/9;
     if (q*9+q-1>col) q=q-1;
     cont=1;
     rig=0;
     iold=0;
     jold=0;
     j=0;
     while (j<7) {
       i=j;
       while(i<7) {
             if (cont%q==1 && cont!=1) printf("\n");  
             if (rig==0) {
                 if (i==0 || i==1) printf("   ");
                 if (i==2 || i==3) printf("*  ");
                 if (i==4 || i==5 || i==6) printf("* *");
                 printf(" | ");
                 if (j==0 || j==1) printf("   ");
                 if (j==2 || j==3) printf("*  ");
                 if (j==4 || j==5 || j==6) printf("* *");
             }
             if (rig==1) {
                 if (i==1 || i==3 || i==5) printf(" * ");
                 if (i==0 || i==2 || i==4) printf("   ");
                 if (i==6) printf("* *");
                 printf(" | ");
                 if (j==1 || j==3 || j==5) printf(" * ");
                 if (j==0 || j==2 || j==4) printf("   ");
                 if (j==6) printf("* *"); 
             }
             if (rig==2) {
                 if (i==0 || i==1) printf("   ");
                 if (i==2 || i==3) printf("  *");
                 if (i==4 || i==5 || i==6) printf("* *");
                 printf(" | ");
                 if (j==0 || j==1) printf("   ");
                 if (j==2 || j==3) printf("  *");
                 if (j==4 || j==5 || j==6) printf("* *");                           
             }
             if (cont%q==0) {
                 if (rig==2) {
                     iold=i; jold=j;
                     rig=-1;
                 }
                 i=iold; j=jold;
                 rig++;
             }
             if (cont%q!=0) printf(" ");
             i++;
             cont++;
       }
       j++;
     }  
     printf("\n\n");         
 }
}
ma non ci siamo comunque  :( :

Codice: Seleziona tutto

cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ ./domino
   *** PROGRAMMA PER LA RAPPRESENTAZIONE DELLE TESSERE DEL DOMINO ***


Premere:
1- Per visualizzare una tessera in particolare
2- Per visualizzare l'intero set di tessere

							Scelta:2
Visualizzazione delle 28 tessere in corso.Premere un tasto per continuare...
    |         |     *   |     *   |     * * |     * * |     * * |         |    
 *  |         |      *  |         |      *  |     * * |      *  |  *      |  * 
    |       * |       * |     * * |     * * |     * * |         |       * |    
*   |     * * |     * * |     * * |     *   | *   *   | *   * * | *   * * | *  
 *  |  *      |  *   *  |  *  * * |  *      |      *  |         |      *  |    
  * |     * * |     * * |     * * |       * |   *   * |   * * * |   * * * |   *
* * | *   *   | *   * * | *   * * | *   * * | *   * * | * * * * | * * * * | * *
* * |      *  |  *      |  *   *  |  *  * * |  *      |      *  |     * * |    
* * |   *   * |   * * * |   * * * |   * * * |   * * * | * * * * | * * * * | * *
* * | * * * * | * * * * | * * 

cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ 

sembra cose tutto fosse sparato a caso.... avete qualche idea per venirne a capo?  ::)

Re: [c] stampa di un disegno nel terminale

Inviato: domenica 28 dicembre 2008, 21:22
da cristian_c
Ho provato con gdb, ma anche esso ha uno strano comportamento  ??? ::) :-\ :

Codice: Seleziona tutto

(gdb) next
82	                 if (j==0 || j==1) printf("   ");
8: i = 5
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 6
2: q = 8
1: col = 80
(gdb) next
83	                 if (j==2 || j==3) printf("*  ");
8: i = 5
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 6
2: q = 8
1: col = 80
(gdb) next
84	                 if (j==4 || j==5 || j==6) printf("* *");
8: i = 5
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 6
2: q = 8
1: col = 80
(gdb) next
86	             if (rig==1) {
8: i = 5
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 6
2: q = 8
1: col = 80
(gdb) next
95	             if (rig==2) {
8: i = 5
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 6
2: q = 8
1: col = 80
(gdb) next
104	             if (cont%q==0) {
8: i = 5
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 6
2: q = 8
1: col = 80
(gdb) next
112	             if (cont%q!=0) printf(" ");
8: i = 5
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 6
2: q = 8
1: col = 80
(gdb) next
113	             i++;
8: i = 5
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 6
2: q = 8
1: col = 80
(gdb) next
114	             cont++;
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 6
2: q = 8
1: col = 80
(gdb) next
75	       while(i<7) {
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
76	             if (cont%q==1 && cont!=1) printf("\n");  
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
77	             if (rig==0) {
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
78	                 if (i==0 || i==1) printf("   ");
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
79	                 if (i==2 || i==3) printf("*  ");
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
80	                 if (i==4 || i==5 || i==6) printf("* *");
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
81	                 printf(" | ");
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
82	                 if (j==0 || j==1) printf("   ");
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
83	                 if (j==2 || j==3) printf("*  ");
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
84	                 if (j==4 || j==5 || j==6) printf("* *");
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
86	             if (rig==1) {
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
95	             if (rig==2) {
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
104	             if (cont%q==0) {
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
112	             if (cont%q!=0) printf(" ");
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
113	             i++;
8: i = 6
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
114	             cont++;
8: i = 7
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 7
2: q = 8
1: col = 80
(gdb) next
75	       while(i<7) {
8: i = 7
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
116	       j++;
8: i = 7
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
73	     while (j<7) {
8: i = 7
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
74	       i=j;
8: i = 7
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
75	       while(i<7) {
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
76	             if (cont%q==1 && cont!=1) printf("\n");  
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
77	             if (rig==0) {
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
78	                 if (i==0 || i==1) printf("   ");
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
79	                 if (i==2 || i==3) printf("*  ");
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
80	                 if (i==4 || i==5 || i==6) printf("* *");
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
81	                 printf(" | ");
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
82	                 if (j==0 || j==1) printf("   ");
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
83	                 if (j==2 || j==3) printf("*  ");
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
84	                 if (j==4 || j==5 || j==6) printf("* *");
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
86	             if (rig==1) {
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
95	             if (rig==2) {
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
104	             if (cont%q==0) {
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
105	                 if (rig==2) {
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
109	                 i=iold; j=jold;
8: i = 1
7: j = 1
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
110	                 rig++;
8: i = 0
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 0
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
112	             if (cont%q!=0) printf(" ");
8: i = 0
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 1
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
113	             i++;
8: i = 0
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 1
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
114	             cont++;
8: i = 1
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 1
3: cont = 8
2: q = 8
1: col = 80
(gdb) next
75	       while(i<7) {
8: i = 1
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 1
3: cont = 9
2: q = 8
1: col = 80
(gdb) next
76	             if (cont%q==1 && cont!=1) printf("\n");  
8: i = 1
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 1
3: cont = 9
2: q = 8
1: col = 80
(gdb) next
    |         |     *   |     *   |     * * |     * * |     * * |         |    
77	             if (rig==0) {
8: i = 1
7: j = 0
6: jold = 0
5: iold = 0
4: rig = 1
3: cont = 9
2: q = 8
1: col = 80
(gdb) 


Re: [c] stampa di un disegno nel terminale

Inviato: lunedì 29 dicembre 2008, 15:52
da cristian_c
Ho risolto numerosi bug  ;) :

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>
#include <linux/termios.h>

int colonne()
{
    int fd = fileno(stdin);
    struct winsize s;

    if (!isatty(fd)) {
        fprintf(stderr, "Not a terminal\n");
        exit(1);
    }
    ioctl(fd, TIOCGWINSZ, &s);
    return s.ws_col;
}

main()
{
 int t1,t2;
 char c;
 int col,rig;
 int i,j,iold,jold,q,cont;
 printf("\n   *** PROGRAMMA PER LA RAPPRESENTAZIONE DELLE TESSERE DEL DOMINO ***\n\n");
 printf("\nPremere:\n1- Per visualizzare una tessera in particolare\n2- Per visualizzare l'intero set di tessere\n\n");
 printf("\t\t\t\t\t\t\tScelta:");
 scanf("%c",&c);
 if (c == '1') {
     printf("\n// l'utente dovrà inserire una coppia di cifre che rappresentano i numeri\n// presenti sulla superficie della tessera che si vuole visualizzare\n\n");
     printf("prima cifra(da 0 a 6): ");
     scanf("%d",&t1);
     printf("seconda cifra(da 0 a 6): ");
     scanf("%d",&t2);
     if ((t1>=0 && t1<=6) && (t2>=0 && t2<=6)) {
         printf("\n"); 
         if (t1==0 || t1==1) printf("   ");
         if (t1==2 || t1==3) printf("*  ");
         if (t1==4 || t1==5 || t1==6) printf("* *");
         printf(" | ");
         if (t2==0 || t2==1) printf("   ");
         if (t2==2 || t2==3) printf("*  ");
         if (t2==4 || t2==5 || t2==6) printf("* *");
         printf("\n");
         if (t1==1 || t1==3 || t1==5) printf(" * ");
         if (t1==0 || t1==2 || t1==4) printf("   ");
         if (t1==6) printf("* *");
         printf(" | ");
         if (t2==1 || t2==3 || t2==5) printf(" * ");
         if (t2==0 || t2==2 || t2==4) printf("   ");
         if (t2==6) printf("* *"); 
         printf("\n");
         if (t1==0 || t1==1) printf("   ");
         if (t1==2 || t1==3) printf("  *");
         if (t1==4 || t1==5 || t1==6) printf("* *");
         printf(" | ");
         if (t2==0 || t2==1) printf("   ");
         if (t2==2 || t2==3) printf("  *");
         if (t2==4 || t2==5 || t2==6) printf("* *"); 
         printf("\n\n"); 
     }
 }
 if (c == '2') {
     printf("Visualizzazione delle 28 tessere in corso.Premere un tasto per continuare...");
     getchar(); getchar();
     col=colonne();
     q=col/9;
     if (q*9+q-1>col) q=q-1;
     cont=1;
     rig=0;
     iold=-1;
     jold=0;
     j=0;
     while (j<7) {
       i=j;
       while(i<7) {
             if (cont%q==1 && cont!=1) printf("\n");  
             if (rig==0) {
                 if (i==0 || i==1) printf("   ");
                 if (i==2 || i==3) printf("*  ");
                 if (i==4 || i==5 || i==6) printf("* *");
                 printf(" | ");
                 if (j==0 || j==1) printf("   ");
                 if (j==2 || j==3) printf("*  ");
                 if (j==4 || j==5 || j==6) printf("* *");
             }
             if (rig==1) {
                 if (i==1 || i==3 || i==5) printf(" * ");
                 if (i==0 || i==2 || i==4) printf("   ");
                 if (i==6) printf("* *");
                 printf(" | ");
                 if (j==1 || j==3 || j==5) printf(" * ");
                 if (j==0 || j==2 || j==4) printf("   ");
                 if (j==6) printf("* *"); 
             }
             if (rig==2) {
                 if (i==0 || i==1) printf("   ");
                 if (i==2 || i==3) printf("  *");
                 if (i==4 || i==5 || i==6) printf("* *");
                 printf(" | ");
                 if (j==0 || j==1) printf("   ");
                 if (j==2 || j==3) printf("  *");
                 if (j==4 || j==5 || j==6) printf("* *");                           
             }
             if (cont%q==0 || i==6 && j==6) {
                 if (rig==2) {
                     iold=i; jold=j;
                     rig=-1;
                 }
                 else if (cont%q!=0) printf("\n");
                 i=iold; j=jold;
                 rig++;
             }
             if (cont%q!=0) printf(" ");
             i++;
             cont++;
       }
       j++;
     }  
     printf("\n\n");         
 }
}
I tasselli stanno andando tutti al loro posto.  :) Ora resta solo un piccolo problema di natura sconosciuta nella penultima riga come potete vedere dall'output:

Codice: Seleziona tutto

cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ ./domino
   *** PROGRAMMA PER LA RAPPRESENTAZIONE DELLE TESSERE DEL DOMINO ***


Premere:
1- Per visualizzare una tessera in particolare
2- Per visualizzare l'intero set di tessere

							Scelta:2
Visualizzazione delle 28 tessere in corso.Premere un tasto per continuare...
    |         |     *   |     *   |     * * |     * * |     * * |         |    
    |      *  |         |      *  |         |      *  |     * * |      *  |  * 
    |         |       * |       * |     * * |     * * |     * * |         |    
*   |     *   |     * * |     * * |     * * |     *   | *   *   | *   * * | *  
    |  *   *  |  *      |  *   *  |  *  * * |  *      |      *  |         |    
  * |       * |     * * |     * * |     * * |       * |   *   * |   * * * |   *
* * | *   * * | *   *   | *   * * | *   * * | *   * * | *   * * | * * * * | * *
 *  |     * * |      *  |  *      |  *   *  |  *  * * |  *      |      *  |    
* * |   * * * |   *   * |   * * * |   * * * |   * * * |   * * * | * * * * | * *
* * | * * * * | * * * * | * * * * | * *
 * * |      *  |  *  * * |  *  * * | * *
* * | * * * * | * * * * | * * * * | * * 

cristiancozzolino@cristiancozzolino-laptop:~/programmazione$ 

secondo voi perchè la penultima riga viene spostata a destra di un carattere, e come si puo' risolvere?  ???

Re: [c] stampa di un disegno nel terminale

Inviato: martedì 30 dicembre 2008, 17:19
da crap0101
ho notato che se alla riga 103

Codice: Seleziona tutto

             if (cont%q!=0) printf(" ");
metti
printf("")
senza lo spazio la penultimariga va a posto

Codice: Seleziona tutto

Premere:
1- Per visualizzare una tessera in particolare
2- Per visualizzare l'intero set di tessere

                                                        Scelta:2
Visualizzazione delle 28 tessere in corso.Premere un tasto per continuare...
    |        |    *   |    *   |    * * |    * * |    * * |        |
    |     *  |        |     *  |        |     *  |    * * |     *  |  *
    |        |      * |      * |    * * |    * * |    * * |        |
*   |    *   |    * * |    * * |    * * |    *   | *  *   | *  * * | *
    |  *  *  |  *     |  *  *  |  * * * |  *     |     *  |        |
  * |      * |    * * |    * * |    * * |      * |   *  * |   ** * |   *
* * | *  * * | *  *   | *  * * | *  * * | *  * * | *  * * | * ** * | * *
 *  |    * * |     *  |  *     |  *  *  |  * * * |  *     |     *  |
* * |   ** * |   *  * |   ** * |   ** * |   ** * |   ** * | * ** * | * *
* * | * ** * | * ** * | * ** * | * *
* * |     *  |  * * * |  * * * | * *
* * | * ** * | * ** * | * ** * | * *