עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

פורסם

שלום לכולם.

ניסיתי לפתור את שאלה 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 -1

void 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.

כל עזרה כלשהי, עצות, תיקונים, הערות וכו' יתקבל בברכה.

בתודה מראש.

נ.ב: משום מה, ההזחות לא מתבצעות כאן, קבלו את התנצלותי.

פורסם

למה יש לך שם בכמה כותרות פונקציות הגדרה שהפונקציה מקבלת פוינטר (?) *** או **?

מה ההבדל בין כוכבית אחת ליותר?

מצטער שזה לא קשור

פורסם

אתה יכול למצוא את הבעיות לבד. מספר הצעות:

תקשיב להערות של המהדר.

כתוב לא להשתמש ב[].

בשביל לזהות בעיות השמתש בדיבאגר טוב - ddd/gdb.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.