PDA

צפה בגרסה המלאה : פלינדרום



sivan1233210
16-11-2008, 21:08
בס"ד

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


תודה לעוזרים :)

nadav
16-11-2008, 22:42
כעיקרון זאת ריקורסיה ,
תנאי יציאה הוא שהמספר קטן מ10..

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

sivan1233210
16-11-2008, 22:49
בס"ד

אני יודעת לעשות את זה ב - #c.
אבל בויז'ואל בייסיק אני לא יודעת כ"כ.

אתה יכול להגיד לי בבקשה איך עושים את זה ב - vb?

תודה על העזרה.
שבוע טוב :) !

dafnaw
17-11-2008, 09:00
למה רקורסיה? ניתן לעשות זאת בלולאה פשוטה...

dafnaw
17-11-2008, 09:04
אם את יודעת לעשות את זה בשפת תכנות עילית אחרת, אז איפה הבעיה? את לא יודעת את תחביר השפה? אין לך רעיונות?
בכל אופן, אני חושבת שרקורסיה זו סתם הסתבכות. עדיף 2 מצביעים - על ראש המחרוז ועל סוף המחרוזת, וכל פעם משווים את הערכים עליהם הם מצביעים ואז מקדמים (את הראשון קדימה ואת האחרון אחורה) וממשיכים להשוות. מפסיקים את הלולאה כאשר אין שוויון או כאשר מיקומי המצביעים מתחלפים (כלומר זה שהצביע על הראשון נמצא במיקום גבוה יותר מזה שהצביע על האחרון).

sivan1233210
17-11-2008, 15:07
בס"ד

את יכולה להראות לי איך עושים את זה בג'אווה?

שבוע טוב :)

Hurricane
17-11-2008, 15:46
public class Palindrome
{
public static void main(String[] args)
{
palindrome("12345654321");
}
public static void palindrome(String string)
{
boolean palindrome = true;
for (int i = 0; i < string.length(); i++)
{
if (string.charAt(i) != string.charAt(string.length()-i-1))
{
palindrome = false;
System.out.println("That's not a palindrome!");
break; //There's no need to continue the loop...
}
}
if (palindrome)
System.out.println("WOHOO! A palindrome!! :D");
}
}
בבקשה.
אני לא יודע אילו פעולות ניתן לבצע על מחרוזת ב- VB, אז אני לא יכול לעזור לך בזה.

sivan1233210
17-11-2008, 15:56
בס"ד

איך עושים את זה בלי break; כי אני לא יודעת לפרש את זה ל - #C ...

תודה על העזרה :)!

dafnaw
17-11-2008, 16:48
גם לא משתמשים בלולאת for אלא while....
כשאני אגיע הביתה אני אעלה לך קוד פשוט יותר...

sivan1233210
17-11-2008, 17:03
בס"ד

תודה רבה לכם :)

Hurricane
17-11-2008, 18:04
זה מטפל במחרוזות. אני מניח שיש צורך בלולאת while כאשר זה רק מספרים.
אני כבר רואה שאפשר לייעל את התוכנית ולעשות שהיא תרוץ עד חצי אורך המחרוזת במקום אורך המחרוזת.
את יכולה להעיף את ה- break. זה רק יוצא מהלולאה. את יכולה לרשום במקום זה:


i = string.length();

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

sivan1233210
17-11-2008, 18:06
בס"ד

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

dafnaw
18-11-2008, 14:47
אני לא מבינה, את מקבלת int או string כפרמטר?
אם זה int, אז בטח יש ב- VB פעולת מודולו וכך את מקבלת את הספרה האחרונה של המספר, ותוצאת החלקות בשלמים של המספר ב- zzz 10^(length-1) zzz תיתן לך את הספרה השמאלית ביותר.
אם זה string, מצביעים מספיקים...

sivan1233210
18-11-2008, 18:19
בס"ד

int.
תראי לי בבקשה איך עושים את זה בג'אווה.
שכחתי איך עושים ב - #C.
תודה רבה על העזרה!

yoavzilberman
18-11-2008, 21:13
import java.util.*;
public class sivan
{
static Scanner s=new Scanner(System.in);
public static void main(String[] args)
{
int num;
System.out.println("הכנס מספר");
num=s.nextInt();
polyndrom(num);

}
public static void polyndrom(int n)
{
int mone=0,temp=n,i,m=0;
while(temp>0)
{
temp=temp/10;
mone++;
}

int[]maarach=new int[mone];
for(int j=maarach.length-1;j>=0;j--)
{
maarach[j]=n%10;
n=n/10;
}
for( i=0;i<=(maarach.length-1)/2;i++)
{
if(maarach[i]!=maarach[maarach.length-1-i])
{
System.out.println("not a polyndrom");
m=1;
i=mone;
}
}
if(m==0)
{
System.out.println("polyndrom");
}
}
}

sivan1233210
18-11-2008, 21:23
בס"ד

תודה רבה :) !

dafnaw
19-11-2008, 11:04
אני חושבת שדרך קלה יותר היא להפוך את המספר למחרוזת. יותר פשוט, יותר קל, ופחות מקום לטעויות:


public class Palindrome {

public static void main(String[] args) {
System.out.println("isPalindrome execution for 123: " + isPalindrome(123));
System.out.println("isPalindrome execution for 123321: " + isPalindrome(123321));
System.out.println("isPalindrome execution for 12321: " + isPalindrome(12321));
System.out.println("isPalindrome execution for 15954: " + isPalindrome(15954));
System.out.println("isPalindrome execution for 147412: " + isPalindrome(147412));
}

public static boolean isPalindrome(int num) {
String strNum = "" + num;
int i = 0;
int j = strNum.length() - 1;

while( i <= j ) {
if(strNum.charAt(i) != strNum.charAt(j))
return false;
i++;
j--;
}

return true;
}
}

וההדפסות תהיינה:

isPalindrome execution for 123: false
isPalindrome execution for 123321: true
isPalindrome execution for 12321: true
isPalindrome execution for 15954: false
isPalindrome execution for 147412: false

jokop1
19-11-2008, 11:21
אפשר פשוט גם להפוך את הספרות במספר הנתון ואז לבדוק אם המספר הנתון שווה למספר שסדר הספרות בו הוא הפוך.
הפיכת המספר מתבצעת באופן דומה לנזכר למעלה. נניח n הוא המספר הנתון שיש לבדוק אם הוא פלינדרום אז הנה הקוד (עם השמטת פרטים משניים) לבדיקת פלינדרום


int b=0;
for(int a=n;a>0;a=a/10) b=b*10+a%10;
if b==n System.out.println("a polyndrom");

sivan1233210
19-11-2008, 13:51
בס"ד

תודה לכם !!!

MathLiraz
05-06-2009, 12:56
עשיתי את זה בJS אם את מעוניינת לראות את דרך הפעולה ולהבין:

<SCRIPT>
a = window.prompt("enter a number");
a = parseInt(a);
b = a;
b = parseInt(b);
g = 0;
var s;
var m;
m = parseInt(m);
var n;
n = parseInt(n);
var v=0;
while (a!=0)
{
a = (a-(a%10))/10;
g++;
}
var t;
t = Math.floor(g/2);
var f = g;
for (s=1; s<=t; s++)
{
m = b/(Math.pow(10,f-1));
m = Math.floor(m);
n = b%10;
if (m==n)
{
v++;
b = (b-m*(Math.pow(10,f-1))-n)/10;
f = f-2;
}
}
if (v==t)
{
alert("flindrom");
}
</script>

sivan1233210
05-06-2009, 13:30
בס"ד

תודה רבה.
הצלחתי לעשות את זה כבר ב - vb.

שבת שלום :)