פורסם 2004 בדצמבר 3020 שנים שלום לכולם.ניסיתי לפתור את שאלה 5 תרגיל 2, מהלינק: http://www.cs.biu.ac.il/~kalechm/c_04/pointers5_math.rtf והתוצאה לפניכם:#include <stdio.h>#include <stdlib.h>#define create 1#define push 2#define top 3#define pop 4#define isEmpty 5#define delete 6#define manyStack 7#define capacity 8#define exit 9#define reset 0#define no_stacks 0#define add_stack 1#define default_size 2#define empty_stack 0#define previous -1void main_menu();void create_stack(int ***pstacks, int *pi_stack);int select_stack(int *pi_stack);void push_element(int **pstacks, int stack_number, int *pi);void print_head(int *pstacks, int stack_number, int *pi);void delete_element(int **pstacks, int stack_number, int *pi);void print_isEmpty(int **pstacks, int stack_number, int *pi);void delete_stack(int *pi_stack);void number_of_stacks(int *pi_stack);void change_capacity(int *pi_stack);void stack_capacity(int *pi_stack);void error_message();int main(){ main_menu();return reset;}void main_menu(){ int selection=reset, i_stack=reset, i=reset, stack_number=reset; int **pstacks=NULL, *pi_stack=&i_stack, *pi=&i; do { scanf("%d", &selection); switch (selection) { case create: create_stack(&pstacks, pi_stack); break; case push: stack_number=select_stack(pi_stack); if (stack_number!=reset) push_element(pstacks, stack_number, pi); break; case top: stack_number=select_stack(pi_stack); if (stack_number!=reset) print_head(pstacks, stack_number, pi); break; case pop: stack_number=select_stack(pi_stack); if (stack_number!=reset) delete_element(pstacks, stack_number, pi); break; case isEmpty: stack_number=select_stack(pi_stack); if (stack_number!=reset) print_isEmpty(pstacks, stack_number, pi); break; case delete: stack_number=select_stack(pi_stack); if (stack_number!=reset) delete_stack(pi_stack); break; case manyStack: number_of_stacks(pi_stack); break; case capacity: stack_capacity(pi_stack); break; case exit: break; default: error_message(); break; } } while(selection!=exit);}void create_stack(int ***pstacks, int *pi_stack){ if (*pi_stack==no_stacks) *pstacks=(int**)malloc(sizeof(int*)); else *pstacks=(int**)realloc(*pstacks, ((*pi_stack)+add_stack)*sizeof(int*)); *pstacks[*pi_stack]=(int *)malloc(default_size*sizeof(int)); (*pi_stack)++;}int select_stack(int *pi_stack){ int stack_number; scanf("%d", &stack_number); if (stack_number>((*pi_stack)+add_stack)) { error_message(); return reset; } else return (stack_number+previous);}void push_element(int **pstacks, int stack_number, int *pi){ int element; scanf("%d", &element); *(*(pstacks+stack_number)+(*pi))=element; (*pi)++;}void print_head(int *pstacks, int stack_number, int *pi){ if ((*pi)==empty_stack) error_message(); else printf("%d\n", *((pstacks+stack_number)+(*pi)+previous));}void delete_element(int **pstacks, int stack_number, int *pi){ if (*(*(pstacks+stack_number)+(*pi))==empty_stack) error_message(); else (*(*(pstacks+stack_number)+(*pi)))--;}void print_isEmpty(int **pstacks, int stack_number, int *pi){ if (*(*(pstacks+stack_number)+(*pi))==empty_stack) printf("true\n"); else printf("false\n");}void number_of_stacks(int *pi_stack){ if (*(pi_stack)==no_stacks) error_message(); else printf("%d", *pi_stack+add_stack);}void delete_stack(int *pi_stack){}void change_capacity(int *pi_stack){}void stack_capacity(int *pi_stack){}void error_message(){ printf("error\n");}כפי שהנכם רואים, התרגיל איננו גמור. בנוסף, ב gcc של unix, לאחר שהתוכנית קולטת פעמיים '1', כלומר יצירת שתי מחסניות אחת אחרי השנייה - היא מחזירה Segmentation fault. כל עזרה כלשהי, עצות, תיקונים, הערות וכו' יתקבל בברכה.בתודה מראש. נ.ב: משום מה, ההזחות לא מתבצעות כאן, קבלו את התנצלותי.
פורסם 2004 בדצמבר 3020 שנים למה יש לך שם בכמה כותרות פונקציות הגדרה שהפונקציה מקבלת פוינטר (?) *** או **?מה ההבדל בין כוכבית אחת ליותר?מצטער שזה לא קשור
פורסם 2004 בדצמבר 3120 שנים אתה יכול למצוא את הבעיות לבד. מספר הצעות:תקשיב להערות של המהדר.כתוב לא להשתמש ב[].בשביל לזהות בעיות השמתש בדיבאגר טוב - ddd/gdb.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.