עבור לתוכן

pow(int,int) שאלה

Featured Replies

פורסם

נתקעתי קצת עם התוכנית הבאה:

התוכנית קולטת מספר,b בין 2 ל-10.המספר מייצג בסיס(בינארי,טרינארי עשרוני).

התוכנית בודקת את תקינות הקלט ומדפיסה הודעה מתאימה.

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

התוכנית מדפיסה את הערך העשרוני של המספר n שנקלט.

לדו'...

אם נקלט מספר B=2 והמספר N=1011 התוכנית תדפיס 11..

זה מה שניסיתי לעשות





void Base()
{


int number,conv;
long base;
printf("Enter Base from 2-10");
fflush(stdin);
scanf("%d",&base);
printf("Enter number");
fflush(stdin);
scanf("%d",&number);
int count=0;
do
{
count++;
number=number/10;


}
while(number>0);
int Array[sizeof(count)];
if(base>=2 && base<=10)
{



if(number>0)
{
for(int i=0;i<count-1;i++)
{
for(int j=0;j<=base;j++)
if(number%10==j)
conv=conv+j*(pow(base,i));
number/=10;
}


}
}


}




נתקעתי בפרמטרים של הפונקציה pow,אני לא מבין למה אי אפשר לעשות זאת עם int ואיך אני יכול לעשות את זה בצורה קצת אחרת...

פורסם

אין שום סיבה שתצטרך להשתמש ב-pow. אתה יכול לחשב את החזקות בעצמך תוך כדי הלולאה.

חוץ מזה, איך ציפית שהתכנית שלך תעבוד? אתה מאפס את number לפני שיש לך הזדמנות להשתמש בו.

ולמה הגודל של Array הוא (sizeof(count? אתה יודע מה עושה sizeof?

פורסם
  • מחבר

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

איך אני יכול לחשב את החזקה תוך כדי איטרציה של הלולאה?

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

ז"א אני צריך להגיע למצב כזה.

אם יש לי את המספר 120

יש 3 ספרות-מערך.

לולאה 1 רצה 3 פעמים

פעם ראשונה

לוקחת את 0 כופלת בבסיס שהוא 3 לצורך העניןן(0-2) ומעלה בחזקת המיקום של המספר במערך וכך הלאה.

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

פורסם
  • מחבר

תמקד אותי יותר מן הסתם שאני לא אבין איך לעשות את זה בהרף עין....

פורסם

אי אפשר ליצור מערך סטטי בגודל שאינו ידוע מראש. פשוט תגדיר לך מערך מספיק גדול מראש.

לגבי החזקה: נתחיל ממשהו פשוט - איך היית מחשב את base בחזקת i בלי להשתמש ב-pow?

אני אתן לך טיפ קטן בנוגע לתכנות, באופן כללי: אם אתה מנסה לעשות משהו והוא "לא עובד לך", אל תאמר "טוב, הפתרון הזה לא עובד, בוא ננסה משהו אחר". קודם כל תנסה להבין למה זה לא עובד. לדוגמה, במקרה של הקצאת מערך - אני מניח שניסית להקצות מערך לפי גודל של משתנה וראית שזה לא עובד - אבל לא ניסית להבין למה זה לא עובד, פשוט הנחת שאי אפשר לעשות משהו כזה וזהו.

פורסם
  • מחבר

בסיס * בסיס כמספר החזקה אבל, עדיין לא עליתי על איך לעשות את זה בפרקטיקה..

פורסם

לולאה שרצה כאורך המעריך ואז אתה מכפיל את הבסיס בעצמו ואז מה שקיבלת בבסיס וכולי.

בגלל איך שהמעבד עובד, ניתן לייעל גם את זה בעיקרון.

פורסם

מה הקשר לאיך שהמעבד עובד? כן אפשר לייעל את זה, אבל בהקשר של האלגוריתם הספציפי הזה. הרי מה שאתה צריך לעשות הוא בהתחלה לחשב את base בחזקת 0 ולהשתמש בו, אחר כך base בחזקת 1 ולהשתמש בו, אחר כך base בחזקת 2 ולהשתמש בו וכן הלאה. אז אתה לא צריך באמת לחשב כל פעם את כל החזקה מחדש, אלא רק לכפול שוב ב-base.

בסיס * בסיס כמספר החזקה אבל, עדיין לא עליתי על איך לעשות את זה בפרקטיקה..

אז יש לי הצעה - פתח פרוייקט חדש ותנסה לפתור בו את התרגיל הבא: כתוב תכנית שמקבלת שני מספרים שלמים (a ו-b) ומחשבת את a בחזקת b, בלי שימוש בפונקציה pow (אתה יכול להניח ש-b מספר קטן יחסית).

פורסם
  • מחבר

:pissed: לא הצלחתי ליישם את זה לתכנות,לא יודע למה פשוט לא הצלחתי :nixweiss:

ידוע העניין a^n=a*...........a(n)

פורסם

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

פורסם
  • מחבר





#include <stdio.h>
void main()
{




int i=1, result=1,num;
scanf("%d",&num);
while (i<=10)


{
result*=num;
i++;
}
printf(“The result is %d”, result);
}

-תוכנית שמחשפת מספר בחזקת 10

זה הקטע הכי בסיסי שמשום מה היה לי קשה.

והבנתי למה לא הצלחתי את התוכנית עם הבסיסים.הייתי בטוח שיש בעיה לקלוט מספר שלם ולעשות לו scanf ב double..

וזה פשוט עשה לי את החיים הרבה יותר קלים.עשיתי לולאת while שכל עוד המספר גדול מאפס תרוץ,לפני הלולאה אתחלתי משתנה i שכל איטרציה יקפיץ אותו באחד..ז"א בסופו של דבר משתנה ששומר את הפועלה החשבונית של ספרה כפול בסיס בחזקת i וזהו :)

פורסם

הקוד שלך מאוד עקום. ראשית תלמד כיצד יש לכתוב קוד, אינדנטציה, מעברי שורות וכדומה.

אם אתה יודע מראש את אורך הלולאה, השתמש בלולאת for.

לא ברור מה זה 10 ("מספרי קסם").

קוד נכון יראה ככה:


#include <stdio.h>


int main()
{
int i,base,power;
long int result;
printf("insert the base:\n");
scanf("%d",&base);
printf("insert the power:\n");
scanf("%d",&power);
if (base==0)
{
if (base==power)
{
printf("the result of 0^0 is undefined.");
return 1;
}
printf("the result of %d^%d is 0.",base,power);
}
result=1;
for (i=0;i<power;i++)
{
result*=base;
}
printf("the result of %d^%d is %ld.",base,power,result);
return 0;
}

ארכיון

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

דיונים חדשים