Προς το περιεχόμενο

Επείγουσα επίλυση άσκησης


georginos1989

Προτεινόμενες αναρτήσεις

Δημοσ.

Αν τους πινακες left/middle/right τους έχεις μονο για την εκτυπωση, καταργησε τους.

 

Πρωτη ιδεα (δοκιμαστηκε) για να δεις μια λυση:

 

>

int count(stack p){ //ποσα στοιχεια εχει η στοιβα
...
}

int item(stack p,int n){     //επεστρεψε το n στοιχειο της στοιβας
...
}

void print(stack p[3]){
      int L=count(p[0]),M=count(p[1]),R=count(p[2]);
      int MAX = max(L,max(M,R));
      int i;
      //πρεπει να τυπωσουμε MAX γραμμες για να χωρεσουν στην οθονη ολα τα 
      //στοιχεια απο τις στοιβες μας (αν θελεις μπορεί να είναι σταθερος αριθμος πχ s, αλλα
      //εδω το προτιμισα να ειναι δυναμικα υπολογιζομενος)
      
      for(i=0;i<MAX;i++){
            //η στηλη left θα αρχισει να τυπωνει items απο τη γραμμη MAX-L εως την MAX
             //ομοιως και οι middle,right

                if(i είναι μεταξυ MAX-L και MAX)
                     print_disk(  item(p[0],  i-(MAX-L))   );//βρες το στοιχειο της στοιβας και τυπωσε το
               else
                     print_disk(0);
                //middle
                ........ομοιως
                //right
                ........ομοιως

	 putchar('\n');
      }
}

 

με τον δοκιμαστικο κωδικα

>
void ymain(void){
stack stoiva[3] = {0,0,0};
Push(&stoiva[0],4);
Push(&stoiva[0],3);
Push(&stoiva[0],2);
Push(&stoiva[0],1);

Push(&stoiva[1],2);
Push(&stoiva[1],1);

Push(&stoiva[2],3);
Push(&stoiva[2],2);
Push(&stoiva[2],1);

print(stoiva);
}

 

παράγει το αποτέλεσμα

 

>
    _._           .            .      
   __.__          .           _._     
  ___.___        _._         __.__    
 ____.____      __.__       ___.___   

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...