לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 26-11-2006, 18:26
צלמית המשתמש של ם_O
  משתמש זכר ם_O ם_O אינו מחובר  
 
חבר מתאריך: 15.08.06
הודעות: 465
...
בתגובה להודעה מספר 1 שנכתבה על ידי snaidis שמתחילה ב "תרגיל מחסניות"

דחוף_למחסנית(טיפוס_המחסנית, מחסנית) (push) - דוחף את הפרמטר הראשון למחסנית שמתקבלת כפרמטר השני..
החזר_ערך(מחסנית) מחזיר את החוליה העליונה במחסנית..כתבתי את האלגוריתם בהנחה שטיפוס המחסנית יכול להיות כל מספר. לכן, עבור X שהחזר_ערך יחזיר כשהמחסנית ריקה - אותו X יכול להיות גם ערך במחסנית, ולכן מתעוררת בעיה בהשוואה...לכן התנאים ה"כפולים".

מחק_ערך(מחסנית) מוחק את החוליה העליונה.. (כך שזה+החזר_ערך = pop)
ריקה(מחסנית) נחש!


מיין_הפוך(מחסנית1, מחסנית2, מחסנית3){
1 כל עוד (לא (ריקה(מחסנית1) וגם ריקה(מחסנית2))){
1.1 אם (החזר_ערך(מחסנית1) > החזר_ערך(מחסנית2))
1.1.1 אם (לא(ריקה(מחסנית1))
1.1.1.1 דחוף_למחסנית(החזר_ערך(מחסנית1), מחסנית3)
1.1.1.2 מחק_ערך(מחסנית1)
1.1.2 אחרת
1.1.2.1 דחוף_למחסנית(החזר_ערך(מחסנית2), מחסנית3)
1.1.2.2 מחק_ערך(מחסנית2)
1.2 אחרת
1.2.1 אם (לא(ריקה(מחסנית2)))
1.2.1.1 דחוף_למחסנית(החזר_ערך(מחסנית2), מחסנית3)
1.2.1.2 מחק_ערך(מחסנית2)
1.2.2 אחרת
1.2.2.1 דחוף_למחסנית(החזר_ערך(מחסנית1), מחסנית3)
1.2.2.2 מחק_ערך(מחסנית1)
}}
העבר(מחסנית1,מחסנית2){
1 כל עוד(לא(ריקה(מחסנית1))){
1.1 דחוף_למחסנית(החזר_ערך(מחסנית1), מחסנית2)
1.2 מחק_ערך(מחסנית1)
}}

פתרון(מחסנית1,מחסנית2,מחסנית3){
1 מיין_הפוך(מחסנית1,מחסנית2,מחסנית3)
2 העבר(מחסנית3,מחסנית2)
3 העבר(מחסנית2,מחסנית1)
4 העבר(מחסנית1,מחסנית3)
}
_____________________________________
Any sufficiently advanced bug is indistinguishable from a feature

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #16  
ישן 27-11-2006, 21:54
צלמית המשתמש של ם_O
  משתמש זכר ם_O ם_O אינו מחובר  
 
חבר מתאריך: 15.08.06
הודעות: 465
אוקיי,
בתגובה להודעה מספר 13 שנכתבה על ידי snaidis שמתחילה ב "OK."

אז כמו שאני עשיתי, מה שאני חושב שיותר יפה, ילך ככה:
קוד PHP:
 #include <stdio.h>
#include <stdlib.h>

struct stack
{
    
int num;
    
struct stack *next;
};

void push (struct stack** stack1int num)
{
    
struct stackstack2 = *stack1;
    *
stack1 = (struct stack*)malloc(sizeof(struct stack));
    (*
stack1)->num num;
    (*
stack1)->next stack2;
}


void pop (struct stack** stack1)
{
    if (*
stack1 == NULL)
    {
        return;
    }
    else
    {
        
struct stack *temp = *stack1;
        *
stack1 = (*stack1)->next;
        
free(temp);
    }
}

void delstack (struct stack** stack1)
{
    while (*
stack1)
        
pop (stack1);
}

 
int peek (struct stack** stack1)
{
int i;
if (*
stack1 != NULL){
    return (*
stack1)->num;
}else
return 
NULL;
}  

void Usort(struct stack** stack1struct stack** stack2struct stack** stack3){
     while ((*
stack1!=NULL) || (*stack2!=NULL)) {
      if (
peek(stack1) > peek(stack2))
         if (!(*
stack1==NULL)) {
            
push(stack3,peek(stack1));
            
pop(stack1);
         }else{
            
push(stack3,peek(stack2));
            
pop(stack2);
            }
      else
          if (!(*
stack2==NULL)){
            
push(stack3,peek(stack2));
            
pop(stack2);
          }else{
            
push(stack3,peek(stack1));
            
pop(stack1);
            }

}}
void pass(struct stack **stack1struct stack **stack2) {
while (*
stack1!=NULL){
      
push(stack2peek(stack1));
      
pop(stack1);
}}

void solve(struct stack **stack1,struct stack **stack2,struct stack **stack3){
Usort(stack1,stack2,stack3);
pass(stack3,stack2);
pass(stack2,stack1);
pass(stack1,stack3);
}

void show(struct stackstack1){
    
struct stackstack2;
    
stack2=stack1;
        while (
stack2!=NULL)
    {
        
printf ("%2d", (stack2)->num);
       
stack2=(stack2)->next;
    }
}

int main()
{
struct stackstack1=NULL;
struct stackstack2=NULL;
struct stackstack3=NULL;
push(&stack1,1);
push(&stack1,4);
push(&stack1,7);
push(&stack2,2);
push(&stack2,2);
push(&stack2,8);
printf("stack1:\n");
show(stack1);
printf("\nstack2:\n");
show(stack2);
solve(&stack1,&stack2,&stack3);
printf("\nstack3:\n");
show(stack3);
delstack(&stack1);
delstack(&stack2);
delstack(&stack3);



אבל, אם אתה מתעקש לא להשתמש בפונקצית Peek שתחזיר ערך כלשהו במקרה שהמחסנית ריקה, תממש כך:

קוד PHP:
 #include <stdio.h>
#include <stdlib.h>

struct stack
{
    
int num;
    
struct stack *next;
};

........
........
  ........

 
void pass(struct stack **stack1struct stack **stack2) {
while (*
stack1!=NULL){
      
push(stack2, (*stack1)->num);
      
pop(stack1);
}}

void Usort(struct stack** stack1struct stack** stack2struct stack** stack3){
     while ((*
stack1!=NULL) && (*stack2!=NULL)) {
         if ((*
stack1)->num > (*stack2)->num){
            
push(stack3,(*stack1)->num);
            
pop(stack1);
         }else{
            
push(stack3,(*stack2)->num);
            
pop(stack2);

      }
     }if (*
stack1==NULL)
        
pass(stack2,stack3);
     else
         
pass(stack1,stack3);

}


void solve(struct stack **stack1,struct stack **stack2,struct stack **stack3){
Usort(stack1,stack2,stack3);
pass(stack3,stack2);
pass(stack2,stack1);
pass(stack1,stack3);
}

void show(struct stackstack1){
    
struct stackstack2;
    
stack2=stack1;
        while (
stack2!=NULL)
    {
        
printf ("%2d", (stack2)->num);
       
stack2=(stack2)->next;
    }
}

int main()
{
...
...
...

_____________________________________
Any sufficiently advanced bug is indistinguishable from a feature

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #17  
ישן 28-11-2006, 06:20
  snaidis snaidis אינו מחובר  
 
חבר מתאריך: 11.11.05
הודעות: 66
תודה רבה לך על שתי התוכניות, מיד אנסה לראות מה הולך שם
בתגובה להודעה מספר 16 שנכתבה על ידי ם_O שמתחילה ב "אוקיי,"

כמה שאלות לפני:הפונקציות החסרות בתכנית השניה הן רק PUSH , POP וDELSTACK, נכון?

והMAIN של התוכנית השנייה הוא זהה בדיוק ל MAIN של הראשונה?
כלומר, התכנית המלאה השנייה הולכת ככה?




קוד PHP:
 #include <stdio.h>

 
#include <stdlib.h>
 
struct stack
{
    
int num;
    
struct stack *next;
};
 
void push (struct stack** stack1int num)
{
    
struct stackstack2 = *stack1;
    *
stack1 = (struct stack*)malloc(sizeof(struct stack));
    (*
stack1)->num num;
    (*
stack1)->next stack2;
}
 
 
void pop (struct stack** stack1)
{
    if (*
stack1 == NULL)
    {
        return;
    }
    else
    {
        
struct stack *temp = *stack1;
        *
stack1 = (*stack1)->next;
        
free(temp);
    }
}
 
void delstack (struct stack** stack1)
{
    while (*
stack1)
        
pop (stack1);
}
void pass(struct stack **stack1struct stack **stack2) {
while (*
stack1!=NULL){
     
push(stack2, (*stack1)->num);
     
pop(stack1);
}}
 
void Usort(struct stack** stack1struct stack** stack2struct stack** stack3){
     while ((*
stack1!=NULL) && (*stack2!=NULL)) {
         if ((*
stack1)->num > (*stack2)->num){
            
push(stack3,(*stack1)->num);
            
pop(stack1);
         }else{
            
push(stack3,(*stack2)->num);
            
pop(stack2);
 
     }
     }if (*
stack1==NULL)
        
pass(stack2,stack3);
     else
         
pass(stack1,stack3);
 
}
 
 
void solve(struct stack **stack1,struct stack **stack2,struct stack **stack3){
Usort(stack1,stack2,stack3);
pass(stack3,stack2);
pass(stack2,stack1);
pass(stack1,stack3);
}
 
void show(struct stackstack1){
    
struct stackstack2;
    
stack2=stack1;
        while (
stack2!=NULL)
    {
        
printf ("%2d", (stack2)->num);
     
stack2=(stack2)->next;
    }
}
 
int main()
{
struct stackstack1=NULL;
struct stackstack2=NULL;
struct stackstack3=NULL;
push(&stack1,1);
push(&stack1,4);
push(&stack1,7);
push(&stack2,2);
push(&stack2,2);
push(&stack2,8);
printf("stack1:\n");
show(stack1);
printf("\nstack2:\n");
show(stack2);
solve(&stack1,&stack2,&stack3);
printf("\nstack3:\n");
show(stack3);
delstack(&stack1);
delstack(&stack2);
delstack(&stack3);
 



_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.


נערך לאחרונה ע"י snaidis בתאריך 28-11-2006 בשעה 06:29.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 08:40

הדף נוצר ב 0.18 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר