עזרה בתוכנית ב C++

  • פותח הנושא lmalo
  • פורסם בתאריך

lmalo

New member
עזרה בתוכנית ב C++

אני אמור לכתוב פונקציה רקורסיבית שמקבלת מחרוזת ואת האורך שלה ובודקת אם המחרוזת מכילה ספרות, אם היא מכילה רק ספרות הפונקציה מחזירה את המס' שיוצרות הספרות אחרת הפונקציה מחזירה 1-. עשיתי מעין תוכנית אבל שוב יש לי בעיה איך לשמור את הספרות וליצור מהן מספר וזה מה שעשיתי בנתיים אבל כמובן זה לא עובד, למישהו יש הצעה כיצד לגרום לזה לעבוד?
#include <iostream.h> #include <string.h> int Mispar(char a[],int len) { if (len<1) return a[len]; if ((a[len]>=48)&&(a[len]<=57)) { a[len]=((a[len])+(a[len-1]*10)); return Mispar(a,len-1); } else return -1; }​
 

vinney

Well-known member
הצעה לייעול

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

vinney

Well-known member
ברור

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

lmalo

New member
אבל יש בעיה

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

lmalo

New member
רעיון איך לפתור את זה?

למישהו יש רעיון איך אפשר לפתור את הבעיה עם ה char וה int שציינתי למעלה אבל בדרך רקורסיבית?
 

selalerer

New member
תחזיר int.

שים 1- בו במקרה ואין או את התו המתאים אם נמצא כזה. במידה ואין בו 1- תוכל להמיר את הערך המוחזר לchar אם אתה רוצה (אבל דווקא יש פונקציות שמטפלות בתווים שמקבלות int).
 

lmalo

New member
אבל הבעיה יותר מסובכת..

אבל הבעיה היא שזה צריך לסרוק את כל המחרוזת באופן רקורסיבי ואם כל המחרוזת זה ספרות אז זה יחזיר את המס' שהספרות מייצגות אחרת רק אם יש במחרוזת תווים שהם לא ספרות אז הפונקציה מחזירה 1- , ואיזה פונקציות יש?
 

lmalo

New member
אבל איך לשנות את הקוד?

אני יודע שאני טועה ואני ממש תקוע.. :( אבל לא בדיוק הבנתי אותך איך אפשר לתקן את זה?
 

vinney

Well-known member
הפונקציה שלך צריכה להחזיר רק מספר

למה שתחזיר אותיות?
 

lmalo

New member
לא אותיות אלא ספרות מסוג char

לא אותיות.. המחרוזת מכילה ספרות שהן מסוג char וצריך להפוך אותן למיספר.. אחרת איך הפונקציה תחזיר את המס' שהמחרוזת מייצגת?
 

vinney

Well-known member
למה דווקא char?

אתה יכול להחזיר char עם ערך 1- גם, אבל בchar אתה יכול לייצג מספרים חיוביים עד 128, זה נראה לי מעט מדי. הייתי הולך על long. בגדול, זה ממש לא משנה מבחינת הפונקציה שלך, אם זה char או int או long, ההבדל בינהם הוא רק תחום ההגדרה.
 

KtK

New member
מה עשית כאן ?

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

lmalo

New member
הבעיה שזה רקורסיבי..

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

lmalo

New member
אולי מישהו יודע..

מישהו יודע איך להפוך ספרות במחרוזת למיספר שלם? ע"י כפל? למשל אם יש לי '5'4''3''2''1' וידוע לע אורך המחרוזת אז מהו הקוד להפוך את זה ל 12345(אלף מאתיים שלוש מאות ארבעים וחמש) אני יודע שזה משהו עם להכפיל ב 10 ואז ב100 וכד' אבל זה לא מסתדר לי (ב C++)?
 

lmalo

New member
אוף אני ממש תקוע..

אף אחד לא יכול לעזור לי עם הבעיה הזאת של המספרים?
 

vinney

Well-known member
זה מסתדר מצוין

אתה צריך להכפיל ב10 בחזקת המיקום של הסדרה מימין, כשאת המיקום סופרים מ0
 

lmalo

New member
אולי אני לא מבין

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