שאלה בשפת C

ronihp

New member
שאלה בשפת C

אני משתמש בתוכנית שלי במחסנית ובמהלך התוכנית דוחף לתוך המחסנית תווים char. אני צריך גם לדחוף לאותה מחסנית כתובות לפעמים. האם זה אפשרי? כי במימוש של פונקציות של מחסנית אני קובע מה המחסנית תכיל. במקרה זה הגדרתי שאני דוחף למחסנית char. מה אפשר לעשות בנידון?
 

ronihp

New member
אני צריך עזרה

במימוש של אלגוריתם לבנית expression tree. מישהו מכיר?
 

ronihp

New member
מה שלא מסתדר לי

כתבתי מימוש למחסנית שמאכסנת כתובות אך כנראה שהמימוש הזה לא נכון. מישהו יכול לעזור בזה?
 

ihovav

New member
תגדיר שהמחסנית תכיל מבנה :

במבנה יהיה המידע שאתה רוצה בצורת פוינטר ל VOID ופוינטרים לכל הפונקציות הרלוונטיות (לדוגמא : PRINT) - וככה תוכל לממש מחסנית שמכילה MULTIPLE TYPES זה על קצה המזלג - כך לפחות הייתי מאחסן את זה הסיבה - אתה לא יכול לדעת איזה איבר הוא פוינטר ואיזה הוא CHAR, ואם תרצה בעתיד להכיל בפנים גם סוגים אחרים - זה לא יהיה אפשרי לפי השיטה הזו - אתה לא מגביל את המחסנית להחלה של סוג אחד - ויוצא מנקודת הנחה שכל סוג יודע לטפל בעצמו (קצת כמו תכנות ב OBJECT ORIENTED)
 

ronihp

New member
מצרף קוד

נסיתי להגדיר מחסנית שתכיל כתובות למבנים מסוג node. המימוש הוא בעזרת מערך סטטי בגודל N כאשר התא הראשון במערך הוא מונה של מספר האיברים במחסנית. אני לא מצליח לכתוב את פונקציות הpush הפשוטה שתפקידה לשים בתא מספר 1 של המחסנית את כתובת הnode שהקצאתי בmain. #include <stdio.h> #include <stdlib.h> #include <conio.h> #define node struct node #define N 10 node { char x; }; typedef node* stack[N]; /* int is_empty (char *s) { return !s[0]; } */ void push (stack s,node *r) { if( (*s[0]) < N-1) *s[++(*s[0])]=r; else printf ("\nError!!!"); } /* void pop (stack *s) { if(!is_empty(s)) --s[0]; else printf("\nStack underflow!!!"); } */ void print (stack s) { int i=(s[0]); if(is_empty(&s)) puts("\nEmpty stack"); while (i) printf("\n%c",s[i--]); } /* char top (stack s) { int i=(*s[0]); if(!is_empty(*s)) return (*s); else return ´ ´; } */ void main() //Print Options Menu { stack s={0}; node *r; r=(node *)malloc(sizeof(node)); r->x=´+´; push(s,&r); }
 

ihovav

New member
תצרף את התכנית כקובץ ולא כקוד

בגוף ההודעה, זה יותר ברור
 

ronihp

New member
תודה. הסתדרתי. שאלה אחרת:

האם האופרטור ^ חזקה מוכר בשפת C? או שאני צריך לכתוב פונקציה שמחשבת חזקה בעזרת כפל?
 

ronihp

New member
איך מבצעים המרה מchar לint?

יש לי משתנה char ואני צריך במהלך התוכנית להמיר אותו לint לצורך חישובים. אפשרי לעשות זאת? אני יודע שיש פונקציה מוכנה atoi אבל היא עובדת רק על מחרוזות. מה לגבי char?
 
יש כמה אפשרויות

option 1: make it a string char c; // this is your char char str[2]; str[0] = c; str[1] = 0; .... atoi option 2: char c; // input int i // output i = (int) c - (int) ´0´;
 

nahsh

New member
לא. אתה צריך להשתמש בפונקציה

ויכול להיות שכבר יש כזאת - לא זוכר. האופרטור ^ הוא XOR.
 

ronihp

New member
כנראה שאין

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

yair24

Member
בבאדאי שבבאדאי שיש ../images/Emo13.gif

#include<math.h> void main() { cout<<power(2,3); // 8 cout<<power(2,4); // 16 cout<<power(2,5); //32 // etc... }​
יכול להיות שאני מתבלב וזה POW ולא POWER... יאיר
 

ronihp

New member
ב-C++ אולי יש

אבל ב-C כנראה שאין.
 

yair24

Member
חה

אני מבין שבגלל שכתבתי COUT אז החלטת שאני מתכנת בC++? ואם היתי כותב PRINTF אז הייתי מתכנת בC, לפי התאוריה הזאת נכון? יאיר
 

nahsh

New member
דווקא יש בC

בדקתי בספר של ריצ´י. הפונקציה היא
pow(x,y);​
כדי להשתמש בה, צריך להכליל את math.h x ו y חייבים להיות int. אם x=0, ו y<=0, תהיה שגיאה.
 

yair24

Member
הרגע פעם שניה...

איך פעם ראשונה אם שתי הודעות למעלה נתתי לך בדיוק את הפונקציה הזאת?? יאיר
 
למעלה