עבור לתוכן

עזרה בתרגיל בשפת c לסטודנט

Featured Replies

פורסם

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

עד כה למדנו התניות ולולאות while ו for . וזה כל מה שמותר לי להשתמש בו על מנת לפתור את התרגיל.

להלן התרגיל :

1) סדרת פיבונצ'י מוגדרת באופן הבא: האיבר הראשון שווה 1. האיבר השני שווה גם הוא 1. כל איבר נוסף שווה לסכום שני האיברים שלפניו. כלומר, הסדרה מתחילה כך:

34 21 13 8 5 3 2 1 1

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

דוגמה לריצת תכנית:

Please enter an index: 8

The Fibonacci number at index 8 is: 21

אשמח לכיוון בפיתרון . תודה רבה ויום נעים

פורסם

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

פורסם
  • מחבר

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

void main()

{

int i, k, a=1, b=1 ,index;

cout<<"please enter an index\n";

cin>>index;

for ( i=1 ; i<=index ; i++)

a=b;

b=a+i;

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

ניסיתי לקדם את b באמצעות i אבל גם זה לא מצליח טוב.

a ו b הם בהתחלה האיברים הראשון והשני)

פורסם

קודם כל, כמה דברים:

א. כשאתה כותב קוד בפורום, תשתמש בטג קוד (כפתור # ליד הכפתור של הציטוט).

ב. אל תשתמש ב-void main, תשתמש ב-int main ושים return 0 בסוף.

ג. כשאתה משתמש ב-for/while/if אתה צריך לעטוף את הפקודות בסוגריים מסולסלים {}, אחרת רק השורה הראשונה שאחרי ה-for תהיה חלק מהלולאה.

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

פורסם
  • מחבר

אני עדיין לא מבין איך להתחיל את החישוב. להכניס את a ו b לאיבר השלישי שמקבל את הסכום של שניהם? אין לי מושג

פורסם

נניח ש-a מכיל את האיבר הראשון, ו-b את האיבר השני. אז אתה רוצה שאחרי האיטרציה הראשונה, a יכיל את האיבר השני ו-b יכיל את האיבר השלישי, שהוא a+b.

כלומר, תיאורטית תרצה לעשות:

a = b;
b = (old a) + b

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

פורסם
  • מחבר

אחח

אין כמו הסיפוק של להריץ תוכנית ולראות שהיא עובדת כמו שעון

ממש תודה לך מר שניצל הצלחתי במשימה! :)

פורסם
  • מחבר

תרגיל נוסף שאני שובר עליו את הראש :

---------

כתוב תוכנית המחשבת את sinx עבור x אותו יש לקלוט מהמשתמש, ע"י חישוב הטור הבא:

tohnit.th.jpg

יש לעצור כשמגיעים לאיבר הקטן בערכו המוחלט מ0.001

פורסם

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

פורסם
  • מחבר

התחלתי שנה א' ואת הקורס הזה לפני כ 3 שבועות , ולא היה לי רקע בתכנות לפני כן, לכן קצת קשה לי להבין איך אני מחשב את הטור הספציפי הזה.

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

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

ברשותך אני אשים כאן את הקוד שכתבתי עד כה ( אנחנו משתמשים בvoid main ובספריה של c++ אבל מותר לנו להשתמש רק ב cin ו cout משפת c++ ולא שום דבר אחר. זאת שיטת הלימוד במוסד הזה.

#include <iostream>
using namespace std;

void main()
{

double i=0,power_of_x=1, azeret=1;
double x=1;

cout<<"please enter a value to be computed\n";
cin>>x;


do
{
i=i+1;
azeret= (azeret+2)*i;
power_of_x = power_of_x*x;


}
while (i<something);


}

פורסם

אז ככה, כמה הערות:

א. בחישוב של העצרת יש לך טעות - למה אתה מוסיף 2 לעצרת?

ב. שים לב שאתה צריך רק את החזקות האי-זוגיות של x, כלומר בכל איטרציה אתה צריך לכפול ב-x פעמיים (ואותו דבר לגבי העצרת).

ג. תנאי העצירה שלך לא אמור להיות תלוי ב-i, אלא באיבר הנוכחי.

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

לגבי ה-void main וה-cin/cout - זו פשוט טעות. אני לא יודע באיזה מוסד אתה לומד, אבל זה אומר משהו רע מאוד עליו.

התקן של C אוסר על השימוש ב-void main, ומחייב שימוש ב-int main. זה לא אומר ש-void main לא יעבוד (כי יש קומפיילרים שתומכים בזה למרות שזה לא תקני), זה פשוט אומר שזה לא נכון, ויש קומפיילרים שבהם זה לא יעבוד.

חוץ מזה, iostream, יחד עם cin/cout, היא חבילה ופונקציות של הספרייה הסטנדרטית של ++C. אם אתה לומדים C, אתם צריכים לעבוד עם stdio.h ו-scanf/printf, מהסיבה הפשוטה ש-cin/cout לא קיימים בכלל בשפה הזו.

פורסם
  • מחבר

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

פורסם

כמו שאמרתי:

את power_of_x אתה צריך לכפול פעמיים ב-x בכל איטרציה (שים לב שלפני האיטרציה הראשונה תאתחל אותו ב-x ולא ב-1, כדי לקבל את כל החזקות האי-זוגיות, ולא הזוגיות).

את azeret אתה צריך לאתחל ב-1, ואז: באיטרציה הראשונה (כש-i=1) אתה צריך לכפול ב-2 וב-3, באיטרציה השנייה (כש-i=2) אתה צריך לכפול ב-4 וב-5, באיטרציה הבאה ב-6 וב-7, וכן הלאה. כלומר, תחשוב באיזה ביטוי (שתלוי ב-i) צריך לכפול את azeret.

פורסם
  • מחבר

				power = x;
atzeret = 1;
value = 1;

for ( i=1 ; i<=10 ; i++)
{
atzeret = atzeret*2*i*(i-1);
power = power*x*x;

value = value+(power/atzeret);
}



cout<<value<<"\n";

}

הפלט שמתקבל הוא 1.#inf לא משנה מה אני קולט.

(אל תתיחס לתנאי הלולאה. הוא סתמי בינתיים)

ארכיון

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

דיונים חדשים